This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-09-25
Channels
- # aleph (15)
- # beginners (65)
- # boot (46)
- # chestnut (3)
- # cider (1)
- # clara (11)
- # cljs-dev (5)
- # cljsjs (4)
- # cljsrn (13)
- # clojure (180)
- # clojure-dev (2)
- # clojure-italy (10)
- # clojure-russia (62)
- # clojure-spec (6)
- # clojure-uk (85)
- # clojurescript (45)
- # community-development (11)
- # crypto (3)
- # cursive (10)
- # datomic (94)
- # defnpodcast (2)
- # fulcro (4)
- # heroku (1)
- # hoplon (4)
- # jobs (3)
- # juxt (10)
- # leiningen (1)
- # luminus (4)
- # mount (13)
- # music (1)
- # off-topic (10)
- # onyx (2)
- # portkey (15)
- # proton (2)
- # re-frame (16)
- # reagent (10)
- # shadow-cljs (194)
- # spacemacs (2)
- # specter (2)
@dottedmag так хероку чем не вариант?
Хероку на бесплатном тарифе дает 500 часов работы приложения (точнее, на все приложения с одного аккаунта) в месяц. Можно подтвердить кредиткой (не пробовал) и получить 1000. И если приложение (оформленное как вэб, а не как службу или как-то там еще) полчаса не дергать, то херока сама его завершает, для экономии этих самых часов.
@rmuslimov А я не знал, что там джава.
типа так
(defn get-type [type-field]
(let [type (:type type-field)]
(if (string? type) @(resolve (symbol type)) type)))
зы: уж лучше делать как советовали выше - declare + #'x ссылки нежели юзать resolve... не делай resolve лучше
https://www.youtube.com/watch?v=Pa2OMjxkZ-c записал небольшую демку RN , CursiveIDE
@anjensan это моя попытка сделать циклический граф. Хорошо, я поменяю свои резолвы на символы, просто с символами не догадался что их надо тоже декларить, но выше подсказали.
@ivana а зачем тебе вообще циклический граф? он реально нужен? может тут проблема глубже
я уверен что нужен. хотя могу ошибаться. смотри - у меня есть sql таблицы: юзер, и связанные с ним комменты. В Графкуэле некто набирает запрос: подать юзера Иванова, все его комменты, у каждого коммента автора, у каждого автора все его комменты... и так раз 10 по вложенности 🙂 Пример искусственный, но думаю ты понимаешь о чем я. Мне надо пройтись по этому запросу и некоей своей структуре, которая поможет выбрать данные. ВОт эта моя структура и должна в таком случае быь циклическим графом - Юзер содержит комменты, а коммент содержит Юзера-автора.
ну понятно, что любая задача может быть решена как угодно - но мне проще было придумать так
в этом подходе то как раз у меня сложностей и сомнений нет, только была засада после Хаскеля понять как в Кложе подобные вещи делаются. Теперь понял. (Или снова выдашь значок наркомана? 😉 )
а кто мешает это хранить не как {:user "user1" :comments [{...}, {...}]}, а скажем так {:users {"User1" {... :comments [1 2 3]}, ... :commets {1 {...}, 2 {...}, ...}}
т.е. отдельно хранишь список юзеров, отдельно комментарии.. для ссылки на комментарий или просто его айди
так в sql так и хранится. но мне надо запрос красивый к sql составить по тексту графкуэля.
чтобы знать какие таблицы и поля запрашивать, как джойнить и вэрить и т.п. вот эти соответствия в моем графе и лежат. и для данного запроса этот мой граф состоимт всего из 2 нод, взаимно ссылающихся
простейшая математика из младших классов... у тебя 10 юзеров... у каждого 10 комментариев... итогда 100 комментариев... у каждого комментария один автор... у каждого автора 10 комментариев... у тебя 1000 комментариев... у каждого один автор, у каждого автора 10 комментарев... у тебя 10000 комментариев
короче такие деревья (построенные из циклических графов) обладают нев*ной такой избыточностью. и это прямой путь убить своей сервер переполнением памяти всяким таким
даже в твоем примере (юзер с айди 1, 5 циклов user -> comments) у тебя будет на последнем n ^ 5 комментов на последнем уровне
в этом графе 2 типа - a и b из примера выше. что отдавать юзеру - дело 10-е. можно и при линейном запросе спросить таблицу из 100500 записей. дело не в иерархичности и цикличности. если надо зарубить отдачу терабайт с сервера, пусть это делается другими методами. хоть и в моем модуле. но лучше будет возможность циклических запросов, и зарубать большие данные отдельно, чем я буду краснеть, что не могу выдать тривиальщину - юзера, его комменты и список лайкеров его комментов.
так что такое a и b ? это... инфа о таблицах {:name "TableName" :ref <something-strange?} ?
это большие мапы, в которых сказано откуда брать какие данные из базы, и какие подчиненные простые поля и сложные типы можно запрашивать.
@anjensan а я то и думаю, неужели даже здесь, в части в которой я уверен, я опять что-то не догоняю 🙂 но вроде все встало на свои места.
у меня эти ссылки не всегда циклические конечно же. но просто надо было придумать, как сделать, если они вдруг случатся такими. может на проде на базе заказчика их и не будет.
Как отключить лог-спам? При старте сервера пишет
19:16:05.803 [main] DEBUG org.eclipse.jetty.util.log - Logging to Logger[org.eclipse.jetty.util.log] via org.eclipse.jetty.util.log.Slf4jLog
19:16:05.811 [main] INFO org.eclipse.jetty.util.log - Logging initialized @1449ms
а потом начинается полный ужас - терминал загаживается сотнями сообщений в секунду и становится неюзабельным. Несколько часов гуглю, пробую разные варианты, и не могу добиться результата. Я уже готов плохое делать разработчикам логеров.@ivana а какой у тебя логгер? обычно нужно настроить какой log4j или logback, там указываешь каким пакетам “молчать” а каким “говорить” 🙂
https://logging.apache.org/log4j/2.x/manual/configuration.html https://logback.qos.ch
не знаю какой - какой либы притащили с собой. я пробовал настраивать и создавать конфигурационные файлы разные, не помогало. сейчас я тупо удаляю все зависимости из проекта, в которых вижу слово log. если после этого перестанет работать, буду восстанавливать и тихо ненавидеть разработчиков такого удобного софта
удаление тоже не помогает - я их из структуры проекта удаляю, а в дереве депенденс трее ленингена логеры остаются
собери проект через тот же Luminus, http://www.luminusweb.net/docs сгенери проект заново, добавь свои зависимости. Перенеси исходники. Толковый набор либ. а потом поправь логгинг http://www.luminusweb.net/docs/logging.md clojure - это сначала джава, оттуда и идут всякие логгинги и log4j
Подсказали волшебное слово :exclusions
, методом тыка вырезал из нужной либы зависимости на логи, оно все не хотело работать, но оставил эту slf4j и эксклюдил пару логбаков - и вот он, йаааазззь!
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See for further details.
и вроде остальное все нормально работает, детально не проверял, но навскидку да.
PS какая хреновая это зараза - библиотеки логинга!