clojure-poland

2016-02-11T09:10:54.000610Z

Noob + non-cjl alert: mozecie polecic jakas literature odnosnie pisania parserow? Potrzebuje napisac parser CSS (wlasciwie to postcss) ktory bedzie wypluwal AST, generalnie to moglbym uzyc gotowych bibliotek, ale zalezy mi by sie czegos nauczyc.

jaen 2016-02-11T09:11:14.000612Z

Dragon Book!

jaen 2016-02-11T09:11:19.000613Z

A tak bardziej poważnie.

jaen 2016-02-11T09:11:56.000614Z

Skoro piszesz "non-clj" to znaczy że nie bedziesz tego pisał w Clojure?

jaen 2016-02-11T09:12:05.000615Z

Bo zastanawiam się jak bardzo sugerować kombinatory parserów : D

2016-02-11T09:12:38.000616Z

Wlasnie chce napisac w clojure, generalnie to chce napisac plugin do boota ktory parsuje postcss i wypluwa css

jaen 2016-02-11T09:14:38.000617Z

Hmm, jak piszesz w funkcyjnym to serio sugeruję spróbować kombinatorów parserów

jaen 2016-02-11T09:14:51.000618Z

Bardzo fajnie się w tym składa gramatyki

jaen 2016-02-11T09:15:00.000619Z

http://www.infoq.com/presentations/Parser-Combinators to IIRC dobra prezentacja wprowadzająca do tematu

jaen 2016-02-11T09:16:00.000622Z

Ew. dobrą opcją też mogłyby być Parsing Expression Grammars

2016-02-11T09:18:06.000623Z

Wielkie dzieki jaen, sprawdze to!

jaen 2016-02-11T09:18:57.000624Z

Ciekawymi parserami są też parsery Pratta

jaen 2016-02-11T09:19:05.000625Z

Nie wiem jak łatwo by było to przenieść na grunt Clojure

jaen 2016-02-11T09:19:17.000626Z

Ale generalnie polecam dwa ostatnie blogposty stąd - http://journal.stuffwithstuff.com/category/parsing/

jaen 2016-02-11T09:19:21.000627Z

Koleś zarąbiście pisze i tłumaczy

jaen 2016-02-11T09:19:31.000628Z

(w ogóle cały jego blog polecam)

jaen 2016-02-11T09:21:29.000629Z

Jeszcze ostatni link zanim skończę spam - http://www.cs.uu.nl/research/techreps/repo/CS-2008/2008-044.pdf - tłumaczy kombinatory parserów krok po kroku, ale wykorzystuje Haskella, więc YMMV czy to będzie zrozumiałe

2016-02-11T09:23:35.000631Z

Super, dziekuje, dodane to listy :simple_smile:. Pewnie caly ten projekcik latwy dla mnie nie bedzie, gdyz jest to totalnie dla mnie nowa rzecz (+ computer science zaczalem sie interesowac calkiem niedawno 😉).

jaen 2016-02-11T09:24:23.000632Z

Albo kłamałem że ostatni - tu też jest całkiem legitny przykład implementacji kombinatorów od zera (też Haskell) http://dev.stephendiehl.com/fun/002_parsers.html

2016-02-11T09:24:26.000633Z

mysle ze tutaj duzo moglby @nooga pomoc

jaen 2016-02-11T09:24:37.000634Z

W każdym razie - powodzenia, parsing to ciekawa sprawa bardzo : D

👍 1
jaen 2016-02-11T09:53:09.000636Z

PS jak napiszesz i zołpensorsujesz to się pochwal ; d

2016-02-11T09:58:37.000637Z

Tak zrobie, zaczynam research i dlubanie w ten weekend :simple_smile:

2016-02-11T10:12:58.000639Z

jak Ci nie zalezy na zglebianiu ciekawych algorytmow to uzyj po prostu https://github.com/Engelberg/instaparse

2016-02-11T10:15:42.000641Z

@deleted:

2016-02-11T10:20:43.000642Z

CSS ma chyba dosc duza gramatyke i pewnie juz gdzies jest jakis BNF, ktory moznaby sobie zaadaptowac

2016-02-11T10:20:52.000643Z

to chyba najszybszy sposob

jaen 2016-02-11T10:24:02.000644Z

But where's the adventure in that! P ;

🎯 1
2016-02-11T10:27:18.000645Z

dzieki nooga!

2016-02-11T10:28:36.000646Z

smiesznie, ze reader clojure to jest w ogole chyba RDP 😄

2016-02-11T10:28:44.000647Z

z tego co pamietam jak tam ostatnio zagladalem

jaen 2016-02-11T10:29:10.000648Z

No generalnie Clojure jest handwritten mocno

jaen 2016-02-11T10:29:13.000649Z

I ta indentacja P ;

2016-02-11T10:29:34.000650Z

nie ma nic zlego w RDP

2016-02-11T10:29:42.000651Z

sa szybkie i czytelne 😄

2016-02-11T10:30:56.000652Z

dopisalem do pixie unquote-splicing dla map czytajac kod clojure

jaen 2016-02-11T10:35:39.000653Z

Och, korzystaci z pixie w jakiejś formie?

2016-02-11T10:43:36.000654Z

nie, ale podoba mi sie i zawsze chcialem pogrzebac w jakims jezyku

2016-02-11T10:43:47.000655Z

wiec zrobilem pull request i teraz jestem na payrollu xD

2016-02-11T10:44:55.000657Z

ale ogolnie to byl slaby patch, nie rozumiem do konca jak to wsyztsko dziala

2016-02-11T10:45:01.000658Z

tak samo z cljs

2016-02-11T10:47:26.000659Z

trudno sie w to wgryzc

jaen 2016-02-11T10:48:38.000660Z

> kompilator cljs
> zrozumiały
Serio, pick one.

jaen 2016-02-11T10:48:50.000661Z

Bawiłem się tym próbując dodać bardziej rozbudowany preprocessing modułów

jaen 2016-02-11T10:48:55.000662Z

Straszne doświadczenie

2016-02-11T10:49:49.000663Z

w pixie masz jeszcze pypy pod maska i tam jest juz w ogole totalny mindfsck

jaen 2016-02-11T10:49:56.000664Z

Kod już trochę zbitrotował, ale żeby to działało sensownie musiałem rozbić kawałki kompilatora na namespace'y - https://github.com/jaen/clojurescript/commit/46d7fc2e068e139c5ba15dcdbdfe961d21ca6cd7

jaen 2016-02-11T10:50:04.000665Z

To było totalnie nietrywialne

2016-02-11T10:50:14.000666Z

bo czesc runtimu jest w pythonie, czesc jest w rpythonie, czesc jest w pixie

jaen 2016-02-11T10:50:14.000667Z

Nie mam pojęcia dlaczego Hickey i Nolen piszą taki monolityczny kod : V

2016-02-11T10:50:27.000668Z

pozniej sam kompilator tak na prawde kompiluje do jakiegos kodu posredniego

2016-02-11T10:50:34.000669Z

do ktorego jest interpreter w rpythonie

2016-02-11T10:50:47.000670Z

i pozniej to wchodzi w pypy, ktory robi z tego jutujacy kompilator

2016-02-11T10:50:51.000671Z

jitujacy*

2016-02-11T10:51:09.000672Z

poprzez konwersje rpythona na jakis traceable stuff

2016-02-11T10:52:32.000673Z

nie wiem, mi sie wydaje, ze hickey ma podejscie troche w stylu “zrobie zeby dzialalo”

2016-02-11T10:52:44.000674Z

i pozniej niech inni szlifuja

jaen 2016-02-11T10:52:49.000675Z

No ogólną zasadę RPythona ogarniam

jaen 2016-02-11T10:53:01.000676Z

Ale jak kiedyś widziałem przykłady

jaen 2016-02-11T10:53:09.000677Z

To wydawało się dość skomplikowane w praktyce

2016-02-11T10:53:32.000678Z

jak sie pisze w tym to trudno spamietac gdzie jestes

jaen 2016-02-11T10:53:42.000679Z

Nom, trochę ma takie Hickey chyba; tylko problem jest taki że nikt tego nie szlifuje momentami

jaen 2016-02-11T10:53:53.000680Z

I potem masz takie kwiatki jak absolutnie okropne UX błędów ; d

jaen 2016-02-11T10:53:59.000681Z

