clojure-russia

Работа и релокейт: #jobs-rus | #clojure-russia-offtop Телеграм-чат https://t.me/clojure_ru
andmed 2017-10-04T04:47:39.000111Z

эт наверное все видели http://clojured.de/call-for-proposals/

a.dan 2017-10-04T08:06:59.000417Z

Как организовать работу с базой данных в clojure. Я наверно сильно избалован ORM. JDBC выглядит слишком низкоуровневой. Korma интересна, но терзают сомнения (игрушкой пахнет). Возможно кто то может подсказать вариант QueryBuilder позволяющий компоновать запрос из готовых кирпичиков?

rustam.gilaztdinov 2017-10-04T08:10:12.000017Z

honey-sql https://github.com/jkk/honeysql

➕ 2
rustam.gilaztdinov 2017-10-04T08:11:07.000389Z

а корма не то( у ханискл хорошо то, что ты работаешь со структурами данных, а в корме — макросы

rustam.gilaztdinov 2017-10-04T08:12:33.000396Z

орм — бяка :rich:

kuzmin_m 2017-10-04T08:15:43.000039Z

@a.dan я эксперимент провожу https://github.com/darkleaf/publicator/blob/master/src/publicator/interactors/user/register.clj#L26-L31 пример крохотный, может быть не очень понятный. можно еще тесты посмотреть. тут идея в том, что бы сделать UnitOfWork и IdentityMap паттерны. но это "неортодоксально" и вообще ересь)) если интересно, могу рассказать подробнее

a.dan 2017-10-04T08:17:43.000102Z

Ну почему же кака. Описал Entity. Описал как её заполнить и сохранить. И всё готово.

kuzmin_m 2017-10-04T08:19:13.000024Z

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

➕ 2
kuzmin_m 2017-10-04T08:19:31.000220Z

если ты занком с этим подходом, то круто

rustam.gilaztdinov 2017-10-04T08:20:48.000334Z

Кто чем пользуется — :leiningen: vs :boot-clj: ?

9
kuzmin_m 2017-10-04T08:21:16.000277Z

я разбирался с boot и ушел опять в lein

kuzmin_m 2017-10-04T08:21:47.000088Z

у boot хорошая идея, но не все ее придерживаются там жопа с cljs, в lein все в разы проще

a.dan 2017-10-04T08:22:00.000241Z

@kuzmin_m Спасибо за пример и предложение. Изучу по подробней.

kuzmin_m 2017-10-04T08:22:11.000252Z

пиши в личку)

ilevd 2017-10-04T08:22:18.000164Z

Еще https://github.com/krisajenkins/yesql есть, правда что-то я не очень им доволен

kuzmin_m 2017-10-04T08:22:32.000143Z

там есть hugsql

kuzmin_m 2017-10-04T08:22:34.000415Z

или как-то так

kuzmin_m 2017-10-04T08:22:42.000125Z

оно пофункциональнее

ilevd 2017-10-04T08:22:48.000253Z

Ага, вот его хочу посмотреть

rustam.gilaztdinov 2017-10-04T08:26:45.000289Z

да, :leiningen: простой, но :boot-clj: более композируемый, кложа-вей и у lein’а плагины, так что еще плюсик ему, хотя может и у бута есть

kuzmin_m 2017-10-04T08:28:20.000145Z

у boot идея правильная а реализация никакая (это мое мнение, может быть излишне категоричное)

kuzmin_m 2017-10-04T08:28:40.000029Z

для clj оба норм

kuzmin_m 2017-10-04T08:28:59.000036Z

а в cljs начинаются приколы с boot как-то так)

2017-10-04T08:29:32.000298Z

а что не так было? у меня прямо противоположные впечатления

👀 1
kuzmin_m 2017-10-04T08:30:55.000369Z

boot-cljs он пишет результирующий js в папку с проектом, а не во временную директорию

kuzmin_m 2017-10-04T08:31:20.000289Z

какая-то засада была с реплом

kuzmin_m 2017-10-04T08:31:37.000302Z

еще оно с докером не подружилось нормально

2017-10-04T08:32:14.000324Z

с докером вроде везде проблемы, это не от сборщика зависит

kuzmin_m 2017-10-04T08:32:22.000005Z

я уже не помню всех деталей но условно 2 недели заняло, что бы разобраться в boot-cljs и дня 2 чтобы figwheel поставить

kuzmin_m 2017-10-04T08:33:49.000306Z

ну и медленный он

2017-10-04T08:33:56.000103Z

эт да

kuzmin_m 2017-10-04T08:34:03.000455Z

lein быстрее cljs собирает

kuzmin_m 2017-10-04T08:34:07.000149Z

прям разительно

2017-10-04T08:34:11.000190Z

к этой “фиче” я до сих пор не привык)

kuzmin_m 2017-10-04T08:34:28.000041Z

т.е. boot собирал секунд 40-60

kuzmin_m 2017-10-04T08:34:32.000161Z

а lein 10

a.dan 2017-10-04T08:34:35.000397Z

honeysql вроде интересен. hugsql на первый взгляд не понятен.

kuzmin_m 2017-10-04T08:34:38.000072Z

это про cljs

2017-10-04T08:34:46.000078Z

это первый старт?

a.dan 2017-10-04T08:34:47.000172Z

В чём его интерес?

kuzmin_m 2017-10-04T08:35:02.000275Z

и все в докере macos с медленным синком файлов

kuzmin_m 2017-10-04T08:35:03.000334Z

да

kuzmin_m 2017-10-04T08:35:26.000260Z

еще я как-то пробовал собрать jar в boot

kuzmin_m 2017-10-04T08:35:32.000131Z

я не дождался

kuzmin_m 2017-10-04T08:35:44.000216Z

может докер виноват

kuzmin_m 2017-10-04T08:35:55.000303Z

в lein не пробовал тот же проект собирать

kuzmin_m 2017-10-04T08:36:10.000103Z

может на ssd и нормально будет 😃

2017-10-04T08:36:43.000318Z

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

2017-10-04T08:37:20.000351Z

по дефолту докер дает всего два гига из 8-ми доступных на моей машине и этого буту маловато

kuzmin_m 2017-10-04T08:37:46.000280Z

https://github.com/adzerk-oss/boot-cljs-repl/issues/32 это про файлы

kuzmin_m 2017-10-04T08:39:45.000123Z

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

kuzmin_m 2017-10-04T08:39:56.000090Z

т.е. sql не мапится 1в1 на edn

kuzmin_m 2017-10-04T08:40:16.000137Z

а вот html мапится 1в1 на edn

kuzmin_m 2017-10-04T08:40:25.000115Z

это про hiccup

a.dan 2017-10-04T08:44:48.000240Z

Ну в простых случаях это выглядит скорее так https://github.com/jkk/honeysql#extensibility

kuzmin_m 2017-10-04T08:47:08.000262Z

ну можно расширить но тебе нужно постоянно переводить с одного языка на другой это как coffee script, т.е. ты думаешь на js, но тебе еще нужно новый синтаксис, и постоянно переводом заниматься

kuzmin_m 2017-10-04T08:47:35.000444Z

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

kuzmin_m 2017-10-04T08:47:50.000011Z

для больших - может быть какой-то кусок написать на sql

kuzmin_m 2017-10-04T08:48:00.000007Z

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

kuzmin_m 2017-10-04T08:48:11.000434Z

никто же не мешает их совместить 😃

a.dan 2017-10-04T08:48:19.000275Z

Ну так модно дойти до отказа от любой абстракц😀ии

kuzmin_m 2017-10-04T08:48:33.000487Z

модно?

a.dan 2017-10-04T08:48:49.000234Z

?

kuzmin_m 2017-10-04T08:48:55.000414Z

или можно?

a.dan 2017-10-04T08:48:59.000067Z

* можно

kuzmin_m 2017-10-04T08:49:43.000286Z

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

a.dan 2017-10-04T08:51:58.000228Z

Да и sql это хороший dsl. Просто хотелось бы типовые конструкции вынести за скобки

a.dan 2017-10-04T08:55:00.000108Z

Не хотелось бы писать типовые select и join для какой то сущности в 10 запросах различающихся только блоком where.

kuzmin_m 2017-10-04T08:56:44.000009Z

наверное, нужно почитать доки к этим библиотекам 😃

a.dan 2017-10-04T08:57:41.000227Z

Это я к вопросу о написании простых запросов на чистом sql.

kuzmin_m 2017-10-04T08:59:14.000292Z

простые запросы - да стремно на sql писать 😃

kuzmin_m 2017-10-04T08:59:18.000216Z

