this->notes.
4.53K subscribers
25 photos
1 file
330 links
О разработке, архитектуре и C++.

Tags: #common, #cpp, #highload и другие можно найти поиском.
Задачки: #poll.
Мои публикации: #pub.
Автор и предложка: @vanyakhodor.
GitHub: dasfex.
Download Telegram
#highload

Две недели не читал статьи! Нагоняем.

0. Серия статей про backend for frontend.
Я когда писал про него коротенький пост и на тот момент ещё не прям понимал, зачем такое делать. Сейчас преисполнился чуть больше. Основные юзкейсы, которые я видел, были про формирование готовой разметки для клиента. Почему это не может делать бекенд? Ну может. Есть же всякие разные server side ui и прочее, но в среднем это скорее про околофронтовые знания, которые тесно связаны с нативом, отображением и около. Короче это про хорошее разделение зон ответственности.
Ну и про другие плюсы можно почитать как раз в статьях.

1. Новый пост (ну как, двухнедельной давности) Вадима Кравченко: Mental Health in Software Engineering.

2. Microservices Design Principles You Really Need To Learn.
Вроде понятные штуки, но вдруг кто-то что-то для себя найдёт.

3. Guide on Structured Logs.
Я в целом про такое задумывался, как такое можно сделать и будет ли полезно. Оказывается есть отдельное название и тулзы. Но у нас как будто такое будет не очень полезно.

4. Optimizing Postgres Column Order.
Звучит хорошо конечно, но такое иногда сложно поддерживать. У нас есть таблички, в которые хотя бы раз в месяц добавляется новая колонка. И непонятно, как меинтейнить порядок в случае такой ситуации.
Ну и как будто может понятность страдать, если вдруг в табличку часто смотрят глазами, но наверное это не то, про что стоит думать при проектировании.
1👍1🤔1
#highload

Выложили записи SaintHighload++ 2023! Делюсь тем, что понравилось.

Нужно отметить, что я довольно грубо отсеиваю доклады: сначала выбираю по названию, -- из-за чего могу что-то интересное да упустить. Но смотреть всё подряд в условиях довольно ограниченного времени больно. Так что как есть.


1. Octree, или Сказ о поиске пути в 3D.
В общих чертах интересно. Всё-таки геймдев крута с точки зрения задач. Жаль, что я в среднем продукт не одобряю.
Есть правда ощущение, что то ли я глупый, то ли чуваки очень много всего проскакали галопом и местами совсем непонятно, что же имеется в виду и как это должно работать.

2. Групповые чаты в Одноклассниках 🙂

3. Как сделать поиск в интернет-магазине.
Задача мне хорошо знакомая. Специфика/проблемы тоже. Было интересно.

4. Архитектура ленты и рекомендаций ВКонтакте.
Пару моментов:
- на одном из первых слайдов докладчик говорит, что вот у них в p50 ответ за 600мс. Я чёт угарнул, потому что кто вообще смотрит на p50. Ну p95 ещё с натягом ок. Но как будто p98/p99 гораздо важнее, особенно для таких огромных сервисов. Выглядит как политический ход, т.к. в перцентилях выше какой-то разнос в таймингах.
- на другом слайде был скрин из паблика Душа пацана. Посмеялся.
- я когда-то ранжированием ленты был оч недоволен, потому что у меня паттерн в ВК был зайти и посмотреть 25 записей за последние сутки из трёх пабликов, на которые я подписан. А тут они начали что-то воротить. И отключить емнип первое время было нельзя. Но конечно понятно, что это всё на метрики в целом влияет почти наверняка хорошо.
- в какой-то момент докладчик начал рассказывать, как они генерят PHP код, с поведением эквивалентным поведению ML-модели, который потом по классике транслируется в плюсы. Hahaha, classic ☺️

5. 7 петабайт логов в Elastic. Как мы это сделали?
Неплохо про базу эластика рассказали с упором на свой кейс.

Вот так немножко получилось. Как-то остальное либо не заинтересовало, либо просто не понравилось в процессе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🤔1
#highload #cpp

Микропост.

1. The only two log levels you need are INFO and ERROR.
Сомнительно, но окэй.

2. std::expected - Monadic extensions.

3. Use percentiles to analyze application performance.
Вроде понятно, но на всякий.

4. Lessons after a half-billion GPT tokens.

============================================
Блин, ребят. Знали бы вы, как я отдыхал эти две недели.
8👍2
#cpp #algo #pub

