Обновить
0
0

Пользователь

Отправить сообщение

Форматируем строку по-человечески: C++ и его <format>

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели9.2K

Когда-то давным-давно (то есть до C++20) мы форматировали вывод либо по-старинке через printf, либо используя громоздкие стримы ввода-вывода из <iostream>. Оба подхода, мягко говоря, не очень. printf работал шустро и лаконично, но требовал строгого соответствия типов, забудешь правильный %d или %s в формате, и получишь неопределённое поведение вплоть до падения программы. Компиляторы иногда предупреждают о несоответствиях, но полностью проблему не решают (особенно если форматируемая строка не литерал). Кроме того, printf не умеет выводить пользовательские классы, только примитивы.

Сейчас ситуация изменилась. В C++20 завезли библиотеку <format>, современный подход к форматированию строк, сочетающий лаконичность printf с безопасностью iostream. Инструмент называется std::format и объявлен в заголовке <format>. По сути, это адаптация популярной библиотеки fmt.

Читать далее

ООП в Python на пальцах: Пишем свою текстовую RPG с нуля

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели12K

Как объяснить новичку разницу между Классом и Объектом так, чтобы он запомнил это навсегда? Представить, что Класс — это чертеж робота, а Объект — сам робот.

В этой статье я раскладываю принципы ООП (Объектно-Ориентированного Программирования) на понятные атомы. Никакой сухой академической теории — только живой код на Python. Мы пройдем путь от простых переменных до масштабируемой системы классов на примере создания RPG-игры. В конце вас ждет домашнее задание для закрепления материала.

Читать далее

Проверка OpenIDE: они этого не хотели, но мы сделали

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7.8K

Если хотите посмотреть, что нашёл статический анализатор PVS-Studio в исходном коде Intellij платформы, используемой OpenIDE, то добро пожаловать в статью.

Читать далее

Страх и ненависть вайб-кодинга: как я сделал для ребенка игру и попал в топ приложений на android-TV

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели37K

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

Привет, Хабр! Меня зовут Леонид Калядин, я Cluster Data lead в МТС Web Services. Я отлично разбираюсь во всем, что связано с data, но вот в мобильной разработке — полный ноль. Во всяком случае был до недавнего времени. В этом материале я расскажу, как решил спасти дочь от надоедливой рекламы и навайбкодил Adventure Mazes — игру, которая вошла в топ Android TV в Google Play. Итак, кому интересны подробности — велкам под кат. 

Читать далее

std::vector: от основ до тонкостей реализации

Уровень сложностиСредний
Время на прочтение22 мин
Охват и читатели8.6K

std::vector — это, пожалуй, самый используемый контейнер STL. Он кажется простым на первый взгляд: динамический массив с автоматическим управлением памятью. Но под капотом скрывается множество тонкостей, знание которых отличает начинающего программиста от профессионала.

В этой статье мы пройдем путь от базового использования до глубокого понимания внутреннего устройства std::vector, рассмотрим все его методы, особенности работы с памятью, исключения, трюки оптимизации и подводные камни. А также рассмотрим альтернативы std::vector и когда их стоит использовать.

Читать далее

COMTRADE — «черный ящик» в мире электроэнергетики

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели6.1K

В русскоязычной части интернета отсутствуют исчерпывающие статьи про формат COMTRADE. Автором данной статьи предпринята попытка структурировать разрозненную информацию про данный формат и собрать её воедино. В данной статье представлена история развития формата COMTRADE, показано содержание актуальной версии стандарта, а также приведён пример использования данных файлов для тестирования релейной защиты с помощью среды вычислений и моделирования Engee. Данный материал может быть полезен как студентам, только начинающим изучать работу со стандартом COMTRADE, так и опытным инженерам для освежения знаний.

Читать далее

Культурный код англоязычного мира: какие фильмы цитируют все и почему

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели12K

