#common #cpp #highload
0. Женя намутил квиз по плюсам с иногда не самыми тривиальными вопросами. Перед чтением статей ниже можете пойти потыкаться минуток 20 в него☺️
1. [article] от Вадима Кравченко: 10x Engineers.
Это не прям про 10x engineers, а скорее про то, как быть адекватным и чётким прогером и коллегой. Почему бы лишний раз не вспомнить.
2. [article] и ещё один от него же: What I learned building a $1K MRR SaaS in 6 weeks.
Тут он рассказывает про то, как намутил небольшой инструмент для AI cross-linking, который он сделал на коленке и начал продавать. Статья выше -- рефлексия после достижения 1k$ MRR относительно решений, которые он принял по ходу разработки и промоутинга.
3. [article] Real-time mouse pointers at Canva.
Давно хотел что-нибудь про подобные фичи почитать, потому что в моей голове поддержка фичей в инструментах с коллаборацией всегда ведёт к сильно возросшей нагрузке. И интересно, как с этим борются без заливания железа бабками. Заодно узнал чуть больше про P2P, а то раньше в голове чисто понятие существовало.
0. Женя намутил квиз по плюсам с иногда не самыми тривиальными вопросами. Перед чтением статей ниже можете пойти потыкаться минуток 20 в него
1. [article] от Вадима Кравченко: 10x Engineers.
Это не прям про 10x engineers, а скорее про то, как быть адекватным и чётким прогером и коллегой. Почему бы лишний раз не вспомнить.
2. [article] и ещё один от него же: What I learned building a $1K MRR SaaS in 6 weeks.
Тут он рассказывает про то, как намутил небольшой инструмент для AI cross-linking, который он сделал на коленке и начал продавать. Статья выше -- рефлексия после достижения 1k$ MRR относительно решений, которые он принял по ходу разработки и промоутинга.
3. [article] Real-time mouse pointers at Canva.
Давно хотел что-нибудь про подобные фичи почитать, потому что в моей голове поддержка фичей в инструментах с коллаборацией всегда ведёт к сильно возросшей нагрузке. И интересно, как с этим борются без заливания железа бабками. Заодно узнал чуть больше про P2P, а то раньше в голове чисто понятие существовало.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤6
#cpp #common
0. [article] Полезные фичи С++ на примере организации пайплайна.
Коллега из Доставки (Паша Сухов) написал статью про то, как они строили общее решение с использованием различных нетривиальных возможностей плюсов (это кстати был его доклад на C++ Russia в этом году).
Почему мне понравилось:
- во-первых, потому что статья реально прикольная и показывает хорошее направление мысли: делать общие решения, которыми пользоваться будет гораздо проще. Делать задачи для получения бабок или ускорения ручек это круто, но делать общие инструменты для уменьшения TTM имхо гораздо более увлекательно. У меня в планах что-то с таким же посылом показать наружу.
- во-вторых, мы пришли к тому, что хотим делать что-то подобное, но для концептуально другой задачи и в другом виде. Правда мы только в самом начале пути. И иметь некоторый референс с фичами, про которые мы только начинаем думать, очень приятно.
- в-третьих, там и правда не самые тривиальные плюсы местами. Мы такое любим. Особенно когда оно на практике полезно.
2. [article] Здоровье кодовой базы.
Тут автор рассказывает про то, как мерять здоровье кода, исходя из некоторых метрик. Он концентрируется на cohesion и coupling, после чего выводит не шибко сложную математически (но не прям тривиальную интуитивно) визуализацию того, как понять, всё ли ок.
Я в последнее время часто про такое думаю, т.к. недавно встретил у студентов на курсе по Java скрины с ошибкой вида:
Про то, как это в Java считается, верхнеуровнево можно почитать тут.
Сложность кода -- вещь довольно субъективная. Мы недавно начали двигаться в сторону того, чтобы собирать общепризнанные (у нас) подходы к его упрощению, чтобы жилось чуть лучше. Глядишь, станет получше.
Ну и всё. Меньше ссылочек чем обычно, потому что завтра будет ещё один пост.
0. [article] Полезные фичи С++ на примере организации пайплайна.
Коллега из Доставки (Паша Сухов) написал статью про то, как они строили общее решение с использованием различных нетривиальных возможностей плюсов (это кстати был его доклад на C++ Russia в этом году).
Почему мне понравилось:
- во-первых, потому что статья реально прикольная и показывает хорошее направление мысли: делать общие решения, которыми пользоваться будет гораздо проще. Делать задачи для получения бабок или ускорения ручек это круто, но делать общие инструменты для уменьшения TTM имхо гораздо более увлекательно. У меня в планах что-то с таким же посылом показать наружу.
- во-вторых, мы пришли к тому, что хотим делать что-то подобное, но для концептуально другой задачи и в другом виде. Правда мы только в самом начале пути. И иметь некоторый референс с фичами, про которые мы только начинаем думать, очень приятно.
- в-третьих, там и правда не самые тривиальные плюсы местами. Мы такое любим. Особенно когда оно на практике полезно.
2. [article] Здоровье кодовой базы.
Тут автор рассказывает про то, как мерять здоровье кода, исходя из некоторых метрик. Он концентрируется на cohesion и coupling, после чего выводит не шибко сложную математически (но не прям тривиальную интуитивно) визуализацию того, как понять, всё ли ок.
Я в последнее время часто про такое думаю, т.к. недавно встретил у студентов на курсе по Java скрины с ошибкой вида:
function 'F' has cognitive complexity of 57 (threshold 25)Про то, как это в Java считается, верхнеуровнево можно почитать тут.
Сложность кода -- вещь довольно субъективная. Мы недавно начали двигаться в сторону того, чтобы собирать общепризнанные (у нас) подходы к его упрощению, чтобы жилось чуть лучше. Глядишь, станет получше.
Ну и всё. Меньше ссылочек чем обычно, потому что завтра будет ещё один пост.
👍10 2
#common #cpp
0. [fact]
Недавно обнаружил, что, когда делаешь
1. [little book] Продуманная оптимизация.
Я искал чего бы почитать, чтобы расширить горизонты понимания методов оптимизации дефолтного бэкендовского кода. В идеале хотел увидеть что-то вроде:
- сокращайте сетевые походы
- упрощайте запросы в БД
- кешируйте
- и ещё несколько поинтов, про которые я раньше не думал.
Ровно за этими новыми знаниями я и шёл.
Мне подсказали про вот эту небольшую книжку (ссылка выше на перевод) про оптимизацию. Того, чего я искал, я не нашёл, но тем не менее она напоминает про важные моменты: что хорошо и что плохо, -- в каком-то более абстрактном смысле.
2. [post] Founder mode.
Я наткнулся на Ваню Чернова через в одном из его докладов на Highload. Доклад был хорош. Канал тоже приятный. Он иногда пишет про какие-то технические вещи. Иногда про что-то более абстрактное. И пишет интересно.
Тут у него три статьи про т.н. founder mode:
- эссе от Paul Graham про само явление
- статья с критикой эссе выше
- и сбоку, но в дополнение статья про Goodhart's law.
Это конечно какие-то пространные рассуждения, которые местами я понять ещё не справляюсь, просто потому что не хватает картинок в голове (возможно из-за отсутствия опыта). Но всё же интересно.
3. [talk] Peering Forward - C++’s Next Decade.
Это первый из сотни докладов на CppCon 2024.
Herb Sutter пускается в пространные рассуждения о том, насколько круче становятся плюсы в следующих стандартах, концентрируясь на рефлексии и безопасности. Иногда с конкретными примерами. Полезно и слушать приятно.
0. [fact]
Недавно обнаружил, что, когда делаешь
throw Response200 из ручки в userver, ты получаешь честный 499. Это в моменте было не очень удобно, потому что пришлось городить лишний try-catch/проверку на успешность выполнения логики, что не давало красиво спрятать детали внутрь функции. Но зато это напомнило важный принцип про то, что exceptions for exceptional. Я в моменте про это забыл, хотя сам когда-то писал про такое. 1. [little book] Продуманная оптимизация.
Я искал чего бы почитать, чтобы расширить горизонты понимания методов оптимизации дефолтного бэкендовского кода. В идеале хотел увидеть что-то вроде:
- сокращайте сетевые походы
- упрощайте запросы в БД
- кешируйте
- и ещё несколько поинтов, про которые я раньше не думал.
Ровно за этими новыми знаниями я и шёл.
Мне подсказали про вот эту небольшую книжку (ссылка выше на перевод) про оптимизацию. Того, чего я искал, я не нашёл, но тем не менее она напоминает про важные моменты: что хорошо и что плохо, -- в каком-то более абстрактном смысле.
2. [post] Founder mode.
Я наткнулся на Ваню Чернова через в одном из его докладов на Highload. Доклад был хорош. Канал тоже приятный. Он иногда пишет про какие-то технические вещи. Иногда про что-то более абстрактное. И пишет интересно.
Тут у него три статьи про т.н. founder mode:
- эссе от Paul Graham про само явление
- статья с критикой эссе выше
- и сбоку, но в дополнение статья про Goodhart's law.
Это конечно какие-то пространные рассуждения, которые местами я понять ещё не справляюсь, просто потому что не хватает картинок в голове (возможно из-за отсутствия опыта). Но всё же интересно.
3. [talk] Peering Forward - C++’s Next Decade.
Это первый из сотни докладов на CppCon 2024.
Herb Sutter пускается в пространные рассуждения о том, насколько круче становятся плюсы в следующих стандартах, концентрируясь на рефлексии и безопасности. Иногда с конкретными примерами. Полезно и слушать приятно.
❤7👍7🔥1🐳1🌚1
#common #cpp #highload
Сегодня 3 ссылки на знакомых.
0. [article] Саша написал огромнющий пост про юникод.
Комментов не будет. Идите читать)
1. [article] Грязные трюки C++ из userver и Boost.
Антон Полухин выкатил пак плюсовых читов из userver. Пост написан по мотивам доклада на C++ Russia в этом году, так что можете почитать и не смотреть его через 3 месяца, когда наконец выложат.
2. [talk] История развития цикла заказа в Яндекс Лавке.
[Довольно близкий ко мне] коллега на FoodTech туре в Москве рассказывал про то, как в Лавке работает цикл заказа и про то, как его переписывали. Во-первых, мне очень нравится концепция. Там реально сто миллионов проблем ребята решили. Во-вторых, я читал код, и он опупенный. Это просто ещё придумать такое надо было!
Сегодня 3 ссылки на знакомых.
0. [article] Саша написал огромнющий пост про юникод.
Комментов не будет. Идите читать)
1. [article] Грязные трюки C++ из userver и Boost.
Антон Полухин выкатил пак плюсовых читов из userver. Пост написан по мотивам доклада на C++ Russia в этом году, так что можете почитать и не смотреть его через 3 месяца, когда наконец выложат.
2. [talk] История развития цикла заказа в Яндекс Лавке.
[Довольно близкий ко мне] коллега на FoodTech туре в Москве рассказывал про то, как в Лавке работает цикл заказа и про то, как его переписывали. Во-первых, мне очень нравится концепция. Там реально сто миллионов проблем ребята решили. Во-вторых, я читал код, и он опупенный. Это просто ещё придумать такое надо было!
❤8👍5
#cpp #common
0. [talk] Message Handling with Boolean Algebra.
Возвращаясь к прошедшему CppCon.
Ben Deane рассказывает про какую-то свою либу для работы с пакетами данных. Выглядит интересно, но самая прикольная часть про реализацию булевой алгебры в либе и некоторых операций с ней. Вспомнил молодость.
1. [article] Around the World in C++: Exploring Time Zones with std::chrono.
Пояснять тут нечего. Bartlomiej Filipek рассказывает про то, как работает с таймзонами в C++20.
2. [article] Don't Break the Bank: Smart Spending on Software Architecture.
Коротенькая статья, которая напоминает про главный ресурс любой разработки -- деньги. Мы почти никогда, особенно в больших компаниях, про них не думаем. Хотя абсолютно любое решение так или иначе выливается в какие-то денежные дельты: будь-то экономия CPU или неэффективный код.
Такое маленькое напоминание.
3. [article] A list of ternary operators.
Наш любимый
В небольшой статье выше несколько примеров других тернарных операторов в разных языках.
4. [article] Falsehoods Programmers Believe About Job Applicants.
Это даже не статья, а скорее список того, какие некорректные предположения делаются в формах подачи application на работу. Есть пару забавных, например "A job is legal".
5. [article] IMG_0416.
Когда-то на iphone была возможность загрузить видео сразу на youtube, что породило огромное количество видосов вида IMG_XXXX. Статья рассказывает про это.
Можно найти видосик с датой своего дня рождения. Я хотел оставить тут ссылочку на один из своих, но не смог выбрать. Всё забавное попалось.
0. [talk] Message Handling with Boolean Algebra.
Возвращаясь к прошедшему CppCon.
Ben Deane рассказывает про какую-то свою либу для работы с пакетами данных. Выглядит интересно, но самая прикольная часть про реализацию булевой алгебры в либе и некоторых операций с ней. Вспомнил молодость.
1. [article] Around the World in C++: Exploring Time Zones with std::chrono.
Пояснять тут нечего. Bartlomiej Filipek рассказывает про то, как работает с таймзонами в C++20.
2. [article] Don't Break the Bank: Smart Spending on Software Architecture.
Коротенькая статья, которая напоминает про главный ресурс любой разработки -- деньги. Мы почти никогда, особенно в больших компаниях, про них не думаем. Хотя абсолютно любое решение так или иначе выливается в какие-то денежные дельты: будь-то экономия CPU или неэффективный код.
Такое маленькое напоминание.
3. [article] A list of ternary operators.
Наш любимый
? : из плюсов называется тернарным оператором, потому что он принимает 3 аргумента. И т.к. других таких нет, общее имя было оккупировано. В небольшой статье выше несколько примеров других тернарных операторов в разных языках.
4. [article] Falsehoods Programmers Believe About Job Applicants.
Это даже не статья, а скорее список того, какие некорректные предположения делаются в формах подачи application на работу. Есть пару забавных, например "A job is legal".
5. [article] IMG_0416.
Когда-то на iphone была возможность загрузить видео сразу на youtube, что породило огромное количество видосов вида IMG_XXXX. Статья рассказывает про это.
Можно найти видосик с датой своего дня рождения. Я хотел оставить тут ссылочку на один из своих, но не смог выбрать. Всё забавное попалось.
👍11❤1🔥1
#cpp
0. [post] Почитайте пост про баг, который у нас был когда-то.
Если чуть подробнее, то проблема такая:
- после перекладывания объектов из мапки в вектор мы их не сортили
- по этому несорченному вектору мы брали слайс
- отдавали слайс наружу.
Т.к. это std::unordered_map, то понятно, что порядок не гарантируется. И вот почему-то по ночам всё работало идеально. Порядок каждый раз был корректным. После k походов в
1. [article] I've Built My First Successful Side Project, and I Hate It.
Интересный пост про прелести продажи пет-проектов. Он почти совсем не технический, а скорее про интересные ситуации, с которыми столкнулся автор в процессе продажи своего софта. Местами вкусно.
2. [little article] A Shiny New Programming Language.
Небольшая статья про новый ЯП, на котором не нужно явно писать код. Схема такая:
- вы пишете сигнатуру функции
- даёте несколько примеров того, как она должна работать
- на основании этого генерируется js код.
Так сказать example driven development.
В статье есть ссылка на github репозиторий, который можно склонить и со своим OpenAI API ключом запустить штуку локально. Я хотел потыкаться на предмет мощности генерации, но жизнь в Беларуси не позволяет мне это сделать, так что может кто-то заинтересуется и покидает в комменты, что смогло нагенерить, а что нет : )
=================
Пост получится маленький. Почти наверняка до конца года я закину ещё только запись своего выступления со вчерашнего foodtech tour в Минске и ссылочки за весь год, чтобы напомнить про посты этого года. Хочется уже немножко выдохнуть и отдохнуть какое-то время.
А может придёт вдохновение и ещё чего-нибудь да закину.
0. [post] Почитайте пост про баг, который у нас был когда-то.
Если чуть подробнее, то проблема такая:
- после перекладывания объектов из мапки в вектор мы их не сортили
- по этому несорченному вектору мы брали слайс
- отдавали слайс наружу.
Т.к. это std::unordered_map, то понятно, что порядок не гарантируется. И вот почему-то по ночам всё работало идеально. Порядок каждый раз был корректным. После k походов в
/products-data мы получали полное множество всех товаров. По утрам что-то ломалось и подобное перекладывание товаров из std::unordered_map в std::vector и последующий слайс из вектора приводил к тому, что некоторые товары повторялись в разных батчах, а некоторые вообще до клиента не доезжали. Никаких релизов/изменений конфигов, которые могли по утрам приводить к изменению порядка обхода мапки, а вечером снова заставлять работать как надо, не было! Вот уж действительно жирнейшая загадка в моём плюсовом опыте.1. [article] I've Built My First Successful Side Project, and I Hate It.
Интересный пост про прелести продажи пет-проектов. Он почти совсем не технический, а скорее про интересные ситуации, с которыми столкнулся автор в процессе продажи своего софта. Местами вкусно.
2. [little article] A Shiny New Programming Language.
Небольшая статья про новый ЯП, на котором не нужно явно писать код. Схема такая:
- вы пишете сигнатуру функции
- даёте несколько примеров того, как она должна работать
- на основании этого генерируется js код.
Так сказать example driven development.
В статье есть ссылка на github репозиторий, который можно склонить и со своим OpenAI API ключом запустить штуку локально. Я хотел потыкаться на предмет мощности генерации, но жизнь в Беларуси не позволяет мне это сделать, так что может кто-то заинтересуется и покидает в комменты, что смогло нагенерить, а что нет : )
=================
Пост получится маленький. Почти наверняка до конца года я закину ещё только запись своего выступления со вчерашнего foodtech tour в Минске и ссылочки за весь год, чтобы напомнить про посты этого года. Хочется уже немножко выдохнуть и отдохнуть какое-то время.
А может придёт вдохновение и ещё чего-нибудь да закину.
👍15🤯3❤1
#cpp #common #math
1. [talk] C++ Reflection Is Not Contemplation.
Доклад Andrei Alexandrescu с CppCon 2024 про рефлексию. Чуть-чуть посмотрели на базу, посмотрели на несколько последних пропозалов и ушли в сторону в какие-то абстрактные рассуждения. В классической свободной заводной манере. Лайкнул.
2. [talk] Building Cppcheck - What We Learned from 17 Years of Development.
Автор cppcheck рассказывает про то, как развивался проект и про разные вехи на этом пути. Не прям технический доклад. Интересно посмотреть на историю известной тулзы.
3. [article] Preferring throwaway code over design docs.
Автор предлагает почаще кодить прототипы перед тем, как писать дизайн доки/писать финальное решение. Так вы получаете некоторые знания о потенциальных проблемах заранее. А ещё позиционирует смерженные pull request'ы как хорошую "документацию", т.к. они всегда актуальны для какой-то точки в истории. Со вторым я согласен. Но с первым нет. В условиях постоянной гонки и нехватки ресурсов нет времени садиться писать код для большинства фичей. А там, где ошибка стоит дороже всего (большие проекты с жёсткими дедлайнами) такой подход может сильно скушать время, т.к. для большой фичи -- большой прототип.
4. [article] Probability and Games: Damage Rolls.
В статье рассказывают про то, как из рандома делать разные распределения, чтобы потом это можно было использовать в различных игровых механиках. Начинают с базовых бросков кубика и заканчивают произвольным распределением значений. Заодно можно потыкаться во всякое интерактивное, чтобы лучше понять, как что работает.
В дополнение закину вам баянистую таску с собеседований в тему (правда не знаю, куда конкретно; мне её рассказывали много-много лет назад).
У вас есть функция
- rand2?
- rand36?
- rand5?
- rand10?
Все они должны строиться поверх rand6 и производных и должны возращать числа равновероятно.
1. [talk] C++ Reflection Is Not Contemplation.
Доклад Andrei Alexandrescu с CppCon 2024 про рефлексию. Чуть-чуть посмотрели на базу, посмотрели на несколько последних пропозалов и ушли в сторону в какие-то абстрактные рассуждения. В классической свободной заводной манере. Лайкнул.
2. [talk] Building Cppcheck - What We Learned from 17 Years of Development.
Автор cppcheck рассказывает про то, как развивался проект и про разные вехи на этом пути. Не прям технический доклад. Интересно посмотреть на историю известной тулзы.
3. [article] Preferring throwaway code over design docs.
Автор предлагает почаще кодить прототипы перед тем, как писать дизайн доки/писать финальное решение. Так вы получаете некоторые знания о потенциальных проблемах заранее. А ещё позиционирует смерженные pull request'ы как хорошую "документацию", т.к. они всегда актуальны для какой-то точки в истории. Со вторым я согласен. Но с первым нет. В условиях постоянной гонки и нехватки ресурсов нет времени садиться писать код для большинства фичей. А там, где ошибка стоит дороже всего (большие проекты с жёсткими дедлайнами) такой подход может сильно скушать время, т.к. для большой фичи -- большой прототип.
4. [article] Probability and Games: Damage Rolls.
В статье рассказывают про то, как из рандома делать разные распределения, чтобы потом это можно было использовать в различных игровых механиках. Начинают с базовых бросков кубика и заканчивают произвольным распределением значений. Заодно можно потыкаться во всякое интерактивное, чтобы лучше понять, как что работает.
В дополнение закину вам баянистую таску с собеседований в тему (правда не знаю, куда конкретно; мне её рассказывали много-много лет назад).
У вас есть функция
rand6(), которая равновероятно возращает целое число из отрезка [0; 5]. Как из неё сделать:- rand2?
- rand36?
- rand5?
- rand10?
Все они должны строиться поверх rand6 и производных и должны возращать числа равновероятно.
🤔1
#math #cpp #highload #common
0. [talk] YouTube Scalability.
Доклад про то, как скейлился youtube. Чувак рассказывает про основные проблемы, с которыми столкнулась [тогда ещё] небольшая команда, вплоть до невозможности загружать видео на платформу. Между делом бывают забавные вставки. Несмотря на то, что информация не везде знакомая, рассказывают очень понятно.
1. [article] 2D Visibility.
Статья рассказывает базу про то, как работает видимость в 2D пространствах. Хотя контента прям тут не прям много, внутри очень много ссылок на разные доп материалы, так что если вам такое интересно, можно зависнуть.
2. [article] Cognitive load is what matters.
Автор пишет про то, что такое когнитивная нагрузка в программировании, приводит примеры от кода до архитектуры и вбрасывает некоторые рекомендации, как же сделать лучше.
Статья большая, но полезная (хотя там есть short версия).
3. [article] End-to-end Шифрование.
Вастрик написал пост про End-to-end шифрование. В своём классикал стиле и как для тупых.
4. [article] 4 billion if statements.
Автор увидел тик-ток, где кто-то ифал каждое число, чтобы определить чётное оно или нет. И автор решил посмотреть, насколько сложно вообще такое написать. Он начал с простого ифания нескольких чисел, потом пошёл генерить код, после чего пошёл генерить asm. И после некоторых манипуляций всё заработало! Такой минизабавыч в конце.
0. [talk] YouTube Scalability.
Доклад про то, как скейлился youtube. Чувак рассказывает про основные проблемы, с которыми столкнулась [тогда ещё] небольшая команда, вплоть до невозможности загружать видео на платформу. Между делом бывают забавные вставки. Несмотря на то, что информация не везде знакомая, рассказывают очень понятно.
Доклад довольно старый. 2007-ого года. Я в школу в том году пошёл.
1. [article] 2D Visibility.
Статья рассказывает базу про то, как работает видимость в 2D пространствах. Хотя контента прям тут не прям много, внутри очень много ссылок на разные доп материалы, так что если вам такое интересно, можно зависнуть.
2. [article] Cognitive load is what matters.
Автор пишет про то, что такое когнитивная нагрузка в программировании, приводит примеры от кода до архитектуры и вбрасывает некоторые рекомендации, как же сделать лучше.
Статья большая, но полезная (хотя там есть short версия).
3. [article] End-to-end Шифрование.
Вастрик написал пост про End-to-end шифрование. В своём классикал стиле и как для тупых.
4. [article] 4 billion if statements.
Автор увидел тик-ток, где кто-то ифал каждое число, чтобы определить чётное оно или нет. И автор решил посмотреть, насколько сложно вообще такое написать. Он начал с простого ифания нескольких чисел, потом пошёл генерить код, после чего пошёл генерить asm. И после некоторых манипуляций всё заработало! Такой минизабавыч в конце.
❤9🐳2
#highload #cpp #common
0. У меня на днях встретилась абсолютно простая задача (прям как на собесе, а вы говорите, что не нужны эти алгоритмы в жизни): в векторе чисел переместить все нули в конец. Недолго думая я делаю
И для примера
получаю
Где-то есть баг.
Очевидно, что баг был в моей интерпретации алгоритма. Вот как выглядит стандартное использование
В голове я строю последовательность происходящего:
- все нули ушли в конец
- получаю итератор на первый нуль
- удаляю все нули.
И в первом пункте уже ошибка. Ведь нули не ушли в конец. Наоборот, в начало ушли все не нули. Что там в конце, меняебать волновать вообще не должно. Оно всё равно будет удалено.
То есть мы имеем на текущий C++20-й момент:
- удаляем элементы мы с
- если я хочу все нули в конец, то мне нужен
-
1. [talk] Как развивалось прогнозирование в Яндекс Погоде.
Коллега год назад рассказывал про то, как в Погоде предсказывают, неожиданно, погоду. Не то чтобы сложный технически доклад, но интересный с точки зрения незнакомого продукта и базовых деталей.
2. [article] Accelerating LinkedIn’s My Network tab by reducing latency and improving UX.
Суть статьи в названии.
У нас есть какая-то похожая задача, потому было интересно почитать. Жаль только, что они всё же различаются достаточно, чтобы не суметь перенять подход.
3. [article] Your business value.
Очень хорошая статья, которая в каждом предложении напоминает про то, зачем профессия программиста существует. Она, так сказать, постоянно cycle on a subject о вашей личной полезности для бизнеса и разбирает кейсы роста/увольнений в зависимости от разных факторов.
Будьте профитными.
0. У меня на днях встретилась абсолютно простая задача (прям как на собесе, а вы говорите, что не нужны эти алгоритмы в жизни): в векторе чисел переместить все нули в конец. Недолго думая я делаю
std::remove(vec.begin(), vec.end(), 0);
И для примера
vec = {1, 4, 0, 2, 0, 0}
получаю
{1, 4, 2, 2, 0, 0}
Где-то есть баг.
Очевидно, что баг был в моей интерпретации алгоритма. Вот как выглядит стандартное использование
std::remove до C++20:
vec.erase(std::remove(vec.begin(), vec.end(), 0), v.end());
В голове я строю последовательность происходящего:
- все нули ушли в конец
- получаю итератор на первый нуль
- удаляю все нули.
И в первом пункте уже ошибка. Ведь нули не ушли в конец. Наоборот, в начало ушли все не нули. Что там в конце, меня
То есть мы имеем на текущий C++20-й момент:
- удаляем элементы мы с
std::erase/std::erase_if- если я хочу все нули в конец, то мне нужен
std::partition-
std::remove/std::remove_if нужен только ради обратной совместимости, т.к. никакой уникальной задачи он уже не решает. Жаль братка. 1. [talk] Как развивалось прогнозирование в Яндекс Погоде.
Коллега год назад рассказывал про то, как в Погоде предсказывают, неожиданно, погоду. Не то чтобы сложный технически доклад, но интересный с точки зрения незнакомого продукта и базовых деталей.
2. [article] Accelerating LinkedIn’s My Network tab by reducing latency and improving UX.
Суть статьи в названии.
У нас есть какая-то похожая задача, потому было интересно почитать. Жаль только, что они всё же различаются достаточно, чтобы не суметь перенять подход.
3. [article] Your business value.
Очень хорошая статья, которая в каждом предложении напоминает про то, зачем профессия программиста существует. Она, так сказать, постоянно cycle on a subject о вашей личной полезности для бизнеса и разбирает кейсы роста/увольнений в зависимости от разных факторов.
Будьте профитными.
❤12👍3🔥1🤔1