clojure-czech

rarous 2016-04-13T08:36:09.000024Z

http://srazy.info/podjestedska-lambda/6440

rarous 2016-04-13T08:36:22.000026Z

Již zítra v Liberci

3👍
zrzka 2016-04-13T08:38:59.000027Z

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

zrzka 2016-04-13T08:39:27.000028Z

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

1❤️
zrzka 2016-04-13T09:28:20.000029Z

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?

2016-04-13T09:55:09.000031Z

@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

2016-04-13T09:55:47.000032Z

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

2016-04-13T09:57:03.000033Z

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

2016-04-13T09:57:18.000034Z

tim padem bych to cekal jako normalni soucast kodu te funkce

2016-04-13T09:57:41.000035Z

:pre a :post chces typicky odstranit pro produkcni prostredi

zrzka 2016-04-13T09:58:55.000036Z

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

zrzka 2016-04-13T09:59:13.000037Z

:pre navrhnul Rarous, tak to zkouman

2016-04-13T09:59:59.000038Z

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

2016-04-13T10:00:23.000039Z

tvuj usecase musi byt normalni kod IMO

rarous 2016-04-13T10:00:55.000040Z

pravda :simple_smile:

zrzka 2016-04-13T10:00:59.000041Z

Okay, dik

zrzka 2016-04-13T10:01:11.000042Z

Takze na prvni dobrou v podstate spravne :)

1👍
zrzka 2016-04-13T10:02:42.000043Z

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

2016-04-13T10:03:08.000044Z

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

2016-04-13T10:03:26.000046Z

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

2016-04-13T10:04:10.000047Z

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

zrzka 2016-04-13T10:04:27.000049Z

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

2016-04-13T10:04:31.000050Z

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

2016-04-13T10:05:34.000051Z

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

zrzka 2016-04-13T10:06:08.000052Z

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é

2016-04-13T10:06:21.000053Z

super

2016-04-13T10:06:46.000054Z

delas jeste iOS? clojure pouzivas na backendy?

zrzka 2016-04-13T10:07:47.000055Z

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 2016-04-13T10:08:24.000056Z

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

2016-04-13T10:08:45.000057Z

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

2016-04-13T10:09:27.000058Z

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

zrzka 2016-04-13T10:10:17.000059Z

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, ...

2016-04-13T10:10:18.000060Z

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 2016-04-13T10:11:04.000061Z

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 2016-04-13T10:11:30.000062Z

Ale to si sedne :simple_smile:

2016-04-13T10:11:53.000063Z

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

2016-04-13T10:12:21.000064Z

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

2016-04-13T10:13:07.000065Z

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

2016-04-13T10:13:28.000066Z

s/developeru/developeru a firem/

zrzka 2016-04-13T10:13:47.000067Z

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

zrzka 2016-04-13T10:14:09.000068Z

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

2016-04-13T10:14:53.000069Z

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

2016-04-13T10:15:17.000071Z

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

2016-04-13T10:15:43.000072Z

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

zrzka 2016-04-13T10:16:09.000074Z

To vypadá dobře, mrknu na to

2016-04-13T10:16:16.000075Z

zatim pockej na verzi 0.2

2016-04-13T10:16:23.000076Z

snad do 14-ti dni

zrzka 2016-04-13T10:16:42.000077Z

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

2016-04-13T10:17:48.000078Z

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

2016-04-13T10:17:55.000079Z

krom hloupeho S3

zrzka 2016-04-13T10:18:15.000080Z

Tak to buď rád :simple_smile:

2016-04-13T10:18:28.000081Z

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

2016-04-13T10:19:02.000082Z

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

zrzka 2016-04-13T10:19:47.000083Z

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 2016-04-13T10:20:03.000084Z

A volba padla na AWSko

2016-04-13T10:21:10.000085Z

good luck

zrzka 2016-04-13T10:22:01.000086Z

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

2016-04-13T10:22:52.000087Z

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

2016-04-13T10:23:07.000088Z

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

2016-04-13T10:23:28.000089Z

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

zrzka 2016-04-13T10:24:17.000090Z

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.

2016-04-13T10:24:42.000091Z

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

maio 2016-04-13T10:24:42.000092Z

amen2 :simple_smile:

maio 2016-04-13T10:26:15.000093Z

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

2016-04-13T10:26:49.000094Z

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

2016-04-13T10:27:29.000095Z

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 2016-04-13T10:27:34.000096Z

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:

2016-04-13T10:28:06.000097Z

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

2016-04-13T10:28:43.000098Z

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

rarous 2016-04-13T10:29:16.000099Z

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

2016-04-13T10:30:17.000100Z

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

2016-04-13T10:30:28.000101Z

nesleduju Amazon konference, takze treba se pletu

zrzka 2016-04-13T10:30:34.000102Z

Nestraš :simple_smile:

2016-04-13T10:33:17.000103Z

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

2016-04-13T10:33:18.000104Z

:simple_smile:

2016-04-13T10:33:24.000105Z

do te doby nema smysl nic delat

1🍸1😎
2016-04-13T10:33:31.000106Z

😜