но есть еще view

kuzmin_m 2017-10-04T08:59:34.000396Z

и это может немного помочь

maxp 2017-10-04T08:59:54.000415Z

по поводу boot-cljs у меня как-то так сделано

(deftask cljs-build []
(comp
(cljs :source-map false
:optimizations :advanced)
(sift :invert true :include #{#"\.out/.*"})
(sift :move {#"incs/js/main.js$" "public/incs/js/main.js"})))

maxp 2017-10-04T09:02:32.000030Z

там есть один неочевидный момент с файлом main.cljs.edn

ilevd 2017-10-04T09:09:07.000309Z

Еще функции сгенерированные из sql не резолвятся

a.dan 2017-10-04T09:10:14.000110Z

@ilevd а по подробнее?

ilevd 2017-10-04T09:11:05.000261Z

Неопознанные символы в IDE)

a.dan 2017-10-04T09:14:48.000283Z

Я про "функции сгенерированные из sql"

a.dan 2017-10-04T09:15:11.000314Z

А на IDE я не заработал )

ilevd 2017-10-04T09:16:28.000420Z

Ну да, то есть Cursive их не понимает, что, откуда они. Опечаться можно. У курсива бесплатная лицензия есть)

ilevd 2017-10-04T09:20:45.000216Z

Плюс часто еще надо результаты модифировать, подчеркивания в - перевести, например, обертки иногда приходится писаться, получается как-то размазано, часть кода в sql, часть в clj

a.dan 2017-10-04T09:20:51.000046Z

@ilevd что ты подразумевал под функциями сгенерированными из sql?

ilevd 2017-10-04T09:21:29.000171Z

Ну вот в yesql у меня

(defqueries "sql/queries.sql")

ilevd 2017-10-04T09:21:49.000028Z

И в неймспасе появляются ф-ции после компиляции

ilevd 2017-10-04T09:22:30.000170Z

Отображающие этот файл с запросами

a.dan 2017-10-04T09:22:51.000081Z

О сколько нам открытий чудных....

a.dan 2017-10-04T09:23:52.000376Z

yesql vs hugsql ?

a.dan 2017-10-04T09:26:11.000325Z

@kuzmin_m, не раскроете свою мысль о преимуществах hugsql?

kuzmin_m 2017-10-04T10:15:17.000004Z

если нужно написать сложный запрос. например с несколькими джоинами, нестандартными jon lateral, с полнотекстом, с json, массивами, прочими расширениями постгреса

kuzmin_m 2017-10-04T10:15:27.000062Z

я не знаю их синтаксис

kuzmin_m 2017-10-04T10:15:43.000225Z

я хочу открыть доку и скопировать кусочек sql и адаптировать

kuzmin_m 2017-10-04T10:16:14.000167Z

я не хочу настраивать dsl,я хочу простой sql

kuzmin_m 2017-10-04T10:16:23.000246Z

но если запросы простые и однотипные

kuzmin_m 2017-10-04T10:16:32.000199Z

то тут уже сложнее с простым sql

kuzmin_m 2017-10-04T10:16:45.000330Z

хотя hugsql умеет шаблоны

kuzmin_m 2017-10-04T10:17:03.000032Z

для одних случаев удобнее одно, для других другое

a.dan 2017-10-04T10:19:20.000027Z

Спасибо, уже сижу читаю. 😀 Интересный вариант

a.dan 2017-10-04T10:21:10.000174Z

Я так понимаю hugsql это пересмотренный yesql.

ilevd 2017-10-04T11:32:37.000170Z

Надо леин-плагином чтоб генерилось из sql файла в clj файл)

ilevd 2017-10-04T11:33:36.000025Z

css плагином генерится, cljs генерится, чем sql хуже)

ilevd 2017-10-04T11:34:19.000097Z

И функции будут резолвится и можно было бы нутро смотреть

2017-10-04T14:46:13.000005Z

Эээ

dbushenko 2017-10-04T14:48:44.000450Z

Ну эээ... мы ж с тобой вроде бы тему твоего доклада обсуждаем уже? 😉

2017-10-04T14:49:02.000349Z

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

dbushenko 2017-10-04T14:49:26.000560Z

я и написал -- в первом приближении

dbushenko 2017-10-04T14:50:15.000016Z

ну хочешь -- уберу запись, если ты еще не уверен