Size: a a a

Clojure — русскоговорящее сообщество

2020 March 05

ИС

Ильшат Султанов in Clojure — русскоговорящее сообщество
Sergey Trofimov
«работает только для режима :ws.» это точно?
у меня на это завязано определение, что соединение установлено, я вроде проверял вариант с поллингом
Перепроверю для режима эмуляции через ajax и отпишусь точно. Вчера проверял не работало.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Ильшат Султанов
Всем привет. Есть кто юзает sente? Как вы хэндлите ошибки подключения клиента?

(defn start-client-chsk-router!
 [ch-recv event-msg-handler &
  [{:as opts :keys [trace-evs? error-handler]}]]
 (-start-chsk-router! (not :server) ch-recv event-msg-handler opts))


В сорцах видно, что есть возможность указать error-handler, но он вообще никак не срабатывает. Через ивент :chsk/state получается некрасиво и работает только для режима :ws.
«но он вообще никак не срабатывает»
выглядит так, что срабатывать должен при исключениях в твоём хэндлере
источник

ИС

Ильшат Султанов in Clojure — русскоговорящее сообщество
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Ильшат Султанов
Перепроверю для режима эмуляции через ajax и отпишусь точно. Вчера проверял не работало.
у меня такой хэндлер был
(defmethod handle-client-message :chsk/state
 [{:keys [?data]}]
 (log/debug "Comet receive" [:chsk/state ?data])
 ; start login when connection just established
 (when (-> ?data second :first-open?)
   (on-comet-connection)))
источник

ИС

Ильшат Султанов in Clojure — русскоговорящее сообщество
да это у меня тоже работает, но мне еще надо ловить ошибки при подключении, в этом ивенте :chsk/state можно смотреть ошибки в мапке со стейтом
источник

ИС

Ильшат Султанов in Clojure — русскоговорящее сообщество
(sente/start-chsk-router!
                  (:ch-recv @connection)
                  (event-msg-handler
                    {:message   message-handler
                     :state     handshake-handler
                     :handshake state-handler})
                  {:error-handler (fn [e event-msg] (println "error:" e))})
источник

ИС

Ильшат Султанов in Clojure — русскоговорящее сообщество
это пример из ссылки на ишьюс в гитхабе
источник

ИС

Ильшат Султанов in Clojure — русскоговорящее сообщество
хотелось бы такой вариант, чтобы с парадного входа :)
источник

T

Timmy B in Clojure — русскоговорящее сообщество
тут кто-то meander использовал?
источник

ИС

Ильшат Султанов in Clojure — русскоговорящее сообщество
Sergey Trofimov
«работает только для режима :ws.» это точно?
у меня на это завязано определение, что соединение установлено, я вроде проверял вариант с поллингом
Да ошибся, работает во всех режимах. Видать вчера что-то не сбросилось в рантайме и сегодня после перезапуска репла все работает как надо. Но вот error-handler в параметрах соединения никак не вызывается. Придется в :chsk/state разбирать
источник

T

Timmy B in Clojure — русскоговорящее сообщество
какая всё-таки кложа выразительная, компактная
и как из-за этого её будет тяжело продать
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Timmy B
какая всё-таки кложа выразительная, компактная
и как из-за этого её будет тяжело продать
Почему эти качества плохо влияют на продажу?
источник

T

Timmy B in Clojure — русскоговорящее сообщество
если коротко, то потому что люди - люди
источник

T

Timmy B in Clojure — русскоговорящее сообщество
у меня есть задача: написать набор валидаций для двух сложных структур
оригинальный код проекта на яве/котлине

вот пример одной из валидаций

(defn capacity-not-exceded? [vechicle stop]
 (let [load (:load stop)
       capacity (:capacity vechicle)]
   (any? < (map vec capacity load))))

(defn find-capacity-violation [tour fleet]
 (let [type-name (:typeId tour)
       vechicle-type (vehicle-by-type fleet type-name)
       stops (:stops tour)]
   (filter (partial capacity-not-exceded? vechicle-type) stops)))


(defn validate-maximal-capacity [problem solution]
 (let [fleet (:fleet problem)
       tours (:tours solution)]
   (filter nil? (map #(find-capacity-violation % fleet) tours))))
источник

T

Timmy B in Clojure — русскоговорящее сообщество
аналог этого кода с типами на котлине будет примерно на страницу-полторы. и в компактности кода проблема: люди прочитают его значительно быстрее, чем осмыслят.
источник

T

Timmy B in Clojure — русскоговорящее сообщество
забыл ещё кусок

(defn vehicle-by-type [fleet type-name]
 (m/find fleet
   {:types
    (m/scan {:id ~type-name :as ?vechicle})}

    ?vechicle))
источник

T

Timmy B in Clojure — русскоговорящее сообщество
meander - это вообще чёрная магия
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Timmy B
у меня есть задача: написать набор валидаций для двух сложных структур
оригинальный код проекта на яве/котлине

вот пример одной из валидаций

(defn capacity-not-exceded? [vechicle stop]
 (let [load (:load stop)
       capacity (:capacity vechicle)]
   (any? < (map vec capacity load))))

(defn find-capacity-violation [tour fleet]
 (let [type-name (:typeId tour)
       vechicle-type (vehicle-by-type fleet type-name)
       stops (:stops tour)]
   (filter (partial capacity-not-exceded? vechicle-type) stops)))


(defn validate-maximal-capacity [problem solution]
 (let [fleet (:fleet problem)
       tours (:tours solution)]
   (filter nil? (map #(find-capacity-violation % fleet) tours))))
если ещё деструктуризации добавить - будет ещё короче :)
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ничего не понятно, я бы переписал
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
вот что такое (any? < (map vec capacity load))
источник