This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-08-02
Channels
- # admin-announcements (3)
- # architecture (5)
- # beginners (10)
- # boot (223)
- # cider (13)
- # cljsjs (2)
- # cljsrn (50)
- # clojure (208)
- # clojure-austin (16)
- # clojure-belgium (1)
- # clojure-india (1)
- # clojure-poland (13)
- # clojure-russia (130)
- # clojure-spec (27)
- # clojure-uk (144)
- # clojurescript (135)
- # css (2)
- # cursive (10)
- # datavis (1)
- # datomic (29)
- # dirac (9)
- # funcool (2)
- # hoplon (41)
- # jobs (3)
- # leiningen (6)
- # om (37)
- # onyx (20)
- # pedestal (1)
- # planck (1)
- # proton (4)
- # re-frame (45)
- # reagent (17)
- # rethinkdb (16)
- # ring-swagger (19)
- # schema (5)
- # specter (93)
- # sql (16)
- # test-check (33)
- # untangled (7)
Кто что использует для работы с базой данных (postgresql)?
Есть те, кто пишет чистый SQL (hugsql), как вы это организуете? Я создал repository
namespace и там происходит mapping. Но гложет чувство, что что-то делаю не так.
Или большинство предпочитает ORM (korma)?
У кого какой опыт, поделитесь кому не жалко 🙂
@mkaschenko: ^ (my example usage)
I define all sql's related stuff in one ns,and later use them from the uxbox.services namespace
@niwinz: у меня, примерно, так же, только еще сверху абстракция repository
. А у тебя напрямую вызовы типа db/insert-project
?
depends, I have functions in services that does access to db and other perform other kind of logic
later the http part communicate with the services with "messages" so tecnically services can be run in an other process and communicate via rabbitmq/kafka/whatever...
the services part hast two kind of messages: novelty and query, novelty are logged in a transaction log that can be analyzed or used for derive other materialized views (not used at this time in the app...)
I'm pretty happy with the current architecture but it is not silver bullet, it works for me in this case...
@mkaschenko: корма заброшена, плюс она дурацкая
мы юзаем honeysql и все счастливы по этому поводу; оно даж не мешает дропаться в raw, когда в ней не хватает фичи какой-то мелкой
единственное что меня немного смущало, то что я не хотел мешать чистый sql и dsl как, например, active record в rails, или в django и т.д.
@mkaschenko: про Korma и вообще про DB познавательно - https://www.youtube.com/watch?v=kD6GyDesuCQ
про корму: нет смысла тащить в код описание релейшенов, это не дает никакого профита
а просто dsl как например в honeysql это неплохо, можно реюзать куски запросов и композировать запросы средствами языка (без конкатинации строк)
я в 2х проектах использовал honeysql + небольшой свой код для маппинга джойнов. в следующих думаю либо yesql заюзать, либо что-то подобное (чистый jdbc?), чтобы писать запросы на sql. да, на clojure круто запросы писать, но для чего-то нетривиального все равно постоянно приходится лезть в документацию и разбираться, как же на этом dsl это написать (либо raw) + компоузить (@nicola говорил, что главное преимущество, если не ошибаюсь) запросы с ней все равно неудобно.
с другой стороны, yesql форсит тебя, как нужно передавать параметры, а в honey можно любую структуру данных передать в метод и средствами clojure ее расфигачить по параметрам запроса.
я всеже не вижу смысла все запросы переводить в чистые sql файлы, приходится постоянно переключаться между кодом и запросами, по разному редактировать, 90проц запросов какогонить веб-приложения довольно стандартны и dsl вполне хватает
Господа, чот у меня затык. Есть вот у меня на входе вот такая штука
({:instance-id "i-d881e748", :private-ip "10.0.1.4"}
{:instance-id "i-724717f4", :private-ip "10.0.0.207"}
{:instance-id "i-ccb1a649", :private-ip "10.0.0.204"}
{:instance-id "i-f26b3062", :private-ip "10.0.1.193"}
{:instance-id "i-e558947f", :private-ip "10.0.1.149"})
Потом я делаю так:
(->> (->> instances
(map :private-ip))
(map check-uri)
doall)
и получаю вот такой список
("OK" "OK" nil "OK" nil)
мне надо вместо OK чтобы встали instance-id а там где нил ничего не былопробовал filter но чото никак не соображу как соорудить
то есть по идее мне нужен кондишен, если на айпишник check-uri выдал Ok то записать id в список
а вот эту всю лесенку в фильтр засунуть получится?
Ох жеж
rmuslimov: а что значит % в данном контексте?
чото в доке не найду
аа спасибо
Вместо <DATA> моя перменная с хешмапой? правильно?
user=> (get-not-healthy-ids)
("i-d881e748" user=>
чото как-то не получилось
(defn get-not-healthy-ids []
(let [instances (get-instances-ec2)]
;; (pprint instances)
(map :instance-id
(filter #(-> % :private-ip check-uri) instances))))
(defn check-uri [ip]
(slurp (str "http://" ip ":3000/health-check")))
user=> (get-not-healthy-ids) ({:instance-id "i-d881e748", :private-ip "10.0.1.4"} {:instance-id "i-724717f4", :private-ip "10.0.0.207"} {:instance-id "i-ccb1a649", :private-ip "10.0.0.204"} {:instance-id "i-f26b3062", :private-ip "10.0.1.193"} {:instance-id "i-e558947f", :private-ip "10.0.1.149"}) ("i-f26b3062")
user=> (true? (check-uri "10.0.1.4")) false
похоже криво чек айпи )
user=> (check-uri "10.0.1.193")
true
user=> (check-uri "10.0.1.149")
user=>
а где фолс?
похоже slurp надо менять на что-то где можно получить код респонса
Товарищи, подскажите — есть задача — беру данные из редиса, как pub/sub, дальше надо достать нужные поля и положить в dynamodb в связке с titandb. БД графовая, соотвественно надо либо дописать связей к существующей вершине, либо создать новую. Для всех баз обертки нашел, дальше вот думаю — может написать макрос, чтобы завернуть все это дело в него или лучше подойдет какое другое решение для таких случаев? Макрос кажется хорошей идеей, но вот может кто примером поможет? В кложе начинающий, выпала возможность впилить ее в проект, руки чешутся)
(defn healthy? [m]
(-> m :private-ip (clojure.string/starts-with? "10.0.1.")))
(defn healthy-ids [mm]
(->> mm
(filter healthy?)
(map :instance-id)))
(healthy-ids
[{:instance-id "i-d881e748", :private-ip "10.0.1.4"}
{:instance-id "i-724717f4", :private-ip "10.0.0.207"}
{:instance-id "i-ccb1a649", :private-ip "10.0.0.204"}
{:instance-id "i-f26b3062", :private-ip "10.0.1.193"}
{:instance-id "i-e558947f", :private-ip "10.0.1.149"}])
=>>
("i-d881e748" "i-f26b3062" "i-e558947f")
@lowl4tencyАпу делаю на RN/Reagent https://www.youtube.com/watch?v=hAzmUE0WJ6c&feature=youtu.be
@potapenko: как она на девайсе себя чувствует? и на каком?
"react": "15.2.0",
"react-native": "^0.30.0",
"react-native-animatable": "^0.6.1",
"react-native-device-info": "^0.9.3",
"react-native-drawer": "^2.2.4",
"react-native-fbsdk": "^0.3.0",
"react-native-fcm": "^1.0.9",
"react-native-fs": "^1.5.1",
"react-native-simple-router": "^0.10.0",
"react-native-swipe-list-view": "^0.2.2",
"react-native-vector-icons": "^2.0.3",
"react-native-video": "^0.8.0"
(defn visible-helper
([index content] (visible-helper key content [view]))
([index content not-visible]
(let [start-visible-index (dec (/ @phrases-scroll-pos 45))
end-visible-index (+ start-visible-index 10)]
(if (and (>= index start-visible-index)
(<= index end-visible-index)) content not-visible))))
такая хрень для ячееквот этим починил? https://facebook.github.io/react-native/docs/listview.html#initiallistsize
потом
(defn phrase-row-front
[row-data]
[view {:style [(height 45)]}
[visible-helper
(line-index row-data)
[phrase-row-front-visible row-data]
[phrase-row-front-not-visible row-data]
]]
)
видеоплеер прикольный, фишка в том что он и аудио проигывает и файлы локальные тоже, сохраняю видео в файловую систему - а потом уже локально беру, меньше нагрузки на сервер и оффлайн можно играть
но он почему-то работает только с ячейками, которые вначале, если изменить initiallistsize, то норм…. но так инициализация большого списка занимает десяток секунд, а то и больше.
хотя я тут перебирал charting библиотеки, топ 2 не умели строить time series чарты, где грубо говоря по ox - разное расстояние между точками. в итоге я стал меньше удивляться всякому
я пока очень длинные листы не рендерил, так что еще не совсем прощупал где что работает, а где нет
misha: спасибо выглядит понятнее )