Size: a a a

Clojure — русскоговорящее сообщество

2020 August 19

a

artalar in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
А vue js эту задачу не решает ли?
Вроде того, мобых тоже, это как раз и есть курсоры, с апишкой через нативное обращение к свойству.
Примитивная апишка курсора - это кортеж строк
источник

A

Aleksey @cheatex in Clojure — русскоговорящее сообщество
artalar
Привет. У меня вопрос по js 😅
Задам расширенно.

Цель: трекать изменения в иммутабельном стейте не через сравнение ссылок, а как-то иначе, ибо через сравнение неоптимально с коллекциями работать выходит.
Контекст: для реактивных подписок.
Возможные решения: cursor / path. Я с кложей и ее экосистемой совсем не знаком, но так понимаю что cursor / path - это, можно сказать, примитивные линзы, которые описываются названиями пропертей структуры данных.
И вот идея в том что если реализовать возможность подписки на курсор и определить что структуру можно менять только через них, то это даст возможность сильно оптимизировать описание вычисляемых данных из зависимых списков, а так же частично отказаться от нормализации (часто удобнее без нее).

Так вот вопрос, на ЖС имплементаций чего-то подобного не видели?)

P.S. давненько я уже делал что-то такое, но уже забыл что там да как, да и сейчас есть новые знания, которые нужно будет учитывать в новой разработке.
С мутабельными структурами/коллекциями это лютейший факин мэджик будет...
источник

a

artalar in Clojure — русскоговорящее сообщество
Aleksey @cheatex
С мутабельными структурами/коллекциями это лютейший факин мэджик будет...
та не норм
источник

a

artalar in Clojure — русскоговорящее сообщество
Tim Plotnikov
Привет!
Совсем не шарю в этой теме, но тоже сильно интересно как такое эффективно сделать. Если придём к какому-нибудь интересному решению, то я сразу попробую у себя в мобилках сделать что-нибудь такое для эффективного глобального стейта)


Не уверен, что это имеет отношение к вопросу, но вот довольно интересный материал по cursor/path.
Ребята описывают классный метод представления сложных данных (JSON) в виде дерева, которое в свою учередь можно представить в виде НЕ key-value, а path-value.
Примерно это вот так выглядит:
;; key-value

{ name: «John»,
 children: [
   { name: «anne», age: 12 },
   { name: «bob», age: 18 },
   { name: «chris», age: 24 }
 ]
}

;; path-value

name : john
children.1.name : anne
children.1.age : 12
children.2.name : bob
children.2.age : 18
children.3.name : chris
children.3.age : 24


По идее, таким способом можно сколь угодно сложную структуру представить в виде плоской мапы или вообще массива и следить уже за каждым значением или как-то так)

https://www.researchgate.net/publication/316848145_J-Logic_Logical_Foundations_for_JSON_Querying
Тут проблема основная какая: что делать если засетили не просто какой-то литерал в листе дерева, а весь массив обновили - нужно пересчитывать пути, сравнивая значения с глубины, типа deep equal. И это можно по разному разными стратегиями разруливать
источник

A

Aleksey @cheatex in Clojure — русскоговорящее сообщество
artalar
та не норм
Это надо как минимум присваивание в мапах и масивах переопределить чтобы каие-то события триггерились. Сразу серьёзный вопрос к производительности. Например засетить в мапку массив и заполнить его vs засетить уже заполненный массив будет иметь нехилый импакт на скорость.
источник

A

Aleksey @cheatex in Clojure — русскоговорящее сообщество
Ну то есть в принципе решаемо, но не будет прозрачности как в кложуре с имутабельностью и атомами.
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
В re-frame назревает обновление https://github.com/day8/re-frame/issues/639
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
напомните, как проитерироваться по всем ресурсам из папки?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
например, по всем миграциям из resources/migrations
источник

VK

Vadim Komarov in Clojure — русскоговорящее сообщество
Ivan Grishaev
например, по всем миграциям из resources/migrations
Вот такой сниппет завалялся:
(defn- dir-ls-by-ext
 "Returns the list of files with a certain extension relative to the path"
 [path ext]
 {:pre [(.isDirectory (io/file path))]}
 (let [cleaned-ext (string/replace-first ext #"^\." "")
       lower-ext-pattern (str "." (string/lower-case cleaned-ext))
       by-ext #(string/ends-with? (string/lower-case 😵 lower-ext-pattern)]
   (->> path io/file .list (filter by-ext))))
источник

VK

Vadim Komarov in Clojure — русскоговорящее сообщество
Старнно, я думал телеграм не заменяет в коде символы. В общем вот тут исходник функции можно посмотреть: https://github.com/obivan/fiaser/blob/master/src/fiaser/convert.clj#L10
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
а он с джарником работает?
источник

VK

Vadim Komarov in Clojure — русскоговорящее сообщество
Нет, только с файловой системой
источник

VK

Vadim Komarov in Clojure — русскоговорящее сообщество
А нужно в уже собранном джарнике ресурсы смотреть?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
да, в этом и гемор. Локальную папку-то обойти пара пустяков
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
в общем, есть weavejester/resauce
источник

А(

Артур (MIIIG) in Clojure — русскоговорящее сообщество
Alexey Cheremisin
Я писал, если еще актуально.
да, я вам в личку написал
источник
2020 August 20

N

Nikolay in Clojure — русскоговорящее сообщество
Не бейте тапками, подскажите, зачем clojure?
источник

LE

Leonid Eliseev in Clojure — русскоговорящее сообщество
Nikolay
Не бейте тапками, подскажите, зачем clojure?
why not?
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Nikolay
Не бейте тапками, подскажите, зачем clojure?
источник