
Olzhas
01.08.2018
08:50:54
вы модуль пытаетесь собрать как исполняемый файл

Данила
01.08.2018
08:53:12

Olzhas
01.08.2018
08:53:26

Google

Oleg
01.08.2018
08:57:45

Daniel
01.08.2018
08:58:54
таааак
я все пропустил

Oleg
01.08.2018
08:59:31
давай я повторю

Daniel
01.08.2018
08:59:56
Ага

Oleg
01.08.2018
09:03:21
Есть REST API, в нем метод для частичного обновления сущности PATCH. Он может быть реализован как:
1) https://tools.ietf.org/html/rfc7386
2) https://tools.ietf.org/html/rfc6902
3) пересылать полностью состояние сущности, при этом запоминать все версии сущностей, вычислять дельту по сравнению с нужной версией
4) пересылать полностью состояние сущности, при этом придумывать блокировки на время редактирования
5) пересылать полностью состояние сущности, при этом слать клиента лесом если он пытается изменить устаревшую версию сущности.
Что из этого кто использует, что проще, как реализовывать на golang?

Daniel
01.08.2018
09:04:27
я бы, если бы ТЗ позволяло, делал 5
тут несколько плюсов:
1. не надо реализовывать логику мерджа
2. не надо думать о том, кто первый встал и чьи тапки
3. на случай конкурентного изменения у нас есть четкий индикатор того, что что-то пошло не так

Аркадий
01.08.2018
09:08:54

Daniel
01.08.2018
09:09:10
нет, конечно

Google

Oleg
01.08.2018
09:09:23

Daniel
01.08.2018
09:09:39
там только sequence надо хранить, и сравнивать с тем, что приехало

Аркадий
01.08.2018
09:09:45
Тогда мб проще на уровне бд атомарно записать?

Daniel
01.08.2018
09:10:10
и проверку сиквенса на триггер?
можно и так

Аркадий
01.08.2018
09:11:19
Получается одна транзакция

Oleg
01.08.2018
09:59:31
еще мнения будут?


Alexander
01.08.2018
10:04:20
Есть REST API, в нем метод для частичного обновления сущности PATCH. Он может быть реализован как:
1) https://tools.ietf.org/html/rfc7386
2) https://tools.ietf.org/html/rfc6902
3) пересылать полностью состояние сущности, при этом запоминать все версии сущностей, вычислять дельту по сравнению с нужной версией
4) пересылать полностью состояние сущности, при этом придумывать блокировки на время редактирования
5) пересылать полностью состояние сущности, при этом слать клиента лесом если он пытается изменить устаревшую версию сущности.
Что из этого кто использует, что проще, как реализовывать на golang?
я бы сделал так
1) Шлется некий GET запрос, на ендпоинт, которым мы показываем, что хотим отредактировать некую сущность. Сервер делает лок на сущность и в ответ на клиента передается некий токен
2) На клиенте происходит какое-то редактирование сущности и потом вся сущность передается на сервер, вместе с полученным токеном
3) Сервер проверяет что сущность открыта на редактирование клиентом именно с таким токеном и производит обновление сущности
4) Все время, пока кто-то уже открыл сущность на редактирование, все остальные такие запросы отбиваются с ошибкой "юзер такой-то уже редактирует такую сущность".
5) У всех запросов на редактирование есть определенный таймаут, во избежание перманентного лока на редактирование


Anton
01.08.2018
10:14:49

Alexander
01.08.2018
10:15:05
просто на lock если кто-то уже занял шлется отлуп. и есть автоматический unlock, если что-то пошло не так

Aleksandr
01.08.2018
10:15:33

Alexander
01.08.2018
10:16:00
условно - бэк-офис в котором работают менеджеры

Vladimir ?
01.08.2018
10:17:05

Lesha
01.08.2018
10:18:15
Гайз, не очень понимаю куда вопрос лучше задать, поэтому сюда.
Есть задачка. Дано много (миллиарлды) многомерных векторов с одинаковой размерностью.
На вход подается новый вектор и нужно найти N ближайших к нему по метрике косиносного расстояния (или евлидова). На чем такое можно построить? Или лучше свой велосипедик писать на гошечке?

Oleg
01.08.2018
10:18:21
на мой взгляд надо рассчитывать на три edgecase. 1) Редактирование с контролем номера версии сущности на уровне формы 2) Редактирование на уровне отдельного поля 3) Очень конкурентное редактирование с организацией потока сообщений о каждом элементарном изменении и рассылкой (гуглодоки)

Lesha
01.08.2018
10:19:06
ну и да, время на запрос очень ограничено

Daniel
01.08.2018
10:20:33

Roman
01.08.2018
10:20:49

Google

Roman
01.08.2018
10:21:15

Lesha
01.08.2018
10:21:22

Roman
01.08.2018
10:21:28

Lesha
01.08.2018
10:23:08
Железом не обделены. Что-то вроде интелов E5-2620 и много памяти

Roman
01.08.2018
10:24:08

Lesha
01.08.2018
10:24:50

Vladimir
01.08.2018
10:25:09

Lesha
01.08.2018
10:25:50
ну по сути, кроме этой задачи такие сервера не будет ничем другим заниматься. трафика достаточно там будет

Roman
01.08.2018
10:26:21

Евгений
01.08.2018
10:26:30

Lesha
01.08.2018
10:28:35

Daniel
01.08.2018
10:33:44

Daniel
01.08.2018
10:34:18
но хорошо не будет - там, очевидно, полный перебор

Lesha
01.08.2018
10:34:58

Daniel
01.08.2018
10:35:56
а как вы хотите? индексы хорошо работают на одномерных векторах
на многомерных - не очень
но у вас-то вообще евклидово расстояние (даже не манхеттен)

Lesha
01.08.2018
10:37:11
вся база векторов будет создавать какое-то пространство и мы его можем поделить на части. И при поиске ближайших векторов к заданному просто охватывать ближайшие области.
Можно это представить в двумерном виде как карта. Ткнул в глобус пальцем, и ищешь ближайшие города на материке. Нет смысла на других искать

Daniel
01.08.2018
10:37:34
можем и поделить, не вопрос
будут ошибки на границах областей

Google

Lesha
01.08.2018
10:40:50
если углубиться в задачу - это word2vec поисковой двиг
я думал может уже что-то готовое есть, что бы не изобретать
очень понравилось описание R-дерева попробую туда капнуть https://ru.wikipedia.org/wiki/R-дерево_(структура_данных)

Мерлин
01.08.2018
10:50:48

Admin
ERROR: S client not available

Мерлин
01.08.2018
10:51:11
тот же постгрес
или более специализированная

Аркадий
01.08.2018
11:12:14
Ребята, скажите пожалуйста, как сделать так, чтоб можно было повторно в переменную присвоить значение :
token, _ := uuid.NewV4()
token = token.String()
не работает вторая строка

Daniel
01.08.2018
11:12:54
OMG

Mush
01.08.2018
11:13:38

Аркадий
01.08.2018
11:14:04
да, но мб можно както освободить или типо того?

Daniel
01.08.2018
11:14:31
а?!

Mush
01.08.2018
11:14:31
нет

Аркадий
01.08.2018
11:15:01
тоесть по любому вторую переменную создать?

Alexander
01.08.2018
11:15:02

Аркадий
01.08.2018
11:15:18

Daniel
01.08.2018
11:15:33
на самом деле - вы хотите функцию, которая будет возвращать string

Mush
01.08.2018
11:15:40

Виктор
01.08.2018
11:15:42

Аркадий
01.08.2018
11:16:02

Google

Аркадий
01.08.2018
11:16:12

Daniel
01.08.2018
11:16:39

Аркадий
01.08.2018
11:16:52

Artem
01.08.2018
11:33:50

Аркадий
01.08.2018
11:40:03

Lesha
01.08.2018
12:37:38
Но я попробую еще понизить размерность векторов, может быть как раз до 4 получится и все заработает.

Aleksey
01.08.2018
13:41:40
Aleksey Kislitsa:
Что можно почитать про go generator, кодогенерацию и правильное и неправильное использование?

Daniel
01.08.2018
13:46:11
go generate - это просто способ вызвать команды, прописанные в специальных комментах
а что за команды туда писать - это вопрос к разработчику
в общем и целом никакого стандарта (пока?) на это нет

Artem
01.08.2018
13:56:33

Данила
01.08.2018
14:40:16
По каким-то причинам не удаётся распарсить JSON
https://play.golang.org/p/hOYnh73ISLd
Точнее, возвращается пустой результат