#cpp
Day 43.
Так как писать код на препроцессоре бывает неимоверно неприятно, есть тулы в помощь. Например, ppstep, который позволяет интерактивно (пошагово) разбираться в раскрытии ваших макросов и всего вокруг.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
Day 43.
Так как писать код на препроцессоре бывает неимоверно неприятно, есть тулы в помощь. Например, ppstep, который позволяет интерактивно (пошагово) разбираться в раскрытии ваших макросов и всего вокруг.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
😁6🤩4👍3
#cpp
Day 44.
Сегодня ссылка, где Paul Mensodines скрупулёзно поясняет механизм раскрытия макросов: How macro expansion works.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
Day 44.
Сегодня ссылка, где Paul Mensodines скрупулёзно поясняет механизм раскрытия макросов: How macro expansion works.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
👍9
#cpp
Day 45.
Мы уже обсуждали, как сделать
Sequence это просто набор элементов в скобках:
Тут 5 элементов. Но конечно мы не ограничиваемся числами:
Основные операции иногда реализуются просто:
В конце на самом деле надо ещё как-то убрать
Другие операции могут быть чуть сложнее, но концептуально там ничего такого. В любом случае самим реализовывать вам не нужно. Берите
Там ещё и итерироваться можно, но про это завтра.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
Day 45.
Мы уже обсуждали, как сделать
LIST, но есть и более свойственная препроцессору структура данных: sequence.Sequence это просто набор элементов в скобках:
(1)(2)(3)(4)(5)
Тут 5 элементов. Но конечно мы не ограничиваемся числами:
(a)(b)(c)
(int)(double)(bool)
(1)(2)()((),w,())(awoo())(())
Основные операции иногда реализуются просто:
#define SEQ_PUSH_FRONT(x, seq) (x) seq
SEQ_PUSH_FRONT(z, (a)(b)(c)) // (z)(a)(b)(c)
#define FRONT(seq) FRONT_I seq
#define FRONT_I(x) x
FRONT((a)(b)(c))
// FRONT_I(a)(b)(c)
// a
В конце на самом деле надо ещё как-то убрать
(b)(c), но сейчас это не так важно. Другие операции могут быть чуть сложнее, но концептуально там ничего такого. В любом случае самим реализовывать вам не нужно. Берите
Boost Preprocessor и крутите
BOOST_PP_SEQ_SIZE((a)(b)(c)) // 3
BOOST_PP_SEQ_ELEM(1, (a)(b)(c)) // b
BOOST_PP_SEQ_PUSH_BACK(seq, x)
Там ещё и итерироваться можно, но про это завтра.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
👍5🤯2🤓1
#cpp
Day 46.
Шагаем на ступеньку номер 7.
Мы бы могли с вами реализовать итерацию по sequence, но иногда лучше вовремя остановиться и заиспользовать что-то готовое:
Получим
Как это реализовано?
Ну вот примерно как вчера откусываете по одному токену из начала и применяете к нему «функтор». Чего непонятно-то???
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
Day 46.
Шагаем на ступеньку номер 7.
Мы бы могли с вами реализовать итерацию по sequence, но иногда лучше вовремя остановиться и заиспользовать что-то готовое:
#define PRINT(r, data, elem) elem
BOOST_PP_SEQ_FOR_EACH(
PRINT,
_,
(a)(b)(c)(d)
)
Получим
a b c d
Как это реализовано?
Ну вот примерно как вчера откусываете по одному токену из начала и применяете к нему «функтор». Чего непонятно-то???
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
👍8🗿3👎1
#cpp
Day 47.
Я уже упоминал Paul Mensodines, который написал огромное письмо про механизм раскрытия макросов.
И упоминал про Boost.Preprocessor.
Вот Paul когда-то написал chaos-pp — настоящая глыба в мире препроцессорных библиотек. Там вообще всё что хотите. Рекурсия, высокоуровневые алгоритмы (
Правда её не так часто используют. Просто потому что она очень сложная (== высокий порог входа), без документации, а большинство задач решаются чем-то попроще.
Но как артефакт кайфово.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
Day 47.
Я уже упоминал Paul Mensodines, который написал огромное письмо про механизм раскрытия макросов.
И упоминал про Boost.Preprocessor.
Вот Paul когда-то написал chaos-pp — настоящая глыба в мире препроцессорных библиотек. Там вообще всё что хотите. Рекурсия, высокоуровневые алгоритмы (
MAP, FOLD, FILTER, ZIP и др.), лямбды и частичное применение макросов, разные контейнеры (sequence, tuple, list). Правда её не так часто используют. Просто потому что она очень сложная (== высокий порог входа), без документации, а большинство задач решаются чем-то попроще.
Но как артефакт кайфово.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
👍13❤2
#cpp
Day 48.
Если вам нужна сравнительно мощная, но более современная альтернатива chaos-pp, стоит взглянуть на Metalang99.
Это хорошая попытка сделать препроцессор похожим на функциональный язык программирования. Но что более важно, проект хорошо документирован. chaos-pp в этом плане проигрывает (и служит скорее исследовательским артефактом).
Так что Metalang99 — ваш второй выбор (после Boost.Preprocessor).
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
Day 48.
Если вам нужна сравнительно мощная, но более современная альтернатива chaos-pp, стоит взглянуть на Metalang99.
Это хорошая попытка сделать препроцессор похожим на функциональный язык программирования. Но что более важно, проект хорошо документирован. chaos-pp в этом плане проигрывает (и служит скорее исследовательским артефактом).
Так что Metalang99 — ваш второй выбор (после Boost.Preprocessor).
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
❤5👍4
#cpp
Day 49.
Одна из моделей, которую можно реализовать на макросах (хотя мы выяснили, что можно любую видимо) — continuation machine. Фактически это штука, в которой вы можете построить пайплайн работы с данными (но такими словами про неё не говорят, слишком современно). На картинке ниже страшная реализация для простого кейса работы с регистрами (разбирать мы ёе не будем, я хочу просто подышать.....).
Кстати репозиторий это что-то вроде оптимизированного интерпретатора Brainfuck. Есть и другие альтернативы: bfi, CPP_COMPLETE.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
Day 49.
Одна из моделей, которую можно реализовать на макросах (хотя мы выяснили, что можно любую видимо) — continuation machine. Фактически это штука, в которой вы можете построить пайплайн работы с данными (но такими словами про неё не говорят, слишком современно). На картинке ниже страшная реализация для простого кейса работы с регистрами (разбирать мы ёе не будем, я хочу просто подышать.....).
Кстати репозиторий это что-то вроде оптимизированного интерпретатора Brainfuck. Есть и другие альтернативы: bfi, CPP_COMPLETE.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
❤11🤯3👍1
#cpp
Day 50.
Макросы можно класть на и доставать из (со) стека:
Не уверен, что понимаю, зачем это нужно.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
Day 50.
Макросы можно класть на и доставать из (со) стека:
#define PRAMGA(...) _Pragma(#__VA_ARGS__)
#define POP(m) PRAMGA(pop_macro(#m))
#define X 1 POP(X)
#pragma push_macro("X")
#define X 2 POP(X)
#pragma push_macro("X")
#define X 3 POP(X)
#pragma push_macro("X")
#define X 4 POP(X)
X // 4
X // 3
X // 2
X // 1
Не уверен, что понимаю, зачем это нужно.
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
🤪4👍3🔥1
#cpp
Day 51.
Есть ещё несколько интересных репозиториев, связанных с препроцессором:
• datatype99 (фактически синтаксический сахар для генерации типов, но с дополнительными плюшками вроде паттерн матчинга)
• interface99 (Golang/Rust inspired интерфейсы для C99)
• boline (integer arithmetics with base 16).
У последнего код с вайбом ASCII-art.
И есть ещё подгон от подписчика про расширение в clang, позволяющее делать макросы рекурсивными. Названо оно
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
Day 51.
Есть ещё несколько интересных репозиториев, связанных с препроцессором:
• datatype99 (фактически синтаксический сахар для генерации типов, но с дополнительными плюшками вроде паттерн матчинга)
• interface99 (Golang/Rust inspired интерфейсы для C99)
• boline (integer arithmetics with base 16).
У последнего код с вайбом ASCII-art.
И есть ещё подгон от подписчика про расширение в clang, позволяющее делать макросы рекурсивными. Названо оно
__THIS_MACRO__:
#define fold_left(op, head, ...)(__VA_OPT__(__THIS_MACRO__(op,__VA_ARGS__)op)head)
fold_left(+, 1, 2, 3, 4) // раскрывается в ((((4)+3)+2)+1)
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.
👍10👏1
#cpp
Привет.
Сегодня последний day 52 марафона.
Я знаю, что кому-то он поднадоел. Не зря от меня отписалось больше полусотни человек.
Мне тоже надоело, если честно.
Если вдруг вы не узнали/не знали, марафон был основан на C++ Preprocessor Iceberg. Я в целом шёл от начала почти по каждому пункту, скипая что-то, что выглядит совсем мутным и невнятным, что я не смог заставить работать или не смог осознать. Попутно старался дополнять своим ресёрчем. Постов фактически вышло на пару десятков меньше, чем пунктов в оригинальном источнике. Мы примерно на половину задели Deep water и совсем не задели The abyss. К концу я уже высох от темы и решил, что душить себя не очень полезно. Лучше чем-то в радость позаниматься. Так что заинтересованные могут доисследовать самый низ айсберга.
Расскажите в комментах, как вам. Надо такое делать вообще ещё когда-нибудь? На какие темы? Или нахер и лучше ограничиться обычными форматами?
Не факт конечно, что я ваше мнение учту, но мне хочется его знать.
Если не хотите писать открытым текстом, то вот варианты quite feedback:
🔥 — круто, можно повторять
🥴 — круто, можно повторять, но слишком долго
🤯 — круто, лучше не повторять
🌚 — не круто, лучше не повторять.
Ниже собрал ссылочки для удобства. Пересылайте друзьям, мамам и папам. Пользуйтесь в будущем сами.
Above the iceberg:
• #include
• include guards
• #pragma once
• #if
• заворачивание в скобки
• do-while
• ARRAY_SIZE и sizeof
On the iceberg:
• stringification operator
• token concatenation operator
• __VA_ARGS__
• #undef
• #error
• comments concatenation
• X-macro
Below the water:
• FILE and LINE
• DATE and TIME
• #line
• триграфы и иже с ними
• _Pragma
• -E
Middle of the iceberg:
• COUNTER
• CONCAT
• #elifdef #elifndef
• #embed
• SCAN
• лимит на макросы
• mcpp
• перегрузка макросов
• default args в макросах
Bottom of the iceberg:
• blue paint
• BOOL, IF
• INC/DEC
• LOOP
• Boost.Preprocessor
Below the iceberg:
• LIST
• ORDER_PP
• #assert
• #include_next
• ppstep
• how macro expansion works
• sequence
Deep water:
• итерация по sequence
• chaos-pp
• Metalang99
• не знаю точно что это
• push/pop макросов
• ещё несколько ссылочек
Привет.
Сегодня последний day 52 марафона.
Я знаю, что кому-то он поднадоел. Не зря от меня отписалось больше полусотни человек.
Мне тоже надоело, если честно.
Если вдруг вы не узнали/не знали, марафон был основан на C++ Preprocessor Iceberg. Я в целом шёл от начала почти по каждому пункту, скипая что-то, что выглядит совсем мутным и невнятным, что я не смог заставить работать или не смог осознать. Попутно старался дополнять своим ресёрчем. Постов фактически вышло на пару десятков меньше, чем пунктов в оригинальном источнике. Мы примерно на половину задели Deep water и совсем не задели The abyss. К концу я уже высох от темы и решил, что душить себя не очень полезно. Лучше чем-то в радость позаниматься. Так что заинтересованные могут доисследовать самый низ айсберга.
Расскажите в комментах, как вам. Надо такое делать вообще ещё когда-нибудь? На какие темы? Или нахер и лучше ограничиться обычными форматами?
Не факт конечно, что я ваше мнение учту, но мне хочется его знать.
Если не хотите писать открытым текстом, то вот варианты quite feedback:
🔥 — круто, можно повторять
🥴 — круто, можно повторять, но слишком долго
🤯 — круто, лучше не повторять
🌚 — не круто, лучше не повторять.
Ниже собрал ссылочки для удобства. Пересылайте друзьям, мамам и папам. Пользуйтесь в будущем сами.
Above the iceberg:
• #include
• include guards
• #pragma once
• #if
• заворачивание в скобки
• do-while
• ARRAY_SIZE и sizeof
On the iceberg:
• stringification operator
• token concatenation operator
• __VA_ARGS__
• #undef
• #error
• comments concatenation
• X-macro
Below the water:
• FILE and LINE
• DATE and TIME
• #line
• триграфы и иже с ними
• _Pragma
• -E
Middle of the iceberg:
• COUNTER
• CONCAT
• #elifdef #elifndef
• #embed
• SCAN
• лимит на макросы
• mcpp
• перегрузка макросов
• default args в макросах
Bottom of the iceberg:
• blue paint
• BOOL, IF
• INC/DEC
• LOOP
• Boost.Preprocessor
Below the iceberg:
• LIST
• ORDER_PP
• #assert
• #include_next
• ppstep
• how macro expansion works
• sequence
Deep water:
• итерация по sequence
• chaos-pp
• Metalang99
• не знаю точно что это
• push/pop макросов
• ещё несколько ссылочек
jadlevesque.github.io
The Preprocessor Iceberg Meme
50🔥106🥴64🤯23🌚8❤1
#cpp и не только.
НАПОМИНАЮ, что 1ого августа будет Back to Back: в Москве back to back трек + C++ трек, в Ереване только back to back, а в Белграде только C++ one.
Программу на плюсовый трек мы собрали сочную. Старались, честное слово. Коллеги по цеху на Back to Back тоже интересного выбрали.
Меня, дай бог всё будет хорошо, сможете найти в Белграде. Можем с вами за здоровье Страуструпа выпить ракии (хотя я ещё её не пробовал, может и не моё ).
Буду стараться за неделю после конфы выдать трип репорт.
У вас ещё есть время зарегистрироваться!
НАПОМИНАЮ, что 1ого августа будет Back to Back: в Москве back to back трек + C++ трек, в Ереване только back to back, а в Белграде только C++ one.
Программу на плюсовый трек мы собрали сочную. Старались, честное слово. Коллеги по цеху на Back to Back тоже интересного выбрали.
Меня, дай бог всё будет хорошо, сможете найти в Белграде. Можем с вами за здоровье Страуструпа выпить ракии (
Буду стараться за неделю после конфы выдать трип репорт.
У вас ещё есть время зарегистрироваться!
Back to Back | Москва
Бэкенд-конференция от инженеров для инженеров
👍7🤝3🔥2❤1👎1
#highload
Я не очень понял, как это работает. Видосы на самом канале так и не появились, хотя прошло уже больше года с конференции. Плейлист со всеми докладами доступен, и видео выложили год назад. Доступ к ним явно есть. Но просмотров нет. То есть как-то никто и не в курсе, что их можно смотреть.
Доклады с Saint HighLoad++ 2025.
0. Эволюция векторного поиска в YDB. Александр Зевайкин.
Есть ещё в тексте (правда не уверен, что контент 1 в 1).
1. Технологии распределенной карты для автономного транспорта. Гоша Лутидзе.
Прикольное введение в кусок вот этих самоездящих штук.
2. 20 лет на граблях: ошибки, отказы и выводы. Александр Стерлигов.
Несколько кайфовых историй про разные инциденты. Я тоже такое сделаю когда-нибудь.
3. Взгляд за кулисы Яндекс Карт: от сырых спутниковых данных до четких изображений. Игорь Орпанен.
4. Четыре девятки хватит всем? Разбираемся с доступностью дата-центров. Алексей Учакин.
Доклад про датацентры, как они устроены с точки зрения пользователя, что вам обещают и (не)гарантирует.
5. Почему в космосе (пока) нет дата-центров. Александр Токарев.
Ещё один доклад про датацентры, но в космосе. Приятный научпоп.
6. Про избыточность WAL в Postgres. Андрей Бородин.
Интересное для понимания устройства WAL в pg. Не то, чтобы я запомнил что-то, но удовольствие получил.
Факт, который понравился: в pg есть лагающая реплика. Вы можете сделать реплику, в которой всё применяется с задержкой в час, и при факапе остановить её обновление + переключиться на неё.
У меня коллеги когда-то делали похожую штуку, но на уровне приложения. Фиксировали набор табличек, которым нужно делать снапшоты (раз в час и сутки, например). И если источник данных накатил что-то неправильное, из-за чего не получается клиентам отдать данные, мы (как промежуточное звено) могли руками включить чтение из подходяшего снапшота.
Пару раз помогло восстановиться на инцидентах за минуты.
Я не очень понял, как это работает. Видосы на самом канале так и не появились, хотя прошло уже больше года с конференции. Плейлист со всеми докладами доступен, и видео выложили год назад. Доступ к ним явно есть. Но просмотров нет. То есть как-то никто и не в курсе, что их можно смотреть.
Доклады с Saint HighLoad++ 2025.
0. Эволюция векторного поиска в YDB. Александр Зевайкин.
Есть ещё в тексте (правда не уверен, что контент 1 в 1).
1. Технологии распределенной карты для автономного транспорта. Гоша Лутидзе.
Прикольное введение в кусок вот этих самоездящих штук.
2. 20 лет на граблях: ошибки, отказы и выводы. Александр Стерлигов.
Несколько кайфовых историй про разные инциденты. Я тоже такое сделаю когда-нибудь.
3. Взгляд за кулисы Яндекс Карт: от сырых спутниковых данных до четких изображений. Игорь Орпанен.
4. Четыре девятки хватит всем? Разбираемся с доступностью дата-центров. Алексей Учакин.
Доклад про датацентры, как они устроены с точки зрения пользователя, что вам обещают и (не)гарантирует.
5. Почему в космосе (пока) нет дата-центров. Александр Токарев.
Ещё один доклад про датацентры, но в космосе. Приятный научпоп.
6. Про избыточность WAL в Postgres. Андрей Бородин.
Интересное для понимания устройства WAL в pg. Не то, чтобы я запомнил что-то, но удовольствие получил.
Факт, который понравился: в pg есть лагающая реплика. Вы можете сделать реплику, в которой всё применяется с задержкой в час, и при факапе остановить её обновление + переключиться на неё.
У меня коллеги когда-то делали похожую штуку, но на уровне приложения. Фиксировали набор табличек, которым нужно делать снапшоты (раз в час и сутки, например). И если источник данных накатил что-то неправильное, из-за чего не получается клиентам отдать данные, мы (как промежуточное звено) могли руками включить чтение из подходяшего снапшота.
Пару раз помогло восстановиться на инцидентах за минуты.
👍9🔥6❤4
СОБИРАЮ ВАШИ ИСТОРИИ.
Вас тут относительно много. Вы умные. Вы работаете и занимаетесь интересными вещами. А я почему-то этим не пользуюсь!
Я бы хотел про них узнать и может заодно поделиться с подписчиками!
Расскажите про самую интересную оптимизацию, которую вы сделали. Это может быть что угодно. Ускорили запрос в БД. Поменяли способ хранения данных (может это буквально vector -> unordered_map). Перепридумали архитектуру. Отсортировали данные, чтобы они в кеш легли. Удалили неиспользуемые данные. Сократили использование железа (может вы даже стали медленнее из-за этого, но вам это ок). Скомпилировали иначе. Перешли на новую технологию. Рассказали коллегам, как экономить время в рутинных делах. Перестроили процесс в нескольких командах.
Вообще что угодно.
Не обязательно сложное. Ведь иногда принести профит небольшими изменениями даже круче. Главное, чтобы вам это по какой-то причине нравилось.
Может вы вообще не про оптимизацию хотите рассказать, а как вы её нашли/придумали. Что угодно, что можно притянуть к этому слову!
Формочка: https://forms.gle/8o5d9zDDcsdzc41u6
Вас тут относительно много. Вы умные. Вы работаете и занимаетесь интересными вещами. А я почему-то этим не пользуюсь!
Я бы хотел про них узнать и может заодно поделиться с подписчиками!
Расскажите про самую интересную оптимизацию, которую вы сделали. Это может быть что угодно. Ускорили запрос в БД. Поменяли способ хранения данных (может это буквально vector -> unordered_map). Перепридумали архитектуру. Отсортировали данные, чтобы они в кеш легли. Удалили неиспользуемые данные. Сократили использование железа (может вы даже стали медленнее из-за этого, но вам это ок). Скомпилировали иначе. Перешли на новую технологию. Рассказали коллегам, как экономить время в рутинных делах. Перестроили процесс в нескольких командах.
Вообще что угодно.
Не обязательно сложное. Ведь иногда принести профит небольшими изменениями даже круче. Главное, чтобы вам это по какой-то причине нравилось.
Может вы вообще не про оптимизацию хотите рассказать, а как вы её нашли/придумали. Что угодно, что можно притянуть к этому слову!
Формочка: https://forms.gle/8o5d9zDDcsdzc41u6
👍18
#common
МАРТИН ИДЕН ОШИБАЛСЯ.
Книге уже больше 100 лет, так что у вас было полно времени её прочитать. Потому выдать спойлер бояться не буду (хотя главные панчи всё-таки придержу).
Так где он ошибался?
Когда Мартин стал уважаемым известным писателем, его стали активно звать на всякие обеды, встречи, интервью. Хорошо с ним обходились, уважали. Мартина это раздражало. Его основная мысль в это время успеха была примерно такая: «Почему они любят меня сейчас? Моя работа [имеется в виду все те книги, рассказы, повести и стихи, которые Мартин усиленно писал пару лет] была уже сделана. Я никак не изменился как человек. Но тогда [до публикации и признания] никто не звал меня на обед, когда я голодал и мне нужны были эти обеды! А сейчас все зовут, а мне уже не нужны эти обеды!» (на обеды он тем не менее ходил).
В голове Мартина должно быть так: ты делаешь работу и все магическим образом должны тебя за это зауважать.
Переводя на наш с вами, он считал, что достаточно «написать код». Однако по какой-то причине Мартин не подумал про два других важных этапа успеха:
• выкатить в прод (в его случае опубликовать работы через издателей)
• поработать над визибилити (в его случае каким-либо образом добиться известности хотя бы в сообществе).
То есть это всё у него в итоге было, но в юношеских стенаниях упускалось.
Давайте учиться на чужих ошибках. Как бы круто вы ни закодили что вы там кодили, как бы круто оно ни работало, никто не будет вас хвалить за работу (если вы не джун или микромидл, но это отдельный разговор). Всем нужен результат. Даже не так. Всем нужен наблюдаемый результат.
Самая крутая фича должна быть у юзера и должна показать, что она приносит деньги. Самая крутая оптимизация должна реально что-то наоптимизировать.
И вам очень повезло, если по какой-то причине важным начальникам и начальницам очевидно, что вы большие молодцы и достойны премии повыше.
Но обычно не так. Обычно надо ещё самим замерять, сколько денег вы принесли. Сколько ресурсов сэкономили. Как изменилась метрика.
И, что ещё более важно, надо пойти и всем про это рассказать. А если вам не нравится таким заниматься, то либо найдите себе руководителя, готового делать это за вас, либо смиритесь с тем, что ваш гений не признают.
Если вы макромидл или тем более senior+, без визибилити никуда. Примите это.
Ниже картинка, на которую важно иногда посматривать, чтобы не забывать всё выше.
А книга хорошая. Почитайте.
@thisnotes. Patreon.
Спасибо Artyom Garkavy и niki4smirn.
МАРТИН ИДЕН ОШИБАЛСЯ.
Книге уже больше 100 лет, так что у вас было полно времени её прочитать. Потому выдать спойлер бояться не буду (хотя главные панчи всё-таки придержу).
Так где он ошибался?
Когда Мартин стал уважаемым известным писателем, его стали активно звать на всякие обеды, встречи, интервью. Хорошо с ним обходились, уважали. Мартина это раздражало. Его основная мысль в это время успеха была примерно такая: «Почему они любят меня сейчас? Моя работа [имеется в виду все те книги, рассказы, повести и стихи, которые Мартин усиленно писал пару лет] была уже сделана. Я никак не изменился как человек. Но тогда [до публикации и признания] никто не звал меня на обед, когда я голодал и мне нужны были эти обеды! А сейчас все зовут, а мне уже не нужны эти обеды!» (на обеды он тем не менее ходил).
В голове Мартина должно быть так: ты делаешь работу и все магическим образом должны тебя за это зауважать.
Переводя на наш с вами, он считал, что достаточно «написать код». Однако по какой-то причине Мартин не подумал про два других важных этапа успеха:
• выкатить в прод (в его случае опубликовать работы через издателей)
• поработать над визибилити (в его случае каким-либо образом добиться известности хотя бы в сообществе).
То есть это всё у него в итоге было, но в юношеских стенаниях упускалось.
Давайте учиться на чужих ошибках. Как бы круто вы ни закодили что вы там кодили, как бы круто оно ни работало, никто не будет вас хвалить за работу (если вы не джун или микромидл, но это отдельный разговор). Всем нужен результат. Даже не так. Всем нужен наблюдаемый результат.
Самая крутая фича должна быть у юзера и должна показать, что она приносит деньги. Самая крутая оптимизация должна реально что-то наоптимизировать.
И вам очень повезло, если по какой-то причине важным начальникам и начальницам очевидно, что вы большие молодцы и достойны премии повыше.
Но обычно не так. Обычно надо ещё самим замерять, сколько денег вы принесли. Сколько ресурсов сэкономили. Как изменилась метрика.
И, что ещё более важно, надо пойти и всем про это рассказать. А если вам не нравится таким заниматься, то либо найдите себе руководителя, готового делать это за вас, либо смиритесь с тем, что ваш гений не признают.
Если вы макромидл или тем более senior+, без визибилити никуда. Примите это.
Ниже картинка, на которую важно иногда посматривать, чтобы не забывать всё выше.
А книга хорошая. Почитайте.
@thisnotes. Patreon.
Спасибо Artyom Garkavy и niki4smirn.
👎15❤8👍8🔥1
#cpp
Back to Back 2026 (который был C++ Zero Cost Conf).
Я выбрал несколько докладов из всех 4х треков. Если доклад не выбран, это не значит, что он плох. Возможно он не зашёл мне темой, а возможно не так интересен, как другие. Навалить вам просто все доклады мне не очень хотелось.
0. 9 миллиардов этажей concurrency. Андрей Аксёнов.
Доклады бывают в разных форматах. Этот доклад не должен глубоко раскрывать тему, на мой взгляд. Он скорее должен дать вам много разных слов, с которыми вы должны пойти разбираться.
Ну и это Андрей Аксёнов со своей подачей. Хулиганской.
1. Трассирую и профилирую — бесплатно. Александр Емеленко.
Александр рассказывает про измерение времени и запись логов жоска эффективно, двигаясь от базовичкового медленного варианта к быстрому наносекундному.
2. Building the tiniest pomodoro app. Miloš Anđelković.
Хороший доклад для понимания техник уменьшения размера ваших бинарных файлов. От отказа от зависимостей и правильной компиляции до переписывания всего совсем иначе.
3. Profile-Guided Optimisation. Taming the pitfalls in the name of performance. Alexander Zaitsev.
Я особо раньше не смотрел доклады про PGO, потому что они сразу куда-то в дебри уходят. Как будто для них нужен уже солидный такой контекст.
А вот тут не так. Тут Alexander рассказывает про базовые понятия, проблемы, кто что умеет, как делать, профит. Такое солидное введение в тему.
4. Google's Highway Library for SIMD Programming — Does It Deliver the Promise? Ivica Bogosavljevic.
Ivica рассказывает про гугловую SIMD либу. В местах, где она хороша (как и заявлено), и где не очень хороша и не справляется со своими задачами (или справляется, но не очень хорошо).
5. Microseconds in Network Code. Artur Soloviev.
Artur рассказывает про несколько вариантов работы с сетью, чтобы было быстро.
6. To 264 and Beyond: Modern Approaches to Distributed Identifier Algorithms. Mons Anderson.
Тут Mons рассказывает про огромное количество (штук 15 может) разных distributed ID. Их устройство, некоторые принципы работы, tips & tricks для разработки своего решения. Плюсы и минусы разных подходов.
Как один из критериев ещё обсуждалась длина закодированого ID. Это важно, ведь если ваши ID в огромнющей системе сделать на байт короче, это может вылиться в Гигабайты экономии.
А ещё это важно, потому что некоторые строки (покороче) попадают в SSO буфер, а некоторые нет. Мета, например, когда-то ровно по причине увеличения SSO буфера переходила на свой fbstring. А потом вернулась на стандартную строку, когда clang научился давать 23 символа в SSO буфере из коробки.
Возможно, вы можете пойти и поменять тип для хранения ваших ID на small_string или как оно у вас называется. И получить какой-нибудь профитик.
Back to Back 2026 (который был C++ Zero Cost Conf).
Я выбрал несколько докладов из всех 4х треков. Если доклад не выбран, это не значит, что он плох. Возможно он не зашёл мне темой, а возможно не так интересен, как другие. Навалить вам просто все доклады мне не очень хотелось.
0. 9 миллиардов этажей concurrency. Андрей Аксёнов.
Доклады бывают в разных форматах. Этот доклад не должен глубоко раскрывать тему, на мой взгляд. Он скорее должен дать вам много разных слов, с которыми вы должны пойти разбираться.
Ну и это Андрей Аксёнов со своей подачей. Хулиганской.
1. Трассирую и профилирую — бесплатно. Александр Емеленко.
Александр рассказывает про измерение времени и запись логов жоска эффективно, двигаясь от базовичкового медленного варианта к быстрому наносекундному.
2. Building the tiniest pomodoro app. Miloš Anđelković.
Хороший доклад для понимания техник уменьшения размера ваших бинарных файлов. От отказа от зависимостей и правильной компиляции до переписывания всего совсем иначе.
3. Profile-Guided Optimisation. Taming the pitfalls in the name of performance. Alexander Zaitsev.
Я особо раньше не смотрел доклады про PGO, потому что они сразу куда-то в дебри уходят. Как будто для них нужен уже солидный такой контекст.
А вот тут не так. Тут Alexander рассказывает про базовые понятия, проблемы, кто что умеет, как делать, профит. Такое солидное введение в тему.
4. Google's Highway Library for SIMD Programming — Does It Deliver the Promise? Ivica Bogosavljevic.
Ivica рассказывает про гугловую SIMD либу. В местах, где она хороша (как и заявлено), и где не очень хороша и не справляется со своими задачами (или справляется, но не очень хорошо).
5. Microseconds in Network Code. Artur Soloviev.
Artur рассказывает про несколько вариантов работы с сетью, чтобы было быстро.
6. To 264 and Beyond: Modern Approaches to Distributed Identifier Algorithms. Mons Anderson.
Тут Mons рассказывает про огромное количество (штук 15 может) разных distributed ID. Их устройство, некоторые принципы работы, tips & tricks для разработки своего решения. Плюсы и минусы разных подходов.
Как один из критериев ещё обсуждалась длина закодированого ID. Это важно, ведь если ваши ID в огромнющей системе сделать на байт короче, это может вылиться в Гигабайты экономии.
А ещё это важно, потому что некоторые строки (покороче) попадают в SSO буфер, а некоторые нет. Мета, например, когда-то ровно по причине увеличения SSO буфера переходила на свой fbstring. А потом вернулась на стандартную строку, когда clang научился давать 23 символа в SSO буфере из коробки.
Возможно, вы можете пойти и поменять тип для хранения ваших ID на small_string или как оно у вас называется. И получить какой-нибудь профитик.
🔥7👍1
Теперь про Сербию.
Я раньше в ней не бывал. Только слышал забросы вида "идёшь в центре города, слева тц, справа заброшка". Впечатляюще?
Я конечно упускал контекст. Заброшки там не просто так, а из-за бомбёжек НАТО в 1999м. Причём ребята не сильно планируют с ними разбираться (по крайней мере, не со всеми): хотят оставить напоминание о случившемся.
Первое впечатление от Белграда довольно сумбурное. Не очень чисто, здания старые. От всего вокруг отдаёт совдепом. Вот эти советские-like здания, потемневшие от времени. Вайб советского брутализма от большинства зданий в центре города (мы, ради справедливости, сильно за центр и не выбирались). Как-то мрачно!
Ты естественным образом сравниваешь новые места относительно тех, где долго пожил. И по ощущениям Белград не дотягивает ни до Минска (потому что там всё гораздо аккуратнее), ни до Лондона (потому что в Лондоне больше европейского и больше всего в целом).
Но к концу 4ого дня стало как-то уже даже и ничего. Всё серое и неприятное стало просто серым. Мы вкусно кушали и ходили в новых местах в первом настоящем (уехав куда-то) с переезда отпуске. В каком-то смысле даже немного вернулись домой, во что-то более понятное и привычное.
Я попробовал плескавицу. Мне понравилось.
Попробовали ракию. Не понравилось. Это оказывается просто местная водка. Я к такому готов не был. I'm a beer guy.
Ещё мы ездили в Нови Сад. Такой небольшой [относительно] город с крепостью и базовым форматом: исторический центр и остальное как есть. Симпатично на 3 часа, но и хватит.
Очень жарко там везде было. 36 примерно. Парились все 5 дней от начала и до конца. Благо, сербы понимают, где живут, и имеют нормальные работающие кондиционеры везде, где необходимо. Не то что англичане блеан.
Ещё церкви очень красивые. Возможно потому что огромные.
По порядку:
• князь Михаил на коне (я так понимаю, местное популярное место для встреч) на (опять же, насколько понимаю) важной площади. На фоне национальный музей.
• вид на Дунай и какую-то вторую реку с территории белградского замка.
• какая-то рандомная церковь у главпочтамта.
• одна из самых больших православных церквей в мире.
• вид на Нови Сад с крепости (которая типа новисадская, но на самом деле в Петроварадине).
• рандомная фотка из Нови Сада.
Я раньше в ней не бывал. Только слышал забросы вида "идёшь в центре города, слева тц, справа заброшка". Впечатляюще?
Я конечно упускал контекст. Заброшки там не просто так, а из-за бомбёжек НАТО в 1999м. Причём ребята не сильно планируют с ними разбираться (по крайней мере, не со всеми): хотят оставить напоминание о случившемся.
Первое впечатление от Белграда довольно сумбурное. Не очень чисто, здания старые. От всего вокруг отдаёт совдепом. Вот эти советские-like здания, потемневшие от времени. Вайб советского брутализма от большинства зданий в центре города (мы, ради справедливости, сильно за центр и не выбирались). Как-то мрачно!
Ты естественным образом сравниваешь новые места относительно тех, где долго пожил. И по ощущениям Белград не дотягивает ни до Минска (потому что там всё гораздо аккуратнее), ни до Лондона (потому что в Лондоне больше европейского и больше всего в целом).
Но к концу 4ого дня стало как-то уже даже и ничего. Всё серое и неприятное стало просто серым. Мы вкусно кушали и ходили в новых местах в первом настоящем (уехав куда-то) с переезда отпуске. В каком-то смысле даже немного вернулись домой, во что-то более понятное и привычное.
Я попробовал плескавицу. Мне понравилось.
Попробовали ракию. Не понравилось. Это оказывается просто местная водка. Я к такому готов не был. I'm a beer guy.
Ещё мы ездили в Нови Сад. Такой небольшой [относительно] город с крепостью и базовым форматом: исторический центр и остальное как есть. Симпатично на 3 часа, но и хватит.
Очень жарко там везде было. 36 примерно. Парились все 5 дней от начала и до конца. Благо, сербы понимают, где живут, и имеют нормальные работающие кондиционеры везде, где необходимо. Не то что англичане блеан.
Ещё церкви очень красивые. Возможно потому что огромные.
По порядку:
• князь Михаил на коне (я так понимаю, местное популярное место для встреч) на (опять же, насколько понимаю) важной площади. На фоне национальный музей.
• вид на Дунай и какую-то вторую реку с территории белградского замка.
• какая-то рандомная церковь у главпочтамта.
• одна из самых больших православных церквей в мире.
• вид на Нови Сад с крепости (которая типа новисадская, но на самом деле в Петроварадине).
• рандомная фотка из Нови Сада.
❤25🔥7🌚3