Fork me on GitHub
#clojure-russia
<
2016-12-11
>
sarman00:12:58

Можно побомбить по лицензии датомика? Там ведь есть сложные моменты, например, можно ли будет провернуть такое, что смена ключа на другой аккаунт, хотя бы для обновления (ну вот такой за год стартап чтобы сразу в 5 тыщ баксов, не всегда бывает, чтобы). Ну тут же не детский сад, никто пиратить не будет, но они пишут конкретно, что хотите апгрейднуться, то просто смените ключ, то есть данные не подвержены смене ключа. Но всё равно, пожалуй осторонюсь, не такая уж сладкая лицензия, чтобы прямо с неё стартовать. Сначала восторг, а потом вообще неинтересно, это очень печально. Это камень не в datomic, а вообще, в тусовку молодого языка.

sarman00:12:28

нет ли у Вас ощущения, что сменна лицензии - это смешная штука?

sarman00:12:19

то есть их обновление лицензии, имею в виду.

sarman00:12:49

смена

sarman02:12:47

а вынужденый апгрейд всегда можно спровоцировать найденой псевдоуязвимостью

leov05:12:19

у датомика вообще лицензия "вы будете наши рабы"

leov05:12:27

переписывать его нахрен надо на открытый

leov05:12:35

люсин они оказывается вообще на отцепись привинтили

leov05:12:47

все компоненты есть, но работы там на полгода найдётся

leov05:12:53

да и фичей добавить можно

leov05:12:23

просто сначала разобраться надо. Никита это всё описывает, что звучит оно просто и элементарно. Оно нифига не просто и нифига не элементарно, и труда в это вложено немало

leov05:12:03

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

leov05:12:30

@sarman, ну конформити я вкрутил. я больше про это https://github.com/avodonosov/datomic-helpers

artemyarulin06:12:40

кста вот нетфликс открыл либку недавно http://hollow.how, конечно не замена датомик но похожа и довольно годно (данные в памяти у клиента, данные реплицируются с мастера на клиенты, фри опен сорс)

artemyarulin07:12:44

ах, всеж молодец Ричи что сделал кложуру на JVM - бери и юзай все что народ делает

andre07:12:16

@a.espolov в итоге придется написать свой ре-фрейм, т.к. он решает определенный набор проблем с которыми вы сталкнетесь в большой апп

andre08:12:44

я так понимаю это лого скалы 🙂

andre08:12:22

@artemyarulin т.е. cljsjs больше не нужен?

artemyarulin08:12:23

@andre да неа. Если например много интеропа то проще взять готовый extern файл чем везде метатеги пихать. Ну и просто удобно же в депс добавил и все, если без CLJSJS то надо будет npm/bower юзать буэ)

andre08:12:26

c cljsjs удобно?

artemyarulin08:12:49

дада, с ним. и сорс и экстерны, крутож

andre08:12:36

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

andre08:12:45

но это поправимо

artemyarulin08:12:27

ну вот, для таких как раз случаев новая фича самое то

artemyarulin12:12:52

а есть какая функция что одна мапа является подмапой другой?

(let [a {:a 1 :b 2}
      b {:a 1 :b 2 :c 4}]
  (= a (->> a keys (select-keys b))))

artemyarulin12:12:40

спасибо гугл 🙂

malch12:12:05

твой вариант тоже норм, но я бы ->> не использовал

malch12:12:11

читается плохо

malch12:12:29

(= a (select-keys b (keys a)))

artemyarulin12:12:15

(->> a keys (select-keys b) (= a)) troll

malch13:12:42

там не только ключи проверять, как я понял

malch13:12:08

а так да, я тоже с clojure.set начал simple_smile

niquola13:12:34

Ну тогда (into #{} b) ;)

misha14:12:15

-> в ифах - тупо найс, не знаю, что тебе, @malch , не читается

misha14:12:21

Особенно во всяких громоздких формулах с дробями

malch14:12:56

Имхо, если ты пишешь такой макрос, то ты оперируешь над одним объектом, который “главный"

malch14:12:22

(->> xs (filter fn1) (map fn2))

malch14:12:52

а в том случае там главный объект b, а он появляется лишь в последней форме

misha14:12:41

Ну и еще напомню супер шорткат: #(-> {:x %})

malch14:12:19

опять же, на вкус и цвет все фломастеры разные

misha14:12:20

Думаю, что для ванлайнера - пофиг

misha14:12:35

Тоже верно

artemyarulin14:12:47

#(hash-map :x %) как-то читабельней

malch14:12:50

но я считаю, что threading macro должен читаться последевательно, если уж используется

misha14:12:43

@artemyarulin: а вектор? Там vec или vector писать надо? Только не подглядывай kappa

artemyarulin14:12:16

эээ, vector! (50% шанс угадать))

misha14:12:34

@malch: ну это если как ты за "главный" объект одной рукой держался бы, а все операции делал бы другой. Какой-то тесный подход. Вместо того, чтобы главный взять со стола после пары подготовительных шагов, в которых он не участвует

malch14:12:10

а для этого проще тогда let использовать

misha14:12:15

@artemyarulin: "угодать" читалось органичнее )

malch14:12:27

просто мое ощущение “стиля”, не больше simple_smile

misha14:12:45

Согласен, Но разве ты не смотрел страшилку, о том, как оникс из-за промежуточного результата в лете падал с аут оф мемори???

malch14:12:39

Нет, не видел

misha14:12:02

Не видел, а такое говоришь! troll

malch14:12:13

Что-то меня сегодня все троллят тут 😢

leov15:12:37

окей

leov15:12:39

я приплыл

leov15:12:42

вопрос на миллион

leov15:12:08

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

leov15:12:13

(let [uri "datomic:"]
           (d/create-database uri)
           (doto (d/connect uri)
             ((fn [db] (->> (fs/glob "resources/datomic-migrations/*.edn")
                            sort
                            (map #(-> % str (clojure.string/split #"resources/") last
                                      conformity/read-resource))
                            (map #(conformity/ensure-conforms db %))
                            (#(doto % prn)))))))

leov15:12:25

это уже не первый раз когда у меня не работает doto. я что-то делаю не так

leov15:12:46

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

leov15:12:10

могу попробовать переписать в (let [x ..] (..) (..) x)

misha15:12:57

Что-то дофига дуту на квадратный метр кода

leov16:12:50

ну вот если убрать последний - отладочную печать - прекращает работать предпоследняя строка

leov16:12:53

почему - не знаю

leov16:12:10

МАГИЯ

leov16:12:31

ПОЦОНЫ. не ошибитесь. коллекции блин ленивые!! и prn сидел и форсил коллекцию. стираешь его - код нифига и не делает

leov16:12:42

засим там и есть doseq. ушёл читать про ленивосц

leov19:12:34

йесс. я сломал датомик.

#error {
 :cause "String index out of range: 0"
 :via
 [{:type com.google.common.util.concurrent.UncheckedExecutionException
   :message "java.lang.StringIndexOutOfBoundsException: String index out of range: 0"
   :at [com.google.common.cache.LocalCache$Segment get "LocalCache.java" 2203]}
  {:type java.lang.StringIndexOutOfBoundsException
   :message "String index out of range: 0"
   :at [java.lang.String charAt "String.java" 658]}]
 :trace
 [[java.lang.String charAt "String.java" 658]
  [datomic.pull$attr_spec__GT_attr invokeStatic "pull.clj" 145]
  [datomic.pull$attr_spec__GT_attr invoke "pull.clj" 131]
  [datomic.pull$attr_spec__GT_attr invokeStatic "pull.clj" 136]
  [datomic.pull$attr_spec__GT_attr invoke "pull.clj" 131]
  [datomic.pull$normalize_attr invokeStatic "pull.clj" 155]
  [datomic.pull$normalize_attr invoke "pull.clj" 151]
  [datomic.pull$normalize_pattern$fn__5512 invoke "pull.clj" 214]
  [clojure.lang.PersistentVector reduce "PersistentVector.java" 341]
  [clojure.core$reduce invokeStatic "core.clj" 6703]
  [clojure.core$reduce invoke "core.clj" 6686]
  [datomic.pull$normalize_pattern invokeStatic "pull.clj" 198]
  [datomic.pull$normalize_pattern invoke "pull.clj" 168]
  [datomic.pull$normalize_pattern invokeStatic "pull.clj" 194]
  [datomic.pull$normalize_pattern invoke "pull.clj" 168]
  [datomic.impl.FnCacheLoader load "FnCacheLoader.java" 16]

leov19:12:46

я какой-то бета-тестер по жизни)