Fork me on GitHub
#clojure-russia
<
2017-03-29
>
prepor07:03:04

@rkosenko нет, штатных нет. гет, ассок пишется в пару строк, если надо. но в целом ситации наверно разные бывают, не знаю вашу )

rkosenko08:03:32

та хочется как проще - не хочется ни изобретать велосипед, ни добавлять новую зависимость. Ну в общем понял, спасибо, буду думать.

dottedmag11:03:49

@rkosenko сериализовать как #my.ns/sorted-map, а в read-string подсунуть :reader {:my.ns/sorted-map clojure.core/array-map}?

dottedmag11:03:09

Может я не понимаю чего-то, но зачем специальный data reader?

rkosenko12:03:47

@dottedmag

=> (edn/read-string {:readers {:my.ns/sorted-map clojure.core/array-map}} "#my.ns/sorted-map {1 2}")

java.lang.RuntimeException: No reader function for tag my.ns/sorted-map
Вроде ключем у ридеров должен символ, а не keyword, так что должно быть что-то типа такого, тобы оно array-map попыталось вызвать:
=> (edn/read-string {:readers {'my.ns/sorted-map clojure.core/array-map}} "#my.ns/sorted-map {1 2}")

java.lang.IllegalArgumentException: No value supplied for key: {1 2}
Но array-map ожидает не один аргумент типа map. Потому надо делать как-то так:
=> (edn/read-string {:readers {'my.ns/sorted-map #(apply array-map (flatten (seq %)))}} "#my.ns/sorted-map {1 2}")
{1 2}
Но порядок, я так понимаю, может похерится ещё до вызова array-map. Можно, конечно, попробовать сериализировать как вектор, а потом в ридере конвертить в array-map. Наверно, это даже самый простой вариант:
=> (edn/read-string {:readers {'array-map #(apply array-map %)}} "#array-map [1 2 3 4]")
{1 2 3 4}

prepor13:03:42

Вы понимает, что у вас такой аррай мап только на чтение работаеть будет как ожидается?

prepor13:03:37

И даже если сейчас понимаете, то в какой-то прекрасный момент можете (не обязательно именно вы) об этом забыть и словить лулзов?

rkosenko13:03:06

вот потому сделать совсем по-другому и обойтись без array-map и кастомных ридеров вообще... очень странно, что в clojure нет ничего стандартного для для такой типичной для мира lisp-ов вещи, как property list.

prepor13:03:31

в мире лиспов обычно нет иммутабельных мапов, ок? )

prepor13:03:42

а в кложе есть, поэтому проперти листы не особо нужны

prepor14:03:55

@rkosenko еще может быть расскажите изначальную задачу и что-то станет попонятнее

kgofhedgehogs14:03:28

Нет идей как избавиться от or в функции prime? ?

kgofhedgehogs14:03:17

Т.е. Убрать проверку на равенство двойке

kronos_vano14:03:24

а почему сначала сравнивается с 2 а потом проверяется integer?

kgofhedgehogs14:03:48

Иначе получается бесконечная рекурсия при обращении к primes

kgofhedgehogs14:03:13

Двойка это начальное условие для создания primes сейчас

kgofhedgehogs14:03:40

(defn prime? [x]
  (or (= 2 x)
      (and (integer? x)
           (< 1 x)
           (every? #(not (zero? (mod x %))) 
                   (take-while #(< % (js/Math.sqrt x)) primes)))))

kgofhedgehogs14:03:50

(def primes (filter prime? (range)))

kronos_vano14:03:51

сравнивать так с двойкой в целом - ок. Можно совсем извратиться, см: http://www.thesoftwaresimpleton.com/blog/2015/02/07/primes/

kgofhedgehogs16:03:16

Не, это решето. Другой способ просто. Мне понятно, ччто с двойкой проблем нет. Просто хотелось попробовать от нее избавиться

kgofhedgehogs17:03:06

А. Ну и еще вопрос. Как мне сослаться на еще не объявленную функцию?

(def primes (filter prime? (range)))

(defn prime? [x]
  (or (= 2 x)
      (and (integer? x)
           (< 1 x)
           (every? #(not (zero? (mod x %)))
                   (take-while #(> (math/sqrt x) %) primes)))))
primes ссылается на prime?, которая ссылается на primes в при некоторых случаях

kgofhedgehogs17:03:04

Да. Работает. Спасибо

niquola18:03:30

Недавно с ребятами обсуждали, что база на фронте next big thing

kronos_vano18:03:38

В локал сторадж персистится?

misha18:03:34

@nicola и ормчиком полирнуть

misha18:03:30

@nicola там вроде только паровозы, без старой доброй конкатенации

misha18:03:29

db.select().
    from(infoCard).
    from(infoCardDetails).  // exception will be thrown here
    orderBy(infoCard.lang, lf.Order.ASC).
    orderBy(infoCard.itag)  // ok, sort itag after sorting lang

niquola18:03:12

Компилятор напишем

Niki18:03:29

пиздец датаскрипту

Niki18:03:45

говорят что умеют observable queries

Niki18:03:48

> Only Safari 10 and later versions are supported. Интересно, что в 10 версии такого особенного появилось? И вообще если он pure JS, какая им разница на каком браузере гонять? Преподносят как будто кросс-браузерность это достижение

misha18:03:28

Lovefield does not support usage in node.js due to lack of IndexedDB.

Niki18:03:47

хм, в видео кореец затирает что они могут и в памяти всё хранить

Niki18:03:00

но вообще forced persistence это сильно

misha18:03:37

The deprecated WebSQL back store was created for legacy Safari. As of Safari 10, everything is fully supported. Please move away from WebSQL backstore since it will be removed from Lovefield in near future.
There is a LocalStorage-based store for Lovefield testing and will not be public unless sufficient interests arisen.

Niki18:03:04

короче свои проблемы какие-то решают

Niki18:03:22

надеюсь со всей этой мощью inbox не станет еще более тормозным

Niki18:03:27

и так еле шевелится

misha18:03:29

гмейл вроде на этой штуке уже год как

Niki19:03:16

я сомневаюсь что они gmail куда-то там двигают и переписывают

misha19:03:54

а это разные вещи? opieop

andre19:03:46

inbox вообще жестоко затормаживает иногда 😞

prepor19:03:51

@tonsky > говорят что умеют observable queries через перезапуск запроса и диф

prepor19:03:59

скукота

Niki19:03:02

штаааа

Niki19:03:08

так и я умею :))

prepor19:03:35

ну т.е. я не то что бы утверждаю, но судя по докам это так

kgofhedgehogs19:03:46

tree-seq выполняет обход дерева в глубину. А есть вариант обхода в ширину?

prepor19:03:15

> When runner finished any task, it will check whether the finished task altered the scope of observed queries.

prepor19:03:44

// The call below will trigger changes to the observed select. Internally
// Lovefield will run the query again if the scope overlaps, therefore please
// be aware of performance consequences of complex SELECT.

prepor19:03:08

т.е. я так понимаю они примитивный анализ делают типа "если в запросе есть табличка в которую заинсертили"

prepor19:03:22

то перезапустить его и сделать диф

prepor19:03:34

> runner will check whether the bound values has changed from last seen (if any). If so, run the snapshot diff logic and trigger observer accordingly.

prepor19:03:03

Вот если бы они какой-нить https://github.com/frankmcsherry/differential-dataflow из sql компилировали было бы круто

prepor19:03:18

(что сейчас пытается сделать eve на сколько я понимаю)