Fork me on GitHub
#clojure-russia
<
2016-03-07
>
artemyarulin08:03:32

Дорогой чатик, подскажи, вдохнови на как убрать :quality красиво отовсюду из такой структуры?

[{:id 1 :quality 1 :fallback {:id 3 :quality 3}}
 {:id 2 :quality 2 :fallback {:id 4 :quality 4}}
 {:id 3 :quality 2}]
что-то у меня выходит не очень красивые решения все

artemyarulin08:03:30

вспомнил золотое правило - когда рекурсивно надо обработать структуру clojure.walk is an answer:

(walk/postwalk #(if (:quality %)
                  (dissoc % :quality)
                  %) m)

rmuslimov08:03:39

good to know, спасибо что запостил

artemyarulin08:03:45

ага, крутая штука и часть стандартной либы. Пересекается идеями с зипперами

andre08:03:21

интересный канальчик

andre08:03:27

случайно наткнулся

rmuslimov09:03:10

я по диагонали посмотрел, а верно что midje autotest это о том же?

rmuslimov09:03:57

то есть у нас независимый repl который делает (refresh) когда положено, и смотрит какие тесты сломаны

andre09:03:17

test-refresh is a Leiningen plug-in that automatically refreshes and then runs your clojure.test tests when a file in your project changes

rmuslimov09:03:39

короткий ответ - да

andre09:03:40

я с Midje не знаком просто

rmuslimov09:03:22

вообще, парни, я тут стал фанатеть от midje с такой крутяцкой штукой не приходилось в жизни сталкиваться

rmuslimov09:03:31

чудесно же

artemyarulin09:03:35

@rmuslimov: Эм, не оч понимаю чем оно отличается от clojure.test. Какую проблему решает? Ну акромя этих auto-test-on-change

rmuslimov09:03:56

я могу ошибаться, и плохо знать clojure.test (да и тот же midje), но я так понимаю что в midje - удобнее мокать функции (потому мокать можно в зависимости от параметра), - можно самому собирать эти проверки checkables, или использовать тот огород что уже есть типа =>, =contains=?, anything - удобный и гибкий setup, teardown - читать репорт и видеть чем отличаются структуры тоже удобнее (хотя тут я наверное не разобрался до конца с clojure.test) - метаконстанты - фолдинг круто работает в emacs - я пока не понял как проверять с clojure.test c called_with, called_times - а там оно прям быстро из коробки - доков много у midje, стартовать легко

rmuslimov09:03:53

- ну там еще много всего вылезает типа todo можно писать через future-facts

rmuslimov09:03:32

и как то у меня получилось раза в два меньше кода из за этого сахара который есть в midje

rmuslimov09:03:39

по сравнению с clojure.test

artemyarulin09:03:26

@rmuslimov: Хм, интересно. Кто-нить еще в этом чатике юзает midje?

rmuslimov09:03:40

еще вот пишут что midje отличается от clojure.test что поощряет разработку сверху вниз ( то есть пляшем от того что должно получиться на выходе), за счет тех же метаконстант и крутых моков видимо

artemyarulin09:03:12

хм, а это канонично? Мне казалось при фукнциональном программинге чаще подход снизу-вверх, соответсвенно никаких моков и всего такого

artemyarulin09:03:00

у меня может проектики все простые, но как-то моки прям дико для меня звучат

rmuslimov09:03:45

э, я не знаю - мне кажется писать сверху вниз правильнее

rmuslimov09:03:46

опять же depends, но вроде как позволяет видеть всю систему сверху

rmuslimov09:03:05

я не знаю как без моков жить, я пришел из питона

rmuslimov09:03:14

там все в моках

rmuslimov09:03:25

по крайней мере с тем кодом с которым я сталкивался

rmuslimov09:03:52

ну или как без моков жить когда есть интеграция с внешним миром

rmuslimov09:03:03

ES например

rmuslimov09:03:53

чтобы быть уверенным, что я не сведу его с ума - я мокаю метод который делает bulk api - я проверяю с чем я его вызывал

rmuslimov09:03:20

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

artemyarulin09:03:32

хм, ну может быть, у меня опыта маловато и сервисы простые все, без моков вообще удается. Может народ прокоментит? Хочется знать кто как делает, признавайтесь кто мокает?:)

larhat10:03:28

> Мне казалось при фукнциональном программинге чаще подход снизу-вверх хаскелисты за top-down обычно топят, использую unimplemented для того, что ещё не реализовано, но что типизируется