В России многие используют крылатые фразы из советского кино, даже не зная первоисточника. «Красота какая, лепота!», «Надо, Федя, надо», «О, какие люди! И без охраны» — эти выражения особенно популярны у старшего поколения, включая миллениалов. Но и молодёжь их знает: слышит от родителей, бабушек и дедушек, встречает в мемах и разговорах. Все эти фразы — часть нашего культурного кода, общая территория понимания.

А вот в англоязычном мире свои ориентиры. Там людей объединяют другие фильмы и другие цитаты — из голливудских блокбастеров, культовых комедий и классических драм. Эти фразы точно так же живут своей жизнью: появляются в песнях, мемах и сериалах, становятся узнаваемыми символами, которые передаются из поколения в поколение.

Всем привет! Меня зовут Маша Фадеева, я преподаватель и методист курсов английского в Практикуме. Я и мои коллеги поговорили с носителями языка — нашими иностранными друзьями из США, Великобритании и других англоязычных стран, чтобы разобраться в их общем киношном культурном коде.

Читать далее

Подробно о неопределённом поведении в С и C++

Время на прочтение24 мин
Охват и читатели14K

При работе с C или C++ необходимо в какой-то степени разбираться в неопределённом поведении (UB): что это такое, каковы его эффекты, и как о него не споткнуться. Для простоты картины я буду в этой статье рассказывать только о C, но всё изложенное здесь также применимо и к C++, если явно не указано иное.

Читать далее

Ловушка ИИ-кодинга

Время на прочтение5 мин
Охват и читатели15K

В жизненном цикле разработки код — это лишь заполненные клеточки кроссворда. Самое интересное — в размышлениях: изучение предметной области, уточнение требований, продумывание архитектуры, поиск компромиссов, поэтапное тестирование и отладка.

Если коротко, процесс выглядит примерно так: сначала думаем — потом пишем. Но с приходом ИИ-кодинга всё изменилось.

Читать далее

Почему Go до сих пор меня раздражает?

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели12K

Команда Go for Devs подготовила перевод статьи о том, почему спустя десять лет автор по-прежнему критикует Go. Ошибки на миллиард долларов, загадочный nil, проблемы с памятью и «магия» defer — по мнению автора, всё это делает язык излишне сложным и болезненным. А стоит ли оно того?

Читать далее

Хватит писать «чистый» код. Пора писать понятный код

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели41K

Да, это очередная статья по чистому коду. Но по разным источникам, соотношение времени, затрачиваемого на чтение и написание кода, может достигать 7 к 1 и даже больше. Когда вы исправляете ошибку, добавляете новую функциональность или проводите рефакторинг, вы сначала погружаетесь в логику, написанную другими людьми (или вами же, но несколько месяцев назад). Именно поэтому читаемость кода становится более важным фактором, чем скорость его первоначального написания. Нечитаемый код — это технический долг, который замедляет всю команду и увеличивает стоимость разработки в долгосрочной перспективе.

Читать далее

Можно ли перейти с Oracle или MS SQL на СУБД из Реестра российского ПО без переписывания всей хранимой логики?

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели8.3K

Можно ли перейти с Oracle или MS SQL на СУБД из Реестра российского ПО без переписывания всей хранимой логики?
Один из возможных подходов к решению этой задачи.

Читать далее

«Сверхразум запатентовал обычный лоток для яиц и теперь судится буквально со всеми» — вот что произошло на самом деле

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели21K

По новостным пабликам как-то разлетелась новость про «патент на лоток для яиц».

Я патентный поверенный — юрист по патентам и товарным знакам. Терпеть не могу, когда журналисты пишут ахинею не разобравшись.

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

Читать далее

Как Borland «профукали все полимеры»

Уровень сложностиПростой
Время на прочтение17 мин
Охват и читатели55K

Первая встреча с Turbo Pascal

Начать стоит с самого начала, когда я впервые увидел Turbo Pascal 5.0. Тогда для меня это было что‑то на грани чуда.

Ведь как в те времена делалось «в норме»:

