Clojurians
# clojure-czech

This page is not created by, affiliated with, or supported by Slack Technologies, Inc.

rarous 11:36:22

Již zítra v Liberci

zrzka 11:38:59

Daleko chlapci, daleko chlapci, ale příště přijedu :simple_smile:

zrzka 11:39:27

I s tou přednáškou teda, aby se neřeklo :simple_smile:

zrzka 12:28:20

Tak ať to tu není mrtvé, včera jsme řešili a nedořešili … Mám na AWSku Lambda funkci, jedním z parametrů je event (mapa) a já ho potřebuju zvalidovat. Zatím to mám tak, že nepoužívám :pre a uvnitř si jako první věc zavolám validaci (separé funkce, která vrátí nil a nebo custom error mapu a tu případně passnu zpět na API Gateway). Což se Raroušovi ne úplně líbí, já s tím taky moc happy nejsem, navrhnul :pre, ale to má jeden fail, potřebuju custom error formát. Na netu jsem našel, že to lidi řeší tak, že nacpou (or cond (throw (Exception. (format … do :pre, odchytávají a transformují, … Což mi teda taky moc nevoní. Jak to udělat elegantně tak, aby se dalo využít :pre a zároveň výsledkem byla vlastní mapa?

darwin 12:55:09

@zrzka: bojim se, ze vysledkem :pre nemuze nic byt. :pre kod neni soucasti normalniho kodu, muze jen assertovat - to ze jde vyhodit exception, kterou potom mozna muzes nekde odchytnout je podle me jen implementacni detail jak :pre a :post bloky v soucasnosti generuji kod

darwin 12:55:47

klidne to generovani nekdo muze v budoucnu obalit do try-catch a budes v riti

darwin 12:57:03

proc tu validaci musis delat v :pre? podle toho popisu to spis vypada, ze tu validaci chces delat vzdy, protoze je to nejake validace API parametru

darwin 12:57:18

tim padem bych to cekal jako normalni soucast kodu te funkce

darwin 12:57:41

:pre a :post chces typicky odstranit pro produkcni prostredi

zrzka 12:58:55

Jj, chci ji delat vzdy, jsou to vstupy z query pres API Gateway

zrzka 12:59:13

:pre navrhnul Rarous, tak to zkouman

darwin 12:59:59

koukej na :pre a :post jako invarianty funkce, chces je checkovat ve svych debug buildech, ale v produkci budou odstraneny

darwin 13:00:23

tvuj usecase musi byt normalni kod IMO

rarous 13:00:55

pravda :simple_smile:

zrzka 13:00:59

Okay, dik

zrzka 13:01:11

Takze na prvni dobrou v podstate spravne :)

zrzka 13:02:42

To je tak kdyz se nekdo snazi jiz funkcni reseni zkraslit a udelat lepe :)

darwin 13:03:08

pro slozitejsi validace doporucuji kouknout na https://github.com/plumatic/schema

darwin 13:03:26

opet, daji se pouzit v :pre, :post a nebo v normalnim kodu, podle situace

darwin 13:04:10

a jeste je tady takova lepsi assert library: https://github.com/ptaoussanis/truss

zrzka 13:04:27

Mam v bookmarku, klasicky jsem se k tomu jeste nedostal, protoze kroutim hlavou nad API Gateway na AWS

darwin 13:04:31

bohuzel s tou nemam zkusenosti, (protoze zatim dobre nepodporuje clojurescript)

darwin 13:05:34

resp. clojurescript podporuje, ale nelibi se mi, ze je napsana v cljx a ne cljc :simple_smile:

zrzka 13:06:08

Jinak na příští Lambdě v Liberci o tom chci mluvit, API Gateway, Lambda, … AWS … Nejsem sice cljs expert, ale AWS už mám v téhle části dost prolezlé

darwin 13:06:46

delas jeste iOS? clojure pouzivas na backendy?

zrzka 13:07:47

Yup, iOS i OS X pořád, toho se nevzdám, jen jsme se rozhodli zahodit Railsy a jít cestou AWS (Lambdy, Dynamo, triggery, …), tak jsem do toho dobrovolně vstoupil

zrzka 13:08:24

A nechceme mít experty na jednu věc, takže všichni „všechno“

darwin 13:08:45

verim, ze dobre delas,
ja prodal[1] moje Mac appky a ted se chci vrhnout do nejakych dalsich napadu v supliku
[1] http://blog.binaryage.com/meet-steve-the-new-lead

darwin 13:09:27

a zatim to vypada, ze co bude alespon trochu davat smysl, tak budu delat v clj(s)

zrzka 13:10:17

Jako musím říct, že jsem extrémně happy s CLJS, když to porovnám s Xcode / AppCode / …, tak si zase úplně lebedím v Emacsu, REPL, ...

darwin 13:10:18

ale inklinuju spis k cljs, nemam moc rad ten java ekosystem, radeji bych treba i desktopove veci psal nad node.js nez nad jvm

zrzka 13:11:04

Až na ten debugging, jsem pořád zvyklej na lldb, asembler, … takže si tady občas s těma printama připadám jako dřevák :simple_smile:

zrzka 13:11:30

Ale to si sedne :simple_smile:

darwin 13:11:53

jojo, tooling je slabina, ale zase clovek muze jit a sahnout kamkoliv do toho stacku a zmenit co potrebuje

darwin 13:12:21

zlepsuje se to (alespon co muzu rict za ten rok co cljs tak nejak aktivneji delam)

darwin 13:13:07

je to chicken-egg problem, dokud nebude vic developeru delat cljs, tak se tooly moc rychle zlepsovat nebudou a naopak

darwin 13:13:28

s/developeru/developeru a firem/

zrzka 13:13:47

Njn, to se zlepší, to chce čas, my na tom teď jedem všichni

zrzka 13:14:09

Když nad tím tak přemýšlím, tak vlastně úplně všichni ve firmě

darwin 13:14:53

nainvestoval jsem ted nejaky cas do Diracu, mozna vic nez je zdravo, ale mam ted solidni zaklad pro vylepsovani devtools ve smerech, ve kterych bude potreba: https://github.com/binaryage/dirac

darwin 13:15:17

umi to breakpointnout cljs kod a pak REPL nad tim breaknutym kontextem

darwin 13:15:43

ne, ze by to clovek vyuzival casto s tema debug printama, ale obcas je to uzitecne

zrzka 13:16:09

To vypadá dobře, mrknu na to

darwin 13:16:16

zatim pockej na verzi 0.2

darwin 13:16:23

snad do 14-ti dni

zrzka 13:16:42

Já jsem teď zapikanej na node & AWS, ale tohle by se mohlo líbit klukům co tvoří frontendy

darwin 13:17:48

s AWS nemam zkusenost, zatim jsem to na nic vylozene nepotreboval

darwin 13:17:55

krom hloupeho S3

zrzka 13:18:15

Tak to buď rád :simple_smile:

darwin 13:18:28

moje veci jsou male, takze si vystacim s docker kontejnery nacpanymi na jedno VPS

darwin 13:19:02

ale chapu, ze jakmile clovek presahne urcity scale, tak musi jit na nejakou auto-scale platformu jako AWS

zrzka 13:19:47

Nás spíš Railsy nakrkli, samej hack kvůli maličkostem, tak jsme si řekli, že chceme být global a že to rovnou postavíme na něčem škálovatelnějším

zrzka 13:20:03

A volba padla na AWSko

darwin 13:21:10

good luck

zrzka 13:22:01

Díky, to si přeju sám sobě pokaždé když lezu do admin konzole :)))

