Fork me on GitHub
#clojure-russia
<
2016-11-11
>
lowl4tency00:11:21

Там банальная обертка над методами джавы. МОжно завернуть куда хошь

seryh11:11:32

вот тут https://www.youtube.com/watch?v=UEUucIdNO_o я так понимаю можно будет через пару часов послушать этих ребят https://blog.appcanary.com/2016/missing-clojure.html

potapenko11:11:12

@andre Ага, видел. Все равно непонятно как нативные компоненты прикручивать. Нужно глядеть их код. Во многом RN крут тем, что есть выбор и возможность реализовать если что в нативе. Тут же в эспоненте они просто предлагают некий набор готовых компонентов, которые они сделали.

a.espolov12:11:30

ммм… ни кому не приходилось читать из org.httpkit.BytesInputStream?

edbond13:11:25

https://blog.appcanary.com/tag/clojure.html - Slippery exceptions in Clojure and Ruby - How being lazy about state management in Clojure caused us downtime

konukhov14:11:00

последний пост вообще шедевр.

konukhov14:11:07

про being lazy

konukhov14:11:20

@lowl4tency на тему component – мне кажется, ты прав, что в либу его нет смысла добавлять, но у тебя там dynamic binding – вот это не круто, на мой взгляд. api-key можно как аргумент прокидывать. если бы я это использовал с компонентом, например, я бы сделал протокол, заиплементил бы его в этом компоненте, и ключ прокидывал бы из стейта.

konukhov14:11:38

даже можно не ключ сделать как аргумент, а geo-api-context

lowl4tency14:11:39

konukhov спасибо

lowl4tency14:11:53

konukhov я долго искал как принято прокидывать такие вещи в либы, ничего годного не нашел

lowl4tency14:11:04

если дашь сниппет посмотреть буду благодарен

konukhov14:11:17

ага, я чуть позже напишу, ладно?

lowl4tency14:11:19

ты имеешь в виду defprotocol?

lowl4tency14:11:21

спасибо, буду посмотреть, но и сниппет не помешает тоже, окгда тебе будет удобно конечно

lowl4tency14:11:13

и если можно пару слов почему динамик биндинг не круто

konukhov14:11:24

вот, про что я говорил https://gist.github.com/konukhov/a12e087bc5cae577fbd6ee75c70c9c17 динамический байндинг не круто, потому что у тебя скрытый стейт появляется, еще и глобальный, + функция перестает быть “чистой”. (тут они, конечно, и так не чистые, так как мы общаемся в внешним миром) вот, Стюарт написал https://stuartsierra.com/2013/03/29/perils-of-dynamic-scope

lowl4tency14:11:25

я просто смотрел примеры в korma 🙂 там были и биндинг и макрос

konukhov14:11:45

корма старая вроде совсем, тогда все так делали 🙂

lowl4tency14:11:18

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

konukhov14:11:52

норм! в clojure.java.jdbc connection всегда в аргументах, и все окей 🙂

lowl4tency14:11:38

тогда я согласен, так можно и без биндинга )

lowl4tency14:11:34

а еще вопрос, насколько плохо

(defn func [this coll]
    (let [lat (:lat coll)
                 (:lng coll)]
(do something)))

lowl4tency14:11:57

то есть структурку пихать аргументом а структурку уже внутри разбирать

konukhov14:11:42

я бы {:keys [lat lng]} сделал сразу

lowl4tency14:11:01

я просто написал чтобы было видно что я имею ввиду)

konukhov14:11:10

destructuring много let-бойлерплейта убирает

konukhov14:11:13

тогда я тебя не понял 🙂

lowl4tency14:11:34

