Fork me on GitHub
#clojure-russia
<
2016-07-13
>
seryh06:07:59

@timbrk: нужно конкретизировать вопрос. есть куча вариантов. в виде http запроса для получения сессионного ключа? через веб драйвер (selenium например)? или чтение почты через imap?

andre07:07:19

ребят, а re-frame с figwheel дружит вообще? 🙂

timbrk08:07:46

@seryh: мне нужно зайти в аккаунт и спарсить оттуда данные. веб драйвер уже рассматриваю, интересная штука, монструозная только. Думаю, лучший вариант - в виде http запроса

seryh08:07:13

@timbrk: это самый сложный вариант. нужно вооружатся профилировщиком запросов, расковыривать протокол, и эмулировать вот это все через какойнить clj-http. если задача читать почту, то самое простое сделать это через imap

seryh08:07:22

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

timbrk08:07:42

@seryh: спасибо! сделаю пока через веб драйвер 😌

prepor13:07:01

Пацаны, расскажите про spec. В чем разница между s/alt и s/or?

niquola13:07:08

Может - "хотябы один" or "точно один"?

prepor13:07:01

о, о кложке уже можно на стэковерфлоу находить!

prepor13:07:07

спасибки!

prepor13:07:35

вроде вдуплил

niquola13:07:48

А я пока нет ;)

prepor13:07:42

ну там ну там regex op "последовательно" идут. типа вот такое:

(s/conform (s/* (s/alt :even (s/+ even?) :odd (s/+ odd?))) [1 1 1 1 2 4 6 1 2 3])
[[:odd [1 1 1 1]] [:even [2 4 6]] [:odd [1]] [:even [2]] [:odd [3]]]

prepor13:07:06

с or у тебя совсем другое получится

prepor13:07:10

окей, следующий вопрос

prepor13:07:11

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

(s/def ::int #(try (Long. %) (catch Exception e nil)))

prepor13:07:46

и хочу что бы conformed значение такой спеки было всегда int, т.е. "123" скажем приводилось к 123

prepor13:07:57

есть для этого интерфейсы?

prepor13:07:26

в кишках вижу только вот такое: (defprotocol Spec (conform* [spec x]) (unform* [spec y]) (explain* [spec path via in x]) (gen* [spec overrides path rmap]) (with-gen* [spec gfn]) (describe* [spec]))

prepor13:07:23

ну хотя почему бы и нет, работает:

(s/def ::int (reify s/Spec (conform* [spec x] (try (Long. x) (catch Exception e nil)))))

prepor13:07:33

но это просто не особо похоже на публичный интерфейс

mike_ananev14:07:40

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

prepor14:07:38

ты сейчас про что? ) как conform кастомный сделать? и при чем тут multi-spec этот?

mike_ananev14:07:06

на вход :atomix/storage-config он ждет мапу и в зависимости от ключика ::storage-type у него будут разные варианты "правильного" конфига

prepor14:07:43

я прочитал в документации про multi-spec, как это соотносится с моим вопросом? )

prepor14:07:56

s/conform в spec не только валидирует данные, но и приводит их к спеке. предикат-функции никак не изменяют значения, а вот всякие or cat — очень даже

prepor14:07:30

(type (s/conform ::int "123"))
java.lang.Long
вот что я хотел получить (и получил с примером выше)

mike_ananev14:07:49

@prepor сорри, не вдуплил сразу.

artemyarulin14:07:39

смотрел уже?

artemyarulin14:07:50

а или они тока-что запостили

artemyarulin14:07:25

кста пытался найти, но что-то мое гугл кунг-фу слабо - в 1.9 что-нить еще кроме спеки добавили?

prepor14:07:01

тоже не нашел чейнжлоги, но как минимум namespaced map которые в гайде про спеку проскакивают

prepor14:07:20

Andrew Rudenko, [Jul 13, 2016, 2:46 PM]: #my.app{:foo 1 :bar 2} эквиалетно {:my.app/foo 1 :my.app/bar 2}

artemyarulin14:07:35

дада, т.е. по сути весь релиз под спеку по сути ну ок

artemyarulin14:07:56

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

asolovyov17:07:45

а кто-нить юзает что-то кроме prismatic schema для валидации?

asolovyov17:07:57

из неё сделать мессагу с ошибкой для пользователя какая-то адовая боль

asolovyov17:07:17

как я блин должен конвертировать (not (pos? -5)) в то, что читает пользователь?

seryh17:07:26

@asolovyov: так и задумано, только так и можно заставить пользователя изучить lisp

niquola17:07:25

На докстринг walkом замени

asolovyov17:07:18

@nicola: это ж жесть, не? )

niquola17:07:53

Да я шучу - но мы где-то так делали schema human readable

asolovyov17:07:05

я вот думаю, если я оберу в свою схему, которая будет выдавать нормальную ошибку, коэрсия не поломается?

asolovyov17:07:14

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

niquola17:07:58

Свою напиши

asolovyov17:07:23

я даж роутинг твой взял, чтоб не зависать на таких вещах

asolovyov17:07:35

свою написать всегда самый простой способ, конечно )

asolovyov17:07:39

но не хочу )

niquola18:07:28

Есть пяток библиотек для пользовательской валидации

asolovyov18:07:48

та есть, фиг выберешь

niquola18:07:10

По звездачкам

asolovyov19:07:53

@niwinz: а что значит :optional в валидаторах struct'а? 🙂

asolovyov19:07:08

@nicola: выбрал, видишь :))

kronos_vano19:07:58

@asolovyov: не вызовется если ключа нет

asolovyov19:07:50

спасибо

misha21:07:37

@asolovyov: так вон спеку и возьми

misha21:07:01

Рич аппрувз

misha21:07:50

Unity raises $181M round at a reported $1.5B valuation

misha21:07:13

@artemyarulin: ты там уже в зелени, поди, купаешься?