Fork me on GitHub
#clojure-russia
<
2016-01-18
>
niquola10:01:04

Блин, кто-нибудь знает нормальную либу для clojure JSON schema?

be911:01:00

сделай конвертор из json schema в то, что ест prismatic schema simple_smile

niquola11:01:24

так делает ring-swagger - но у него не полная поддержка

artemyarulin11:01:00

а зачем схемы? Только дайнамик, только хардкор trollface

niquola12:01:18

Это для медицинской платформы ;)

niquola12:01:52

public api

potapenko13:01:59

(js->clj) + prismatic schema ?

potapenko13:01:45

js->clj правда это в clojurescript, да

potapenko13:01:41

богатый такой кит для react-native http://strapmobile.com/native-starter-pro/

artemyarulin13:01:15

перпостил в #C0E1SN0NM

artemyarulin13:01:29

@potapenko: Ты пробовал его уже?

potapenko13:01:48

он денег стоит

potapenko13:01:21

пока не нужно

potapenko13:01:44

думаю свой кит забабахать, но опенсорс и cloure/reagent

artemyarulin13:01:58

во, это прально

artemyarulin14:01:00

хм, первый раз делаю uberjar с кложурой (да и вообще до этого все CLJS был) - прально ли понимаю что нужно указать в project.clj

:main yieldm.server
  :aot [yieldm.server]
и потом в исходнике сделать вот так:
(ns yieldm.server
  (:gen-class))

(defn -main [& argse]  (print "hello world!"))

artemyarulin14:01:38

я нуб. Запускал как java path-to-app.jar и получал ошибку Error: Could not find or load main class path-to-app.jar. Оказывается надо java -jar path-to-app.jar. бгг, а еще я обещал что доделаю сервис к концу недели trollface

potapenko14:01:26

я тоже как-то джарку не собирал simple_smile я на продакшене запустил сервис через

lein run
и норм simple_smile четыре месяца крутится без падений simple_smile html-kit, monger итд.

artemyarulin14:01:27

о, не знал про run simple_smile

potapenko14:01:16

мне так проще дпплоить - git pull, а потом lein run simple_smile

artemyarulin14:01:54

хм, так то один jar файл еще проще должно быть

artemyarulin14:01:02

да и lein не надо тащить опять же

potapenko14:01:29

ну джарка бывает побольше lein-а

artemyarulin14:01:47

хм, мой хелло ворлд с aleph в зависимостях уже 7 метров, мда

potapenko14:01:01

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

artemyarulin14:01:30

угу - у нас как раз 6 серваков, докеры все дела, надо жарник делать

potapenko14:01:22

ну кстати в докере тоже может быть можно lein run, он то все инстансы поднимет, нужно проконсультироваться

potapenko14:01:25

просто делюсь опытом

abtv14:01:51

@potapenko: а если процесс у тебя упадёт, то кто его поднимет?

potapenko14:01:42

а вот не падает.работает и все, хотя народу набегает очень много. http://playphrase.me если будет необходимость - поставлю какой скрипт на поднятие. но как запускать этим скриптом - через java или lein мне кажется без разницы.

potapenko14:01:21

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

artemyarulin14:01:07

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

artemyarulin14:01:11

или есть?

potapenko14:01:37

да как бы нет

potapenko14:01:42

или есть? simple_smile

abtv14:01:51

Думаю нет разницы: оба стремные - нужно подумать, что делать, если что-то пойдёт не так

artemyarulin14:01:13

А uberjar может какой релиз билд делает не? Всякую дебаг информацию убирает нет?

abtv14:01:44

Я б боялся, что некому поднять мою упавшую прогу simple_smile

potapenko14:01:01

lein с флажком -server запускает

potapenko14:01:17

и вообще jvm настройки в проекте указываеются

potapenko14:01:24

в общем без разницы

abtv14:01:10

Я uberjar'ом собираю для production, а для разработки repl и там компонент

artemyarulin14:01:44

а можно чутка на эту тему - кто как мониторит запущенный жарник?

artemyarulin14:01:18

пишу счас сервис - понятия не имею как собирать фидбек от сервиса (скок запросов в секунду, память, цпу еще чо может)

abtv14:01:23

Я upstart использовал для перезапуска, если процесс сдох. Мониторинг самописный, внутри процесса, но ты немного про другое, я так понимаю

abtv14:01:00

Хотя запросы в секунду, наверное, как раз в процессе считать надо

abtv14:01:13

У меня так

artemyarulin14:01:18

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

abtv14:01:35

В общем, сам хотел что-то получше сделать, должны быть решения

abtv14:01:08

Ибо всем надо simple_smile

be915:01:08

ну а для collectd какого-нибудь нет плагинов?

artemyarulin15:01:27

блин, первый раз пишу на кложуре. Я конечно пробовал на CLJS под ноду писать но все равно то что я в репле могу сделать (http/start-server (constantly {:body “Hello” :status 200}) {:port 8000}) и получить рабочий сервис вызывает радость 😄

be915:01:54

