Fork me on GitHub
#clojure-poland
<
2016-02-11
>
deleted09:02:54

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.

jaen09:02:14

Dragon Book!

jaen09:02:19

A tak bardziej poważnie.

jaen09:02:56

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

jaen09:02:05

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

deleted09:02:38

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

jaen09:02:38

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

jaen09:02:51

Bardzo fajnie się w tym składa gramatyki

jaen09:02:00

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

jaen09:02:00

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

deleted09:02:06

Wielkie dzieki jaen, sprawdze to!

jaen09:02:57

Ciekawymi parserami są też parsery Pratta

jaen09:02:05

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

jaen09:02:17

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

jaen09:02:21

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

jaen09:02:31

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

jaen09:02:29

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

deleted09:02:35

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 😉).

jaen09:02:23

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

karol09:02:26

mysle ze tutaj duzo moglby @nooga pomoc

jaen09:02:37

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

jaen09:02:09

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

deleted09:02:37

Tak zrobie, zaczynam research i dlubanie w ten weekend simple_smile

nooga10:02:58

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

nooga10:02:43

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

nooga10:02:52

to chyba najszybszy sposob

jaen10:02:02

But where's the adventure in that! P ;

deleted10:02:18

dzieki nooga!

nooga10:02:36

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

nooga10:02:44

z tego co pamietam jak tam ostatnio zagladalem

jaen10:02:10

No generalnie Clojure jest handwritten mocno

jaen10:02:13

I ta indentacja P ;

nooga10:02:34

nie ma nic zlego w RDP

nooga10:02:42

sa szybkie i czytelne 😄

nooga10:02:56

dopisalem do pixie unquote-splicing dla map czytajac kod clojure

jaen10:02:39

Och, korzystaci z pixie w jakiejś formie?

nooga10:02:36

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

nooga10:02:47

wiec zrobilem pull request i teraz jestem na payrollu xD

nooga10:02:55

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

nooga10:02:01

tak samo z cljs

nooga10:02:26

trudno sie w to wgryzc

jaen10:02:38

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

jaen10:02:50

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

jaen10:02:55

Straszne doświadczenie

nooga10:02:49

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

jaen10:02:56

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

jaen10:02:04

To było totalnie nietrywialne

nooga10:02:14

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

jaen10:02:14

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

nooga10:02:27

pozniej sam kompilator tak na prawde kompiluje do jakiegos kodu posredniego

nooga10:02:34

do ktorego jest interpreter w rpythonie

nooga10:02:47

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

nooga10:02:51

jitujacy*

nooga10:02:09

poprzez konwersje rpythona na jakis traceable stuff

nooga10:02:32

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

nooga10:02:44

i pozniej niech inni szlifuja

jaen10:02:49

No ogólną zasadę RPythona ogarniam

jaen10:02:01

Ale jak kiedyś widziałem przykłady

jaen10:02:09

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

nooga10:02:32

jak sie pisze w tym to trudno spamietac gdzie jestes

jaen10:02:42

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

jaen10:02:53

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

jaen10:02:59

No bo po co poprawiać co działa

nooga10:02:59

ja mam podobne podejscie

jaen10:02:07

I zwykle zaawansowanegmu programiście to nie przeszkadza ; d

nooga10:02:17

bo jestem leniwy

nooga10:02:20

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

nooga10:02:37

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

nooga10:02:42

bo robota jest skonczona

nooga10:02:46

nie ma wiecej myslenia

jaen10:02:26

Coś w tym jest

jaen10:02:37

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

jaen10:02:55

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

jaen10:02:12

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

jaen10:02:15

Jakoś mi działa na nerwy

nooga10:02:25

good guy nolen?

jaen10:02:53

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

jaen10:02:23

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

nooga11:02:10

ja sie zawsze zastanawiam skad ci ludzie biora czas

nooga11:02:20

np taki ztellman

nooga11:02:32

ten koles produkuje milion łebskich libów

jaen11:02:38

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

jaen11:02:52

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

nooga11:02:17

ale om.next jest smiertelny

jaen11:02:51

W jakim sensie "śmiertelny"? ; d

nooga11:02:47

skutkuje naglym zgonem

nooga11:02:53

w przypadku uzycia

jaen11:02:44

Mówisz?

jaen11:02:10

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

jaen11:02:23

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

jaen11:02:40

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

jaen11:02:59

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

jaen11:02:15

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

jaen11:02:22

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

jaen11:02:29

W praktyce jest letalny w użyciu

jaen11:02:46

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

nooga11:02:20

tak, dokladnie

nooga11:02:51

ciekawe jaka bedzie odpowiedz PHP

jaen11:02:26

Na pewno zjebana : V

jaen11:02:48

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

jaen11:02:14

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

jaen11:02:05

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

jaen11:02:19

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

jaen11:02:27

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

jaen11:02:31

Nie śledzę ich za uważnie

nooga11:02:30

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

nooga11:02:39

i mu sie styki popalily

jaen11:02:10

No właśnie

jaen11:02:20

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

nooga11:02:33

no ale przeciez apache i memcached!

jaen11:02:54

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

nooga14:02:36

znacie jakis thread safe sposob na szybkie unique id?

nooga14:02:38

np cos w stylu

jaen14:02:02

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

(def counter (atom 0))

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

nooga14:02:52

myslalem, ze jakis madrzejszy jest 😄

jaen14:02:08

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

jaen14:02:38

No to ja bym chyba bardziej nie kombinował

jaen14:02:53

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

jaen14:02:59

Bo takie id i tak powinno być opaque

nooga14:02:53

zgeneralizowalem to xD

jaen14:02:12

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

jaen14:02:14

No ale generalnie

jaen14:02:17

Działa? Działa.

jaen14:02:23

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

nooga14:02:54

jeszcze z 5 linijek i bedzie z tego vector clock

jaen15:02:51

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

nooga15:02:52

jeszcze 5k loc i bedzie riak

jaen15:02:20

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

jaen15:02:28

Przynajmniej był, teraz chyba jakoś inaczej jest

nooga15:02:48

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

nooga15:02:10

ale nie skorzystalem ;f

hq116:02:31

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

hq116:02:42

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

jaen16:02:28

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

jaen16:02:30

Ale może źle pamiętam

hq116:02:33

ale produkt chyba raczej umiera

hq116:02:46

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

hq116:02:08

chociaż to w sumie nic nie znaczy

hq116:02:13

więc się nie mądruję

hq116:02:48

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

hq116:02:52

chyba nic już dobrego z tego nie będzie

jaen16:02:43

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

hq116:02:02

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

nooga16:02:57

ja dostalem licencje na datomica

nooga16:02:03

i @karol tez dostal

nooga16:02:09

musimy sie w koncu za to zabrac

karol16:02:23

wypadaloby 😛

hq116:02:24

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

hq116:02:57

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

nooga16:02:10

a, riak jest napisany w erlangu nie?

jaen16:02:45

Datomic jest dziwny

jaen16:02:47

Niby spoko

jaen16:02:02

Ale brak sortowania i limitowania zapytań mnie dziwi bardzo

nooga16:02:52

no bo one sie dzieja lokalnie

nooga16:02:04

idea jest chyba taka zebys sam sobie posortowal jak juz wypadnie

nooga16:02:18

albo lepiej, puscil przez jakis transducer

jaen16:02:16

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

jaen16:02:31

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

nooga16:02:11

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

jaen16:02:34

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

nooga16:02:45

no i dobrze

nooga16:02:49

dziala? dziala

jaen16:02:21

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

nooga16:02:54

dowod jest na koncie bankowym ;d

jaen16:02:50

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