2016-04-13T10:34:27.000107Z

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

1🚀
rarous 2016-04-13T11:09:46.000108Z

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

rarous 2016-04-13T11:09:55.000109Z

fullstuck forever :simple_smile:

rarous 2016-04-13T11:11:46.000110Z

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

rarous 2016-04-13T11:12:49.000111Z

AWS Lambda je i v posledním TW Radaru

rarous 2016-04-13T11:13:42.000113Z

MS i Google mají podobné offeringy v jejich cloudech

rarous 2016-04-13T11:14:58.000114Z

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 2016-04-13T11:15:32.000115Z

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

rarous 2016-04-13T11:16:19.000116Z

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

2016-04-13T11:37:29.000117Z

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

rarous 2016-04-13T14:37:38.000119Z

dokonce k tomu vyšla i kniha

zrzka 2016-04-13T17:42:22.000121Z

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 2016-04-13T17:43:40.000122Z

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 2016-04-13T17:46:20.000123Z

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ší.

2016-04-13T19:13:17.000125Z

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

2016-04-13T19:14:15.000126Z

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

2016-04-13T19:14:57.000127Z

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

2016-04-13T19:16:49.000128Z

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

2016-04-13T19:19:34.000129Z

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 2016-04-13T20:23:42.000131Z

S tim :post :pre souhlas, tam staci check

zrzka 2016-04-13T20:24:27.000132Z

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

zrzka 2016-04-13T20:26:31.000133Z

I kdyz koukam, ze check vraci i validation errors

2016-04-13T20:32:31.000134Z

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

2016-04-13T20:33:37.000135Z

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

zrzka 2016-04-13T20:34:45.000137Z

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

zrzka 2016-04-13T20:34:58.000138Z

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

2016-04-13T20:35:39.000139Z

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

2016-04-13T20:35:47.000140Z

v javascriptu se na to moc nehraje

2016-04-13T20:36:26.000141Z

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

zrzka 2016-04-13T20:37:07.000142Z

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

2016-04-13T20:37:15.000143Z

np

zrzka 2016-04-13T20:38:48.000144Z

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

2016-04-13T20:40:30.000145Z

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

zrzka 2016-04-13T20:40:44.000146Z

@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

2016-04-13T20:41:02.000147Z

nevim, dash nepouzivam

2016-04-13T20:41:24.000148Z

ja ctu zdrojaky, Cursive me tam na keyboard shortcut skoci

2016-04-13T20:41:52.000149Z

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

zrzka 2016-04-13T20:42:16.000150Z

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

zrzka 2016-04-13T20:42:27.000151Z

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

2016-04-13T20:43:09.000152Z

ve vlaku spi, problem solved 😉

1😄
zrzka 2016-04-13T20:44:12.000153Z

Taky dobrá rada 😄

2016-04-13T20:46:45.000154Z

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

2016-04-13T20:47:12.000155Z

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

2016-04-13T20:48:01.000156Z

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

zrzka 2016-04-13T20:48:55.000157Z

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

2016-04-13T20:49:37.000158Z

njn, je toho hodne na zacatek

2016-04-13T20:50:37.000159Z

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 2016-04-13T20:50:37.000160Z

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

2016-04-13T20:51:00.000161Z

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

2016-04-13T20:51:09.000162Z

zvlast nREPL pokud clovek potrebuje

2016-04-13T20:51:29.000163Z

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

zrzka 2016-04-13T20:52:06.000164Z

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

zrzka 2016-04-13T20:52:32.000165Z

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

2016-04-13T20:53:00.000166Z

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

2016-04-13T20:53:09.000167Z

v PHP nevis :simple_smile:

2016-04-13T20:53:17.000168Z

nebo ted uz i s Ruby

1😉
zrzka 2016-04-13T20:53:42.000169Z

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

2016-04-13T20:54:28.000170Z

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

2016-04-13T20:54:36.000171Z

poznalo by se z toho jak lidi migruji

2016-04-13T20:54:58.000172Z

teda na open source datech jen

zrzka 2016-04-13T20:55:36.000173Z

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

2016-04-13T20:55:45.000174Z

to neni tajny

2016-04-13T20:55:49.000175Z

kdyz to udelate, budu rad

2016-04-13T20:55:56.000176Z

jeden z projektu odskrtnut :simple_smile:

zrzka 2016-04-13T20:56:20.000177Z

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

zrzka 2016-04-13T20:56:47.000178Z

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

zrzka 2016-04-13T20:57:02.000179Z

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

2016-04-13T20:57:24.000180Z

mate to nekde public? kouknul bych

2016-04-13T20:57:43.000181Z

PurposeFly jsem nevygooglil :simple_smile:

zrzka 2016-04-13T20:58:33.000182Z

Zatím děs běs web https://www.purposefly.com

zrzka 2016-04-13T20:58:55.000184Z

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

2016-04-13T20:59:15.000185Z

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

2016-04-13T20:59:18.000186Z

co me tam zavedlo

zrzka 2016-04-13T20:59:24.000187Z

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

jfojtl 2016-04-13T22:10:20.000188Z

mne to zajima :simple_smile: