Již zítra v Liberci
Daleko chlapci, daleko chlapci, ale příště přijedu :simple_smile:
I s tou přednáškou teda, aby se neřeklo :simple_smile:
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?
@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
klidne to generovani nekdo muze v budoucnu obalit do try-catch a budes v riti
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
tim padem bych to cekal jako normalni soucast kodu te funkce
:pre a :post chces typicky odstranit pro produkcni prostredi
Jj, chci ji delat vzdy, jsou to vstupy z query pres API Gateway
:pre navrhnul Rarous, tak to zkouman
koukej na :pre a :post jako invarianty funkce, chces je checkovat ve svych debug buildech, ale v produkci budou odstraneny
tvuj usecase musi byt normalni kod IMO
pravda :simple_smile:
Okay, dik
Takze na prvni dobrou v podstate spravne :)
To je tak kdyz se nekdo snazi jiz funkcni reseni zkraslit a udelat lepe :)
pro slozitejsi validace doporucuji kouknout na https://github.com/plumatic/schema
opet, daji se pouzit v :pre, :post a nebo v normalnim kodu, podle situace
a jeste je tady takova lepsi assert library: https://github.com/ptaoussanis/truss
Mam v bookmarku, klasicky jsem se k tomu jeste nedostal, protoze kroutim hlavou nad API Gateway na AWS
bohuzel s tou nemam zkusenosti, (protoze zatim dobre nepodporuje clojurescript)
resp. clojurescript podporuje, ale nelibi se mi, ze je napsana v cljx a ne cljc :simple_smile:
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é
super
delas jeste iOS? clojure pouzivas na backendy?
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
A nechceme mít experty na jednu věc, takže všichni „všechno“
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
a zatim to vypada, ze co bude alespon trochu davat smysl, tak budu delat v clj(s)
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, ...
ale inklinuju spis k cljs, nemam moc rad ten java ekosystem, radeji bych treba i desktopove veci psal nad node.js nez nad jvm
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:
Ale to si sedne :simple_smile:
jojo, tooling je slabina, ale zase clovek muze jit a sahnout kamkoliv do toho stacku a zmenit co potrebuje
zlepsuje se to (alespon co muzu rict za ten rok co cljs tak nejak aktivneji delam)
je to chicken-egg problem, dokud nebude vic developeru delat cljs, tak se tooly moc rychle zlepsovat nebudou a naopak
s/developeru/developeru a firem/
Njn, to se zlepší, to chce čas, my na tom teď jedem všichni
Když nad tím tak přemýšlím, tak vlastně úplně všichni ve firmě
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
umi to breakpointnout cljs kod a pak REPL nad tim breaknutym kontextem
ne, ze by to clovek vyuzival casto s tema debug printama, ale obcas je to uzitecne
To vypadá dobře, mrknu na to
zatim pockej na verzi 0.2
snad do 14-ti dni
Já jsem teď zapikanej na node & AWS, ale tohle by se mohlo líbit klukům co tvoří frontendy
s AWS nemam zkusenost, zatim jsem to na nic vylozene nepotreboval
krom hloupeho S3
Tak to buď rád :simple_smile:
moje veci jsou male, takze si vystacim s docker kontejnery nacpanymi na jedno VPS
ale chapu, ze jakmile clovek presahne urcity scale, tak musi jit na nejakou auto-scale platformu jako AWS
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
A volba padla na AWSko
good luck
Díky, to si přeju sám sobě pokaždé když lezu do admin konzole :)))
AWS je skvela technologie ale bohuzel postavena lidma z java prostredi a s javovyma zvykama
pridelovani prav a administrace je peklo pro cloveka, ktery mysli selskym rozumem
ted nechci nikoho urazit, ale je to prilis “enterprise” na muj vkus :simple_smile:
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.
ale chapu, ze to melo nejaky historicky vyvoj, takze je tezke soudit
amen2 :simple_smile:
my ted pouzivame google compute engine a tam to je zatim vsechno docela simple (ale zas to umi jen cast toho co AWS)
google mel vyhodu, ze mohl od AWS opisovat a udelat to “nacisto"
ja driv pouzival ten jejich google app engine, kdyz to bylo jeste dost syrovy, a problem je, ze to pak nejak zrusili nebo co
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:
toho bych se bal, chtel bych nejdriv videt, ze to google sam pouziva, takze to nemuze jednoduse zrusit
velmi bych rozlisoval mezi sluzbama “my taky” a sluzbama “toto je nase core vec, bez ktere bysme byli v riti"
AWS Lambda je dost high level, ale pořád jsou to komponenty, který si musíš poskládat
s AWS Lambda to bude zajimavy, zatim to porad vidim jako experiment, ani Amazon (pokud vim) na tom nic zasadniho nema postavene
nesleduju Amazon konference, takze treba se pletu
Nestraš :simple_smile:
ja osobne cekam na nejaky rozumny graph-ql backend, abych konence mohl zacit psat frontendy v cljs
:simple_smile:
do te doby nema smysl nic delat
😜
s nastupem graphql prijde spousta backend lidi o praci a stanou se z nich frontend vyvojari 😉
no to se snažíme právě nějak prokopnout
fullstuck forever :simple_smile:
v Lambdě už je toho hafo a evangelizuje to Adrian Crockford - safe bet
AWS Lambda je i v posledním TW Radaru
MS i Google mají podobné offeringy v jejich cloudech
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
jen ještě není velký ekosystém okolo, někdo to musí obrousit 😕
Serverless framework je jednou z cest, ale jsou to railsy nad lamdbou
no rozhodne je to zabava a zajimava prace to prokopavat, kazdopadne preju hodne zdaru
dokonce k tomu vyšla i kniha
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) …
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
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ší.
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
kod (or (neco) true)
v :pre nedava na prvni precteni moc smysl, protoze nikdy nefailne, dokud si clovek neuvedomi, ze spolehas na vyjimky
jsem presvedceny, ze schema knihovna dava i verzi validacni funkce, ktera vraci true/false bez vyjimek
koukam na dokumentaci k schema knihovne, zda se mi, ze check
pripadne checker
jsou funkce, ktere chces volat
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
S tim :post :pre souhlas, tam staci check
V Lambde ale chci vyjimku (to je mimo :post :pre), protoze me zajima message z te vyjimky abych ji passnul zpet do gatewaye
I kdyz koukam, ze check vraci i validation errors
presne, check vrati nil pokud je to ok, and error object pokud ne
taky bych doporucil pouzivat (catch :default e …)
pokud chces chytnout opravdu vsechny vyjimky
Vyjimky zahazuju, check
odzkousen v REPLu a dela presne to co chci, jsem ho pri cteni nejak minul
Asi to je tim, ze vsude v examples maji validate
misto check
to je zase spis javismus, predpoklada se, ze failnuta validace je “exceptional state” takze vyjimka a nekdo nahore ji chytne
v javascriptu se na to moc nehraje
v tvem pripade je to proste jen jina code-path, ktera neni exceptional, proste je to jen spatny api dotaz
Jj, dík za ten check
, přehlednutí jak sviňa
np
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
no, na to neni delany, mozna existuje nejaka funkce, ktera ten error prelozi do vice user-friendly message
@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
nevim, dash nepouzivam
ja ctu zdrojaky, Cursive me tam na keyboard shortcut skoci
prekvapive dost veci se da fakt cist a clovek hned vidi co to dela
to jo, ale já ho mám třeba i na iPadu a když sedím ve vlaku, tak si čtu dokumentaci, apod.
a tam už je to se skákáním do zdrojáků horší :simple_smile:
ve vlaku spi, problem solved 😉
Taky dobrá rada 😄
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
a pak postuji dotazy do hlavniho kanalu, ktere se daji odpovedet jen kouknutim na tu prislusnou funkci co dela
ted nemluvim o tom jak funguje kompilator, mam na mysli knihovni funkce
Spíš mají problém to všechno nejdřív rozchodit a pochopit :simple_smile: A pak už jsou asi otrávený :simple_smile:
njn, je toho hodne na zacatek
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
Jsem myslel, že to rozflákám když jsem řešil Emacs, cider, cljs repl, ...
Emacs nevim, tim jsem si neprosel, ale repl veci jsou peklo
zvlast nREPL pokud clovek potrebuje
i z leinu nejsem nadseny, ale naucil jsem se s nim zit
Už jsem to rozchodil, kombinaci Emacs, cider, piggieback, nrepl, auto load cljs repl, … ale bylo to fakt peklo :simple_smile:
Nejhorší jsou pak ty komentáře, hele, to musíš mít verzi X.Y.Z, protože X.Y.(Z+1) to rozbila, apod.
na druhou stranu je to dobry, je to takovy vstupni test, lidi co to zvladnou a vydrzi nejsou osmilete decka 😉
v PHP nevis :simple_smile:
nebo ted uz i s Ruby
Skoro se vším dneska, se podíváš na SO a nevěříš vlastním očím
mam v hlave takovy projektik, vyscrapovat github data, profily uzivatelu jake jazyky pouzivali v prubehu let a pak to nejak vizualizovat
poznalo by se z toho jak lidi migruji
teda na open source datech jen
Tak to neříkej nahlas, nebo ti to vezmem na PurposeFly :simple_smile:
to neni tajny
kdyz to udelate, budu rad
jeden z projektu odskrtnut :simple_smile:
Na GH se taky chystáme, ale až později
Teď se dodělal Slack (page ranky, …)
A GH berem jako jeden z dalších zdrojů dat
mate to nekde public? kouknul bych
PurposeFly jsem nevygooglil :simple_smile:
Zatím děs běs web https://www.purposefly.com
Ale pracuje se na tom, aby tam toho bylo víc
nedavno jsem na tu stranku koukal, ale nemuzu si vzpomenout proc
co me tam zavedlo
Ti napíšu bokem, tady je to off topic
mne to zajima :simple_smile: