Fork me on GitHub
#clojure-russia
<
2016-03-14
>
artemyarulin06:03:45

@lowl4tency: Как тебе алеф вообще?

artofshine07:03:41

Всем привет, сделал подход к ClojureScript. Написал анимацию с lazy подгрузкой картинок. Я был бы вам очень признателен, если бы кто-нибудь высказался относительно самого кода и возможных изменений, которые стоит в него внести и чтобы позволило сделать код более читаемым и соответствующим некоторым практикам написания кода на Clojure. Спс.

artemyarulin07:03:25

а чо фигвил не юзаешь?

artofshine07:03:26

@artemyarulin: пока руки до него не дошли.

rm07:03:41

https://github.com/ikuchmin/animation-clojure/blob/master/src/core/core.cljs#L62 а почему тут 5 go-блоков, а не один? Я почти не пользовался core.async, но мне интересно

artofshine07:03:12

@rm можно было и один.

artofshine07:03:18

это верно

artemyarulin07:03:44

https://github.com/ikuchmin/animation-clojure/tree/master/scripts сурова так, все руками. В этом есть смысл? О даже батники) Да мне кажется с фигвилом можно былоб половину если не все это убрать

artofshine07:03:16

Ну я не все руками делал, я создал проект из template

artemyarulin07:03:19

ааа, понял. Ну фигфил - прям мастхев

artofshine07:03:21

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

artofshine07:03:32

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

rm07:03:29

а тебе без разницы, какая картинка прилетит первой? А то там еще alts! были. Можно 5 запросов послать, первую загрузившуюся картинку нарисовать

artofshine07:03:11

Формально есть разница. Но на медленных соединения при паралельных вызовах первая картинка придет через время заведомо большее при одновременных запросах, чем при последовательных

rm07:03:40

ну ладно. Тогда так: делаешь функцию с коллбеком и список из адресов картинок. В функции что-то типа (def get! [list] (http-get (first list) #(get! (rest list))))

rm07:03:00

нафиг тогда нужен вообще core.async

rm07:03:32

ну и надо добавить точку выхода и собственно рисование картинки

artemyarulin07:03:59

если это как обучение - то добавь тестов, покопаешь doo заодно и cljs.test вообще, и ну вообще проект с тестами, интеграция с TravisCI - пацаны зауважают

artofshine08:03:08

А что за http-get?

rm08:03:32

условное название функции, которая тебе достанет с сервера картинку

artofshine08:03:26

@rm ну так в clojurescript есть только xhr с callback

artofshine08:03:50

Если бы был синхронных get я бы даже не парился

rm08:03:59

ну и хорошо же

rm08:03:07

я так и написал

artemyarulin08:03:42

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

prepor08:03:46

@artofshine: смотри, оберни xhr-загрузку картинки в core.async. ты получишь гибкий интерфейс с которым уже будет удобно работать и решать, что и когда грузить параллельно, а что последовательно

prepor08:03:50

т.е. сделай что-то вроде load-image, возвращающий promise-chan с блобом внутри

prepor08:03:52

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

antonshwab16:03:57

Привет. Чем DSL отличается от библиотеки?

az16:03:23

Чем язык отличается от библиотеки?

antonshwab16:03:03

Может быть, библиотека это подмножество всего того, что можно выразить языком?

antonshwab16:03:21

Я пока не шарю)

antonshwab16:03:11

Наверное еще рано копать сюда.

Kira Sotnikov16:03:23

ребят, а я вот шлю в телеграм сообщение боту

Kira Sotnikov16:03:27

получаю такое INFO: Webhook recieved message: {"update_id":885805567, "message":{"message_id":75,"from":{"id":169913372,"first_name":"Kirill"},"chat":{"id":169913372,"first_name":"Kirill","type":"private"},"date":1457974511,"text":"\u0430\u043a\u043e\u0440\u043f\u0435\u0440\u0433"}}

Kira Sotnikov16:03:41

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

Kira Sotnikov17:03:01

спасибо

rmuslimov17:03:29

если коротко: у тебя уже с русскими буквами просто в юникод> s.encode('utf-8’) акорперг

prepor17:03:28

@lowl4tency: @larhat: тут вроде эта статейка не при чем ) По спеке жисона это допутсимый способ кодирования юникода. Все жисон либы это умеют и правильно декодят.

larhat17:03:44

@prepor: ну обычно чтение помогает

Kira Sotnikov17:03:49

ну я как понял это был троллинг

larhat17:03:07

видно же, что не знаете, как может кодироваться юникод :)

Kira Sotnikov17:03:33

я не знакю как его раскодировать 😄

Kira Sotnikov17:03:46

вообще когда-то давно я даже пилил утф саппорт для внц сервера

Kira Sotnikov17:03:52

я просто в кложе нуб полный

prepor17:03:02

дело не в кложе

rmuslimov17:03:03

кложа не причем

prepor17:03:17

все что тебе нужно это сделать cheshire/read-string например

prepor17:03:21

прочитать жисо короче

Kira Sotnikov17:03:39