Когда-то (ещё в августе 2023) я хотел написать про одну из возможных реализаций связного списка, а потом как-то разошёлся и написал про все мне известные. Ну как-то вот так и получилось.

https://habr.com/ru/articles/814955/
👍24421🔥1🫡1
#cpp

Наконец выложили все интересные мне доклады с C++ Russia 2023. Вот они слева направо:

1. Designing Robust APIs: How to Write C++ Code that's Safe, Extensible, Efficient & Easy to Use 🤔

2. Учим Кукушку Летать, или ConcurrentHashMap with Seqlocks 🥴

3. Санитайзеры и стандарт не спасут 🤨

4. Имплементируем класс tuple в 100 строк кода ☺️

5. C++ трюки из userver ☺️

6. Как правильно писать компараторы 🥳

7. Семантические процессы в C++ 🤨

8. И два отдельных, которые относительно похожи по теме + немножко расширили сознание про то, какие штуки чуваки делают на плюсах:
- Демосцена: в погоне за wow-фактором 🤔
- Sizecoding: взгляд изнутри 🤔

Ну напостил, теперь можно и отдыхать.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥12👍632🔥1
[неожиданно] #math #algo

Делюсь небольшой задачей из начала универа. Сильно мне тогда понравилась.

https://telegra.ph/Zadacha-iz-molodosti-05-30

Единственное что пришлось приложить немалые усилия (и попросить помощь у друзей), чтобы восстановить картинку в голове, потому что математик из меня так себе.
👍74💅4
#cpp #common

0. Коллеги выпустили новый релиз userver (какое-то время назад).

1. GIL в Python: как его будут отключать.
Ну наконец-то тут что-то задвигалось.

2. Прошлогодний, но от этого не менее полезный и интересный пост Вадима Кравченко: Contracts you should never sign.

3. Lightning Talk: Writing a Better std::move.

===================================
Во-первых, я сгонял на C++ Russia с маленьким рассказом про (N)RVO. Опять же посмотреть на всё в офлайне было интересно. Увидеть каких-то челов из телевизора тоже. С кем-то даже пообщался. Записи моей правда не будет в открытом доступе. Такой вот артефакт лайтнингов.

Во-вторых, мы ищем к себе разработчика в команду (вот прям в мою). Базово требования такие:
- знаете плюсы (что бы это ни значило)
- есть опыт работы с бекендом.
За деталями/обсудить можно писать мне (@vanyakhodor). И конечно смотреть в вакансию: https://yandex.ru/jobs/vacancies/разработчик-бэкенда-в-лавку-20286
👍74👎2🤔2
#common #math

Наткнулся на статью про то, как быстро и корректно складывать числа с плавающей запятой (ссылка будет в конце).

Общая проблема в том, что из-за того, что дробные числа хранятся в примитивных типах не точно, может возникать некоторая потеря точности (сорян за тавтологию) при арифметических операциях. Например когда складываешь большое число с маленьким, маленькое вполне может никак не изменить ответ, т.к. оно с точки зрения хранения чисел "пренебрежимо мало" (ну или нужное число не может быть представлено дробным число) Вопрос в том, как наиболее точно сложить какое-то множество чисел.

Пусть у вас есть какой-то массив числе с плавающей запятой. Конечно мы можем сложить числа просто подряд:


std::vector<float> v = Get();
float ans = 0.0;
for (int i = 0; i < v.size(); ++i) {
ans += v[i];
}


Но тогда у вас в какой-то момент может получится огромное число и следующее добавление маленького легко потеряется из-за погрешности.

А можем отсортировать вектор чисел перед суммой! Тогда мы будем накапливать сумму и при добавлении следующего числа по возрастанию оно может быть сравнимо с текущей суммой (хотя конечно зависит от данных, т.к. если все ваши числа это 1 + x_i, где x_i -- последовательность очень маленьких возрастающих чисел, то в какой-то момент большая сумма скушает этот 1 + eps).

Можно сделать лучше. Например закинуть все числа в кучу и попарно складывать два самых маленьких числа, возвращая результат обратно. Это может работать лучше, т.к. теперь мы ни в какой момент не будем складывать сумму большого количества элементов с одним небольшим.

Дальше развивать не буду. Прочитаете в статье: оригинал и перевод.

Кстати когда-то у студентов на пару лет младше в унике видел фановый контест в рамках одной из дисциплин, где нужно было найти сумму чисел наиболее точно (авторское решение, естественно, на длинке python). Первое место забрал чувак с суммой Кэхена.

Ну и мем из молодости: плавающая запятая.
23👍4
#highload #cpp #common

1. В конце мая был довольно громкий инцидент у Google Cloud, который сильно зааффектил клиента в Австралии. Если не читали пост-мортем, то вот он: Sharing details on a recent incident impacting one of our customers.

2. New C++ features in GCC 14.

3. Саша написал постики про throwing values: первый и второй (почитайте комменты ещё).

4. Тут вы можете найти список строк, которые могут деструктивно повлиять на ваш продукт. Тут и всякие инъекции, и более семантически сложные строки.
8👍32👎2
#common

Если я переписываю какие-то посты, то я расту.

По крайней мере я в это верю.

Снова про пагинацию : )

https://telegra.ph/Paginaciya-07-05
👍183
#cpp

1. Небольшой доклад про нахождение медианы с CppCon 2023.

2. TDD CANNOT work.
Какой-то околоформальный наброс, но и ладно : )

3. У Жени вышел очередной (и очень интересный) пост про жостиков C++.

4. Небольшой факт про макросы (в целом писал про них тут).
Если макросы у вас сложные, как этот:


MACROS_NAME(name, name,
[]() {
Type obj {.x = 2, .y = 3};
return x;
}()
);


вы можете захотеть использовать designated initialization. Проблема тут в том, что когда аргументов больше одного, вам нужно перечислять их через запятую. И это не работает!

Компилятор считает, что эта запятая -- разделитель аргументов макроса. Т.е. вы передаёте 4 аргумента:


name
name
[]() { Type obj {.x = 2
.y = 3}; return x; }()


Что не выглядит как ожидаемый результат.

Такая же проблема в случае, когда вы хотите шаблоны юзать:


MACROS(std::map<int, int>);


Запятая не считывается как разделитель аргументов макроса только внутри круглых скобок.

Вы всегда можете поправить : )
53👍2
Приходите на C++ Zero Cost Conf 27 июля!

Конференция одновременно пройдёт в Москве, Ереване и онлайн. А ещё будет крутой нетворкинг и афтерпати.

Мне лично хочется послушать следующие доклады:
- Антон Полухин про новости C++26 и C++29
- Василий Куликов про реализацию мьютекса в userver
- Сергей Слотин про устройство памяти и кешей и производительность
- Данила Демидов про отказ от динамического распределения памяти
- Александр Боргардт про завоз кастомного аллокатора в Otterbrix
- Алексей Веселовский про компоновщик и санитайзеры
- Павел Новиков про сериализацию JSON (видимо в продолжение доклада на C++ Russia)
- Андрей Аксёнов про парсинг большого количества данных
- Константин Владимиров про llvm-snippy.

И конечно вы можете найти мой рассказ про NRVO : )

Зарегистрироваться можно по ссылке.

До встречи на C++ Zero Cost Conf! ☀️
👍27🎉105🔥5
#cpp

Доклад про NRVO можно посмотреть тут.

Хочется сказать большое спасибо Илье (@imhired), Жене (@cxx95) и Лёше (@aleexf) за огромную помощь с докладом. Всё-таки есть что-то в силе слабых связей (ну или сильных).

Отсмотрю все доклады и на днях выложу постик про то, что зашло. А пока посмотрите мой пару раз : )
👍3617🔥2👏1
#cpp

А теперь собсна зашедшие доклады с C++ Zero Cost Conf 2024:
- Реализация мьютекса в userver от Василия Куликова
- Новости РГ21 C++ от Антона Полухина
- Проблемы и решения в крупных C++-проектах на примере генератора llvm-snippy от Константина Владимирова
- Arena allocator с помощью std::pmr::memory_resource на примере документов из Otterbrix от Александра Боргардта
- ну и мой про NRVO.
🔥26👍76
#highload #common

1. Mastering Caching in Distributed Applications.

2. Не в техническую тему, но почему-то зацепило: Visual Thinking & Sketching.

3. Feature flags are ruining your codebase.
Знали бы вы, какая жиза.....
В статье ещё упоминается такой интересный инцидент.

4. Мы конечно много таких постов уже видели, но если очередной хорош, то почему нет: Advice to the young.
👍4311
#common

В последний год я стал сильно чаще посещать всякие конфы и локальные митапы. И пока останавливаться не хочется. Движут мной следующие моменты:

🥳 Хочется посмотреть доклады раньше, чем их выложат в открытый доступ (если вообще выложат).