No bo po co poprawiać co działa

2016-02-11T10:53:59.000682Z

ja mam podobne podejscie

jaen 2016-02-11T10:54:07.000683Z

I zwykle zaawansowanegmu programiście to nie przeszkadza ; d

2016-02-11T10:54:17.000684Z

bo jestem leniwy

2016-02-11T10:55:20.000685Z

zwykle jak uknuje jakis solidny koncept to doprowadzam go do jako takiego dzialania

2016-02-11T10:55:37.000686Z

a jakies nudziarstwo typu obsluge bledow i bugi to juz moglby ktos inny za mnei zrobic

2016-02-11T10:55:42.000687Z

bo robota jest skonczona

2016-02-11T10:55:46.000688Z

nie ma wiecej myslenia

2016-02-11T10:56:05.000689Z

😐

jaen 2016-02-11T10:56:26.000690Z

Coś w tym jest

jaen 2016-02-11T10:56:37.000691Z

Ale z drugiej strony porównaj sobie ClojureScript i Elma w tej kwestii : V

jaen 2016-02-11T10:56:55.000692Z

A Nolen też ma dość… charakterystyczne podejście do rzeczy

jaen 2016-02-11T10:57:12.000693Z

Głównie dlatego nie dociągnąłem tego motywu z modułami, bo mi się nie chciało z nim użerać

jaen 2016-02-11T10:57:15.000694Z

Jakoś mi działa na nerwy

2016-02-11T10:57:19.000695Z

nolen?

jaen 2016-02-11T10:57:23.000696Z

mhm

2016-02-11T10:57:25.000697Z

good guy nolen?

jaen 2016-02-11T10:57:53.000698Z

No to może ze mną jest coś nie tak ; d

jaen 2016-02-11T10:58:23.000699Z

Ale jest dla mnie drażniąco szorstki jakoś tak. YMMV oczywiście.

2016-02-11T11:00:10.000700Z

ja sie zawsze zastanawiam skad ci ludzie biora czas

2016-02-11T11:00:20.000701Z

np taki ztellman

2016-02-11T11:00:32.000702Z

ten koles produkuje milion łebskich libów

jaen 2016-02-11T11:03:38.000703Z

No, ztellman musi być niezłym mózgiem

jaen 2016-02-11T11:03:52.000704Z

Z resztą Nolen też jest, po prostu charakterem mi trochę nie odpowiada ; d

2016-02-11T11:30:17.000705Z

ale om.next jest smiertelny

jaen 2016-02-11T11:30:51.000706Z

W jakim sensie "śmiertelny"? ; d

2016-02-11T11:32:47.000707Z

skutkuje naglym zgonem

2016-02-11T11:32:53.000708Z

w przypadku uzycia

jaen 2016-02-11T11:34:44.000709Z

Mówisz?

jaen 2016-02-11T11:35:10.000710Z

Om.prev w porównaniu z regentem uważam za przekombinowany

jaen 2016-02-11T11:35:23.000711Z

Ale akura IMO om.next koncepcyjnie jest bardzo dobrze przemyślany

jaen 2016-02-11T11:35:40.000712Z

Relay, Falcor i te sprawy to IMO właściwy kierunek rozwoju SPA

jaen 2016-02-11T11:35:59.000713Z

Ba, piszę inżynierkę o tym właśnie i generalnie zgadzam się z tym kierunkiem rozwoju.

jaen 2016-02-11T11:36:15.000714Z

Ale pisząc swoje rozwiązanie nie miałem czasu bawić się om.next

jaen 2016-02-11T11:36:22.000715Z

Jest całkiem możliwe że choć koncepcyjnie jest IMO dobry

jaen 2016-02-11T11:36:29.000716Z

W praktyce jest letalny w użyciu

jaen 2016-02-11T11:39:46.000717Z

Om.next jak om.next, ale generalnie - http://tonsky.me/blog/the-web-after-tomorrow/

2016-02-11T11:40:20.000720Z

tak, dokladnie

2016-02-11T11:42:51.000721Z

ciekawe jaka bedzie odpowiedz PHP

jaen 2016-02-11T11:43:26.000722Z

Na pewno zjebana : V

jaen 2016-02-11T11:43:48.000723Z

Pehap powstał do tworzenia MPA a nie SPA i im bardziej próbuje się go wcisnąć w tą rolę, tym bardziej to się mija z celem

jaen 2016-02-11T11:44:14.000724Z

Już ot choćby sama koncepcja CGI jest w takim wypadku złym pomysłem

jaen 2016-02-11T11:45:05.000725Z

Serwer obsługujący taką bardziej skomplikowaną aplikację powinien być w stanie być long lived ot choćby po to żeby móc powiadamiać klienta przez websockety o zmianach

jaen 2016-02-11T11:45:19.000726Z

To raczej trudno zrobić jak jesteś krótkożyjącym procesem odpowiadającym na jedno zapytanie

jaen 2016-02-11T11:45:27.000727Z

Choć nie wiem, może pehapowcy mają swojego node'a?

jaen 2016-02-11T11:45:31.000728Z

Nie śledzę ich za uważnie

2016-02-11T11:46:48.000729Z

nie wiem

2016-02-11T11:47:30.000730Z

ale kiedys probowalem jednemu wytlumaczyc, ze apliakcja powinna jakby posiadac swoj serwer http w sobie

2016-02-11T11:47:39.000731Z

i mu sie styki popalily

jaen 2016-02-11T11:48:10.000732Z

No właśnie

jaen 2016-02-11T11:48:20.000733Z

A w kierunku w którym zmierza internet, to raczej się od tego nie ucieknie : V

2016-02-11T11:50:33.000734Z

no ale przeciez apache i memcached!

jaen 2016-02-11T11:57:54.000735Z

No ale to już jest ich wina jak nie umieją zrozumieć, że w przypadku SPA które musi działać offline i synchronizować się pomiędzy różnymi urządzeniami to REST i CGI to jedne z gorszych pomysłów : V

2016-02-11T14:13:12.000736Z

hm hm

2016-02-11T14:13:36.000737Z

znacie jakis thread safe sposob na szybkie unique id?

2016-02-11T14:16:38.000738Z

np cos w stylu

jaen 2016-02-11T14:18:02.000739Z

Ale w sensie mądrzejszy niż to poniżej?

(def counter (atom 0))

(defn get-id! []
  (swap! counter inc))

2016-02-11T14:18:52.000740Z

myslalem, ze jakis madrzejszy jest 😄

jaen 2016-02-11T14:20:08.000741Z

No ale to działa; zmiany atomu są serializowane, bo to pod spodem jest to - https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html

2016-02-11T14:20:15.000742Z

no

2016-02-11T14:20:18.000743Z

wiem

jaen 2016-02-11T14:20:38.000744Z

No to ja bym chyba bardziej nie kombinował

jaen 2016-02-11T14:20:53.000745Z

A w razie czego jak na cos wpadniesz później to możesz po prostu podmienić implementację funkcji

jaen 2016-02-11T14:20:59.000746Z

Bo takie id i tak powinno być opaque

2016-02-11T14:22:53.000748Z

zgeneralizowalem to xD

jaen 2016-02-11T14:25:12.000749Z

To już totalnie mogłeś sparametryzować to żeby można było podać next-id-fn czy coś ; d

jaen 2016-02-11T14:25:14.000750Z

No ale generalnie

jaen 2016-02-11T14:25:17.000751Z

Działa? Działa.

jaen 2016-02-11T14:25:23.000752Z

Nie trzeba było pisać dziesiątek linii muteksów xD

2016-02-11T14:45:44.000753Z

w sumie

2016-02-11T14:45:54.000754Z

jeszcze z 5 linijek i bedzie z tego vector clock

jaen 2016-02-11T15:01:51.000755Z

Vector clock? No to widzę już idziemy w jakieś poważne zastosowania : D

2016-02-11T15:23:52.000756Z

jeszcze 5k loc i bedzie riak

jaen 2016-02-11T15:26:20.000757Z

Riak brzmi ciekawie generalnie, ale jako że płatny to nigdy bliżej mu się nie przyglądałem

jaen 2016-02-11T15:26:28.000758Z

Przynajmniej był, teraz chyba jakoś inaczej jest

2016-02-11T15:58:48.000759Z

