
Aleksandr
24.05.2017
13:17:59
ну логично. но почему в шаблоне разные переменные? почему нельзя if'ов наделать итд, и подавать в шаблон стандартную структуру?
у вас что, на разные компьютеры разные шаблоны?

hdhog
24.05.2017
13:18:49
у вас что, на разные компьютеры разные шаблоны?
да, вполне. один скрипт должен збрать лог из пути в котором есть имя ПК или версии ПО. на разных ПК разная версия например. или тот же лог в другом месте.
так же для разных пк всегда разные сервера с логами. точнее для групп пк

Google

Олег
24.05.2017
13:20:17

hdhog
24.05.2017
13:20:32
нет. не получится перечислить.
если нужно будет задать переменную которой нет в подгтовленном наборе? тогда что править исходники приложения?)

Мерлин
24.05.2017
13:21:19

Aleksandr
24.05.2017
13:21:45

Олег
24.05.2017
13:22:01

hdhog
24.05.2017
13:22:25

Мерлин
24.05.2017
13:22:59
В слайсе, например?

Aleksandr
24.05.2017
13:23:49
их задает пользователь.
то есть у вас есть заданный набор переменных в шаблонах, которые уже скопилированы, но почему-то нельзя к этому заданному набору привязать одну структуру.

hdhog
24.05.2017
13:24:18
не проблема. шаблон сейчас описывается в yaml. туда можно конечно добавить список требуемых переменных отдельным полем. но тогда есть вероятность того, когда будут готовить шаблон могут забыть указать переменную.

Google

hdhog
24.05.2017
13:25:29
по этому и был вопрос как из шаблона вытащить переменные которые он использует.

Aleksandr
24.05.2017
13:25:31

hdhog
24.05.2017
13:25:38
именно
то есть в идеале хотелось нечто такое получить
app --template tmpl.yml --name app --address test
а в шаблоне уже
start {{.app}} {{.address}}

Олег
24.05.2017
13:27:38
А вдруг подсунут start {{ .template }}? :))

hdhog
24.05.2017
13:28:20
да полюбому подсунут ?

Mikalai
24.05.2017
14:39:10

hdhog
24.05.2017
14:42:14
так и делаю)
его надо ведь заполнить правильно ;) чтобы ключи верные были.

Мерлин
24.05.2017
14:42:53

hdhog
24.05.2017
14:43:23
думал об этом. как запасной вариант

Илья
24.05.2017
14:45:50
https://golang.org/pkg/text/template/parse/
куда то туда копать

Ivan
24.05.2017
14:46:14
Что то я забыл как математика нам завещала float64 сравнивать на близость
вариант с abs < tolerance мне не нравится потому что там масштабы разные бывают

Илья
24.05.2017
14:48:16
var EPSILON float64 = 0.00000001
func floatEquals(a, b float64) bool {
if ((a - b) < EPSILON && (b - a) < EPSILON) {
return true
}
return false
}

Mike
24.05.2017
14:50:15

Ivan
24.05.2017
14:51:00
Mike серьезно?
в жизни такого не видел

Mike
24.05.2017
14:54:59
Не, шутки шучу

Google

Mike
24.05.2017
14:55:07
Серьезно это как выше

Ivan
24.05.2017
14:56:59
с епсилоном то ясно
но я его угадать не могу, у меня там 10^-9 бывает и 10^9

Илья
24.05.2017
14:57:44

Ivan
24.05.2017
14:58:41
ну смотри, сравниваем два float в один проход там десятьв деввятой значения
в другой проход десятьв минус девятой
данные разные
а эпислон 1

Илья
24.05.2017
14:59:46
для 10-9 придется кастомныйй кейс лепить

Ivan
24.05.2017
15:00:09
я вот думал есть какой нитьь общепринятый способ, вычислить эпсилон налету
или хоть размышления какие

Илья
24.05.2017
15:00:22
но я не сталкивался с такими задачами и не плодил таких общих решений

Ivan
24.05.2017
15:02:30
буду епсилон высчитывать как max / 10^5
типа пять знаков сопадает и баста

Mike
24.05.2017
15:08:01
ну вообще одного должно хватать, ошибка-то обычно не относительная, а абсолютная, и она где-то знаке в 9-10 максимум должна быть, иначе не равны
просто флоаты близкие к нулю это ж вообще трэш тот еще, когда они сами имеют порядок ошибки при умножении/делении

Ivan
24.05.2017
15:17:40
всё так

Серж
24.05.2017
15:43:01
Float - 7 значащих цифр, double - 15. Насколько float'ы близки к нулю - не имеет значения. Есть минимальное принимаемое значение. Ошибка не абсолютная. Регламентировано стандартом IEEE754.

Mike
24.05.2017
15:44:37

Серж
24.05.2017
15:44:56
я ваш го не знаю

Google

Mike
24.05.2017
15:45:15
догадайся из названия типов, в чем суть
таки погоди, ты сейчас взял стандарт хз чего

Серж
24.05.2017
15:45:32
float64 видимо соотвествует числу с плавающей точкой с двойной точностью

