Fork me on GitHub
#clojure-poland
<
2016-03-02
>
jaen08:03:44

Tak patrzę i trochę scary shit ; d Po co w ogóle Ci te pola poza data potrzebne? Czemuś co je persistuje?

jaen08:03:17

Bo tak w sumie, niby to działa, ale nie prościej było po prostu użyć mapy i te "sekretne" klucze zanamespace'ować żeby nie było kolizji i "nazwać to dniem"? ; d

mostr09:03:12

o, kolejny rozsądny głos

mostr09:03:35

ale @nooga pewnie robi to z tego samego powodu dlaczego pies liże się po jajkach - bo może simple_smile

jan.zy09:03:25

lol proste

nooga09:03:59

@jaen: mozesz podac przyklad?

jaen09:03:34

W sensie, po prostu {:dont-touch-this/id :dont-touch-this/stuff :dont-touch-this/flags :jakis "inny klucz" :z-tego "data"}

jaen09:03:01

Tylko oczywiście zamiast dont-touch-this coś mądrzejszego, typu project-name.internal czy coś.

nooga09:03:31

czytales example?

nooga09:03:49

ja chce miec implementacje mapy, ktora przy okazji notuje sobie, ktore klucze byly dotykane

nooga09:03:57

wiec napisalem taka implementacje oparta o zwykla mape

nooga09:03:06

moze tak przedstawie problem 😄

nooga09:03:17

nie chodzi mi o to zeby ukryc te pola rekordu

nooga09:03:40

tylko zeby zrobic zeby moj rekord wygladal jak mapa i robil automagicznie accounting

jaen09:03:45

Czytałem co pisałeś, może jestem ślepy, ale to co teraz powiedziałeś to jakoś z tego nie wynikało, chyba.

nooga09:03:05

komentarz na dole

jaen09:03:42

No dobra, to ja po prostu nie domyśliłem się, że o to chodzi : V

jaen09:03:56

Jeżeli tak przedstawiasz problem, no to chyba to ma sens, bo inna alternatywa to napisanie funkcji operujących na mapie w sposób, w jaki chcesz

jaen09:03:11

Ale mówiłeś że Ci zależy na korzystaniu z tych wszystkich update-in i innych wbudowanych rzeczy łatwo

nooga09:03:13

no wlasnie

jaen09:03:22

Więc, no chyba trzeba tak.

nooga10:03:43

no a mnie tu od czci odżegnują

mostr10:03:26

ej, zaraz - ja też inaczej zrozumiałem 😕

mostr10:03:12

ale w sumie jestem clj-noobem więc i tak wiele bym nie pomógł simple_smile

nooga10:03:25

no mea culpa, moze zle wyjasnilem co chcialem miec bo sam do konca nie mialem tego wykrystalizowanego

nooga10:03:35

zanim nie wpadlem na ten example z journalem

nooga10:03:19

swoja droga nigdy nie widzialem valAt, containsKey, without i entryAt in the wild

nooga10:03:44

widocznie corowe funkcje z tego korzystają

jan.zy11:03:20

SIEMA SMOLAREK

jedi11:03:56

dobsz ZINIEWICZ

jedi11:03:07

ucze się clojure, co tam u CIEBIE

nooga11:03:16

o cześć adam

jedi11:03:42

cześć tomek

nooga11:03:01

co tu sie

jedi11:03:35

nie wiem, myślałem że to taka tradycja

nooga11:03:56

ano w sumie, mozna z etgo zrobic tradycje

jaen13:03:01

paczę na kanał a tu jakiś kotek; moja pierwsza reackja to

jaen13:03:34

Ale widzę że to tylko nowi ludzie; nowi ludzie zawsze na propsie

nooga13:03:53

zobaczymy jak sie beda odzywac 😄

nooga13:03:01

wszyscy tylko lurkuja

jedi13:03:32

jest jakieś rpc do clojure?

jaen13:03:02

Coś by się znalazło, ale klienta CORBA to raczej nie uświadczysz ; d

nooga13:03:34

ale po co

jaen13:03:23

A to też jest dobre pytanie.

jaen13:03:04

Co prawda pisanie każdego sieciowego API się sprowadza w zasadzie do implementacji jakiegoś synchronicznego lub asynchronicznego (jak kto woli) RPC, ale czy skorzystanie z gotowego liba w takim wypadku rozwiązuje automagicznie wszystkie problemy?

nooga13:03:31

ja tam chyba niedluge bede po prostu owijal rzeczy w channele z ew. translacja

nooga13:03:13

system as a smalltalk

jaen13:03:11

back to the seventies P ;

jaen13:03:29

Aczkolwiek — to nadal jest jakaś forma RPC

jaen13:03:59

Tylko na tyle prosto jest to zwykle zrobić, że średnio do tego potrzeba aż całego liba.

jedi13:03:26

wiem jak to się nazywa w javie simple_smile, nawet napisałem swoje (też w javie 😉 ) https://github.com/adamsmo/protobuff-rpc

jedi13:03:53

RMI jest trochę uciążliwe w używaniu

nooga14:03:24

@jaen: mi sie RPC kojarzy wlasnie z czyms takim, ze partie dziela sie klasami i wywolania RPC maja niby wygladac jak normalne wywolanie dla usera

nooga14:03:07

@jedi: mysle, ze daloby sie z clojure uzywac jakiegos javowego pewnie ale wygladaloby to nieprzystojnie

jaen14:03:04

No w wykonaniu Javowym to na pewno tak wygląda, ale sam termin RPC czegoś takiego chyba nie implikuje.

jaen14:03:15

Przykładowo aktorzy Erlangowi to RPC też, a wygląda sensowniej ; d

jaen14:03:33

W każdym razie udawanie, że to jest lokalna funkcja w 100% to zły pomysł, bo nie da się ukryć tego, że sieć jest asynchroniczna mimo wszystko, ale jakieś RPC zwracające promises nie wydają mi się brzmieć aż tak tragicznie

jaen14:03:52

Ale nie wykorzystywałem czegoś takie praktyce więc może są też inne minusy tego

jaen14:03:24

No i też się zgadzam, że korzystanie z jakiegoś Javowego RPC w Clojure by było okropne; trzeba by było zacząć AOTować, sadzić :gen-class i w ogóle pełen smuteg.

nooga14:03:38

ale na poziomie f-cji

nooga14:03:49

tzn zeby wywolywac funkcje gdzies z daleka

nooga14:03:01

np przez http

nooga14:03:11

to pewnie wystarczylyby 2 makra ;d

jedi14:03:25

ale żeby wołać nie po http ale np. po tcp

jaen14:03:03

Po tcp to też nie jakiś kosmos byłby, musiałbyś tylko więcej trochę kodu napisać do obsługi protokołu i tyle.

jaen14:03:18

I serializować dane jakoś binarnie (nippy, transit do msgpacka).

nooga14:03:56

czekajcie ja wam tu zaraz napisze rpc

jaen14:03:14

No tak, aleph ma klienta/serwera dla tpc, racja ; d

jaen14:03:46

To w sumie rzeczywiście mogłoby sie zamknąć w kilkudziesięciu liniach xD

nooga14:03:14

transit/msgpack do tego

jaen14:03:42

Nom, aczkolwiek nippy chyba szybszy jest

jaen14:03:53

A nie, źle pamiętałem, tu jest tylko porównanie z tym formatem serializacji od Datomica - https://github.com/ptaoussanis/nippy#performance

nooga15:03:08

tak na brudno ;d

nooga15:03:00