ssesutchenkov10:03:20

Пока никак не мокаю, в кложе недавно, но вот кстати мне привычнее/удобнее сверху - вниз, от задачи по модулям вниз в реализацию. И на текущем уровне погружения после жавы даже читать код примеров / либ непривычно - вот функция, и еще, и еще - ну ок, и пока до конца файл не дочитаею - не понятно - нафига они здесь ))) А часто что и к началу неоднократно отлистываю, и поиском ищу где оно еще юзается. Возможно, еще поворота майдсета не случилось )) Мидж видел что есть, но не вникал - спасибо, теперь буду посмотреть

artemyarulin10:03:51

ну тут еще кложура - name hoisting (или как там называется это) нету, поэтому точка входа может быть в конце да

artemyarulin10:03:48

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

artemyarulin10:03:10

тьфу, т.е. подход снизу-вверх, а читаешь получается сверху-вниз simple_smile

niquola11:03:50

Мы использовали midje, но конвертнулись обратно - слишком много магии. Хотя эмбедед тесты хорошая идея.

andre11:03:47

прикольный функционал, смотреть решения других участников, еще раз доказывает, что в кложе множество вариантов решения одной задачи, и все время не покидает ощущение что можно еще проще и оптимальнее

andre11:03:34

но интересно было бы посмотреть статистику по решениям, к сожалению не нашел там такого

andre11:03:48

было бы полезно думаю, для понимания того все-таки как "правильно" писать в кложе

andre11:03:23

вот там где график со статистикой по решениям, круто было бы посмотреть код по клику на статистику

andre11:03:11

никто не видел ничего подобного?

fxposter11:03:58

это откуда?

fxposter11:03:00

ох, когда это было )

dottedmag15:03:38

Ахаха, а я, как дурак, решал с использованием только того, что было объяснено в предыдущих задачах.

abtv18:03:07

@andre: там самая жесть начинается на сложных задачах. у меня было очень неловкое чувство, когда я смотрю чужие решения и кто-то написал решение в 5-10 раз короче моего simple_smile

rmuslimov19:03:44

это же отлично, просто и понятно как оптимизовать свой скилл

Kira Sotnikov19:03:53

а я нагуглил репу с решениями ._.

andre19:03:01

ну с решениями это не интересно, интересно именно после решения посмотреть статистику кто как решал, и как советует решать сам автор задачи

Kira Sotnikov19:03:22

а мне говорят у тебя нет друзей мы тебе не покажем

fxposter19:03:43

@andre: так а как ты собирал эти ответы? у меня показывает ответы других людей. а у тебя - так чисто из этого чатика )

andre20:03:59

там показывают ответы только фоловеров, вот я и зафоловил чатик и парочку из топа. неплохая выборка получилась, а как посмотреть ответы других людей, не из фоловеров?

andre20:03:33

@fxposter: расскажи секрет как подходил к решению? у тебя всегда очень лаконичные ответы simple_smile

fxposter20:03:26

как посмотреть - не знаю, по-моему мне просто показывает рандомных людей

fxposter20:03:36

по поводу решений - это было пару лет назад, уже не помню. но наверное сказывался опыт в руби (ожидаешь наличие всяких функций типа odd?) и наверное поиск по clojuredocs конкретных названий.

fxposter20:03:16

конкретно в том, что ты запостил - большинство людей там пыталось вставить ровно одну форму - отсюда всякие (partial filter odd?), но если на это посмотреть не как на “формы”, а как на подстановку текста - то становится понятно, что скобки и partial в этом конкретном примере можно опустить.

fxposter21:03:55

кстати, вот забавно - слежу я параллельно за elixir-комьюнити в слаке. если сравнить канал “clojure” и их “general” - получается примерно одинаковое число людей. при этом в “russian” у них ну совсем глухо.

fxposter21:03:09

аналогичная ситуация в elm-е, но там и людей суммарно поменьше

abtv21:03:55

@andre: а там никак не посмотреть, если не фолловеры. я просто на https://www.4clojure.com/users тоже отмечал знакомых людей) Кстати, там одна задача middle уровня (про число скобочек) на самом деле одна из самых сложных на 4clojure, я ее пропустил и вернулся через какое-то время. Ну и еще несколько задач таких было, которые сложно было прямо сразу решить. Как некоторые умудрялись за неделю все прорешать - не пойму simple_smile

prepor21:03:00

> он сделал все структуры данными в виде двоичных деревьев там не бинарные деревья )