Tak patrzę i trochę scary shit ; d Po co w ogóle Ci te pola poza data potrzebne? Czemuś co je persistuje?
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
o, kolejny rozsądny głos
ale @nooga pewnie robi to z tego samego powodu dlaczego pies liże się po jajkach - bo może :simple_smile:
lol proste
@jaen: mozesz podac przyklad?
W sensie, po prostu {:dont-touch-this/id :dont-touch-this/stuff :dont-touch-this/flags :jakis "inny klucz" :z-tego "data"}
Tylko oczywiście zamiast dont-touch-this
coś mądrzejszego, typu project-name.internal
czy coś.
@nooga: ^
no ale
czytales example?
ja chce miec implementacje mapy, ktora przy okazji notuje sobie, ktore klucze byly dotykane
wiec napisalem taka implementacje oparta o zwykla mape
moze tak przedstawie problem 😄
nie chodzi mi o to zeby ukryc te pola rekordu
tylko zeby zrobic zeby moj rekord wygladal jak mapa i robil automagicznie accounting
Czytałem co pisałeś, może jestem ślepy, ale to co teraz powiedziałeś to jakoś z tego nie wynikało, chyba.
komentarz na dole
No dobra, to ja po prostu nie domyśliłem się, że o to chodzi : V
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
Ale mówiłeś że Ci zależy na korzystaniu z tych wszystkich update-in
i innych wbudowanych rzeczy łatwo
no wlasnie
Więc, no chyba trzeba tak.
no a mnie tu od czci odżegnują
;d
ej, zaraz - ja też inaczej zrozumiałem 😕
ale w sumie jestem clj-noobem więc i tak wiele bym nie pomógł :simple_smile:
no mea culpa, moze zle wyjasnilem co chcialem miec bo sam do konca nie mialem tego wykrystalizowanego
zanim nie wpadlem na ten example z journalem
swoja droga nigdy nie widzialem valAt, containsKey, without
i entryAt
in the wild
widocznie corowe funkcje z tego korzystają
SIEMA SMOLAREK
CO TAM
dobsz ZINIEWICZ
ucze się clojure, co tam u CIEBIE
o cześć adam
cześć tomek
http://static.gotujmy.pl/forum/odp-witam-witam-i-o-zdrowie-pytam-110576-0.jpg
co tu sie
nie wiem, myślałem że to taka tradycja
ano w sumie, mozna z etgo zrobic tradycje
paczę na kanał a tu jakiś kotek; moja pierwsza reackja to
P ;
Ale widzę że to tylko nowi ludzie; nowi ludzie zawsze na propsie
zobaczymy jak sie beda odzywac 😄
wszyscy tylko lurkuja
jest jakieś rpc do clojure?
Coś by się znalazło, ale klienta CORBA to raczej nie uświadczysz ; d
https://github.com/hoplon/castra oraz https://github.com/sunng87/slacker mi przychodzą na myśl
ale po co
A to też jest dobre pytanie.
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?
ja tam chyba niedluge bede po prostu owijal rzeczy w channele z ew. translacja
system as a smalltalk
back to the seventies P ;
Aczkolwiek — to nadal jest jakaś forma RPC
Tylko na tyle prosto jest to zwykle zrobić, że średnio do tego potrzeba aż całego liba.
@jedi w javie nazywa się to RMI (https://docs.oracle.com/javase/tutorial/rmi/)
wiem jak to się nazywa w javie :simple_smile:, nawet napisałem swoje (też w javie 😉 ) https://github.com/adamsmo/protobuff-rpc
RMI jest trochę uciążliwe w używaniu
@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
@jedi: mysle, ze daloby sie z clojure uzywac jakiegos javowego pewnie ale wygladaloby to nieprzystojnie
No w wykonaniu Javowym to na pewno tak wygląda, ale sam termin RPC czegoś takiego chyba nie implikuje.
Przykładowo aktorzy Erlangowi to RPC też, a wygląda sensowniej ; d
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
Ale nie wykorzystywałem czegoś takie praktyce więc może są też inne minusy tego
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.
ale na poziomie f-cji
hm
tzn zeby wywolywac funkcje gdzies z daleka
np przez http
to pewnie wystarczylyby 2 makra ;d
ale żeby wołać nie po http ale np. po tcp
Po tcp to też nie jakiś kosmos byłby, musiałbyś tylko więcej trochę kodu napisać do obsługi protokołu i tyle.
I serializować dane jakoś binarnie (nippy, transit do msgpacka).
nie no
aleph
czekajcie ja wam tu zaraz napisze rpc
No tak, aleph ma klienta/serwera dla tpc, racja ; d
To w sumie rzeczywiście mogłoby sie zamknąć w kilkudziesięciu liniach xD
transit/msgpack do tego
Nom, aczkolwiek nippy chyba szybszy jest
A nie, źle pamiętałem, tu jest tylko porównanie z tym formatem serializacji od Datomica - https://github.com/ptaoussanis/nippy#performance
tak na brudno ;d
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
tylko ze nie ma tutaj ogarniania, ktory wynik jest do czego wiec trzeba wywolywac po kolei
no i thread unsafe ;f
no i da sie na pewno zrobic kuku serwerowi
ale powiedzmy ze kolejne 30 linijek i powinno byc juz top notch
i na githuba z tym
TFW lisp xD
dokladnie ;d
w sumie kurde, nie wiem
skompiluje to pozniej i dopisze to o czym pisalem
i dam na gh, a co
jeszcze ktos tego uzyje w powaznym projekcie
i wtedy bede sie smial
chociaz w sumie
@jedi: jak to dla ciebie wyglada? np. w porownaniu z pisaniem prostego liba RPC w javie czy tam scali?
jest zwięźlej?
w porównaniu z javą jest dużo lepiej, w scali nie pisałem (libów do rpc)
@karol juz pisal kiedys tutaj, ze czasem to czlowiek sie czuje jakby oszukiwal
nie wiem do końca co robi aleph, więc nie mam pełnego porównania
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 😛
aleph zapewnia ci sockety tcp
websockety i low level http
nippy serializuje/deserializuje w takim binarnym formacie
najbardziej niszczy to: (s/connect (s/map #(execute-call fns %) s) s))
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)?
no nie, nippy rzuci jak bedzie mial malformed data, jego nie obchodiz zawartosc, musialbys sobie dopisac walidacje w call-remote
i execute-call
ale my tu anwet nei rozmawiamy o api
ten snippet daje ci mozliwosc wykonywania funkcji zdalnie
imozesz zadeklarowac, ktore to maja byc
wiec twoje api wyglada tak: (rpc-server 10001 ['costam 'costam1 'costam2])
i klient jesli zrobi (declrpc costam…)
to moze uzywac sobie w kodzie np. (costam1 client 1 2 3 4 blah)
i serwer powinien to zrobic i przyslac to co wyszlo
@jedi: stoi na netty IIRC
albo przysalc exception ze swojej strony, wtedy costam1
rzuci
tak, aleph stoi na netty
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)
mm no tak
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)
może nie ma znaczenia
wiadomo, ze jakies publiczne api by tak nei wygladalo
albo mialoby dookola milion walidacji i schemy
ale raczej nie, bo tam jest eval w srodku
;d
ooo
to tutaj sie tak da
@karol nie spamuj ;d
po za tym (dotimes [i 100] …)
wiem ale chcialem cos sprawdzic i pamietalem ze doseq na 100% pozwala na side effecty
no i jest repeatedly ale nigdy nie pamietam jak sie pisze
powinienem zostac na uczelni i wszystko spolszczac
(w-kółko 0 zwiększ)
Brzmi dobrze
@nooga: bo nie dałeś importów, to s
to co, manifold?
manifold.stream
nie dalem bo tego nie kompilowalem
;d
tzn napsialem tutaj w snippecie
ale mysle, ze powinno ruszac
@annapawlicka: cześć, mialabys moze mozliwosc usuniecia tego outputu clojurebota z kanalu?
Że tak powiem, brzmi działalnie
usuniete
dzieki
@jaen: jak ci sie chce to zapakuj to w projekt i sie podziel 😄
Hehehe, może po piątku, trzeba wykuć głupie pytania na obronę : V
> (w-kółko 0 zwiększ)
mozna zrobic clojure.core.pl
To jak ten chiński Python? xD
a nie widzialem 😄
I widziałem gdzieś też Clojure w hindi chyba.
http://33.media.tumblr.com/7c697dd8d1e0fb7b099058168eaa703a/tumblr_inline_n0i4hgyrm11s6w77p.jpg
NI HAO
compat milion
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
PPT
(tak, to tłumaczenie STM)
PS uwielbiam potrzebuj
, typowo angielskie czasownikowanie rzeczowników w polskim <3
wymagaj
To już nie tak śmieszne : D
(pozwól [x 10] ...)
xD
wykonaj
wykonaj-sekw
wykonaj-wiele-razy
wykonaj-wszystkie
nie wiem czemu
niby te slowa maja bardzo bliskie znaczenie
ale jak sie to napisze po polsku
to jakos tak okropnie wyglada
zaraz czuc zapach politechnicznego korytarza i starego papieru
xD
pozwól
to już trochę trollowanie jest, ale zabawne
bo to raczej swojskie, matematycznie niech
no no
specjalnie napisałem pozwól
;d
albo
Założyłę ; d
po ślunsku
oż jerunie
ech, w gwarze nie ma takich abstrakcyjnych słów
future
- leda-kiedy
if
- jeliby
Szkoda, że nie ma gdzieś where
, kaj
by było idealne xD
constantly
- sztyjc
Przydałby się tu prawdziwy ślązok, ja tu tylko mieszkam xD
Chociaż Tobie chyba nieźle idzie xD
bo mam słownik 😄
chociaż w poznaniu też jest trochę gwary, a ja wielkopolanin to jakoś tak mi naturalnie przychodzi
dissoc
- na-gemele
Co xD
Ja to chyba najbardziej ciekaw jestem Świętej Trójcy map
/ filter
/ fold
: D
przekabać
, cedzitko
, łozginaj
xD
nil
- psinco
psinco
okt
to jest wygryw tego wątku
już lepszego nie będzie xD
😄 😄 😄
popłakałem się
@szymon_k: moze ty masz jakies pomysly ;d
dopóty
?
😄
wtenczas
azaliż
ld
;d
jakbym mial tak pisac to wyrzuciłbym komputer i został pasterzem
DO SZOPY HEJ PASTERZE