Fork me on GitHub
#clojure-russia
<
2017-09-03
>
fmnoise09:09:28

@razum2um @kuzmin_m вот кстати эпичный пример на руби http://trailblazer.to/gems/operation/2.0/index.html сверху похоже на either, но под капотом жесть какая-то https://github.com/trailblazer/trailblazer-operation/blob/master/lib/trailblazer/operation/railway.rb

fmnoise09:09:50

в угоду няшности конечно

razum2um12:09:07

@fmnoise собрались как-то рубисты думать, как писать на кложе 😉

razum2um12:09:06

немного еще наброшу, с твоего позволения, все-таки зачем загонять себя в рамки монады? имхо из минусов - все эти слова bind/left/value/fmap не имеют отношения к бизнес логике, которую мы тут пытаемся как можно чище передать (т.е. вместо прямого кода и данных без абстрактной обертки). т.е. я бы понял если бы абстракция была бы внутренняя, свойственная предметной области, на худой конец Operation какой-нить. а с классическим either мы пытаемся удовлетворить понимание процесса абстрактным математиком, что думаешь?

fmnoise13:09:23

да не проблема же обозвать either-right - Operation::Success, a left Operation::Failure fmap -> if_success bind -> with_success и тд

fmnoise13:09:56

однако при этом монада продолжит быть монадой, а бизнес-логика бизнес-логикой

razum2um14:09:06

@fmnoise как только к операции будет предъявлено новое требование, например, быть в состоянии AlmostSuccess (стать шагом визарда, whatever) - классический either приведет к костылю. В общем я хотел сказать, naming matters

fmnoise14:09:29

та никакого костыля, просто в этой точке будет новое ветвление either

razum2um14:09:58

но я же правильно понимаю, что ветвление будет вложенным - либо справа, либо слева, так? в общем если обобщить претензию, то может понадобиться 3 или больше действительно равноценные ветви - и тогда это перестает быть простым either

fmnoise14:09:26

нет, это будет простым either просто будет метод с цепочкой fmap/bind

fmnoise14:09:19

either ведь просто получилось[что-то]/ или не получилось [потому-что]

fmnoise14:09:51

это состояние выполнения операции

fmnoise14:09:12

а AlmostSuccess это скорее состояние операции верхнего уровня/системы

kuzmin_m15:09:27

есть какие-то примеры?

potapenko16:09:04

Понял в чем reagent плох. Нет в нем direct manipulation и звать setNativeProps ну как-то через одно место. Пришлось писать компонент на JS. А что делать - обновляю компонент с 60fps - каждые 15 ms (запись звука и metering - показываю анимацию - полосочку/громкость). При обновлении через стейт все тупит и падает fps до двух! Кто сталкивался и как решать? При direct manipulation идем на 60 fps.

potapenko16:09:22

Вопрос в - как делать direct manipulation (setNativeProps) на reagent?

a.espolov18:09:42

@potapenko в om'e такой проблемы нет?

potapenko18:09:10

@a.espolov да думаю вряд ли. в целом проблема dsl над dls. Прекрасно думать моделью, и data driven, но иногда авторам фреймворков нужно подумать о задачах “в лоб” и оставить разрабам возможность делать вещи вне их религии. rum возможно может ибо там нет прослойки как я понял. Но reagent люблю все же сильно, и готов пару сотен строк на JS и менять не собираюсь. Но вопрос/притензия есть.

asolovyov18:09:02

так иногда в любом случае неплохо дропнуться на уровень глубже и написать что-то для скорости

asolovyov18:09:16

тут еще и возможность такая есть без проблем, по-моему всё клёво

potapenko18:09:30

@asolovyov да, согласен. Важно просто держать под рукой такую возможность - опуститься на уровень ниже.

dottedmag19:09:07

Дожили до того времени, когда опускаться на уровень ниже - это не до ассемблера, а до джаваскрипта 🙂