а блин, точно, это же джейсон

prepor17:03:09

оно прочитает это валидно и засунет в явовскую строчку (которая в свою очередь будет utf-16)

Kira Sotnikov17:03:47

да спасибо

Kira Sotnikov17:03:54

забыл что джейсон, заработало

rmuslimov17:03:21

Коллеги, а вот помогите почувствовать разницу между core.async chan vs. aleph streams, у меня есть задача процессить сравнительно большой объем xml и класть в ES. Я тут уже две реализации делал, но каждый раз когда уже все было готово - становилось очевидно, что можно написать проще, "выше, сильнее”. Собственно, теперь я вот хочу разделить задачи и наладить к communication через каналы, с правильной буферизацией и т.п. Посоветуйте плиз

Kira Sotnikov18:03:04

Mar 14, 2016 2:31:43 PM herman.web.web-service invoke INFO: Webhook recieved message: {update_id 885805599, message {message_id 107, from {id 169913372, first_name Kirill}, chat {id 169913372, first_name Kirill, type private}, date 1457980303, text п�иве�}} п�иве�

Kira Sotnikov18:03:43

шрифты чтоли у мен

Kira Sotnikov18:03:59

хотя в другом терминале тоже самое

Kira Sotnikov18:03:56

INFO: Webhook recieved message: {:update_id 885805603, :message {:message_id 111, :from {:id 169913372, :first_name Kiril l}, :chat {:id 169913372, :first_name Kirill, :type private}, :date 1457981045, :text пÑивеÑ}}

Kira Sotnikov18:03:00

Поправил локаль лол

Kira Sotnikov18:03:02

а у кложи есть тул? вот я хочу выкинуть все либы что не используются

Kira Sotnikov18:03:19

а то я добавлял удалял и уже не помню что где )

rmuslimov18:03:17

@kronos_vano: тот коммент от Zach наверное нет, но еще гляну на этот net.async что приведен для примера и отпишусь

rmuslimov18:03:59

@lowl4tency: да вроде нет стадартного ничего, это задача лежит на IDE

Kira Sotnikov18:03:14

а имакс имеет такую фичу?

rmuslimov18:03:32

cljr-refactor.el

rmuslimov18:03:52

надо поставить там был метод cljr-add-missing-spec

Kira Sotnikov18:03:54

оукей спасибо

rmuslimov18:03:15

который заодно вырежет все ненужные импорты

Kira Sotnikov18:03:47

add-missing-libspec есть

Kira Sotnikov19:03:06

ему еще сидр нужен )

rmuslimov19:03:07

наверное, я на память написал

rmuslimov19:03:11

да конечно

Kira Sotnikov19:03:15

спасибо

Kira Sotnikov19:03:23

мне еще столько заботать надо 😞

Kira Sotnikov19:03:47

-> и ->> мне взорвали мозг начисто

artemyarulin20:03:01

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

oxgrouby20:03:50

а я себя корю за то, что злоупотребляю ими. Хотя не знаю, может это и нормально -- цепочку типа (-> data fun :key fun2), т.е. мешать в одну кучу вызовы функций, и получение данных, но какой-то непрятный осадочек в душе

artemyarulin20:03:14

эм, а это плохо?

oxgrouby20:03:31

не могу чётко ответить на этот вопрос

oxgrouby20:03:41

мне кажется что плохо, но на деле не страшно и удобно

artemyarulin20:03:10

> кучу вызовы функций, и получение данных тоже самое же

andre20:03:18

а в каких случаях их применять?

artemyarulin20:03:27

у тебя функции же не сайд эффеты делают, а тоже данные достают

oxgrouby20:03:58

ну, если так смотреть то может и норм, фик знает

andre20:03:17

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

oxgrouby20:03:17

можно в скобочках заблудиться

artemyarulin20:03:52

дак наоборот, когда у чебя чейн на 4 функции, да с параметрами - то читать изнутри сложно

Kira Sotnikov20:03:18

https://clojurians.slack.com/archives/clojure-russia/p1457937645000320 честно, я не особо пока распробовал, он у меня как простой хттп сервер сейчас, но выглядит довольно просто и есть куда расширяться с ним.

Kira Sotnikov20:03:38

И я его брал с соседнего проекта, смотрел как там он используется)

artemyarulin20:03:08

ага, мне тоже нравится пока, вроде простой, по крайней мере апи

Kira Sotnikov20:03:16

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

artemyarulin20:03:25

отпугнуло что всякие свои deferred, но счас вроде привык

Kira Sotnikov20:03:39

там везде в примерах malford

Kira Sotnikov20:03:42

или как там его

artemyarulin20:03:46

ну вот он дада

Kira Sotnikov20:03:51

ну и можно core.async тоже

artemyarulin20:03:55

пробовал?

Kira Sotnikov20:03:02

неа, я еще не настолько кложурист )

Kira Sotnikov20:03:24

я сквозь грабли пробираюсь, прочитал две главы кожи для бравых и начал писать )

Kira Sotnikov20:03:31