darwin 13:22:52

AWS je skvela technologie ale bohuzel postavena lidma z java prostredi a s javovyma zvykama

darwin 13:23:07

pridelovani prav a administrace je peklo pro cloveka, ktery mysli selskym rozumem

darwin 13:23:28

ted nechci nikoho urazit, ale je to prilis “enterprise” na muj vkus :simple_smile:

zrzka 13:24:17

Amen :simple_smile: Tak to je, člověk musí prolézt různá zakoutí, vyzkoumat proč, … a pak to funguje. Někdy dost zběsile, ale nakonec se to dá ukočírovat.

darwin 13:24:42

ale chapu, ze to melo nejaky historicky vyvoj, takze je tezke soudit

maio 13:24:42

amen2 :simple_smile:

maio 13:26:15

my ted pouzivame google compute engine a tam to je zatim vsechno docela simple (ale zas to umi jen cast toho co AWS)

darwin 13:26:49

google mel vyhodu, ze mohl od AWS opisovat a udelat to “nacisto"

darwin 13:27:29

ja driv pouzival ten jejich google app engine, kdyz to bylo jeste dost syrovy, a problem je, ze to pak nejak zrusili nebo co

zrzka 13:27:34

Když já nevím, jak se řekne Google, tak mám pocit, že do roka zavře krám a tak se mu raději vyhýbám :simple_smile:

darwin 13:28:06

toho bych se bal, chtel bych nejdriv videt, ze to google sam pouziva, takze to nemuze jednoduse zrusit

darwin 13:28:43

velmi bych rozlisoval mezi sluzbama “my taky” a sluzbama “toto je nase core vec, bez ktere bysme byli v riti"

rarous 13:29:16

AWS Lambda je dost high level, ale pořád jsou to komponenty, který si musíš poskládat

darwin 13:30:17

s AWS Lambda to bude zajimavy, zatim to porad vidim jako experiment, ani Amazon (pokud vim) na tom nic zasadniho nema postavene

darwin 13:30:28

nesleduju Amazon konference, takze treba se pletu

zrzka 13:30:34

Nestraš :simple_smile:

darwin 13:33:17

ja osobne cekam na nejaky rozumny graph-ql backend, abych konence mohl zacit psat frontendy v cljs

darwin 13:33:18

:simple_smile:

darwin 13:33:24

do te doby nema smysl nic delat

darwin 13:33:31

:stuck_out_tongue_winking_eye:

darwin 13:34:27

s nastupem graphql prijde spousta backend lidi o praci a stanou se z nich frontend vyvojari :wink:

rarous 14:09:46

no to se snažíme právě nějak prokopnout

rarous 14:09:55

fullstuck forever :simple_smile:

rarous 14:11:46

v Lambdě už je toho hafo a evangelizuje to Adrian Crockford - safe bet

rarous 14:12:49

AWS Lambda je i v posledním TW Radaru

rarous 14:13:42

MS i Google mají podobné offeringy v jejich cloudech

rarous 14:14:58

pokud nechceš řešit infrastrukturní věci, jako že docker je krok v před, ale pořád je to těžká drbárna, tak tyhle věci dávaj velkej smysl

rarous 14:15:32

jen ještě není velký ekosystém okolo, někdo to musí obrousit :confused:

rarous 14:16:19

Serverless framework je jednou z cest, ale jsou to railsy nad lamdbou

darwin 14:37:29

no rozhodne je to zabava a zajimava prace to prokopavat, kazdopadne preju hodne zdaru

rarous 17:37:38

dokonce k tomu vyšla i kniha

zrzka 20:42:22

Tak jo, nakonec jsem to udělal přes prismatic/schema

``` (defn- make-error [code message] (.stringify js/JSON (clj->js {:error-code code :error-message message})))

(defn- input-error [event] (try (s/validate LambdaEventSchema event) nil (catch js/Error e (make-error "INVALID_PARAMS" (.-message e)) )))

(def ^:export availability-chart-data (async-lambda-fn (fn [event context] (go (if-let [error (input-error event)] (fail! context error) (let [user-id (:user-id event) … ```

zrzka 20:43:40

Dal jsem tomu celej den, vyzkoušel kde co a nakonec vzal prismatic/schema a ještě jsem ho použil i v :pre a :post na jiných místech

zrzka 20:46:20

Akorát si dejte bacha na jednu věc, s/validate vrací hodnotu (jó, kdyby někdo četl tu dokumentaci pořádně), takže něco jako …

:post {(s/validate (s/maybe [s/Str]) %)}

… failne v případě, že output je nil, takže …

:post {(or (s/validate (s/maybe [s/Str]) %) true)}

… to řeší.

darwin 22:13:17

nevim co presne dela s/validate, ale ty chces pouzi validacni funkci ktera vraci false pokud failne, podle me nechces spolehat na vyhazovani vyjimek v :pre a :post, a v normalnim kodu je to taky zbytecne, pokud existuje zpusob jak to udelat normalnim testem

darwin 22:14:15

kod (or (neco) true) v :pre nedava na prvni precteni moc smysl, protoze nikdy nefailne, dokud si clovek neuvedomi, ze spolehas na vyjimky

darwin 22:14:57

jsem presvedceny, ze schema knihovna dava i verzi validacni funkce, ktera vraci true/false bez vyjimek

darwin 22:16:49

koukam na dokumentaci k schema knihovne, zda se mi, ze check pripadne checker jsou funkce, ktere chces volat

darwin 22:19:34

jak uz jsem psal vyse, vyjimky v :pre a :post jsou jen implementacni detail, ktery se muze v budoucnu zmenit, ocekava se, ze tam budes pouzivat “pure” funkce hlidajici invarianty vstupnich a vystupnich parametru, ne vyhazovat vyjimky

zrzka 23:23:42

S tim :post :pre souhlas, tam staci check

zrzka 23:24:27

V Lambde ale chci vyjimku (to je mimo :post :pre), protoze me zajima message z te vyjimky abych ji passnul zpet do gatewaye

zrzka 23:26:31

I kdyz koukam, ze check vraci i validation errors

darwin 23:32:31

presne, check vrati nil pokud je to ok, and error object pokud ne

darwin 23:33:37

taky bych doporucil pouzivat (catch :default e …) pokud chces chytnout opravdu vsechny vyjimky

zrzka 23:34:45

Vyjimky zahazuju, check odzkousen v REPLu a dela presne to co chci, jsem ho pri cteni nejak minul

zrzka 23:34:58

Asi to je tim, ze vsude v examples maji validate misto check

darwin 23:35:39

to je zase spis javismus, predpoklada se, ze failnuta validace je “exceptional state” takze vyjimka a nekdo nahore ji chytne

darwin 23:35:47

v javascriptu se na to moc nehraje

darwin 23:36:26

v tvem pripade je to proste jen jina code-path, ktera neni exceptional, proste je to jen spatny api dotaz

zrzka 23:37:07

Jj, dík za ten check, přehlednutí jak sviňa

zrzka 23:38:48

