🏁Александр
🙂
🏁Александр
имя ему...
🏁Александр
легион
🏁Александр
ой не ту книгу открыл
🏁Александр
ARGON2
🏁Александр
Argon2 работает по следующему принципу: 1. Производится хеширование пароля с использованием хеш-функции Blake2b. 2. Результат хеширования записывается в блоки памяти. 3. Блоки памяти преобразуются с использованием функции сжатия {\displaystyle G} G 4. В результате работы алгоритма генерируется ключ (англ. Tag).
🏁Александр
* три страницы математики, читать на вики *
🏁Александр
самое важно, не оставить соль по дефолту - saltsalt
🏁Александр
это будет failfail
Kirill
я просто оставлю это здесь: https://dev.to/justyntemme/how-to-dos-yourself-with-argon2-20a4
🏁Александр
где я, а где они 🙂
🏁Александр
но я ограничу туда выход
🏁Александр
на всякий
Kirill
При чем тут они?
md4 + как можно меньшее количество возможных комбинаций — идеально же для банков, чё
Vladimir
Длинный и очень длинный пароль защищает разве что от брутфорса и больше, по сути, ни от чего. А 2fa (особенно аппаратный токен, а не письмо на почту) поможет и в случае утечки/компрометации. На мой взгляд, лучше чем 2fa, будет только 3fa (и дальше)) ) и обязательное подтверждение критических операций также с помощью 2fa. Это я о защите пользователя, а не данных на своих серверах, а то создалось впечатление, что каждый о своем)
Leonid
люди, есть очень странное поведение. если кто-то что-то такое видел, то скажуте куда копать. дано: если модуль на го, работающий с postgres 9.5. работа происходил в 99% случаев в фоновом процессе, который запускается раз в минуту. время от времени ( от 5 минут до часа) процесс соединения модуля и базы (на сервере, где бежит postgres) вырастает ровно на 264 байта. в pg_stat_activity idle последний запрос INSERT, который вызывает ФП. В 95% случаев он откатывается из-за uniq index. кто-то что-то подобное видел? куда копать?
Michael
от забора до обеда копать
Michael
в чём ещё вопрос?
Leonid
так в модуле все чисто
Leonid
уже натравиливал. все очищается, ничего не подвисает
Leonid
но процесс соединения на стороне БД растет
Andrei 🦉
но процесс соединения на стороне БД растет
незакрытые транзакции из приложения?
Zhenja
Коллеги, имеется JSON вида: [{"Zero":0},{"One":1},{"Two":2}] т.е. массив в каждом элементе которого свое значение. Ключи в разных элементах не повторяются и точно в каждом элементе только одно значение. Как это можно распарсить в структуру вида: type T struct { Zero int One int Two int }
Aleksandr
написанием своего анмаршаллера
Oleg
я бы даже сказал регекспой
Aleksandr
это для извращенцев
Oleg
ой та ладно
Leonid
Oleg
Наверное да, но в пг чате тоже мыслей нет
я думаю, что это такая магия, на которую 2 спринта уйдет :)
Leonid
Да вот такие же ощущения:-(
Oleg
(
Zhenja
* порядок элементов не гарантирован
Zhenja
ну и через массив структур я сделал. А потом в цикле перегоняю в структуру) Но думал есть вариант проще
Andrei 🦉
ты пока остановился на варианте с копипастом
Илья
ну и через массив структур я сделал. А потом в цикле перегоняю в структуру) Но думал есть вариант проще
а какая задача? в зависимости от поля анмаршалить в разные структуры?
Zhenja
задача анмаршалить в структуру (не в массив), чтобы далее в коде можно было просто получить любое значение, например T.One, не перебирая массив и не искать, в каком из элементов не nil поле One
Илья
массив мапок в структуру?
Илья
тогда кастомный анмаршаллер или ваш вариант
Илья
это ж лютый изврат изначально
Zhenja
да. Но мне из вне приходит такой JSON, что поделать
Oleg
почему обычный анмаршал в map[string]interface{} уже не работает?
Илья
работает, но производит много ненужных операций
Zhenja
Используйте fastjson - ему не нужны никакие структуры
смотрел. Но ему же нужно прописать какое значение взять, типа data.GetInt("1", "One"), а у меня порядок не известен
Roman
Привет всем А кто в чем конфиги хранит? Требуется сохранять определенные данные, название проекта, название папки с тестами (например), чтобы при следующем запуске программы она уже брала эти данные и выполняла некоторые действия. Думал в сторону yml, но решил на всякий случай спросить) И подскажите сразу либу, а то на awesome-go их много, по звездочкам выбирать?
Roman
скорей всего файл будет плоский по структуре и максимум содержать ключей 20-30
Zhenja
json и либа encoding/json)
Илья
yaml/ini/toml по желанию
Roman
json и либа encoding/json)
фигурные скобки лишние)
Илья
viper
Илья
ест все подряд
Илья
+ можно еще из env/флагами перекрывать значения
Roman
viper
вот тоже на него смотрел, про томл не знал, выглядит удобно, спасибо
Aliaksandr
смотрел. Но ему же нужно прописать какое значение взять, типа data.GetInt("1", "One"), а у меня порядок не известен
делай вот так: var p fastjson.Parser v, err := p.ParseBytes(inputData) if err != nil { log.Printf("cannot parse inputData: %s", err) return } m := make(map[string]int) for _, vv := range v.GetArray() { if o := vv.GetObject(); o != nil { o.Visit(func(k, val *fastjson.Value) { m[string(k)] = val.GetInt() }) } } // теперь в m - пары (ключ, значение) для всех объектов // т.е. m["One"] вернет 1, m["Two"] = 2 и т.д.
Zhenja
спасибо. Только у меня еще и значения разных типов) Не парьтесь, я уже сделал как сделал и оно работает. Пример работы с fastjson сохраню на будущее 👍
Aliaksandr
спасибо. Только у меня еще и значения разных типов) Не парьтесь, я уже сделал как сделал и оно работает. Пример работы с fastjson сохраню на будущее 👍
сделали как-то так? var a []map[string]interface{} if err := json.Unmarshal(inputData, &a); err != nil { log.Printf("cannot parse inputData: %s", err) return } m := make(map[string]interface{}) for _, vv := range a { for k, val := range vv { m[k] = val } } // теперь m["One"] вернет 1, m["Two"] = 2 и т.д.
Zhenja
type T struct { Zero *int One *int Two *int } arr := []T{} item := T{} json.Unmarshall(`[{"Zero":0},{"One":1},{"Two":2}]`, &arr) for _,x := range arr { if x.Zero != nil { item.Zero = x.Zero } if x.One != nil { item.One = x.One } if x.Two != nil { item.Two = x.Two } } как-то так)
Zhenja
своё. Делал кто-то из смежного отдела
Илья
Aliaksandr
type T struct { Zero *int One *int Two *int } arr := []T{} item := T{} json.Unmarshall(`[{"Zero":0},{"One":1},{"Two":2}]`, &arr) for _,x := range arr { if x.Zero != nil { item.Zero = x.Zero } if x.One != nil { item.One = x.One } if x.Two != nil { item.Two = x.Two } } как-то так)
так ваш код работает только для трех заранее известных полей. Вроде в условии было сказано, что полей может быть сколько угодно и они заранее не известны
Zhenja
так ваш код работает только для трех заранее известных полей. Вроде в условии было сказано, что полей может быть сколько угодно и они заранее не известны
не. Может я как-то не так выразился, но поля известны и их типы известны. Порядок не гарантирован - может прилететь [{"Two":2},{"Zero":0},{"One":1}]
Aliaksandr
понятно :) тогда в моих примерах кода достаточно заменить map[string]int на T и внутри вложенного цикла добавить switch по имени поля
Zhenja
и Ваш пример не будет особо отличаться от моего решения, кроме того, что добавит еще зависимость fastjson?
Aliaksandr
ага :) еще будет работать раз в 15 быстрее. Но если вы не парсите json сотнями мегабайт в секунду, то это не критично
Anonymous
Всем привет, кто нибудь работал с hugo?
Alexey
https://golang-moscow.timepad.ru/event/765492/
Alexey
Всем привет, кто нибудь работал с hugo?
Лучше сразу задавать конкретный вопрос
Sebor▂▅▇█▓▒░
https://golang-moscow.timepad.ru/event/765492/
Зарегался, а подтверждения не прислали...
Alexey
Я руками проверяю, что люди могут написать фамилию и имя в поля «фамилия» и «имя» соответсвенно, а так же как в паспорте (на русском языке)
Alexey
(Десятки людей не могут)