уверен что мой код очень далек от идеала

artemyarulin20:03:52

аа, ок. Я фанател в свое время от кор.асинк, счас отпустило - дак тащу тока когда реально нужно, пока обхожусь

Kira Sotnikov20:03:00

artemyarulin: я как в прод это выпущу думаю открою, дам поревьюить )

Kira Sotnikov20:03:23

бот телеграм+вордпрес

artemyarulin20:03:41

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

artemyarulin20:03:49

о фега набор у тебя simple_smile

Kira Sotnikov20:03:57

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

Kira Sotnikov20:03:39

artemyarulin: я все лелею мечту выкинуть вордпресс и заменить статик файлами которые генерит кложа с кложескриптом)

artemyarulin20:03:59

ну значит перепишешь - делов то)

artemyarulin20:03:12

статик тема да

Kira Sotnikov20:03:23

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

Kira Sotnikov20:03:36

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

artemyarulin20:03:48

ну не все сразу, потихоньку

artemyarulin20:03:07

кложура дивный новый мир - очень много нового. Ты до этого на чем писал?

Kira Sotnikov20:03:13

ну там просто по сути блог, просто нужен апп который даст редактор, а то журналисты народ неграмотный

Kira Sotnikov20:03:26

я на баше и питоне, на перле еще)

Kira Sotnikov20:03:49

я вообще не программист на самом деле а админ

Kira Sotnikov20:03:54

сейчас модное слово девопс

Kira Sotnikov20:03:30

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

Kira Sotnikov20:03:45

есть мысли системные скрипты поменять на кложускрипт+нода

artemyarulin20:03:46

ну вообще респект, ты как к кложуре пришел вообще то?:)

artemyarulin20:03:51

аа, уже в проде есть

Kira Sotnikov20:03:07

это все тонский )

Kira Sotnikov20:03:20

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

Kira Sotnikov20:03:31

я на нем тренируюсь )

leov20:03:10

всем привет

leov20:03:28

вопрос - а как пропихнуть в project.clj энв-переменную?

leov20:03:56

у меня такое ощущение, что project.clj это edn, а не кложа - оно (or (System/getenv ..) ..) съело целиком как строку

Kira Sotnikov20:03:20

а что ты хочешь сделать?

Kira Sotnikov20:03:04

project.clj понимает профили, и если ты хочешь разделить подгрузку либ по разным енвайронментам (прод дев) то можно их использовать

leov20:03:57

на каждом компьютере свой хостнейм

leov20:03:02

в девелопменте

leov20:03:14

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

leov20:03:26

если я возьму localhost - тогда с айпада не получится

Kira Sotnikov20:03:54

на гитхабе по крайней мере в ридми написано про 0.0.0.0 simple_smile

leov20:03:30

нашёл {:ws-host :js-client-host}

leov20:03:36

оказывается и правда всё есть на гитхабе

leov20:03:47

я просто удивлён что проджект.клж это не кложа

leov20:03:58

и нельзя туда вставлять хаки) (кажется)

Kira Sotnikov20:03:19

я вроде вставлял

Kira Sotnikov20:03:23

не помню что и куда

Kira Sotnikov20:03:30

но помню про переменные окружения

leov20:03:34

кто-нибудь интегрировал cemerick.friend и saml аутентификацию?

leov20:03:50

и вообще какую юзать библиотеку аутентификации

leov20:03:56

я схватил френд. ща сижу читаю

leov20:03:11

боюсь придётся ещё читать что такое вебсокеты и есть ли там куки. а то их тоже надо чем-то закрывать

leov20:03:22

спасибо

artemyarulin20:03:31

project.clj это кложура, просто defproject это вроде макро. Поэтому надо четка по другому http://stackoverflow.com/questions/24011576/sharing-configuration-in-leiningen-project-clj

Kira Sotnikov20:03:33

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

artemyarulin20:03:38

а тьфу, уже обогнали:)

Kira Sotnikov20:03:00

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

leov20:03:41

это не раскрывается

leov20:03:46

это хедер хтмля же вроде?

leov20:03:51

мета-тег

leov20:03:12

<meta name="twitter:title" property="og:title" itemprop="title name" content="Sharing configuration in Leiningen project.clj" /> <meta name="twitter:description" property="og:description" itemprop="description" content="I have a Clojure project that uses the lein-beanstalk Leiningen plugin to deploy my app to Amazon Elastic Beanstalk. My Elastic Beanstalk application has multiple environments (e.g. development, " /> <meta property="og:url" content="http://stackoverflow.com/questions/24011576/sharing-configuration-in-leiningen-project-clj"/> <link rel="canonical" href="http://stackoverflow.com/questions/24011576/sharing-configuration-in-leiningen-project-clj" />

Kira Sotnikov20:03:35

оп, спасибо

Kira Sotnikov20:03:55

Это мне теперь еще вордпресс патчить )))

Kira Sotnikov20:03:11

я надеюсь что авторы вордпресса будут гореть в аду

Kira Sotnikov20:03:45

ладно, пойду подышу воздухом