Clojurians
#clojure-czech
<
2016-04-13
>

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

rarous08:04:22

Již zítra v Liberci

zrzka08:04:59

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

zrzka08:04:27

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

zrzka09:04: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?

darwin09:04: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

darwin09:04:47

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

darwin09:04: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

darwin09:04:18

tim padem bych to cekal jako normalni soucast kodu te funkce

darwin09:04:41

:pre a :post chces typicky odstranit pro produkcni prostredi

zrzka09:04:55

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

zrzka09:04:13

:pre navrhnul Rarous, tak to zkouman

darwin09:04:59

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

darwin10:04:23

tvuj usecase musi byt normalni kod IMO

rarous10:04:55

pravda :simple_smile:

zrzka10:04:59

Okay, dik

zrzka10:04:11

Takze na prvni dobrou v podstate spravne :)

zrzka10:04:42

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

darwin10:04:08

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

darwin10:04:26

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

darwin10:04:10

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

zrzka10:04:27

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

darwin10:04:31

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

darwin10:04:34

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

zrzka10:04: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é

darwin10:04:46

delas jeste iOS? clojure pouzivas na backendy?

zrzka10:04: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

zrzka10:04:24

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

darwin10:04: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

darwin10:04:27

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

zrzka10:04: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, ...

darwin10:04: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

zrzka10:04: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:

zrzka10:04:30

Ale to si sedne :simple_smile:

darwin10:04:53

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

darwin10:04:21

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

darwin10:04:07

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

darwin10:04:28

s/developeru/developeru a firem/

zrzka10:04:47

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

zrzka10:04:09

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

darwin10:04: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

darwin10:04:17

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

darwin10:04:43

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

zrzka10:04:09

To vypadá dobře, mrknu na to

darwin10:04:16

zatim pockej na verzi 0.2

darwin10:04:23

snad do 14-ti dni

zrzka10:04:42

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

darwin10:04:48

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

darwin10:04:55

krom hloupeho S3

zrzka10:04:15

Tak to buď rád :simple_smile:

darwin10:04:28

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

darwin10:04:02

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

zrzka10:04: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

zrzka10:04:03

A volba padla na AWSko

zrzka10:04:01

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

darwin10:04:52

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

darwin10:04:07

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

darwin10:04:28

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

zrzka10:04: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.

darwin10:04:42

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

maio10:04:42

amen2 :simple_smile:

maio10:04:15

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

darwin10:04:49

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

darwin10:04: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

zrzka10:04: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:

darwin10:04:06

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

darwin10:04:43

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

rarous10:04:16

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

darwin10:04:17

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

darwin10:04:28

nesleduju Amazon konference, takze treba se pletu

zrzka10:04:34

Nestraš :simple_smile:

darwin10:04:17

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

darwin10:04:18

:simple_smile:

darwin10:04:24

do te doby nema smysl nic delat

darwin10:04:31

:stuck_out_tongue_winking_eye:

darwin10:04:27

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

rarous11:04:46

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

rarous11:04:55

fullstuck forever :simple_smile:

rarous11:04:46

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

rarous11:04:49

AWS Lambda je i v posledním TW Radaru

rarous11:04:42

MS i Google mají podobné offeringy v jejich cloudech

rarous11:04: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

rarous11:04:32

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

rarous11:04:19

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

darwin11:04:29

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

rarous14:04:38

dokonce k tomu vyšla i kniha

zrzka17:04: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) …

zrzka17:04: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

zrzka17:04: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ší.

darwin19:04: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

darwin19:04:15

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

darwin19:04:57

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

darwin19:04:49

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

darwin19:04: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

zrzka20:04:42

S tim :post :pre souhlas, tam staci check

zrzka20:04:27

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

zrzka20:04:31

I kdyz koukam, ze check vraci i validation errors

darwin20:04:31

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

darwin20:04:37

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

zrzka20:04:45

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

zrzka20:04:58

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

darwin20:04:39

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

darwin20:04:47

v javascriptu se na to moc nehraje

darwin20:04:26

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

zrzka20:04:07

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

zrzka20:04: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

darwin20:04:30

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

zrzka20:04: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

darwin20:04:02

nevim, dash nepouzivam

darwin20:04:24

ja ctu zdrojaky, Cursive me tam na keyboard shortcut skoci

darwin20:04:52

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

zrzka20:04:16

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

zrzka20:04:27

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

darwin20:04:09

ve vlaku spi, problem solved :wink:

zrzka20:04:12

Taky dobrá rada :smile:

darwin20:04: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

darwin20:04:12

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

darwin20:04:01

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

zrzka20:04:55

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

darwin20:04:37

njn, je toho hodne na zacatek

darwin20:04: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

zrzka20:04:37

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

darwin20:04:00

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

darwin20:04:09

zvlast nREPL pokud clovek potrebuje

darwin20:04:29

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

zrzka20:04:06

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

zrzka20:04: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.

darwin20:04:00

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

darwin20:04:09

v PHP nevis :simple_smile:

darwin20:04:17

nebo ted uz i s Ruby

zrzka20:04:42

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

darwin20:04:28

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

darwin20:04:36

poznalo by se z toho jak lidi migruji

darwin20:04:58

teda na open source datech jen

zrzka20:04:36

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

darwin20:04:45

to neni tajny

darwin20:04:49

kdyz to udelate, budu rad

darwin20:04:56

jeden z projektu odskrtnut :simple_smile:

zrzka20:04:20

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

zrzka20:04:47

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

zrzka20:04:02

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

darwin20:04:24

mate to nekde public? kouknul bych

darwin20:04:43

PurposeFly jsem nevygooglil :simple_smile:

zrzka20:04:55

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

darwin20:04:15

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

darwin20:04:18

co me tam zavedlo

zrzka20:04:24

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

jfojtl22:04:20

mne to zajima :simple_smile: