clojure-czech 2016-04-13

Již zítra v Liberci

👍 3

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

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

❤️ 1

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?

@jose has joined the channel

@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

Takze na prvni dobrou v podstate spravne :)

👍 1

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é

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

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

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

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

do te doby nema smysl nic delat

🍸 1
😎 1

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

🚀 1

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

@filuta has joined the channel

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

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 😉

😄 1

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

😉 1

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

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

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

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

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

mne to zajima simple_smile