Во-первых, понятная образовательная сторона. И можно конечно сказать, что можно в онлайне посмотреть, но это как-то не то. Когда смотришь доклад дома в уютной обстановке, очень легко от этого дело отключиться и уйти в свои мысли. Очень легко забить и пойти заниматься чем-то другим. В офлайне же ты максимально сосредоточен на происходящем, внимательнее слушаешь и пытаешься вникнуть. Можно вопрос докладчику задать. Это сильнее качает. На паузу не поставишь, отмотать не получится. Потому надо слушать.

Во-вторых, вы мои любимые. Мне гораздо удобнее прослушать тучу докладов в плотном режиме за день-два в локации конференции, чем пытаться сделать то же самое за то же время в обычной обстановке. Зачем так делать? Ну просто потому что как только доклады выкладывают, я могу насобирать ссылки на уже просмотренный контент и закинуть пост. Без огромного лага. Я еду на конференцию. Вы получаете самые вкусные (по моему объективнейшему мнению) доклады сразу, как только это возможно.

🥳 Люди.

Я очень долго до посещений в офлайне смотрел конференции на ютубах. Какие-то необычные чувства увидеть людей из компуктера вживую. Пообщаться с ним. Примерно так же, когда несколько лет смотришь Разгоны от Stand Up Club #1, а потом приезжаешь в Москве на очное выступление чуваков.

В целом возможность общаться в условиях, когда вы по дефолту имеете точки соприкосновения, очень хороша. Вот я точно знаю, что этот человек почти наверняка пишет на C++: пойду обсужу с ним какие-то моменты. Или я точно знаю, что у этих ребята точно такие же технические проблемы, потому что мы решаем похожие задачи: пойду поделюсь опытом. Даже пару раз наталкивали на интересные мысли, которые потом удалось применить.

И ещё очень круто, когда на таких мероприятиях встречаются падписчеки. Мне даже закидывали довольно ценный фидбек.

Конечно всегда есть возможность сходить на мероприятия для нетворка, но есть смутные ощущения, что туда приходят люди в рамках найти хоть кого-нибудь, чтобы решить какую-то проблему. На профильных конференциях такого не встречается.

Третьего пункта не будет, потому что первых двух достаточно☺️

И ещё я иногда удивляюсь форматам мероприятий, которые в рамках конференций бывают. Потому очень часто это довольно серьёзные мероприятия, где ты бегаешь от зала к залу, по пути пытаяясь перехватить что-то поесть и с кем-то парой слов перекинуться.

Вот коллеги делают YACAMP, который пройдёт буквально на днях (10ого августа). В программе и технические доклады, и менеджерские, и какие-то неожиданные форматы вроде плохих шуток, и обучающие кусочки. И тематика какая-то не оч стандартная для подобных мероприятий. И видос прикольный сняли.

Правда, регистрация у ребят уже закрыта. Надо было вам раньше такие приколы показать.
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5🤔1
#cpp #go

1. Enum Class Improvements.

2. The Painful Pitfalls of C++ STL Strings.
К контенту статьи относиться стоит критически (впрочем, как и всегда).

3. [видео] C++ Features You Might Not Know.
Местами кекал.

4. [⚠️ long видео] C++26 Preview.

5. Go 1.23 released.

6. Boost 1.86 released.

7. cppfront: Midsummer update.

Пост обнов какой-то получился.

И ещё я подумал, что у меня в последнее время нет никакой кроссылочности на свои старые посты, поэтому я не буду ждать с моря погоды и дам ссылку на рандомно выбранный пост из прошлого.
🔥5👍32🐳1
#cpp #common

1. [lightning talk] Forbidden C++.

2. [long talk] New Algorithms in C++23.

3. [long talk] *(char*)0 = 0;
Потрясающий доклад.

4. Lessons learned in 35 years of making software.
Мне кажется, каждый такой пост полезен по-своему.

=========================

Знаете, как C++-программисты говорят, что вот в случае ub может произойти что угодно🤙 Вселенная может взорваться💣 Или пёс соседей умрёт🥳

Во-первых, почему все примеры такие фаталистичные? Может пусть ваш друг выиграет в лотерею или там все войны закончатся👍👍 Ну что-нибудь хорошее! Ни разу такого не слышал😥😥

Во-вторых, не много ли мы, C++-программисты, берём на себя? Вселенная взорвётся. Во придумали🤣🤣🤣
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19😁65🌚2🐳1
#common

Я давно этот пост хотел написать в рамках миллиона ненаписанных постов про поиск, но Тим меня подтолкнул, так что вот ссылочка на его канал (@loopynerd).

https://telegra.ph/Codesearch-09-08
6🤔2👍1🔥1