я вот недавно убержар собрал с помощью #C053K90BR. заработало всё, включая компиляцию scss (с импортом бутстрапа из webjars) и cljs

artemyarulin15:01:20

о, как тебе буут? Я все обещаю себе его поковырять но все как то времени нет

artemyarulin15:01:36

вернешься на лейн или все, только буут теперь?

be915:01:04

ну там как-то всё модульно и понятно

be915:01:25

одна беда — cursive его не поддерживает (пока)

artemyarulin15:01:26

а чо там поддерживать?

artemyarulin15:01:53

я просто в емаксе сижу - про курсив ничо не знаю

be915:01:11

ну запустить там процесс, например simple_smile сейчас запускаю boot dev во встроенном терминале

be915:01:31

в принципе работает

artemyarulin15:01:32

ааа, чтобы кнопочку плей в IDE нажимать можно было?:)

be915:01:08

на самом деле, intellij+cursive шарится по зависимостям проекта и подсвечивает другим цветом то, что ему неизвестно

be915:01:18

а зависимости он берет из project.clj, вестимо

be915:01:47

ну люди обошли это, создав таску для бута, которая генерирует project.clj, лол

artemyarulin15:01:30

бгг. Ну это нормальный вариант - я сча все делаю через Buck билд систему, и тоже project.clj генерю simple_smile

be915:01:15

ну хоть не ant

artemyarulin15:01:41

Слышал только хорошее о нем

artemyarulin16:01:32

хм, а чо получается из-за http://dev.clojure.org/jira/browse/CLJS-324 нельзя написать код (format “Hello %s” “World”) который бы работал и на Clojure и на ClojureScript?

potapenko16:01:00

(goog.string.format "%05d" 123) ?

rm16:01:14

прямо такой можно, если импортировать goog.string

rm16:01:40

а вот (format "hello %,d" 4232) уже нет

artemyarulin16:01:00

@potapenko: ага, спасибо. Но не хочу лишний импорт тащить или врапперы писать. Решил обойтись пока (clojure.string/replace “Hello {0}" #"\{0\}” “world”), посмотрим на сколько хватит

potapenko16:01:52

goog.string из коробки ведь?

artemyarulin16:01:20

у меня либа для clojure и clojurescript. В кложуре то goog.string нету

artemyarulin16:01:28

писать либо иф, либо враппер

artemyarulin16:01:38

string/replace работает везде

potapenko16:01:41

а.. ну да

artemyarulin16:01:11

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

potapenko16:01:16

гдето либа была для написания совместимого кода, там были директивы компиляции типа #if-cljs бла бла #if-clj - бла бла, забыл как называется

potapenko16:01:03

можно импорты разные вставлять

rm16:01:04

cljc же

rm16:01:08

вы чо

potapenko16:01:14

да не пользовался, забыл

artemyarulin16:01:36

да у меня именно cljc

rm16:01:57

ну и сунь, долго чтоли

artemyarulin16:01:28

ну не долго, но если можно без них то круче же, дзен и красота simple_smile

artemyarulin16:01:01

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

potapenko16:01:07

замутил выборку в коллекции - сижу 10 минут уже любуюсь simple_smile https://www.dropbox.com/s/j1h4kenpabyiom4/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202016-01-18%2017.41.23.png?dl=0 кложура - прекрасна

potapenko16:01:47

нужно интеграцию с дропбокс попросить добавить в канал

potapenko16:01:04

были бы в чате превьюхи

artemyarulin16:01:49

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

potapenko16:01:16

говорят это признак плохой кложуры simple_smile много смайлов

potapenko16:01:33

вот не могу понять почему

be916:01:53

да, что-то адово

potapenko16:01:53

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

potapenko16:01:04

что зашибись что лениво все, слепился запрос, пока его не позвал react-native - ничего не вычислилось

potapenko16:01:09

нравится

rm16:01:45

признавайтесь, вы тоже читаете и думаете, как улучшить? :)

seryh16:01:25

надо точно декомпозировать

be916:01:42

ситуация, когда defn явно забанен

rmuslimov16:01:52

@potapenko: ты же шутишь да, про то что код прекрасен в этом месте

rmuslimov16:01:06

хотя бы

artemyarulin16:01:27

хотя мне этот код не нравиться но 10-loc-per-fn считаю фигней

be916:01:16

style guide хотя бы даёт понять, чем хвастаться, а чем нет 😄

rmuslimov16:01:36

@artemyarulin: ок, а ограничение по LOC совсем тебе кажется фигней, или у тебя просто выше лимит?

rm16:01:00

последний фильтр можно так: #(or (not search-status) (= search-status (:status %)))

potapenko16:01:43

style guide писали люди simple_smile у которых свои тараканы simple_smile

artemyarulin16:01:08

@rmuslimov: Ну вот прям вот в данный момент пишу код:

(defn folder-contents [folder-id]
  (replace "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:m=\"http://schemas.microsoft.com/exchange/services/2006/messages\" xmlns:t=\"http://schemas.microsoft.com/exchange/services/2006/types\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">
  <soap:Body>
    <m:GetFolder>
      <m:FolderShape>
        <t:BaseShape>IdOnly</t:BaseShape>
      </m:FolderShape>
      <m:FolderIds>
        <t:DistinguishedFolderId Id=\"{0}\" />
      </m:FolderIds>
    </m:GetFolder>
  </soap:Body>
</soap:Envelope>" #"\{0\}" folder-id))
мне его бить? Зафега? Она делает то что нужно

artemyarulin16:01:28

выносить в файл app.core/constants? буэ

be916:01:42

хаха, ну не надо буквально понимать требование 10 строк

be916:01:58

представь лучше функцию, где 10 таких длинных строк

rmuslimov16:01:24

хм, ну дело вкуса конечно - я бы вынес наверное да

potapenko16:01:02

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

rm16:01:08

potapenko: в первом фильтре тоже if-not можно на or заменить

rm16:01:27

и вытащить хотя бы (lower-case ...) в отдельную функцию

rmuslimov16:01:01

под 10 LOC конечно в гайде понимается 10 LOC эффективного кода

rm16:01:41

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

artemyarulin16:01:49

ну вооот, т.е. и не 10, а почти 10 “и не в покер, а в преферанс, и не в выйграл, а проиграл”(с)

artemyarulin16:01:41

у меня 99% функций меньше 5 наверно строк - но оставшийся 1% он может и по 50 быть если так нужно

potapenko16:01:50

да, с or да, правильно. поправлю.

dottedmag18:01:24

А кто сегодня будет рассказывать чего на митапе? @asolovyov?

abtv18:01:34

Александр обещал придти )

niquola18:01:36

Через 10 мин запускается

rm18:01:57

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

abtv18:01:19

let [x (x & xs)]

abtv18:01:26

что-то типа того

turtle18:01:41

Можно rest и first.

abtv18:01:56

надо в консоли попробовать, можно в destructuring прямо

rm18:01:56

спасибо

abtv18:01:23

не гарантирую, что рабочий код, но делал типа такого

turtle18:01:39

Мы про кложуру ещё? Деструктуринг там же будет (let [[x & xs] my-list] ...)

turtle18:01:42

Типа тоже. simple_smile

rm18:01:02

abtv: да, ты тоже прав

> (let [[x & xs] '(1 2 3)] (prn xs))
(2 3)

turtle18:01:21

Fuf? nfr b ,eltn/

turtle18:01:30

Ага. Так и будет.

niquola18:01:52

Давай я запущу simple_smile

niquola18:01:58

опять глючит

abtv18:01:11

давай, я выключил

niquola18:01:41

смотреть - http://youtu.be/KxZGeD2ugOw, но лучше заходите

dottedmag18:01:15

@asolovyov: Ты как-то в ширину увеличился.

asolovyov18:01:49

а как уменьшиться? )

asolovyov18:01:59

ты в смысле не глюк, а в реальности

asolovyov18:01:14

дааа, я за 6 лет на 10 кг увеличился simple_smile

asolovyov18:01:26

за последние два года на 5 точнее, даже так )

dottedmag18:01:37

Правильный харч?

rm18:01:44

на ютьюбе "live stream is starting soon"

asolovyov18:01:55

всякие там уловки 😄

asolovyov18:01:38

вообще не слышно?

asolovyov18:01:44

у меня на маке иногда микрофон перестает работать

asolovyov18:01:49

тогда надо перегружаться (

abtv18:01:55

не слышно

asolovyov18:01:05

ну тогда сек

asolovyov18:01:09

сча попробую хром перезапустить

dottedmag19:01:31

@asolovyov: Так и скажи - нет души.

niquola20:01:34

@asolovyov спасибо! С тебя доклад на распределённой конференции!

rmuslimov21:01:41

Спасибо!, было очень интересно

asolovyov21:01:05

@nicola: какой это еще?

andfadeev21:01:22

))внезапно

abtv21:01:48

Спасибо, Александр, было очень интересно, заходи еще simple_smile

niquola21:01:23

@asolovyov: мы в конце года обсуждали, что наше распеределенное сообщество моглобы и свою конференцию (пока распределенную) организовать

niquola21:01:07

кстати кто готов сделать красивый сайтик для clojure-russia?

potapenko21:01:33

@nicola я могу - но через месяц, у меня тут жуткий дедлайн

potapenko21:01:52

накидай чего нужно.

potapenko21:01:56

@abtv мы на конференции похоже встречались. Я делал доклад по COLT в Киеве кажется. Лицо знакомое.

niquola21:01:02

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

niquola21:01:16

я думаю можно собрать видео

niquola21:01:44

участников со ссылочками и фоточками

niquola21:01:00

@razum2um: может твой сайт расточим?

niquola21:01:00

Инструкция как сюда попасть

niquola21:01:05

Анонс нашей конференции ;)

abtv21:01:48

@potapenko: не, в Киеве я не был на конференции

abtv21:01:59

хотя хз, может где еще

potapenko21:01:14

хм… в Черногорию не заезжал? IT SEA

artemyarulin21:01:17

я за - расскажу может чо)

potapenko21:01:51

@abtv ок, проехали.