This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-11-13
Channels
- # admin-announcements (6)
- # beginners (19)
- # boot (1)
- # cbus (2)
- # cider (3)
- # clara (24)
- # cljs-dev (4)
- # cljsrn (18)
- # clojure (168)
- # clojure-boston (1)
- # clojure-dev (55)
- # clojure-russia (199)
- # clojure-sg (2)
- # clojurescript (38)
- # clojurex (1)
- # core-async (15)
- # css (16)
- # cursive (62)
- # datomic (23)
- # editors-rus (17)
- # events (3)
- # funcool (1)
- # hoplon (360)
- # ldnclj (37)
- # lein-figwheel (11)
- # leiningen (1)
- # nginx (1)
- # off-topic (13)
- # om (361)
- # onyx (1)
- # re-frame (56)
- # reagent (24)
- # robots (1)
- # spacemacs (46)
- # yada (9)
public final class Var ... implements IFn
+ https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Var.java#L375допустим Identity состоит из множества value я получаю state, и еще кто-то получает state
мы оба изменили(значить ли это создали новые value внутри Identity или где-то в другом месте?)
1. в кложуре ты тупо не можешь Persion изменить 2. если тебе нужно его изменить, оборачивай его в atom-agent-etc
@dos: если я правильно понял первый вопрос, про мерж то так: либо мерж не нужен, потому что структура иммутабельна - кто когда какую получил тот с ней и живет, либо решается подходом compare-and-swap для изменяемого состояния, т.е. мержа как такового тоже нет
получить где? ты вызываешь функцию и передаешь ей агрумент. либо он иммутабельный, либо его можно deref, т.е. опять же вытащить состояние на текущий момент времени
@dos: важная мелочь - это “вытащенное” состояние в простом случае иммутабельно, т.е. манипулируя им ты никак не можешь изменить исходную “коробку”, только compare-and-swap с твоим новым состоянием (ака функцией для его получения)
@dos swap! для атома работает примерно так: ты передаешь функцию, которая применится к “текущему” состоянию. Если в один поток работать, то все ок
ты, как программист, в 95% случаев не думаешь об этом, а просто пишешь pure функцию для обновления состояния
@razum2um блин, я не такой умный, что бы понять что данном файле написано ) можно попроще объяснить - что происходит при (defn func [x] (+ x 10)) - тут символу func сопоставляется что? ссылка на функцию? (def y func) - тут символу "y" сопоставляется что? ссылка на функцию , ту же что и сопоставлена символу "func" ? (def z #'func) - тут символу "z" сопоставляется что? ссылка на переменную ? какую ?
кхм, а у кложи есть области видимости перменных?
глупые вопросы это мой конек
мне нужен туториал clojure for lazy and stupid, вместо for brave and true
причём область видимости ограниченая скобочками в которых она появляется - если речь не идёт о def-like
а я вот могу выдрать (:keyword mymap) а (:keyword1 :keyword2 mymap) без макроса не будет работать?
пичяль
спасибо
а передать в функцию 5-6 аргументов это нормально?
@lowl4tency use hash-map как аргумент
кстати, есть какой-нибудь сервис типа чтобы постить туда куски кода с целью обсуждения "как лучше делать"?
(defn myfn
[mymap]
(do (:a mymap))
)
так норм?
oxgrouby: это я типа запсевдокодил
(do это dosmsth)
(азбыл что в кложе это оператор)
oxgrouby: на счет ревью кода, тут в слаке есть канал для этого
lowl4tency: судя по прошлым твоим сниппетам можно подумать что ты не в курсе бы можно делать вот так (defn qwe [] (println 1) (println 2))
oxgrouby: пости на гист )
1 и 2 первый и второй аргумент соотвтетсвенно?
@thickprogrammer: func, y это да, clojure.lang.AFn объект (т.е. реально ф-я), а z - clojure.lang.Var который имплементит IFn (т.е. что-то вызываемое) и в данном случае это что-то внутри - AFn
hash-map передавать как-то симпатичнее
@razum2um я не совсем понимаю. "func", "y", "z" -это символы, которым сопоставлены ссылки - так ?
func [x] (+ x 10)) - тут символу func сопоставляется что? ссылка на функцию? (def y func) - тут символу "y" сопоставляется что? ссылка на функцию , ту же что и сопоставлена символу "func" ? (def z #'func) - тут символу "z" сопоставляется что? ссылка на переменную ? какую ?
прочитай мой ответ, с func, y это ссылка на объект clojure.lang.AFn, z ссылка на объект clojure.lang.Var, который внутри содержит ссылку на функцию. какую именно? определяется в рантайме посредством deref https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Var.java#L362
user=> (defn func [x] (+ x 10))
#'user/func
user=> (def z #'func)
#'user/z
user=> (.fn z)
#object[user$func 0x49dd421a "[email protected]”]
user=> (= (.fn z) func)
true
мне написали, что данное утверждение - "после переопределения func , например, (defn func [x] (+ x 15)) y продолжает ссылаться на старую функцию func , а z всегда при вызове будет резолвить текущее значение символа " по смыслу не корректное. я пытаюсь понять в чем некорректность.
хм, вроде в кавычках все верно. y это постоянная ссылка, а z это Var который резолвится в рантайме. поэтому как раз всякие вебсервера лучше кормить var-ом с т.з. авторелоада
спасибо, теперь понятно )
Я в цикле делаю http запросы через http-kit. Он возвращает промис, если я не хочу блочить основной цикл, нормально что я его буду "резолвить" (не знаю термина) (go (some-fn (http/get url)))
еще вопрос (def atomfn (atom (fn [x] (+ 1 x)))) - записываем в атом функцию (@atomfn 3) - работает (swap! atomfn (fn [x] (+ 2 x))) - ошибка. как переопределить атом?
третий агрумент swap - ф-я, кот. принимает аргументом состояние (функцию в твоем случае и ты пытаешься Int + Fn)
reset помог, спасибо
почему функция в атоме - хм ? )
это не хуже чем в var по смыслу
ну да - в рантайме код менять. почему атом - это обычно контейнер для данных? чем плохо его использовать для функций?
ну если у тебя нужен такой супердинамизм.. а вообще чем больше стейт локализован и чем более он декларативен тем легче читать и понимать
так code as data же - не ?
ну вот я к тому и подводил, что code is data по факту только внутри макроса (ну и ессно в стадии парсинга, в reader)
а вообще тема то хорошая - реквестую гайды как сделать правильный, годный лайв-код-релоад!
юзай компоненты, определяй как у тебя все-все start/stop и пиши чистые функции с четко локализованным стейтом
можно придумать воркфлоу как писать быстрозапускемые системные скрипты с каким-нибудь userd, лол
на скале же есть
ну как минимум есть способ как их писать
потому что есть перл/руби/баш (простигосподи), а кложекод будет только запускаться больше секунды
ну вообще сейчас golang вытесняет все сильнее руби перл
господа, ваши предположения, я на лямбде дергаю апи, локально у меня все работает, а в амазоне не работает
но выглядит очень интересно, нет ыксепшонов и все логи говорят что отработало как нужно
https://github.com/owainlewis/twilio апи дергаю через это
там внутри http-kit
post запрос
ваши версии?)
ты хотя бы подскажи какую лопату взять
запускаю на ноуте в репле функцию, получаю смс, запускаю в лямбде пишет что смс отправлена, но ничего не получаю, в логах твилио даже упоминания нет
саппорт говорит, что у них все ок, и даже дали node.js код
кто они?
доступ разрешен, я с саппортом и твилио и амазона уже второй день разговариваю
вот дали такой код
типа рабочий
я хочу выкинуть либу и взять чистый http-kit
и да попробовать другое апи
просто думал может кто что посдкажет пока я не начал обмазываться
все сделал, все написал, протестил, все работает, а смс не приходят )
зато кложу подучил
ну да
пока все по винтику не разберешь )
причем в инторнете много хайпа что у людей и на нодежс не работает
ну не твилио а другие апишечки из лямбды
и я не могу не юзать лямбду, у меня весь смысл пропадет тогда
в смысле конечный результат
имеет смысл если он запущен на лямбде
А интересно, почему так часто используют http-kit, вместо какой-нибудь обвязки поверх netty (ну там aleph, например)?
присоединяюсь к вопросу - в ближайшее время хочу писать высоко нагруженный сервис и выбор пал на netty (aleph точнее) ибо не блокирующий и должно все скейлится на ура
во, вот тут обсуждали http://clojurians-log.mantike.pro/clojure-russia/2015-10-15.html
о спасибо
я просто вот на это ориентировался https://github.com/ptaoussanis/clojure-web-server-benchmarks/tree/master/results/60k-non-keepalive#60k-non-keepalive
aleph как я понимаю это враппер над netti. А netti сам по себе вроде один из самых быстрых нынче
А вот тут парень из Atlassian говорит, что они смотрели разные варианты и остановились на aleph: http://www.youtube.com/watch?v=3QR8meTrh5g
@artemyarulin: Да-да, у меня такие же “ощущения"
о, спасибо позырю видео
О да сегодня же пятница 13е
о, хорошо что сегодня не деплоил в прод :))
artemyarulin: а как же континиус деливери?
в идеальном мире конечно, в реальности все предусмотреть и покрыть тестами нельзя
у нас есть конечно, но всяко бывает - выходные совсем не охота на работе проводить
вот кста сегодня на хабре в тему про страхи разработчиков: http://habrahabr.ru/company/mailru/blog/270785/
Страх разработчика — рекурсия, которая приводит к self-DDoS. А ещё когда катишь релиз и видишь на графике полку. Откатываешь, а полка осталась. O_o
Начал выковыривать повторяющийся код для работы с pg, надоело копировать из проекта в проект. https://github.com/niquola/clj-pg - кому интересно - присоединяйтесь. @yogthos, @prepor need your review and ideas
(propertize :data-base-upse) а зачем это?
а, ну там и отладка осталась
понятно тогда
Огонь
ребята, а кто-нибудь пользуется pedestal вместе c component?
подскажите, как стопнуть catacumbа ))) запускал так - (ct/run-server my-hello-world-handler)
вообще под long polling или sse что лучше выбрать ? http-kit вроде не очень тут хвалили