Как меня поздравляли сегодня компании, имеющие мои ПД.
Самое интересное сообщение прислал Делимобиль (1).
Мегафон (2) просто прислал смску.
Сгорающие баллы выдали Аскона (3) и Воронежский парк аттракционов (4).
Дополнительные скидки и кэшбеки дали Альфа (5) и Сбер (6). Последний ещё открытку впихнул в приветственную картинку приложения.
Ну и по пидорски поступили ВТБ (7): они мне в качестве подарка предложили выбрать кэшбек из обычного месячного набора, который я уже ранее выбрал.
UPD:
Ещё Т-Банк выдал доп. категорию кэшбека на рестораны, а Руцентр выдал 1000 бонусных балов. И если первое - штука уместная очень, то вот в Руцентре я не могу восстановить пароль, потому что система говорит, что у меня некорректный номер договора, который они сами же написали в поздравительном письме 😅
#irl #happybirthday
Самое интересное сообщение прислал Делимобиль (1).
Мегафон (2) просто прислал смску.
Сгорающие баллы выдали Аскона (3) и Воронежский парк аттракционов (4).
Дополнительные скидки и кэшбеки дали Альфа (5) и Сбер (6). Последний ещё открытку впихнул в приветственную картинку приложения.
Ну и по пидорски поступили ВТБ (7): они мне в качестве подарка предложили выбрать кэшбек из обычного месячного набора, который я уже ранее выбрал.
UPD:
Ещё Т-Банк выдал доп. категорию кэшбека на рестораны, а Руцентр выдал 1000 бонусных балов. И если первое - штука уместная очень, то вот в Руцентре я не могу восстановить пароль, потому что система говорит, что у меня некорректный номер договора, который они сами же написали в поздравительном письме 😅
#irl #happybirthday
😁5
Немного туп(л,)
Ну как вы там, молодёжь? 🌚 picture by Cyanide and Happiness | Цианид и Счастье #happybirthday
Маленький факт обо мне: этот пост был в отложенных ровно год. Я его написал 6 февраля 2024 года. Но и то, только потому, что телега не даёт создавать отложенные посты сроком больше чем на год вперёд 🌚
Ну да и это не предел. Приблизительно через пол года я собираюсь опубликовать ещё одну шутку, которую я заготовил где-то 3-4 года назад 🌚
Ну да и это не предел. Приблизительно через пол года я собираюсь опубликовать ещё одну шутку, которую я заготовил где-то 3-4 года назад 🌚
🤔4😁3👀2
Если когда-нибудь я захочу написать свою командную оболочку, я назову её
🌚
grish
, чтобы можно было говорить: Я скриптовал на Грише
🌚
👀1
[root@cent84-x64-0001 ~]# vim t.sh && chmod a+x t.sh
-bash: vim: command not found
Хоспади, люди добрые, это что же делается, это где же такое видано, ох мать честная, дева пресвятая, спаси и сохрани, Vim установи...
🙈2
Что значит быть инженером?
Это значит делать окружающий мир проще, удобнее, доступнее, иногда красивее, в общем - делать его лучше.
Но так же это про выбор велосипеда(да-да, отсылка к той самой пасте ) или чайника...
Это значит делать окружающий мир проще, удобнее, доступнее, иногда красивее, в общем - делать его лучше.
Но так же это про выбор велосипеда
Хабр
В поисках идеального чайника
Удобный чайник можно определить через такие параметры: Насколько он напрягает руку – какой крутящий момент (нагрузку) создаёт чайник, когда мы его держим на весу ровно и какую, когда наливаем (считаем...
Преамбула: я начинал эту заметку ещё несколько месяцев назад, но не дописал совсем чуть-чуть в конце. Сейчас вот наткнулся снова и решил дописать. Всё, что ниже - это текст от "прошлого меня", за исключением последних трёх абзацев.
--------------------
У меня бомбит, поэтому сейчас будет эмоциональная история про пргрмвне (история про пргрмрвне на канале про пргрмрвне!)
#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
и поместил туда объект с меньшим временем жизни, чем контекст.
Немного туп(л,)
Преамбула: я начинал эту заметку ещё несколько месяцев назад, но не дописал совсем чуть-чуть в конце. Сейчас вот наткнулся снова и решил дописать. Всё, что ниже - это текст от "прошлого меня", за исключением последних трёх абзацев. -------------------- У меня…
Как такого было не допустить? Ну, вариантов несколько:
а) Перейти на язык со сборкой мусора
б) Перейти на язык с отслеживанием времени жизни объектов
в) Реализовать CoW-строки
г) Использовать сырые указатели
д) Использовать владеющие строки
Вариант (а) отметаем, потому что переписывать продукт дорого, да и производительность важна.
Вариант (б) отметаем, потому что переписывать продукт дорого, и никто не знает этого вашего Rust.
Вариант (в) отметаем, потому что это лишняя разработка, которую надо сделать, покрыть тестами и т.д., и т.п., и проч. И скорее всего оно всё равно нигде бы больше не применялось.
Вариант (г) отметаем, потому что это бы не избавило от необходимости следить за лайфтаймами, хотя и вероятность такого косяка, кмк, была бы ниже, ибо все привыкли, что "указатели небезопасны", и следили за этим указателем внимательнее.
Вариант (д) отметаем потому что... Не знаю почему, на самом деле, это не такое горячее место и строки не настолько огромные, чтобы это стало проблемой, имхо. И именно это и стоило использовать.
Кто виноват? Имхо - тот программист, кто внедрил
Кстати, если бы это добавил какой-нибудь джун или стажёр, я бы тут не возбухал. Возбухаю я именно от того, что это сделал синьор...
а) Перейти на язык со сборкой мусора
б) Перейти на язык с отслеживанием времени жизни объектов
в) Реализовать CoW-строки
г) Использовать сырые указатели
д) Использовать владеющие строки
Вариант (а) отметаем, потому что переписывать продукт дорого, да и производительность важна.
Вариант (б) отметаем, потому что переписывать продукт дорого, и никто не знает этого вашего Rust.
Вариант (в) отметаем, потому что это лишняя разработка, которую надо сделать, покрыть тестами и т.д., и т.п., и проч. И скорее всего оно всё равно нигде бы больше не применялось.
Вариант (г) отметаем, потому что это бы не избавило от необходимости следить за лайфтаймами, хотя и вероятность такого косяка, кмк, была бы ниже, ибо все привыкли, что "указатели небезопасны", и следили за этим указателем внимательнее.
Вариант (д) отметаем потому что... Не знаю почему, на самом деле, это не такое горячее место и строки не настолько огромные, чтобы это стало проблемой, имхо. И именно это и стоило использовать.
Кто виноват? Имхо - тот программист, кто внедрил
std::optional<std::reference_wrapper<std::string>>
. Потому что второй был "просто разработчик", а первый "синьор-разработчик", а "синьор-разработчик" это не про "писать хитрый код", это про "писать код, который команда специалистов самого разного уровня сможет поддерживать в будущем". В legacy кодовой базе, где повсюду торчат сырые указатели, сложные глобальные состояния и прочая дребедень добавлять сложность в виде таких новомодных конструкций - путь в бездну.Кстати, если бы это добавил какой-нибудь джун или стажёр, я бы тут не возбухал. Возбухаю я именно от того, что это сделал синьор...
Немного туп(л,)
Как такого было не допустить? Ну, вариантов несколько: а) Перейти на язык со сборкой мусора б) Перейти на язык с отслеживанием времени жизни объектов в) Реализовать CoW-строки г) Использовать сырые указатели д) Использовать владеющие строки Вариант (а) отметаем…
Кстати, ещё какое-то время назад у нас прошла рекомендация отдавать предпочтение использованию (это невладеющая строка, если что) .
Пока что с ней проблем не было, потому что её всё равно почти никто не использует :)
Но я всё жду, когда кто-нибудь напишет что-то типа этого:
Подсказка, что же тут получается - тут.
std::string_view
Пока что с ней проблем не было, потому что её всё равно почти никто не использует :)
Но я всё жду, когда кто-нибудь напишет что-то типа этого:
std::string_view sv;
{
std::string str1 = "Good news, guys!!";
sv = str1;
}
std::string str2 = "Bad news, guys :(";
std::cout << sv << std::endl;
Подсказка, что же тут получается - тут.
😢2
Чтобы посмотреть ютуб я отправляюсь в Литву. У них довольно креативная реклама. Не как у японцев, но всё-же...
Так вот, сегодня мне рекламировали клетку Фарадея...
#яобожаюинтернет или всё же #irl?
Так вот, сегодня мне рекламировали клетку Фарадея...
#яобожаюинтернет или всё же #irl?
🔥3
Немного туп(л,)
Чтобы посмотреть ютуб я отправляюсь в Литву. У них довольно креативная реклама. Не как у японцев, но всё-же... Так вот, сегодня мне рекламировали клетку Фарадея... #яобожаюинтернет или всё же #irl?
Вообще, им надо пойти дальше: коробка должна быть с аккумулятором, а при закрытии испускать электромагнитный импульс, который бы выжигал положенные внутрь устройства.
И рекламный слоган:
🌚
И рекламный слоган:
Заново откройте для себя настоящее общение навсегда.
🌚
😁3🔥1🤯1
Немного туп(л,)
Чтобы посмотреть ютуб я отправляюсь в Литву. У них довольно креативная реклама. Не как у японцев, но всё-же... Так вот, сегодня мне рекламировали клетку Фарадея... #яобожаюинтернет или всё же #irl?
Хотя, существует вероятность, что они продают просто картонную коробку... Но тогда это совсем тупо...
😁4🔥1
А вы знаете, что я не только блохер, но ещё и стрёмер?
И вот щаааас как я пострёмлю. Вот тут.
Буду делать Славянский Зажим Яйцами.
Пробовать.
Это вряд ли будет интересно, можете не подключаться.
И говорить я тоже не буду
И вот щаааас как я пострёмлю. Вот тут.
Буду делать Славянский Зажим Яйцами.
Пробовать.
Это вряд ли будет интересно, можете не подключаться.
И говорить я тоже не буду
🤯6