😁1
Хоспаде, ВТБ, что у вас там с политиками безопасности?
Мало того, что вы уменьшаете допустимый словарь для пароля, так ещё и валидация формы сделана через одно место.
Вот чем, чем вам не понравились символы
А пин-код для доступа к мобильному приложению? Это же тоже трешак
Окей, я понимаю логику почему вы запретили начинать пин-код с цифр
Совсем в голову клюнутые?
#irl #hate
Мало того, что вы уменьшаете допустимый словарь для пароля, так ещё и валидация формы сделана через одно место.
Вот чем, чем вам не понравились символы
*, - и :? А при этом ! и ? - это норм, это можно. Тьфу на вас.А пин-код для доступа к мобильному приложению? Это же тоже трешак
Окей, я понимаю логику почему вы запретили начинать пин-код с цифр
19 и 20 (чтобы год рождения никто не вписывал), но зачем надо было запрещать повторяющиеся подряд одинаковые цифры? Вы же опять же уменьшили набор всех возможных вариантов на порядки! Или по вашему пин-код 1818 сложнее, чем 1881?Совсем в голову клюнутые?
#irl #hate
😁4👏2
Немного туп(л,)
Продолжу тему "замедления" ТыТрубы. Столкнулся лично. Интересный момент в том, что старые видео (загруженные более недели назад) - спокойно грузятся в 720p (выше качеством не смотрю), а вот свежие (загруженные менее 2 суток назад) - фризятся даже в 360p.…
Развивая тему РКН и YouTube'а:
Всё-таки это замедление канала между серверами тытрубы и клиентскими хостами. Довольно хитрое. Я сам не нашёл, а вот умные люди нашли.
В двух словах:
Проблема: ТСПУ отбрасывают пакет ориентируясь по заголовку SNI в TLS-сообщении.
Обход: Разбивать TCP пакет в середине SNI.
Подробнее по ссылке, там есть ещё ссылки, оттуда ещё ссылки, развлекайтесь крч.
#hate
Всё-таки это замедление канала между серверами тытрубы и клиентскими хостами. Довольно хитрое. Я сам не нашёл, а вот умные люди нашли.
В двух словах:
Проблема: ТСПУ отбрасывают пакет ориентируясь по заголовку SNI в TLS-сообщении.
Обход: Разбивать TCP пакет в середине SNI.
Подробнее по ссылке, там есть ещё ссылки, оттуда ещё ссылки, развлекайтесь крч.
#hate
Что случилось с блядским VirtualBox'ом?!
У меня был небольшой набор настроенных виртуалок. Но вот чот начали они тупить по страшному.
Я увидел, что у меня разъехались версии Guest Additions и самого vbox'а (последний убежал вперёд, потому что его обновляет стороннее средство).
Решил обновить дополнения, а заодно и самую новую версию vbox'а воткнуть (стороннее средство обновляет не по принципу "есть самое новое - ставим", а по принципу устранения уязвимостей минимальным апдейтом версии).
В итоге стало многократно хуже. Не подхватывается сеть с родительским хостом через виртуальный адаптер — это вообще куда так можно?!
Добавим к этому сложности, которые вставляет в колёса отдел ИБ, так происходитполный пиздец . Я просто 3 последних часа только и делал, что воевал с этим говнищем . А когда в конце концов оно просто выдало ошибку из-за чтения то ли повисшего, то ли нулевого указателя - я вообще в ахуй выпал и психанул.
Простите, тестировщики, но крайний корнер-кейс вам придётся проверять самим.
#hate #jobbing
У меня был небольшой набор настроенных виртуалок. Но вот чот начали они тупить по страшному.
Я увидел, что у меня разъехались версии Guest Additions и самого vbox'а (последний убежал вперёд, потому что его обновляет стороннее средство).
Решил обновить дополнения, а заодно и самую новую версию vbox'а воткнуть (стороннее средство обновляет не по принципу "есть самое новое - ставим", а по принципу устранения уязвимостей минимальным апдейтом версии).
В итоге стало многократно хуже. Не подхватывается сеть с родительским хостом через виртуальный адаптер — это вообще куда так можно?!
Добавим к этому сложности, которые вставляет в колёса отдел ИБ, так происходит
Простите, тестировщики, но крайний корнер-кейс вам придётся проверять самим.
#hate #jobbing
Преамбула: я начинал эту заметку ещё несколько месяцев назад, но не дописал совсем чуть-чуть в конце. Сейчас вот наткнулся снова и решил дописать. Всё, что ниже - это текст от "прошлого меня", за исключением последних трёх абзацев.
--------------------
У меня бомбит, поэтому сейчас будет эмоциональная история про пргрмвне (история про пргрмрвне на канале про пргрмрвне!)
#jobbing #prog #cpp #hate
Язык С++ довольно странный предмет, он вроде бы есть, но лучше бы его не было . Два С++-разработчика спокойно могут "говорить" на совершенно разных диалектах, в зависимости от того, какому стандарту они отдают предпочтение. При этом многим кажется, что если они хорошо знают один "диалект", то легко и спокойно перейдут на другой, более новый. Так вот, это не совсем так.
Начиная с С++11 существует такая интересная штука, как
Если в двух словах, то это хреновина, которая позволяет использовать ссылки так, как обычно их использовать нельзя.
Например: класть в
Зачем вообще это нужно? Чтобы избегать ненужного копирования, как минимум.
Например, очень удобно написать что-то такое:
Тем самым мы можем обработать обработать кучу данных из разных источников без необходимости их копирования; накладные расходы будут только на внутряночку
И всё было бы хорошо, если бы оно было хорошо, но, к сожалению, оно не хорошо.
Видя, какое удобство и магию предоставляет этот
Вот буквально сегодня я увидел примерно вот такое:
И всё, пиздец котёнку. Успело попасть в релизную ветку, благо на тестировании стали ловить странные падения.
Как программист вообще мог такое написать и так облажаться? Очень просто: это было два программиста.
Первый - внедрил использование
--------------------
У меня бомбит, поэтому сейчас будет эмоциональная история про пргрмвне
#jobbing #prog #cpp #hate
Язык С++ довольно странный предмет, он вроде бы есть
Начиная с С++11 существует такая интересная штука, как
std::reference_wrapper.Если в двух словах, то это хреновина, которая позволяет использовать ссылки так, как обычно их использовать нельзя.
Например: класть в
std::vector, или переприсваивать именно "значения ссылок", а не "значения куда указывают ссылки" (актуально для шаблонных алгоритмов).Зачем вообще это нужно? Чтобы избегать ненужного копирования, как минимум.
Например, очень удобно написать что-то такое:
struct Some {
Some() = default;
~Some() = default;
Some(const Some&) = delete;
Some(Some&&) = delete;
Some& operator=(const Some&) = delete;
Some& operator=(Some&&) = delete;
};
Some global_object;
thread_local Some thread_object;
struct A {
Some m_object;
void foo(Some& object) {
std::vector<std::reference_wrapper<Some>> objects;
objects.emplace_back(object);
objects.emplace_back(m_object);
objects.emplace_back(thread_object);
objects.emplace_back(global_object);
for (const auto& o : objects) {
// some process without copying
}
}
};Тем самым мы можем обработать обработать кучу данных из разных источников без необходимости их копирования; накладные расходы будут только на внутряночку
std::reference_wrapper (а это обычный указатель) и на сам std::vector.И всё было бы хорошо, если бы оно было хорошо, но, к сожалению, оно не хорошо.
Видя, какое удобство и магию предоставляет этот
std::reference_wrapper, люди забывают, что и обращаться с ним нужно так же, как с обычной ссылкой, под которую он мимикрирует.Вот буквально сегодня я увидел примерно вот такое:
struct Context {
std::optional<std::reference_wrapper<std::string>> m_id = std::nullopt;
}
Context createContext() {
Context ctx;
std::string guid = generateGUID();
ctx.m_id = guid;
return ctx;
}И всё, пиздец котёнку. Успело попасть в релизную ветку, благо на тестировании стали ловить странные падения.
Как программист вообще мог такое написать и так облажаться? Очень просто: это было два программиста.
Первый - внедрил использование
std::optional<std::reference_wrapper<std::string>>, второй не понял что такое этот ваш std::reference_wrapper и поместил туда объект с меньшим временем жизни, чем контекст.