serwer: (def plus +) (rpc-server 1984 ['plus]) klient: (def t (rpc-client "127.0.0.1” 1984)) (declrpc plus [a b]) (plus t 1 2) ;; => 3

nooga15:03:28

tylko ze nie ma tutaj ogarniania, ktory wynik jest do czego wiec trzeba wywolywac po kolei

nooga15:03:33

no i thread unsafe ;f

nooga15:03:52

no i da sie na pewno zrobic kuku serwerowi

nooga15:03:08

ale powiedzmy ze kolejne 30 linijek i powinno byc juz top notch

nooga15:03:16

i na githuba z tym

jaen15:03:57

TFW lisp xD

nooga15:03:15

dokladnie ;d

nooga16:03:04

w sumie kurde, nie wiem

nooga16:03:16

skompiluje to pozniej i dopisze to o czym pisalem

nooga16:03:23

i dam na gh, a co

nooga16:03:36

jeszcze ktos tego uzyje w powaznym projekcie

nooga16:03:42

i wtedy bede sie smial

nooga16:03:51

chociaz w sumie

nooga16:03:11

@jedi: jak to dla ciebie wyglada? np. w porownaniu z pisaniem prostego liba RPC w javie czy tam scali?

nooga16:03:17

jest zwięźlej?

jedi16:03:50

w porównaniu z javą jest dużo lepiej, w scali nie pisałem (libów do rpc)

nooga16:03:15

@karol juz pisal kiedys tutaj, ze czasem to czlowiek sie czuje jakby oszukiwal

jedi16:03:33

nie wiem do końca co robi aleph, więc nie mam pełnego porównania

karol16:03:35

no bo taka prawda. po kobylach javowych czlowiek czasami sie dziwnie czuje jak pisze w kilkadziesiat linijek serwer ktory robi co ma robic i robi to dobrze 😛

nooga16:03:08

aleph zapewnia ci sockety tcp

nooga16:03:18

websockety i low level http

nooga16:03:35

nippy serializuje/deserializuje w takim binarnym formacie

nooga16:03:50

najbardziej niszczy to: (s/connect (s/map #(execute-call fns %) s) s))

jedi16:03:08

czy aleph używa do komunikacji NIO (non blocking/new IO)? czy nippy rzuci wyjątkiem gdy będzie deserializował coś co będzie podobne do requesta (request z innej wersji api)?

nooga16:03:28

no nie, nippy rzuci jak bedzie mial malformed data, jego nie obchodiz zawartosc, musialbys sobie dopisac walidacje w call-remote i execute-call

nooga16:03:34

ale my tu anwet nei rozmawiamy o api

nooga16:03:44

ten snippet daje ci mozliwosc wykonywania funkcji zdalnie

nooga16:03:55

imozesz zadeklarowac, ktore to maja byc

nooga16:03:30

wiec twoje api wyglada tak: (rpc-server 10001 ['costam 'costam1 'costam2])

nooga16:03:46

i klient jesli zrobi (declrpc costam…)

nooga16:03:07

to moze uzywac sobie w kodzie np. (costam1 client 1 2 3 4 blah)

nooga16:03:23

i serwer powinien to zrobic i przyslac to co wyszlo

jaen16:03:34

@jedi: stoi na netty IIRC

nooga16:03:39

albo przysalc exception ze swojej strony, wtedy costam1 rzuci

nooga16:03:46

tak, aleph stoi na netty

jedi16:03:34

to troche jest „oszukiwanie” bo to co pisałem bezpośrednio korzystało z kanałów w nettym, dodatkowo google protocol buffers jest w stanie łyknąć request z kolejnej wersji api i zdeserializować go tak żeby stara wersja go przyjęła (przydaje się przy deployowaniu, jak cześć maszyn chodzi jeszcze ze starym api)

nooga16:03:25

mm no tak

nooga16:03:32

pytanie czy to wszytsko jest potrzebne jesli mozesz sobie po prostu wywolywac whitelistowane funkcje w zdalnym procesie i nie musisz w ogole deklarowac jakie one maja parametry (najwyzej dostaniesz wyjatkiem od serwera)

jedi16:03:55

może nie ma znaczenia

nooga16:03:35

wiadomo, ze jakies publiczne api by tak nei wygladalo

nooga16:03:49

albo mialoby dookola milion walidacji i schemy

nooga16:03:25

ale raczej nie, bo tam jest eval w srodku

nooga16:03:52

to tutaj sie tak da

nooga16:03:07

@karol nie spamuj ;d

nooga16:03:31

po za tym (dotimes [i 100] …)

karol16:03:02

wiem ale chcialem cos sprawdzic i pamietalem ze doseq na 100% pozwala na side effecty

karol16:03:19

no i jest repeatedly ale nigdy nie pamietam jak sie pisze

karol16:03:39

powinienem zostac na uczelni i wszystko spolszczac

jaen17:03:46

(w-kółko 0 zwiększ)

jaen17:03:48

Brzmi dobrze

jaen17:03:43

@nooga: bo nie dałeś importów, to s to co, manifold?

nooga17:03:05

manifold.stream

nooga17:03:10

nie dalem bo tego nie kompilowalem

nooga17:03:19

tzn napsialem tutaj w snippecie

nooga17:03:25

ale mysle, ze powinno ruszac

nooga17:03:14

@annapawlicka: cześć, mialabys moze mozliwosc usuniecia tego outputu clojurebota z kanalu?

jaen17:03:30

Że tak powiem, brzmi działalnie

nooga17:03:44

@jaen: jak ci sie chce to zapakuj to w projekt i sie podziel 😄

jaen17:03:17

Hehehe, może po piątku, trzeba wykuć głupie pytania na obronę : V

nooga17:03:32

> (w-kółko 0 zwiększ)

nooga17:03:43

mozna zrobic clojure.core.pl

jaen17:03:39

To jak ten chiński Python? xD

nooga17:03:45

a nie widzialem 😄

jaen17:03:50

I widziałem gdzieś też Clojure w hindi chyba.

nooga17:03:09

compat milion

karol18:03:14

Jak bysmy zrobili clojure.pl to powinno tez przeciagac nazwy projektow z clojars przez google translate i by sie np :potrzebuj biblioteke AppEngine - lokalna -runtime - wspólne

jaen18:03:56

(tak, to tłumaczenie STM)

jaen18:03:52

PS uwielbiam potrzebuj, typowo angielskie czasownikowanie rzeczowników w polskim <3

jaen18:03:49

To już nie tak śmieszne : D

nooga18:03:38

(pozwól [x 10] ...)

nooga18:03:23

wykonaj wykonaj-sekw wykonaj-wiele-razy wykonaj-wszystkie

nooga18:03:55

nie wiem czemu

nooga18:03:04

niby te slowa maja bardzo bliskie znaczenie

nooga18:03:08

ale jak sie to napisze po polsku

nooga18:03:15

to jakos tak okropnie wyglada

nooga18:03:31

zaraz czuc zapach politechnicznego korytarza i starego papieru

jaen18:03:46

pozwól to już trochę trollowanie jest, ale zabawne

jaen18:03:54

bo to raczej swojskie, matematycznie niech

nooga18:03:03

specjalnie napisałem pozwól

jaen18:03:14

Założyłę ; d

nooga18:03:17

po ślunsku

jaen18:03:59

oż jerunie

nooga18:03:32

ech, w gwarze nie ma takich abstrakcyjnych słów

nooga18:03:11

future - leda-kiedy

nooga18:03:23

if - jeliby

jaen18:03:18

Szkoda, że nie ma gdzieś where, kaj by było idealne xD

nooga18:03:26

constantly - sztyjc

jaen18:03:04

Przydałby się tu prawdziwy ślązok, ja tu tylko mieszkam xD

jaen18:03:09

Chociaż Tobie chyba nieźle idzie xD

nooga18:03:32

bo mam słownik 😄

nooga18:03:10

chociaż w poznaniu też jest trochę gwary, a ja wielkopolanin to jakoś tak mi naturalnie przychodzi

nooga18:03:45

dissoc - na-gemele

jaen18:03:23

Ja to chyba najbardziej ciekaw jestem Świętej Trójcy map / filter / fold : D

nooga18:03:14

przekabać, cedzitko, łozginaj

nooga18:03:01

nil - psinco

jaen18:03:32

to jest wygryw tego wątku

jaen18:03:36

już lepszego nie będzie xD

szymon_k19:03:36

😄 😄 😄

szymon_k19:03:39

popłakałem się

nooga19:03:28

@szymon_k: moze ty masz jakies pomysly ;d

nooga20:03:04

jakbym mial tak pisac to wyrzuciłbym komputer i został pasterzem

jaen21:03:48

DO SZOPY HEJ PASTERZE