Sice ty error message nejsou pro konzumenta API nic moc, třeba (not (re-find #"^[a-f0-9]{32}?$" a-string)), ale s tím se dá žít

darwin 23:40:30

no, na to neni delany, mozna existuje nejaka funkce, ktera ten error prelozi do vice user-friendly message

zrzka 23:40:44

@darwin ale ty bys to mohl vědět, není někde nějaké repo, které by mělo dokumentace pro Dash? Různých knihoven? Našel jsem přímo cljs

darwin 23:41:02

nevim, dash nepouzivam

darwin 23:41:24

ja ctu zdrojaky, Cursive me tam na keyboard shortcut skoci

darwin 23:41:52

prekvapive dost veci se da fakt cist a clovek hned vidi co to dela

zrzka 23:42:16

to jo, ale já ho mám třeba i na iPadu a když sedím ve vlaku, tak si čtu dokumentaci, apod.

zrzka 23:42:27

a tam už je to se skákáním do zdrojáků horší :simple_smile:

darwin 23:43:09

ve vlaku spi, problem solved :wink:

zrzka 23:44:12

Taky dobrá rada :smile:

darwin 23:46:45

to cteni zdrojaku je taky dobry na uceni, zda se mi, ze spousta zacinajicich lidi se boji nebo nemaji mozna tooly na studovani cljs.core a jinych hlavnich knihoven, clovek se z toho muze dost naucit

darwin 23:47:12

a pak postuji dotazy do hlavniho kanalu, ktere se daji odpovedet jen kouknutim na tu prislusnou funkci co dela

darwin 23:48:01

ted nemluvim o tom jak funguje kompilator, mam na mysli knihovni funkce

zrzka 23:48:55

Spíš mají problém to všechno nejdřív rozchodit a pochopit :simple_smile: A pak už jsou asi otrávený :simple_smile:

darwin 23:49:37

njn, je toho hodne na zacatek

darwin 23:50:37

zajimavy je, ze do cljs nastupuji lidi z clojure z java strany a taky javascriptaci, co hledaji neco lepsiho, to jsou dve uplne odlisne skupiny, ktere maji dost jine ocekavani jak budou veci fungovat

zrzka 23:50:37

Jsem myslel, že to rozflákám když jsem řešil Emacs, cider, cljs repl, ...

darwin 23:51:00

Emacs nevim, tim jsem si neprosel, ale repl veci jsou peklo

darwin 23:51:09

zvlast nREPL pokud clovek potrebuje

darwin 23:51:29

i z leinu nejsem nadseny, ale naucil jsem se s nim zit

zrzka 23:52:06

Už jsem to rozchodil, kombinaci Emacs, cider, piggieback, nrepl, auto load cljs repl, … ale bylo to fakt peklo :simple_smile:

zrzka 23:52:32

Nejhorší jsou pak ty komentáře, hele, to musíš mít verzi X.Y.Z, protože X.Y.(Z+1) to rozbila, apod.

darwin 23:53:00

na druhou stranu je to dobry, je to takovy vstupni test, lidi co to zvladnou a vydrzi nejsou osmilete decka :wink:

darwin 23:53:09

v PHP nevis :simple_smile:

darwin 23:53:17

nebo ted uz i s Ruby

zrzka 23:53:42

Skoro se vším dneska, se podíváš na SO a nevěříš vlastním očím

darwin 23:54:28

mam v hlave takovy projektik, vyscrapovat github data, profily uzivatelu jake jazyky pouzivali v prubehu let a pak to nejak vizualizovat

darwin 23:54:36

poznalo by se z toho jak lidi migruji

darwin 23:54:58

teda na open source datech jen

zrzka 23:55:36

Tak to neříkej nahlas, nebo ti to vezmem na PurposeFly :simple_smile:

darwin 23:55:45

to neni tajny

darwin 23:55:49

kdyz to udelate, budu rad

darwin 23:55:56

jeden z projektu odskrtnut :simple_smile:

zrzka 23:56:20

Na GH se taky chystáme, ale až později

zrzka 23:56:47

Teď se dodělal Slack (page ranky, …)

zrzka 23:57:02

A GH berem jako jeden z dalších zdrojů dat

darwin 23:57:24

mate to nekde public? kouknul bych

darwin 23:57:43

PurposeFly jsem nevygooglil :simple_smile:

zrzka 23:58:55

Ale pracuje se na tom, aby tam toho bylo víc

darwin 23:59:15

nedavno jsem na tu stranku koukal, ale nemuzu si vzpomenout proc

darwin 23:59:18

co me tam zavedlo

zrzka 23:59:24

Ti napíšu bokem, tady je to off topic