вместо (defn func [this arg1 arg2]

konukhov14:11:20

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

konukhov14:11:42

[lat lng] передать – ничего страшного, думаю, может быть, даже удобнее

konukhov14:11:50

когда же ток будет про clojure->ruby

konukhov14:11:55

moving forward, так сказать

konukhov14:11:39

а, вчера был

lowl4tency14:11:46

ага понятно, спасибо большое за помощь

lowl4tency15:11:16

а у меня еще один глупый вопрос

lowl4tency15:11:42

Куда приянто совать валидацию? Внутрь библиотечных функций или тот кто использует либу должен валидировать?

lowl4tency15:11:52

какой хороший тон?

konukhov15:11:08

мне кажется, что если ты ждешь данные в определенной форме – валидировать стоит у себя. но тоже зависит от контекта. если тебе в lat lng передадут строки, например, то гугловская либа и так кинет exception, юзер это увидит и поправит. вообще, часто в либах видел, что schema ту же используют и тд.

lowl4tency15:11:16

ага, точно, я не подумал про ексепшоны

lowl4tency15:11:00

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

edbond15:11:15

лучше добавить проверки простые например lat/lng - числа. Всего в меру

edbond15:11:28

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

edbond15:11:08

Если сложно то лучше добавить у себя проверку, для пользователей твоей либы. Главное - не переборщить с ограничениями имхо

konukhov15:11:39

ну да, совсем defensive тоже так себе 🙂

lowl4tency15:11:02

@edbond согласен

lowl4tency16:11:46

ВНезапненько, решил написать тест, а мне гугл апи выдает разные адреса на одни координаты

lowl4tency16:11:08

как так жить 😞

airnsk16:11:09

Замокай Гугл

be916:11:46

напиши свой гугл, сколько можно терпеть такое

edbond16:11:25

мокать не нужно пока неясно что возвращает (может возвращать) реальный эндпоинт

lowl4tency16:11:09

Там в чем фишка, я апрашиваю координаты по адресу, а потом обратно по координатам адрес

lowl4tency16:11:27

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

edbond16:11:43

это нормально 🙂

airnsk16:11:02

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

lowl4tency16:11:29

а у меня больше ничего в либе нет)

lowl4tency16:11:37

только запросики к гуглу

lowl4tency16:11:00

ну я это скорее поместил чтобы было понятно как использовать либку

airnsk16:11:14

так замокай вызовы и разные тестовые данные отдавай - это будет тест

misha17:11:00

1. какая schema? спеке уже полгода 2. (f {:a a :b b}) против (f a b) сильно зависит от юзкейса (от того, где a и b берутся), скажем, если кто-то мне, клиенту либы, возвращает {:a a :b b}, и дальше я должен вызвать (f a b) - это напряг, так же как и наоборот: получаю где-то [a b], а дальше передавать в (f {:a a :b b}) нужно.

misha17:11:34

иногда можно вообще мультиарити забабахать:

(defn f
  ([{:keys [a b]}]  (f a b))
  ([a b]
   ...))

seryh17:11:31

спеке пол года, только кложа 1.9 в альфе еще

misha17:11:26

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

andre17:11:37

@seryh ну что там наш парень не высказался еще?

seryh17:11:51

да не видел пока

misha17:11:52

запись ждём всей деревней

andmed18:11:31

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

edbond18:11:11

просто ФБ следующий )

andre18:11:29

тестируют

misha18:11:59

то у людей больше времени появится делом заняться kappa

andmed18:11:18

представители линкедин уже попросили власти о встрече... типичный майкрософт

andmed18:11:51

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

misha18:11:16

"не всё легаси - говно, не всё говно - легаси" – Далай Лама

andmed18:11:02

"что вижу, о том пою", я

misha18:11:46

так а чо там в джаве? cmd+click по классу и поехали troll

slava_nedorezov19:11:36

только начинаю изучать clojure, поэтому такой вопрос: следует ли мне, привыкшему к императивным языкам, писать конструкции вида: (def c 5) (- 1 (/ 2 (+ 3 c))) с помощью макросов ->> или -> сразу в виде: (def c 5) (->> c (+ 3) (/ 2) (- 1)) ? или первая запись таит в себе какой-то скрытый смысл, кроме того что её надо читать справа-налево ?