Читать далее...

Я отклоняю комиты с использованием кучи и прошу коллег переписать такую логику

Время на прочтение11 мин
Охват и читатели48K

Хочу поделиться своим опытом разработки крупных игровых проектов на C++, где производительность и стабильность — это не просто приятные бонусы, а абсолютно естественные требования к разработке. За годы работы над движками и играми я понял, что подход к управлению памятью очень сильно влияет на весь проект. В отличие от многих приложений - игры, особенно большие, часто работают часами без прерываний и должны поддерживать стабильный фреймрейт и отзывчивость. Когда проседание fps или фриз происходит на глазах у сотен тысяч игроков, вам уже никто не поможет — ущерб уже нанесен, а в steam полетели отзывы о кривизне рук разработчиков.

Однажды моя команда закончила работу над довольно интересным проектом, который портировали больше двух лет на плойку. Движок старый, большой и мощный, но работа с памятью была ориентирована на ПК времен конца 2000-х, и что меня поразило, так это насколько сильно большая часть кодовой базы зависела от динамической памяти во время выполнения. На ограниченном железе (далеко не у всех есть PS5 pro) и в условиях жёстких требований к сертификации на консолях такие решения быстро превращаются в проблему.

В разработке для консолей (про мобильные устройства я молчу, потому что игра не влезает по памяти даже в восемь гигов) с ограниченными ресурсами, архитектура с частыми аллокациями не просто неэффективна — она становится реальной угрозой для стабильности проекта. Каждое выделение памяти в куче влечёт за собой накладные расходы: это дополнительные !миллисекунды! (в целом на кадре) задержки, риск большой фрагментации памяти, и непредсказуемое поведение в долгой игровой сессии. После двух часов игры постоянные операции с кучей буквально «сжигают» половину бюджета кадра.

Читать далее

std::launder: зачем и когда нужен

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели5.9K

Привет, Хабр!

В этой статье разберём мутный, но крайне важный инструмент ‒ std::launder. Мы поглядим, зачем его протащили в C++17 и что компилятор делает, когда видит launder.

Читать далее

Топ-10 антипаттернов в разработке ПО, которых стоит избегать

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели13K

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

Читать далее

ООП — это скам

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели43K

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

После прочтения большинства этих статей и нескольких лет кодинга на C# я заявляю: «ООП - это один большой обман. Никто не понимает, что это такое. Люди просто говорят какие-то умные термины, их собеседники с умным видом кивают, хотя на деле трактуют эти же термины совершенно по-разному».

И вот почему.

Читать далее

Игры без победы: новый тренд в геймдеве

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели27K

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

В этой статье разберём, откуда растёт тренд игр без победы, чем они увлекают, и почему  разработчику стоит знать об этом подходе — даже если вы делаете не медитативные артовые штуки, а шутер или мобилку.

Читать далее

Ностальгические игры: Might and Magic VI

Уровень сложностиПростой
Время на прочтение19 мин
Охват и читатели7K

Might and Magic – одна из самых дорогих моему сердцу игровых вселенных. Невозможно сосчитать, сколько тысяч часов я провёл в её мирах – будь то основная серия, «Герои» или «Крестоносцы». И даже спустя десятилетия что-то неизменно влечёт меня обратно. Причём дело не только в ностальгии – эти игры обладают особой атмосферой, дарящей чувство уюта, словно вернулся в родной с детства двор, в котором не был десятки лет, или очутился дома после длительной поездки.

Но, несмотря на столь теплые эмоции, сложно отрицать, что эта серия по-настоящему увлекательна и обладает душой, что делает возвращение в её миры всегда особенным событием. А в более поздних частях Might & Magic мы и вовсе можем от первого лица посетить знакомые места, пообщаться с персонажами, а также сразиться с существами, которых мы помним ещё по «Героям». Таким образом, становясь не сторонним наблюдателем, что лишь движет фигурки по карте, а полноценным участником событий!

Читать далее

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность