Naučení se asynchronnímu programování

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Naučení se asynchronnímu programování
« Odpověď #45 kdy: 08. 10. 2019, 16:06:07 »
Takže dejte pokoj s monádami, je to v kontextu diskuze nepodstatný a neužitečný detail.

téměř každá diskuze, do které se zapojí Mirek Prýmek a Idris skončí u monád.


Re:Naučení se asynchronnímu programování
« Odpověď #46 kdy: 08. 10. 2019, 16:16:52 »
téměř každá diskuze, do které se zapojí Mirek Prýmek a Idris skončí u monád.
Tentokrát jsme v tom ale naprosto nevinně :)

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Naučení se asynchronnímu programování
« Odpověď #47 kdy: 08. 10. 2019, 16:19:27 »
téměř každá diskuze, do které se zapojí Mirek Prýmek a Idris skončí u monád.
Tentokrát jsme v tom ale naprosto nevinně :)

To ale není chyba technologie/konceptu, že to lidi nechápou. Takových témat se najde mnohem víc, třeba “the M word” ve FP.

Re:Naučení se asynchronnímu programování
« Odpověď #48 kdy: 08. 10. 2019, 16:42:53 »
Takže dejte pokoj s monádami, je to v kontextu diskuze nepodstatný a neužitečný detail.

téměř každá diskuze, do které se zapojí Mirek Prýmek a Idris skončí u monád.
:) ;) :D ;D

Re:Naučení se asynchronnímu programování
« Odpověď #49 kdy: 08. 10. 2019, 16:45:52 »
To ale není chyba technologie/konceptu, že to lidi nechápou. Takových témat se najde mnohem víc, třeba “the M word” ve FP.
Tos ale blbě pochopil, tím Idris myslel monomorfismus ;)


Re:Naučení se asynchronnímu programování
« Odpověď #50 kdy: 08. 10. 2019, 18:10:46 »
Něco málo z pravěku, zajímavý byl Symbian OS, to je ten systém co se používal na prvních Nokia smartphonech. Symbian vychází ze systému EPOC. Systém se používal na organizérech firmy Psion někdy od roku 1991. V té době nabízel preemptivní multitasking, grafické rozhraní, aplikace (database, word processor, spreadsheet) na CPU 4.7 Mhz a 256 KB RAM. Architektura EPOCu byla inspirována systémem VAX/VMS, 70 léta.

Jádrém návrhu bylo asychronní nátura aplikace. Taková typická mobilní aplikace většinu času čeká na událost (stisk klávesy, příchozí SMS, příchozí mail). Používál se Active Object návrhový vzor. Vzor zahrnuje Active Scheduler a Active Object. Scheduler je smyčka která čeka na signál nebo spravuje active objecty. Active  Object zapouzdřuje volání asynchronní metody a zpracování výsledku. Asynchronní metoda je operace nad resourcem, např žádost o notifikaci na příchozí SMS, resourcem je příchozí SMS. Resource spravuje systémovy server (Windows server, Telephony server, Network server.). Jakmile server zpracuje požadavek, server vyšle signal clientovi, active scheduler se probudí, najde správny active object a zpracuje výsledek. Asynchronní metoda je tedy client-server request, podobně jako REST. I samotné UI eventy jsou implementovaný jako active object, který donekonečna žádá o uživatelský vstup. Aplikační framework poskytoval plnou podporu pro asynchronní volání a řesil tyto problemy:

  • organizaci asynchronních volání
  • zrušení (cancel) asynchronního volání, které stále běží
  • pád clienta (applikace)
  • pád servera v systému

Operace nad resourcem byly serializované, tzn např aplikace mohla vyvolat pouze jednu žádost o stisk klávesy v čase, až se zpracoval výsledek, aplikace mohla žádat znovu. Měli to tehdy pěkně vyřešené, od začátku navrhli pěkný design, takže orientovat se v ruzných části systému bylo jednoduché. Ve výsledku Active Object vzor je kooperativní multitasking v aplikaci (lehké vlákna).

Mrkni na dnešní Event Sourcing, CQRS, Eventual consistency. Problémy jsou stále stejné. Např vytvoření objednávky v systému, vytvoří se událost, událost se vloží do fronty, z fronty událost vybere nějaky microservice, a vytvoří objednávku ve své databázi. Client pošle dotaz na vytvořenou objednávku, ale objednávka není ještě uložena. Client pošle dotaz znovu, objednávka stále není vytvořena a řekněmě, že už postráda smysl. Co teď? Je operace idempotentní? Zrušit? Jak? Kompenzační událost, která zruší předchozí událost? Jak? Událost je pravděbodobně stále ve frontě a čeká na zpracování. Takže objednávka muže existovat než příjde kompenzační událost na řadu?

Re:Naučení se asynchronnímu programování
« Odpověď #51 kdy: 08. 10. 2019, 18:17:41 »
Taková typická mobilní aplikace většinu času čeká na událost
Myslím, žes celkem dobře ilustroval, jak je pojem "asynchronní" rozbředlý, takže ve finále celkem k ničemu. To, co popisuješ, by klidně někdo mohl místo "asynchronní", nazvat spíš "event-driven"...

Samotný pojem "asynchronní" znamená všechno a nic. Je potřeba říct, v jakým kontextu a na jaké úrovni ho mám na mysli, jinak je z toho jenom zmatení...

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Naučení se asynchronnímu programování
« Odpověď #52 kdy: 08. 10. 2019, 21:16:56 »
To ale není chyba technologie/konceptu, že to lidi nechápou. Takových témat se najde mnohem víc, třeba “the M word” ve FP.
Tos ale blbě pochopil, tím Idris myslel monomorfismus ;)
Tak jasně, kdo chce psát asynchronní kód, musí tam dát monomorfismus. A kdo nemá monomorfismus, tak ať tam dá nějakej jinej morfismus. A kdo nemá žádnej morfismus, tak ať tam nedává nic  ;)

Re:Naučení se asynchronnímu programování
« Odpověď #53 kdy: 08. 10. 2019, 21:55:22 »
Taková typická mobilní aplikace většinu času čeká na událost
Myslím, žes celkem dobře ilustroval, jak je pojem "asynchronní" rozbředlý, takže ve finále celkem k ničemu. To, co popisuješ, by klidně někdo mohl místo "asynchronní", nazvat spíš "event-driven"...

Samotný pojem "asynchronní" znamená všechno a nic. Je potřeba říct, v jakým kontextu a na jaké úrovni ho mám na mysli, jinak je z toho jenom zmatení...

Ja si myslim, ze asyncrhonni znamena neco konkretniho a docela presne. Znamena to totiz, ze neco neni neni synchronni. A jak neco neni synchronni, tak je treba dycky zbystrit, protoze se s tim bude jistojiste delat blbeji, nez kdyby to bylo syncrhonni 8) :D

Re:Naučení se asynchronnímu programování
« Odpověď #54 kdy: 08. 10. 2019, 22:00:46 »
Mrkni na dnešní Event Sourcing, CQRS, Eventual consistency. Problémy jsou stále stejné. Např vytvoření objednávky v systému, vytvoří se událost, událost se vloží do fronty, z fronty událost vybere nějaky microservice, a vytvoří objednávku ve své databázi. Client pošle dotaz na vytvořenou objednávku, ale objednávka není ještě uložena. Client pošle dotaz znovu, objednávka stále není vytvořena a řekněmě, že už postráda smysl. Co teď? Je operace idempotentní? Zrušit? Jak? Kompenzační událost, která zruší předchozí událost? Jak? Událost je pravděbodobně stále ve frontě a čeká na zpracování. Takže objednávka muže existovat než příjde kompenzační událost na řadu?

Tady jsi krasne ukazal, jak se muzes zamotat do Asynchronniho programovani. V synchronnim systemu zpracovani objednavek na takovy problem nenarazis. Tak je to dycky s tim asynchronnim udalostmi rizenem programovani. Myslis si ze sis neco ulehcil, ale pritom neulehcil, protoze musis resit takoveto filozoficke problemy.

Re:Naučení se asynchronnímu programování
« Odpověď #55 kdy: 09. 10. 2019, 10:13:13 »
Ja si myslim, ze asyncrhonni znamena neco konkretniho a docela presne. Znamena to totiz, ze neco neni neni synchronni.
Jasný. A "synchronní" znamená, že to není asynchronní, ne?

V synchronnim systemu zpracovani objednavek na takovy problem nenarazis.
Co to je "synchronní systém na zpracování objednávek"? Tam nejsou fronty? Nedá se to škálovat na víc počítačů? Když kliknu na webu, tak ten web zmrzne, dokud někdo ve skladu objednávku fyzicky nevyřídí a neklikne na "odesláno"?

Nebo co to je?

Re:Naučení se asynchronnímu programování
« Odpověď #56 kdy: 09. 10. 2019, 11:52:02 »

V synchronnim systemu zpracovani objednavek na takovy problem nenarazis.
Co to je "synchronní systém na zpracování objednávek"? Tam nejsou fronty? Nedá se to škálovat na víc počítačů? Když kliknu na webu, tak ten web zmrzne, dokud někdo ve skladu objednávku fyzicky nevyřídí a neklikne na "odesláno"?

Přesně tak. Skutečně tam pak na takové problémy, jaké nese asynchronní programování, nenarazíš. Vlastně s tím nenarazíš ani na žádné praktické problémy, protože to prakticky nikde nenasadíš.

Re:Naučení se asynchronnímu programování
« Odpověď #57 kdy: 09. 10. 2019, 13:49:59 »
Reasoning
Co je zač tento korporátní termín?

Pro inspiraci: https://maxtaco.github.io/coffee-script/ - zde se používá await a defer

Re:Naučení se asynchronnímu programování
« Odpověď #58 kdy: 09. 10. 2019, 13:56:11 »
Co je zač tento korporátní termín?
To nemá s korporacemi nic společného, to je vědecký termín. Znamená to mít schopnost správně (metodologicky korektně) o nějaké věci uvažovat a docházet tak k platným (teda i potenciálně prakticky využitelným) závěrům. Jak jsem řekl, neznám dobrý český ekvivalent, který by měl všechny tyhle odstíny. Rád si nechám poradit, ale není to nic z "uvažovat", "zvažovat", "přemýšlet", "vyvozovat", "odvozovat", "rozhodovat se". Má to (aspoň v mých očích) z toho všeho trochu a proto je to pro mě tak silný slovo.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Naučení se asynchronnímu programování
« Odpověď #59 kdy: 09. 10. 2019, 14:14:43 »
Co je zač tento korporátní termín?
To nemá s korporacemi nic společného, to je vědecký termín. Znamená to mít schopnost správně (metodologicky korektně) o nějaké věci uvažovat a docházet tak k platným (teda i potenciálně prakticky využitelným) závěrům. Jak jsem řekl, neznám dobrý český ekvivalent, který by měl všechny tyhle odstíny. Rád si nechám poradit, ale není to nic z "uvažovat", "zvažovat", "přemýšlet", "vyvozovat", "odvozovat", "rozhodovat se". Má to (aspoň v mých očích) z toho všeho trochu a proto je to pro mě tak silný slovo.
Vezmi si příklad ze srbštiny (automatsko rezonovanje)  ;)