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 (28. 4. až 8. 5.), tak nastal čas se opět ohlédnout a utřídit si myšlenky.
Čísla: Finanční výsledky, návštěvnost a další čísla k junior.guru mám přímo na webu. Aktuální nabídky práce pro juniory: Glance Media, Processand, Red Hat
Plány: Četli jste, co letos plánuji? Svůj postup zaznamenávám do tabulky na GitHubu.
Frontendová přednáška s Martinem Kolářem
V klubu proběhla přednáška od Martina Koláře o tom, jak si nastavit nový projekt. Dalo nám práci najít termín, dokonce jsem to i posouval. Promo na přednášku jsem pak dělal trochu na poslední chvíli, ale účast byla slušná.
Nic se nepokazilo a bylo to fajn. Martin to měl jako trénink na nějaké konference, které bude objíždět, takže se snažil vlézt do půl hodiny. Díky tomu byl velký prostor pro otázky a lidi měli dotazů spoustu, takže paráda.
Katalog kurzů: Zápasení s Peewee
Pokračoval jsem ve vylepšování katalogu kurzů, ale můj postup se výrazně zasekl při pokusu propojit dvě databázové tabulky. Možná to bylo i tím, že když jsem se do toho pustil, měl jsem zrovna den s trochu rozstřeleným soustředěním, ale prostě jsem se do toho strašně zamotal a nemohl jsem uvěřit tomu, že něco takového řeším déle než hodinu. Řešil jsem to nakonec několik dní.
Zjistil jsem, že když chci propojit databázovou entitu „poskytovatel kurzů“ s entitou „partnerská firma“ skrze 1:1 vztah, dostanu se s Peewee do zacyklujících se importů. Vždy jsem vymyslel nějaký jiný způsob, jak to udělat, a vždy mě to zase hryzlo. Zabil jsem různým refactoringem a drbáním na hlavě několik dní. Ani AI mi nepomohlo. Prohledával jsem řešení na internetu, ale bez úspěchu. Našel jsem akorát několik issues přímo na Peewee repozitáři, kde se autor knihovny konzistentně a opakovaně vyjadřuje v tom smyslu, že tohle celé je tzv. „problém někoho jiného“ a ty, kdo to potřebují vyřešit, háže přes palubu:
Týden se prostě nesl v duchu opraváře traktoru („kvůli jediné pi*ovince musíš rozebrat celý traktor“). Bylo velice frustrující zjistit, že v SQLAlchemy by stejná věc byla na pět minut a mají ji přímo v dokumentaci. Došlo to tak daleko, že jsem dokonce zvažoval, kolik by reálně vzalo času celé junior.guru přepsat na SQLAlchemy.
Peewee jsem kdysi vybral proto, že to bylo malé sympatické ORM a na webísek se třemi stránkami jsem „žádný větší overkill nepotřeboval“. Dnes bych se vytahal za uši. SQLAlchemy je standard, který používají všichni, návodů je plný internet (tzn. napovídal by mi to GitHub Copilot), umí to všechno.
Každopádně nakonec jsem to nějak vyřešil přes cizí klíč, překopání návrhu modelů a iterace přímo v Pythonu místo toho, aby se určité věci děly přímo v SQL dotazech. Efekt na výkon to má nulový, bavíme se o desítkách záznamů. Možná jsem se měl zastavit už v začátku a udělat to nejrychlejší možnou cestou, byť ne teoreticky nejsprávnější, ale prostě mě zaskočilo, že ta nejsprávnější cesta je v mém ORM prakticky neuskutečnitelná a nemohl jsem tomu několik dní uvěřit. Radost z toho celého nemám, ale je to vyřešeno a je na čase se posunout dál.
Po týdnu snažení mám katalog, kde jsou partnerské firmy označeny a seřazeny jako první podle tarifu, který mají zaplacený. Zaplacené kurzy mají odkaz bez nofollow.
Relaxování se Stable Diffusion
Snažím se dodržovat státní svátky, takže včetně dneška mám dva dny volna navíc. První prodloužený víkend jsme podnikali rodinné výlety, druhý víkend bylo horší počasí i zdraví, tak jsme byli spíš doma. Sice se jela F1 v Baku a Miami, ale oboje byla strašlivá nuda. Takže jsem relaxoval hlavně u Stable Diffusion.
Jede mi to hodně pomalu, takže vždy zadám nějaké vstupy, spustím to a jdu něco dělat. Pak se vrátím a podívám se, co tam na mě vyjelo za překvapení.
Pokoušel jsem se vyřešit tu rychlost, ale je to zapeklité. Na M1 MacBooku to jede, ale nedokáže to využít celý potenciál jeho HW. Navíc je potřeba strašně moc RAM a já mám jen 8 GB. Protože M1 strašně rychle a efektivně swapuje na strašně rychlý disk, můj běžný provoz málo paměti vůbec neomezuje a vše je velmi rychlé, ale na Stable Diffusion tenhle trik neplatí.
InvokeAI
Nejdřív jsem si dělal naději, že by mohlo pomoci InvokeAI, které navíc na videích vypadá fakt dobře. Instaloval jsem to půl dne, nastahoval gigabajty dat, ale nakonec jsem s tím nic nevyprodukoval. Cokoliv jsem zkusil, napsalo mi to akorát, že mi vytekla aplikační paměť a mohl jsem akorát restartovat celý MacBook. Tohle se mi s AUTOMATIC1111 ani DiffusionBee nikdy nestalo.
CoreML
Všiml jsem si, že existují způsoby, jak využít plný výkon M1. Jmenuje se to CoreML a využívá to čip, který má M1 přímo na výpočet věcí kolem machine learningu.
Zkusil jsem Diffusers, ale nejdou tam dát vlastní modely a výsledky byly rychlé, nicméně mizerné. Když jsem pátral dál, našel jsem MochiDiffusion, appku, která je někde mezi DiffusionBee (skoro tak dobrá) a tím Diffusers (využívá CoreML). Podporuje vlastní modely, ale aby šlo použít CoreML, je potřeba je konvertovat do Applího formátu. Na to jsou nějaké skripty, což vyžaduje nějakou znalost Pythonu, je potřeba mít nainstalované Xcode, což vyžaduje stáhnout další gigabajty na disk, a ještě to trvá strašně dlouho. Šťoural jsem do toho víc a víc a pochopil jsem, že CoreML jde pouštět i přímo z příkazové řádky. Dost mi pomohl návod Fast Stable Diffusion using Core ML on M1 od C. Y. Wonga.
Povedlo se mi to rozběhat! Vytváření obrázků bylo fakt rychlé a šlo použít vlastní model. Jenže výsledky opět mizerné, až bych řekl směšné. Lze použít jen velmi krátký prompt a jen jedno rozlišení, nelze nastavit sampler. Oproti tomu, co umí AUTOMATIC1111, je to jako se z moderní doby vrátit někam k otesávání pazourků.
Své zkušenosti jsem popsal do issue na repozitáři DiffusionBee, které jsem původně založil, abych autory namotivoval tuhle technologii přímo zahrnout do jejich appky. Většina omezení plyne přímo z toho, co (ne)podporuje samotné CoreML od Applu, takže je nikdo hned tak nevyřeší. Tím jsem uzavřel své pátrání co se týče rychlejšího výkonu a smířil se s tím, že jestli chci kvalitu a nejrůznější triky, musím se smířit s rychlostí a možnostmi, jaké nabízí AUTOMATIC1111. Na M1 je to v současnosti nejfunkčnější řešení.
PyTorch v2
Nakonec jediné zrychlení, které se mi povedlo dosáhnout, měl na svědomí samotný AUTOMATIC1111.
Vydal novou verzi, kde se používá PyTorch v2 a je to u mě znatelně rychlejší!
Stačilo udělat git pull
a aktualizovat závislosti.
A vyřešit jeden zásek v tom, že původní nastavení výkonu se muselo smazat.
Vychytávky
- Liner, appka na trénování vlastních modelů. Nezkoušel jsem zatím.
- Zajímavá galerie pro inspiraci: joelparkerhenderson/stable-diffusion-image-prompt-gallery
- Napsal jsem si krátký Python skript, který mi monitoruje složku, kam se generují obrázky, a pošle mi nové obrázky na Telegram. Můžu tedy nastavit generování hromady obrázků, nechat to běžet, jít třeba ven a v pauzách se na mobilu těšit z toho, co to generuje. Většinu toho skriptu mi pomohl napsat GitHub Copilot.
- Naučil jsem se dynamic prompts a je to super.
Co neumím
Zatím jsem si hrál pouze s tzv. txt2img, protože je to nejrychlejší. Zároveň je to ale dost omezené co se týče toho, co jde vygenerovat. V podstatě všechny osoby akorát pózují jak na instáči.
Různými triky jde dosáhnout toho, že generované osoby mají relativně normální ruce, správný počet rukou, nebo celkem pěkný obličej. Udělat ale cokoliv navíc, třeba dát jim do ruky zmrzlinu, mobil, žehličku, knížku, nebo kolo, je nadlidský úkol. Zkoušel jsem se ptát na Redditu a odpověď je, že mám používat img2img a control nets. Tenhle návod ukazuje, co vše s tím jde dělat. Takže budu teď asi zkoušet tohle. Při psaní poznámek jsem zkusil první obrázek a trvalo to věčnost, ale vypadá to celkem slibně. Na první pokus jsem takový úspěch rozhodně nečekal!
Heroes na macOS přes Porting Kit
Díky náhodnému čtení Redditu jsem narazil na komentář, který zmiňuje Porting Kit. Myslel jsem, že znám už snad všechny způsoby, jak se dají na macOS rozběhat staré Windows hry, ale zjevně ne. O Porting Kitu jsem doteď neslyšel!
Žena si už několikrát posteskla, že na macOS nejedou Heroes of Might and Magic, které má celý život moc ráda. Tak jsem zkusil ten Porting Kit a ono to fakt funguje! Hru jsme koupili přes GOG, nainstalovali přes Porting Kit podle jejich návodu, a hotovo.
Ne že bychom měli při výchově malého dítěte na cokoliv moc čas, ale když už se někde půlhodina najde, je dobré, pokud máme každý nějakou možnost relaxovat. Tohle je nová pecka v repertoáru manželky a mám velkou radost z toho, že se to povedlo rozjet.
Bohužel moje vysněná hra nejede ani přes tenhle Porting Kit. Zkoušel jsem to a smůla. Jak na macOS, navíc Apple Siliconu, bez Windows rozběhat Original War, to zůstává nedořešenou otázkou století.
Další
- Do Prahy se stavil kamarád z Indie, resp. nyní z Londýna, a jeden večer jsme propařili.
- Sešel jsem se s Martinem Kavkou a dlouho jsme si povídali. Brzo někde něco vyjde! Sledujte newslettery.cz a Tvůrcast!
- Psal jsem autorům filmu Nová šichta, zda si ho můžeme nějak pustit společně online v klubu.
- Dělali jsme spolu s Red Hatem v klubu anketu, která zjišťovala mezi juniory zájem o part time a důvody.
- E-maily, klubový Discord, Pyvec Slack. V klubu byl fakt velký provoz, takže jsem strávil hodně hodin jen čtením a odpovídáním.
- Zaregistroval jsem se do nějakého nového Strava Developer programu. Mám obavu, že můj skript na analýzu kolik jsem toho naběhal a najezdil na kole za poslední týden, nevyhodnotí jako něco, co je pro ně zajímavé, nebo co dodržuje jejich branding guidelines, a zaříznou mě. Přidal jsem si do README jejich logo, bude to stačit? 😅
- Během 11 dní jsem ujel na kole 36 km. Celkem jsem se hýbal 6 h a zdolal při tom 36 km. Detaily na Strava, jediné sociální síti, kde si napsání statusu musíte zasloužit.
Okénko duševního zdraví: Máte dojem, že na rozdíl ode mně nic nestíháte? Buďte v klidu, není to závod!
Plánuji
- Napsat čtyřem firmám, kterým bude končit partnerství s klubem.
- Propojit výpis kurzů s podstránkami, zvýraznit partnery na podstránkách.
- Vymyslet speciální ceník pro vzdělávací agentury.
Hned zítra jdu na jeden ranní event a taky bych neměl zanedbávat administrativu a čtení klubu. No, bude toho zase nějak hodně.
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:
- Jak se ničí novináři
„Říct, že novinářka a moderátorka Linda Bartošová ‚odešla‘ z Twitteru, by bylo v lecčem nepřesné. Linda totiž neodešla. Lindu z této sociální sítě vyštvaly dlouhodobě nenávistné, toxické a útočné reakce, které by se bez nadsázky daly označit za kyberšikanu.“ „Byl jsem svědkem situací, kdy se novináři po takové kampani zhroutili či skončili na antidepresivech. Faktem je, že neexistuje způsob, jak říct dost. S útočníky se nedá domluvit. Jde jen doufat, že si brzy najdou nový terč, vydržet to, nebo se stáhnout z veřejného prostoru.“ - „Svou obec si zastaví a k nám se chodí rekreovat.“ Únětice trápí nával turistů a nedostatek peněz - VOXPOT
„Největší rozdíly mezi lidmi nejsou v tom, kdy a kde se kdo narodil nebo co dělá. Ale v tom, že někoho prostě vůbec nezajímá, co se děje za jeho plotem. Vysadí si vysoké túje a za nimi je schovaný. A někdo to má úplně naopak. Ne proto, že by se chtěl nějak obětovat, ale prostě ho to zajímá. Naplňuje ho, když kolem sebe vidí pěkné věci. A ty, které pěkné nejsou, chce samozřejmě změnit.“ - Vztah není švýcarák pro život – nevyřeší vše. O singles s poradenským psychologem Jiřím Procházkou — Balanc
Dobrý postřeh s tím, že člověk by měl mít hlavně rád sebe a být v pohodě sám (se sebou). A do toho teprv míchat vztah s někým. - Martin Reiner: O strašlivé gentrifikaci brněnského Bronxu I. Literární reportáž z cyklu České bolesti - Novinky
Dva díly zajímavého pojednání o gentrifikaci brněnského Bronxu. „Chceme být fér? Pak je naší povinností říct, že ten Bronx, co dnes Bára Bažantová a někteří další hájí před gentrifikací, je Bronxem, jenž právě skrze gentrifikaci, která začala před patnácti lety, dospěl k vysoké formě integrace.“ - Mojo Lang… a fast futuristic Python alternative
Dost dobrý! - Stanislav Biler: Brno, hřbitov veřejného prostoru. Literární reportáž z cyklu České bolesti - Novinky
„Snižte svou perspektivu do výše očí dětí a náhle přestanete přes hradby aut vidět. Svět zmizí a veškerý výhled zablokují kapoty. Ze světa se stane obludné místo.“ - Za prodej osobních údajů dostal český Avast rekordní pokutu 350 milionů korun
Asi by nemělo zapadnout, jak se ke svým uživatelům choval Avast. Kam se ve sledování a prodávání dat hrabou žabaři jako Facebook a spol.