1
Vývoj / Re:FP a error handling
« kdy: 04. 12. 2025, 18:50:04 »algebraické efekty
Algebraické efekty jsou super věc. Další z těch, které teprve čekají na objevení v mainstreimových jazycích. A taky GADTs, toho se taky jen tak nedočkáme.
Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
algebraické efekty
(a div (b - c))? + 4
Problém je, že bez ohledu na to, jak moc si s tím dáš práci s testama, první týden na produkci se najde nějaký ..., co zkusí něco, co tě vůbec nenapadlo v testech pokrýt. Spoléhat se na to, že kód může být hromada hnoje, a testy to ohlídají... eh, s tím bych fakt pracovat nechtěl.To je skvělá logika: používejme antipatterny a známé zákeřnosti. Stačí přece, že testy, co si napíšem opatrně tak, aby se to nerozbilo, projdou.
Testy se píší tak, aby se to rozbilo. Nejspíš žiješ v jiném světě.
Preco si do db neukladat proste zakladne info o obrazku a samotne obrazky ukladat na disk, napr. pod nejakym hash nazvom. Skript si proste urobi jednoduchy select podla toho hash, z db vytiahne potrebne info a posle to klientovi aj so spravnymi hlavickami. Funguje to tak roky.
protože extendujete nějakou parent entitu,
...
Drupal patří ke špičce toho, co jde vymyslet. A to právě i kvůli tomu Symfony.
Teda rôzne typy obrázkov by som ukladal do rôznych podadresárov a tým nastavil príslušný ForceType.Na první pohled to vypadá jako super nápad. Ale když se nad tím zamyslím, jak budete z "/imgs/5b17f8185e71449983e3600a0c2d8527" rozlišovat do jakého podadresáře se má dotazovat?
Boli by tam adresáre ako images/jpeg, images/png atď. Logika kontrolera je potom asi takáto...
- Príde dopyt na ImageCacheService, napr. na https://.../cache-service/123
- ImageCacheService urobí rýchly select do DB, aby zistil správy mime-type, timestamp a vyskladal cestu ako https://.../public/images/jpeg/123. Selectu sa teda nevyhneme, ale je podstatne rýchlejší ako ťahať z databázy celé raw dáta.
- Ak je to potrebné, príslušný obrázok na disku v adresáry /var/www/public/images/jpeg/123 sa vytvorí, prípade updatne.
- Kontroler odpovie pomocou 302 Moved Temporarily https://.../public/images/jpeg/123
- Browser načíta daný obrázok, ktorý Apache odošle so správnym mime type.
Tento prístup s 302 sa môže zdať ako okľuka, ale umožňuje práve updatovanie zmenených obrázkov, kontrolu prístupových práv a tak podobne. V prípade potreby by sa to dalo vyriešiť aj bez neho, keď by sa obrázky updatovali napr. vždy v noci.
Teda rôzne typy obrázkov by som ukladal do rôznych podadresárov a tým nastavil príslušný ForceType.Na první pohled to vypadá jako super nápad. Ale když se nad tím zamyslím, jak budete z "/imgs/5b17f8185e71449983e3600a0c2d8527" rozlišovat do jakého podadresáře se má dotazovat?
Volání funkcí je v prefixové notaci. V matematice používáme i postfixovou notaci a nepřipadá nám to divné. Lisp udělal jen to, že vše sjednotil do prefixové notace, aby to bylo jednodušší.Mno, a teď teda řekněte, proč v jazycích, které to umožňují, je taková scháňka po přeťěžování infixových oprátorů, pokud je prefix tak výhodnější.
Troufám si tvrdit, že většina programátorů radši napíše s1 + s2 + s3 nez CONCAT(s1, s2, s3), stejně tak Octonion a = b + c a ne Octonion a = ADD(b, c)
Ehm, já vím, že to tady bude znít trochu jako rouhání, ale mít sny ve strojovém kódu NENÍ normální.
Beru na vědomí.To vám fakt nevěřím.Clovek nema vubec mentalni kapacitu cist prefixove vyrazy. Uz jen takovyhle jednoduchy vyraz da praci. To, ze je to vyhodne pro pocitace je jina vec (lispovsky S-vyrazy).
Priklad:
^ * + 5 2 - 6 3 2
coz je
((5+2)*(6-3))^2
Dobrý postřeh. Samozřejmě jsem to hned zkusil. Překvapivě se mi to čte dobře, ani ty závorky nepotřebuju. Nejvíc mě trklo, že to vlastně krásně řeší váhání nad prioritami. A vzhledem k tomu, že se nepovažuji za úplně nejvíc geniálního, tak nevím, co si o tom teď mám myslet.![]()
Pro mě by bylo zajímavé sledovat zastánce praktického používání prefixové notace, jak to prakticky používá, tj. jak v tom počítá, upravuje výrazy, řeší rovnice...To asi nejsem.
Clovek nema vubec mentalni kapacitu cist prefixove vyrazy. Uz jen takovyhle jednoduchy vyraz da praci. To, ze je to vyhodne pro pocitace je jina vec (lispovsky S-vyrazy).
Priklad:
^ * + 5 2 - 6 3 2
coz je
((5+2)*(6-3))^2
Dokázal byste si představit, že by se v něm dal naprogramovat engine 2,5D počítačové hry třídy AAA?
Nedávno jsem tady do nějaké diskuse napsal, že generování XML je někdy lepší si napsat sám, ručně, bez knihoven a hned se seběhli místní trollové, co že si to dovoluji si takovou věc psát sám… Přitom to generování XML je výrazně jednodušší než parsování (byť si nepíšeš vlastní parser asi zpracováváš SAX události nebo pracuješ nad DOMem nebo něco podobného). (jen dodávám, že cílem toho mého generátoru nebylo generování libovolného XML, ale určité podmnožiny, která je pro moje potřeby dostačující – důležité je, aby výstup bylo validní XML)
Ty výhrady k tomu generovanému kódu částečně chápu. Sám jsem s tím bojoval u Swaggeru resp. OpenAPI, kde generátor nebyl dost zralý, některé věci to nepodporovalo vůbec nebo to generovalo nesmysly… to bylo dost peklo. Něco vyřešili autoři generátoru v novějších verzích, něco jsme vyřešili sami vlastními šablonami. Ale i tak si myslím, že je většinou lepší si jednou odladit šablony/generátor než to psát pokaždé ručně. A JAXB je oproti tomu mnohem zralejší a spolehlivější technologie (byť to zemětřesení, které přišlo po Javě 8, s tím nepěkně zamávalo).
Jedna ze zkušeností, co mne v tomhle ovlivnila, byla, když jsem kdysi pozoroval lidi, kteří seděli asi dva metry od sebe, jeden psal server v Javě, druhý psal klienta v JavaScriptu a neustále řešili, že ten druhý posílá atribut s „jiným názvem“ nebo „starým způsobem“… v každé verzi byly chyby tohoto typu a pořád se na to plýtval čas a vyvolávalo to hádky. Mezi sebou si sdíleli dokument ve Wordu, ve kterém měli příklady, jak se má služba volat… Takže když mi dneska někdo tvrdí, jak nepotřebuje schéma, a že je to prý jednoduché a že stačí napsat pár příkladů a všem to bude jasné… tak se mi otevírá pomyslná kudla v kapse, protože vím, jak to dopadá. Přitom tohle se v oboru řeší od pradávna a obecně se to jmenuje IDL (interface description language). Konkrétních implementací je spousta, ale podstatná je ta myšlenka, že máš nějakou strojově čitelnou specifikaci, která definuje ten kontrakt, a ze které obě strany vycházejí.
Ale každopádně, pokud si píšeš parser ručně ale máš tu specifikaci a ne jen pár příkladů, tak je to ještě ten lepší případ.