@proelixir

Страница 903 из 1045
Максим
09.03.2018
19:14:26
Ну, синатра это роутер с ассетами и небольшими мелочами, хз что там клонить

Azat
09.03.2018
19:27:15
спринг например тоже, но на него почему-то никто не равняется, никто не пишет в дескрипшене мол у нас как в спринг только на другом ЯП-нейм

Google
Azat
09.03.2018
19:33:31
Trygve Reenskaug introduced MVC into Smalltalk-76 while visiting the Xerox Palo Alto Research Center (PARC)[10][11] in the 1970s. In the 1980s, Jim Althoff and others implemented a version of MVC for the Smalltalk-80 class library. Only later did a 1988 article in The Journal of Object Technology (JOT) express MVC as a general concept.[12] The MVC pattern has subsequently evolved,[13] giving rise to variants such as hierarchical model–view–controller (HMVC), model–view–adapter (MVA), model–view–presenter (MVP), model–view–viewmodel (MVVM), and others that adapted MVC to different contexts. The use of the MVC pattern in web applications exploded in popularity after the introduction of NeXT's WebObjects in 1996, which was originally written in Objective-C (that borrowed heavily from Smalltalk) and helped enforce MVC principles. Later, the MVC pattern became popular with Java developers when WebObjects was ported to Java. Later frameworks for Java, such as Spring (released in October 2002), continued the strong bond between Java and MVC. The introduction of the frameworks Django (July 2005, for Python) and Rails (December 2005, for Ruby), both of which had a strong emphasis on rapid deployment, increased MVC's popularity outside the traditional enterprise environment in which it has long been popular.

Alister
09.03.2018
21:06:48
кучу бойлерплейта, стектрейс в базильйон строк и xml-конфигурация?

Roman
10.03.2018
02:06:56
Vladimir
10.03.2018
03:49:49
Вот именно. Вся прелесть хот релоада не в обновлении на лету, а в возможности прицепится к проду и лог запихнуть в проблемное место. Потому что настоящие проблемы никакими дурацкими моками не сымитируешь.
Мы так на Эрланге код периодически фиксили. Заказчику, например, нужен срочный фикс. Изучаем код на проде, фиксим, хотрелоадим. Если всё ок, то получившийся патч переносим в наш репозиторий и собираем новую версию пакета. С другой стороны - у нас там телеком был, и останавливать обслуживание клиентов в высшей степени нежелательно. А в вебе на небольшой перерыв в обслуживании обычно забивают - клиенты подождут. Вебщина же ёпта :)

В телекоме хотрелоад - мастхэв.

Dmitry
10.03.2018
09:25:03
@VladPotap С кластером и rolling update уже не так обязательно.

Evgeny
11.03.2018
13:13:10
Вопрос по Ecto. Есть ли возможность сгенерить чейнджсет из заполненной структуры-схемы?

Никита
11.03.2018
13:14:14
Map.from_struct

Evgeny
11.03.2018
13:15:35
Map.from_struct
ну я так сейчас делаю: Ecto.Changeset.change(%Foo{}, Map.from_struct(new_foo)) но это как-то очень костыльно выглядит

Никита
11.03.2018
13:17:28
Да нормально выглядит. А функция Foo.changeset определена? Если да, то в нее можно передать мап из структуры. мож поприличнее будет выглядеть.

Evgeny
11.03.2018
13:18:19
но тогда Foo.changeset будет выглядеть неприлично :)

Никита
11.03.2018
13:19:40
ну генераторы феникса делают такие функции и все прилично) но дядьки из феникса в приличиях мало понимают))

Google
Evgeny
11.03.2018
13:20:20
А в стандартной поставке Ecto есть генераторы таких функций?

И еще, какой толк в Repo.insert_or_update, если один хрен надо сначала запрашивать вставляемый_или_обновляемый объект из БД?

Вот есть структура-схема, заполненная. Нужно просто одним запросом либо засунуть ее в БД, либо проапдейтить, если первичный ключ уже существует. Как это сделать?

Alex
11.03.2018
14:39:21
Максим
11.03.2018
15:53:13
Всем привет! Подскажите как сделать красиво. Есть модуль, он реализует определённую функциональность. Нужно сделать такой же, но вызывающий некоторые функции с другим набором аргументов. Дублировать код не хочется. Есть какой-то правильный способ?

и это должен быть именно отдельный модуль.

Evgeny
11.03.2018
16:15:35
.insert_or_update
А пост выше прочитать никак? Да и в своем вопросе я просил одним запросом

Dmitry
11.03.2018
16:15:45
Что подразумевается под дублированием кода? Надо описать возможные варианты функций с разной арностью и вызывать основную функцию. Чтобы сделать Красиво - надо расширить имеющийся модуль, обеспечить полиморфизм функций. Это будет правильно, имхо. А так, можно создать новый модуль, зареквайрить исходный и дописать оставшиеся функции

Evgeny
11.03.2018
16:15:56
И еще, какой толк в Repo.insert_or_update, если один хрен надо сначала запрашивать вставляемый_или_обновляемый объект из БД?

Please note that for this to work, you will have to load existing structs from the database. отсюда https://hexdocs.pm/ecto/Ecto.Repo.html#c:insert_or_update/2

Максим
11.03.2018
16:45:26
Что подразумевается под дублированием кода? Надо описать возможные варианты функций с разной арностью и вызывать основную функцию. Чтобы сделать Красиво - надо расширить имеющийся модуль, обеспечить полиморфизм функций. Это будет правильно, имхо. А так, можно создать новый модуль, зареквайрить исходный и дописать оставшиеся функции
есть бот под телегу, в боте кнопки, кнопки верхнего уровня есть GenStateMachine, внутри дергают внешний апи. Нужно добавить ещё одну кнопку с таким же набором действий как у одной из текущих, но внутри апи будет вызываться немного с другим набором параметров

каждая кнопка есть процесс в регистри для пользователя

Evgeny
11.03.2018
17:42:02
В экто есть опции on_conflict/conflict_target для insert.
вот это уже интересней, спасибо.

abc
11.03.2018
18:25:17
кто-нибудь уже пробовал DynamicSupervisor ? Есть проблемы ?

Dmitry
11.03.2018
20:06:26
Кто-то с arangodb игрался или что-то делал?

Google
Aleksandr
11.03.2018
20:41:59
Кто-то с arangodb игрался или что-то делал?
Смотрели, когда выбирали графовую бд, в итоге сделали выбор в пользу neo4j ?‍♂️

Dmitry
11.03.2018
20:47:38
@avfomin neo4j же по бенчмаркам медленнее же и имеет spof (т.е. master-slave)?

Nikolai
11.03.2018
20:48:33
Прямо сейчас играюсь. Вроде приятная вещь, но раздражает разнородность апи — запросы AQL, транзакции каким-то жаваскриптом.

Aleksandr
11.03.2018
20:49:51
Нам нужна была именно графовая бд, данных мало, нагрузка не большая, победил более выразительный (имхо) язык запросов и вагон инфы на то время (два с лишним года назад)

Dmitry
11.03.2018
20:51:17
@avfomin Ясно, понятно.

@n_vasilenko Да уж, транзакции какие-то на скорую руку сделанные. Благо есть _rev для check-and-replace для консистентного обновления одиночного объекта.

@n_vasilenko Я тоже играюсь.

@n_vasilenko Переделал одну query с postgres-а и она работает в 5-10 раз медлленнее...

И я теперь не понимаю, либо она для обычных query настолько медленнее, либо я что не так сделал.

Очень нерпиятно вместо 40ms иметь response time до 500 ms.

Nikolai
11.03.2018
20:59:59
А это какого плана запросы? Я смотрел в основном всякие поиски кратчайшего пути, проходы вверх-вниз.

Dmitry
11.03.2018
21:04:29
@n_vasilenko Не связанный с графами пока. Вот так выглядит моя query в ecto: query = from( l in Location, limit: 10, where: like(l.name, ^("%" <> ilike <> "%")) and l.population > 0, order_by: [desc: l.population, asc: l.name] ) - вот так выглядит моя query в arangodb: {"bindVars":{"v0":"%varhere%"},"query":"FOR e IN location FILTER e.name LIKE @v0 SORT e.population DESC LIMIT 0, 10 RETURN e"} В обоих случаях name проиндексированны(в случае arangodb skiplist, может другой индекс попробовать?). В случае если я ищу в postgres %a% (worstcase) то это занимает 180ms, в более точных match-ах занимает 40ms, в случае с arangodb - worstcase 520ms, более конкретный запрос 270ms.

Nikolai
11.03.2018
21:07:02
А ты там пробовал EXPLAIN нажимать? У меня на поиск LIKE-ом индекс не применился.

Dmitry
11.03.2018
21:07:24
Хм, может быть.

Ещё не пробовал.

Nikolai
11.03.2018
21:09:22
Query string: FOR folders IN Folders FILTER folders.name LIKE "user%" RETURN folders Indexes used: none Query string: FOR folders IN Folders FILTER folders.name == "user" RETURN folders Indexes used: By Type Collection Unique Sparse Selectivity Fields Ranges 6 hash Folders false false 0.01 % [ `name` ] (folders.`name` == "user")

хм. там же у меня hash. он и не должен.

Dmitry
11.03.2018
21:14:55
@n_vasilenko Arango.Query.explain [from: "location", limit: 10, filter: {"name", :like, "%a%"}, sort: {:desc, "population"}] => Про индексы ни слова. Arango.Query.explain [from: "location", limit: 10, filter: {"name", :==, "test"}, sort: {:desc, "population"}] => indexes: [ %{ deduplicate: true, fields: ["name"], id: "6848704", sparse: false, type: "skiplist", unique: false } ],

@n_vasilenko Так и есть...

Мне ответили в arangodb канале, что стоит попробовать CONTAINS - не использует индекса, но быстрее, либо FULLTEXT.

Google
Nikolai
11.03.2018
21:17:26
> Arango.Query. А это что за либа такая?

Dmitry
11.03.2018
21:19:09
@n_vasilenko Я свою небольшую написал для тестирования arangodb.

Taras ?
11.03.2018
21:28:02
Смотрели, когда выбирали графовую бд, в итоге сделали выбор в пользу neo4j ?‍♂️
говорят если настроить в посгресе индексы правильно — будет результат даже лучше чем эти графовые бд, в том числе и места на диске сожрет не так много

Dmitry
11.03.2018
21:30:47
@TTaraskin В arangodb - так и сделано, граф - это просто таблица типа edges с индексами на _to и _from.

Aleksandr
11.03.2018
21:30:57
говорят если настроить в посгресе индексы правильно — будет результат даже лучше чем эти графовые бд, в том числе и места на диске сожрет не так много
Не спорю, просто наша задача решилась проще с neo4j. Самое главное было сделать быстро и проще поддерживать.

Taras ?
11.03.2018
21:31:21
да что ж все так пиарят этот нео...

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

жесть просто(((

Aleksandr
11.03.2018
21:36:59
Вероятно, для каких-то задач такой класс бд удобнее. Постгрес замечательный, никто ж не спорит)

Dmitry
11.03.2018
21:40:27
У нас используется titan как графовая db, с преимуществом перед neo4j и postgresql тем, что она не master-slave и скалируется соответственно. arangodb тоже этим отличается, как и dgraph.

Преимущество графовых db - в том, что намного проще писать query - в postgres - нужно рекурсивные сложные SQL писать, которые в графовых db умещаются часто чуть ли ни в одну строчку.

Taras ?
11.03.2018
21:43:18
я сам такого еще не писал, не дошел, слышал только от более опытного коллеги что там не складно и не страшно)

Dmitry
11.03.2018
21:44:36
Писать на gremlin-е(языке предназначенным для графов) графовые запросы - это очень больно.... Наверное с этим ёжиком здесь никто не сталкивался.

Ну, я писал когда-то давно рекурсивные query - не то чтобы страшно, просто многословно, и менее интуитивно, дольше дебажить.

Yuri
12.03.2018
07:54:05
привет, кто как кеширует в фениксе ?

Dmitry
12.03.2018
08:06:38
https://github.com/melpon/memoize

Yuri
12.03.2018
08:11:57
благодарю

Артем
12.03.2018
08:12:27
Посоны. А всё-же-таки. Допустим, есть некий воркер, который вырабатывает события для обработки. Я хочу, чтобы эти события обрабатывал пул воркеров, причём обработка осуществлялась cast(что исключает poolboy). Без очередей и подобных вещей никак не обойтись?

gen_stage тоже исключён из-за обратного давления

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

Google
Артем
12.03.2018
08:20:26
или может у меня просто очередефобия

Артем
12.03.2018
08:26:54
GenStage работает в этом случае
для этого как раз нужно его сочетать с той же очередью, из которой он будет в _demand читать

Страница 903 из 1045