misha19:11:03

Frankly, I’ve just never had to think about lazy data structures in Rubyland
панятна кароче

misha19:11:13

@slava_nedorezov я сразу пишу через -> ->>, так сильно нагляднее. еще ни разу не обжегся, но может я просто не заметил

rmuslimov19:11:30

второй и читается и пишется проще, надо чутьчуть привыкнуть

misha19:11:11

во второй записи единственный(?) опасный момент - не попутать -> и ->>

artemyarulin20:11:03

лямбды еще оборачивать скобками надо

artemyarulin20:11:51

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

misha20:11:09

-2:14:-6:17
DAYS HOURS MINUTES SECONDS
…until RubyConf!
opieop

slava_nedorezov20:11:59

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

artemyarulin20:11:48

да неа, threading macro созданы как раз для таких случаев. Можешь посмотреть какие опен сорсы проекты, увидишь много где юзаются. Этакие конвееры

(->> (range 1000)
     (filter even?)
     (map (partial / 100))
     (take 5)
     (reduce +))

artemyarulin20:11:27

и кста заброшу еще про Elm (раз мы уж поливаем все что не кложура ыы troll ) https://hackernoon.com/a-small-dive-into-and-rejection-of-elm-8217fd5da235#.9pz4a9u2l Хотя если серьезно то довольно интересно

misha20:11:14

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

misha20:11:51

типа мало кто нанимает, а если нанимает - то по 2 чела на громадный проект, потому что сильно больше людей и не надо

kronos_vano20:11:01

ну аргумент чо

seryh20:11:43

аа. на рубиконф вчера про кложу рассказывали. я только догадался программу посмотреть. причем стрим идет только с большого зала. а эта конфа была в малом зале =(

artemyarulin20:11:01

т.е. он кложуру выучит - все знания жавы оно вытеснит и скобочки будут как клеймо у него, оооок)

misha20:11:50

ну есть, конечно, сет контор, в которых кложа "поверх джавы", а не основная, но таких немного

rmuslimov20:11:46

типа нетфликс

misha20:11:47

ну релокейшн - не для всех подходит, хотя в LA ему найти кложа-работу вообще не проблема, скилы только покажи

misha20:11:22

@artemyarulin

I did a fairly deep dive into ClojureScript and found it nice initially but ultimately lacking in some key areas.

artemyarulin20:11:52

да нет в жизни счастья чо уж 🙂

artemyarulin20:11:25

все тлен harold

misha21:11:08

And all that, from the point of view of an employer, is attractive. Ten people who communicate, document things properly and work together are preferable to one BBM hacking Lisp who can only be replaced by another BBM (if you can find one) in the not unlikely event that he will, at some time, go down without being rebootable.

misha21:11:44

самое полезное в статье про элм - сслыка на эту статью про лисп 🙂

andmed21:11:53

@misha Ну вот я был больше месяца в"сетевой" конторе, в которой кложа "поверх" жавы и скажу мне это понравилось. Я не верю в историю про ее кроссплатформенность: если сидишь на жаве платформе, так и используй ее возможности. И я видел код на кложе написанный хорошим жавистом, сказка. Для сравнения был в конторе зарубежной, которые подошли с другого конца. Шеф там влюблен в лисп и воспринимает жава интероп как неизбежное зло. Ну так тоже можно. ИМХО в первом подходе смысла больше.

andmed21:11:36

Это все бэкэнд, фронт отдельная тема, с редуксами всякими %)

andmed21:11:40

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

bernik22:11:11

@seryh да, доклад про кложу был вчера, но не том треке, с которого выложили запись. надо ждать когда появятся записи с других треков

dragoncube22:11:05

кстати, а кто-нибудь едет на Clojure Conj ?

misha23:11:44

@dragoncube сорвалась у меня поездка

a.espolov23:11:29

зачем мне нужен военный билет?)