This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-04-13
Channels
- # admin-announcements (2)
- # beginners (27)
- # boot (85)
- # cider (24)
- # cljs-dev (20)
- # cljsrn (16)
- # clojure (73)
- # clojure-brasil (2)
- # clojure-czech (152)
- # clojure-dusseldorf (7)
- # clojure-france (3)
- # clojure-japan (1)
- # clojure-norway (1)
- # clojure-poland (7)
- # clojure-russia (140)
- # clojure-uk (7)
- # clojurescript (66)
- # cursive (20)
- # datomic (8)
- # emacs (7)
- # events (1)
- # hoplon (325)
- # jobs (2)
- # jobs-discuss (69)
- # leiningen (3)
- # off-topic (6)
- # om (48)
- # onyx (82)
- # parinfer (1)
- # planck (10)
- # re-frame (53)
- # reagent (8)
- # ring (103)
- # untangled (13)
- # yada (14)
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
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
koukej na :pre a :post jako invarianty funkce, chces je checkovat ve svych debug buildech, ale v produkci budou odstraneny
pro slozitejsi validace doporucuji kouknout na https://github.com/plumatic/schema
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
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é
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
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
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
jojo, tooling je slabina, ale zase clovek muze jit a sahnout kamkoliv do toho stacku a zmenit co potrebuje
je to chicken-egg problem, dokud nebude vic developeru delat cljs, tak se tooly moc rychle zlepsovat nebudou a naopak
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
Já jsem teď zapikanej na node & AWS, ale tohle by se mohlo líbit klukům co tvoří frontendy
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
AWS je skvela technologie ale bohuzel postavena lidma z java prostredi a s javovyma zvykama
Amen 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.
my ted pouzivame google compute engine a tam to je zatim vsechno docela simple (ale zas to umi jen cast toho co AWS)
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
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"
s AWS Lambda to bude zajimavy, zatim to porad vidim jako experiment, ani Amazon (pokud vim) na tom nic zasadniho nema postavene
ja osobne cekam na nejaky rozumny graph-ql backend, abych konence mohl zacit psat frontendy v cljs
s nastupem graphql prijde spousta backend lidi o praci a stanou se z nich frontend vyvojari 😉
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
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
V Lambde ale chci vyjimku (to je mimo :post :pre), protoze me zajima message z te vyjimky abych ji passnul zpet do gatewaye
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
to je zase spis javismus, predpoklada se, ze failnuta validace je “exceptional state” takze vyjimka a nekdo nahore ji chytne
v tvem pripade je to proste jen jina code-path, ktera neni exceptional, proste je to jen spatny api dotaz
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
to jo, ale já ho mám třeba i na iPadu a když sedím ve vlaku, tak si čtu dokumentaci, apod.
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
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
Už jsem to rozchodil, kombinaci Emacs, cider, piggieback, nrepl, auto load cljs repl, … ale bylo to fakt peklo
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 😉
mam v hlave takovy projektik, vyscrapovat github data, profily uzivatelu jake jazyky pouzivali v prubehu let a pak to nejak vizualizovat
Zatím děs běs web https://www.purposefly.com