Mike
24.05.2017
15:45:33
го не знаешь
и что-то утверждаешь?
случайное совпадение названия типов не имеет никакого отношения спецификации одного языка к спецификации другого

Серж
24.05.2017
15:46:49
это спецификация представления чисел с плавающей точкой в памяти компьютера
я статью на хабре видел хорошую, сейчас поищу
https://habrahabr.ru/post/112953/


Alexey
24.05.2017
17:20:51
Написал бота который транслирует в телеграм лог коммитов проектов с Github/Gitlab.
Буду благодарен, если у вас найдется время и сможете сделать ревью кода.
https://github.com/targence/commits-telegram-bot
Буду благодарен, если у вас найдется время и сможете сделать ревью кода.
https://github.com/targence/commits-telegram-bot
основной код в файле commits.go
Вот прежде всего что меня интересует:
— глобальные переменные, правильно ли я поступил вынеся var bot *tgbotapi.BotAPI неред c main(), сделав bot доступным во всех функциях
— файловая структура проекта, правильно ли я разбил код по файлам
— как лучше запускать и билдить проекты: go run commits.go types.go github.go gitlab.go выглят как-то каряво... и такая же команда по build...
— commits.go слушает входящие реквесты от gitlab http.HandleFunc("/gitlab", gitlabHandler), но прийти на этот индпоинт может все что угодно.
Какой нибудь спам и пр.. Как обрабатывать такие ошибки?
Просто возвращать return c каким-то ответом сервера, если не распарсим json? или как-то по другому обычно поступают?
decoder := json.NewDecoder(req.Body)
var api gitlab
err := decoder.Decode(&api)
if err != nil {
panic(err)
}


Олег
24.05.2017
20:02:20
> как лучше запускать и билдить проекты
Команда go build (без аргументов) в папке пакета main собирает пакет целиком и кладет бинарник рядом. Не нужно перечислять файлы, это коряво, да :)
> прийти на этот индпоинт может все что угодно
И гитхаб, и гитлаб подписывают свои запросы к вебхукам, используя его секретный ключ.
Вот: https://developer.github.com/webhooks/#delivery-headers
И вот: https://docs.gitlab.com/ce/user/project/integrations/webhooks.html#secret-token
> Просто возвращать return c каким-то ответом сервера, если не распарсим json?
Порядочный веб-сервер должен отвечать в соответствие с протоколом http. Если клиент прислал невалидный json - следует ответить, например, кодом 400 Bad Request. Класть горутину паникой не нужно, можно просто залогировать ошибку.

Mike
24.05.2017
20:05:02
не, 400 — это ваще не понял, невалидный — это 422

Олег
24.05.2017
20:09:48
Я таки нагуглил :)) Все-таки при ошибках синтаксиса следует использовать 400:
https://tools.ietf.org/html/rfc4918#section-11.2

Mike
24.05.2017
20:13:21
ну такое, да. получается что если пришло говно, то 400, а если говно, но в джейсоне — 422

Daniil
24.05.2017
21:52:08
sup
вопрос. Это я невнимателен или в net/http/Server нету никакой обработки умерших соединений?

Google

Daniil
24.05.2017
21:52:15
типо клиент сделал запрос -> мы начали делать супер-дупер-ресурсоемкую работу -> клиент отключился -> мы отвечаем в уже закрытое соединение
хотелось бы поймать этот эвент и отменить всю супер-дупер-ресурсоемкую работу

Илья
24.05.2017
22:12:03
гугли context
и протаскивай контекст в глубину в логике

Daniil
24.05.2017
22:41:04
спасибо


Alexey
25.05.2017
06:25:20
> как лучше запускать и билдить проекты
Команда go build (без аргументов) в папке пакета main собирает пакет целиком и кладет бинарник рядом. Не нужно перечислять файлы, это коряво, да :)
> прийти на этот индпоинт может все что угодно
И гитхаб, и гитлаб подписывают свои запросы к вебхукам, используя его секретный ключ.
Вот: https://developer.github.com/webhooks/#delivery-headers
И вот: https://docs.gitlab.com/ce/user/project/integrations/webhooks.html#secret-token
> Просто возвращать return c каким-то ответом сервера, если не распарсим json?
Порядочный веб-сервер должен отвечать в соответствие с протоколом http. Если клиент прислал невалидный json - следует ответить, например, кодом 400 Bad Request. Класть горутину паникой не нужно, можно просто залогировать ошибку.
go build да, понял.
но go run commits.go types.go github.go gitlab.go - это нормально? ?
Про ответ сервера все понятно, в общем мысли у самого примерно такие же были, хотел просто убедиться, что все верно.
Про планы реализации секретного токена есть в readme в разделе todo.


Brown
25.05.2017
06:26:21
go run *
как то так помойму

Alexey
25.05.2017
06:27:03

Ivahaev
25.05.2017
06:27:19
А это зачем вообще?

Brown
25.05.2017
06:27:22
go run *.go

Ivahaev
25.05.2017
06:27:37
Достаточно один файл, где функция main определена
Разве нет?

Alexey
25.05.2017
06:27:49

Brown
25.05.2017
06:27:55

Alexey
25.05.2017
06:28:00