kiedys spotkalem z ludzi z basho i mi powiedzieli zebym przyszedl sie zatrudnic 😄

2016-02-11T15:59:10.000760Z

ale nie skorzystalem ;f

hq1 2016-02-11T16:11:31.000761Z

enterprise support jest płatny, z replikacją multi-dc

hq1 2016-02-11T16:11:42.000762Z

cluster można stawiać śmiało za darmo

jaen 2016-02-11T16:12:28.000763Z

Teraz tak, ale wydaje mi się że kiedyś tak nie było, był całkiem płatny

jaen 2016-02-11T16:12:30.000764Z

Ale może źle pamiętam

hq1 2016-02-11T16:12:33.000765Z

ale produkt chyba raczej umiera

hq1 2016-02-11T16:12:46.000766Z

chyba źle, od początku był na githubie

hq1 2016-02-11T16:13:08.000767Z

chociaż to w sumie nic nie znaczy

hq1 2016-02-11T16:13:13.000768Z

więc się nie mądruję

hq1 2016-02-11T16:13:48.000769Z

basho zostało dosyć mocno przeczesane odkąd pojawił się ten aktualny ceo

hq1 2016-02-11T16:13:52.000770Z

chyba nic już dobrego z tego nie będzie

jaen 2016-02-11T16:14:43.000771Z

Szkoda, bo z tego kojarzę o riaku wydawał się dosć ciekawą bazą

hq1 2016-02-11T16:15:02.000772Z

bardzo, i naprawdę nieźle działającą

2016-02-11T16:15:57.000773Z

ja dostalem licencje na datomica

2016-02-11T16:16:03.000774Z

i @karol tez dostal

2016-02-11T16:16:09.000775Z

musimy sie w koncu za to zabrac

2016-02-11T16:16:23.000776Z

wypadaloby 😛

hq1 2016-02-11T16:16:24.000777Z

teraz sprzedają jakiegoś kota w worku, próbują zrobić enterprise-bundle, który robi wszystko i nic do spółki ze sparkiem, redisem i SOLR-em, poza tym bzdury o data gravity i nie wiadomo co

hq1 2016-02-11T16:16:57.000778Z

na samego riaka ciężko było realny use case znaleźć, teraz to już w ogóle 😉

2016-02-11T16:17:10.000779Z

a, riak jest napisany w erlangu nie?

hq1 2016-02-11T16:17:14.000780Z

tak

jaen 2016-02-11T16:17:45.000781Z

Datomic jest dziwny

jaen 2016-02-11T16:17:47.000782Z

Niby spoko

jaen 2016-02-11T16:18:02.000783Z

Ale brak sortowania i limitowania zapytań mnie dziwi bardzo

2016-02-11T16:18:52.000784Z

no bo one sie dzieja lokalnie

2016-02-11T16:19:04.000785Z

idea jest chyba taka zebys sam sobie posortowal jak juz wypadnie

2016-02-11T16:19:18.000786Z

albo lepiej, puscil przez jakis transducer

jaen 2016-02-11T16:20:16.000787Z

Znaczy tak, zdaje sobie z tego sprawę, że to się dzieje lokalnie, ale to nadal jest weird, że jak masz zapytanie które spełniają tysiące obiektów, a potrzebujesz tylko 10

jaen 2016-02-11T16:20:31.000788Z

To nadal ściągasz cały tysiąc bo te zapytania nie są leniwe

2016-02-11T16:21:11.000789Z

rich by powiedzial, ze pamiec jest tania i ogolnie twoj peer powinien stac zaraz obok bazy wiec nie ma problemu ;d

jaen 2016-02-11T16:23:34.000790Z

Mam wrażenie że w Clojure "ale to przecież nie jest problem" jest dość częstą odpowiedzią : D

2016-02-11T16:23:45.000791Z

no i dobrze

2016-02-11T16:23:49.000792Z

dziala? dziala

2016-02-11T16:23:55.000793Z

😄

jaen 2016-02-11T16:24:21.000794Z

Ale gdzie mój dowód na 40 stron A4!

2016-02-11T16:24:54.000795Z

dowod jest na koncie bankowym ;d

jaen 2016-02-11T16:29:50.000796Z

Chyba jestem za mało pragmatyczny w takich kwestiach : D