Обновить
128K+

C++ *

Типизированный язык программирования

275,42
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

BalanceBall. Самобалансирующая платформа от А до Я

Время на прочтение4 мин
Охват и читатели32K
Я студент Физтеха, факультета радиотехники и кибернетики, и как положено всем второкурсникам, в весеннем семестре надо сделать проект по информатике и микроконтроллерам. Я решил убить двух зайцев одним выстрелом и объединил два проекта в один.

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



Кому интересен процесс создания этой платформы от проектирования деталей до написания компьютерного зрения, прошу под кат.
Читать дальше →

Мы закрываем проект CppCat

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

Чуть больше года назад, мы решили провести эксперимент и выпустить альтернативу статического анализатора кода PVS-Studio для маленьких команд и индивидуальных разработчиков. Так появился очень недорогой анализатор под названием CppCat. Сейчас можно подвести итоги этого эксперимента и признать, что он оказался неудачным. За срок чуть более года он принёс приблизительно столько денег, сколько было потрачено на его разработку, продвижение и поддержку. Таким образом проект убыточен. Ведь потраченное время (самый ценный ресурс) мы могли бы использовать для совершенствования PVS-Studio. Мы вынуждены закрыть проект CppCat и сосредоточиться на PVS-Studio. Надеюсь, читателям будет интересен чужой опыт в реализации новой бизнес идеи. Негативный опыт — это тоже полезный опыт.
Читать дальше →

Алгоритм Quickhull для нахождения выпуклой оболочки

Время на прочтение20 мин
Охват и читатели27K
Как гласит определение, выпуклая оболочка некоторого множества — это наименьшее выпуклое множество , содержащее в себе множество . Выпуклой оболочкой конечного множества попарно различных точек является многогранник.
Для реализации одномерного случая алгоритма Quickhull годится функция std::minmax_element. В сети можно найти множество реализаций алгоритма Quickhull для плоского случая. Однако, для случая произвольной размерности сходу находится лишь одна тяжёловесная реализация с сайта qhull.org.
Читать дальше →

Самый худший из когда-либо созданных API

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

Детальный взгляд на логирование переключение контекста с помощью Event Tracing API для Windows.


В ответ на пост прошлой недели, я получил следущее электронное письмо:
Может быть, я немножко опоздал с вопросом по поводу Вашего недавнего поста, но, на всякий случай, спрошу: Вы имеете какие-либо методы (стратегии) работы с внешней библиотекой, от которой Вы не можете избавиться, и которая нарушает некоторые (или все) принципы написания дизайна API (скорее всего, имеются в виду принципы, рекомендации, которые описаны в предыдущей статье автора. Прим. перев.)? Может, есть какие-то истории? Это расплывчатый вопрос, но я просто спрашиваю о любом опыте (как пользователя) использования API, который действительно запомнился.

— Michael Bartnett

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

Наверное, это была бы неплохая статья в цикле еженедельного разбора плохих API. Но, поскольку у меня нет времени на что-то подобное и есть возможность разобрать только один API, то возникает наиболее ВАЖНЫЙ вопрос — какой именно API я должен выбрать?

Event Tracing API для Windows


Читать дальше →

Проверка операционной системы Haiku (семейство BeOS) c помощью PVS-Studio. Часть 2

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

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

Haiku — свободная операционная система для персональных компьютеров, которая нацелена на двоичную совместимость с операционной системой BeOS. Haiku воплощает в себе основные идеи BeOS. Это модульная система, архитектурно решённая как гибридное ядро: микроядерная архитектура, способная динамически подгружать необходимые модули.

Проект проверялся по просьбе сообщества пользователей Haiku с помощью PVS-Studio 5.24.

Читать дальше →

О бедной рекурсии замолвите слово, или всё, что вы не знали и не хотите о ней знать

Время на прочтение8 мин
Охват и читатели80K
Рекурсия: см. рекурсия.

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

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

— Как она сложена?
— Превосходно! Только рука немного торчит из чемодана.

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

  def fib(n):
    if n<0: raise Exception("fib(n) defined for n>=0")
    if n>1: return fib(n-1) + fib(n-2)
    return n

приходится городить всевозможные грязные хаки, начиная от:

  @memoized
  def fib(n):
    if n<0: raise Exception("fib(n) defined for n>=0")
    if n>1: return fib(n-1) + fib(n-2)
    return n

И заканчивая вообще:

  def fib(n):
    if n<0: raise Exception("fib(n) defined for n>=0")
    n0 = 0
    n1 = 1
    for k in range(n):
      n0, n1 = n1, n0+n1
    return n0

Читать дальше →

Проверка операционной системы Haiku (семейство BeOS) c помощью PVS-Studio. Часть 1

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


Операционные системы являются одними из самых сложных и крупных проектов в мире программного обеспечения, а значит идеально подходят для демонстрации применения методики статического анализа кода. После проверки Linux Kernel, я вдохновился проанализировать и другие открытые операционные системы.

Haiku — свободная операционная система для персональных компьютеров, которая нацелена на двоичную совместимость с операционной системой BeOS. Haiku воплощает в себе основные идеи BeOS. Это модульная система, архитектурно решённая как гибридное ядро: микроядерная архитектура, способная динамически подгружать необходимые модули.

Проект для проверки был предложен пользователем, знакомым с продуктом PVS-Studio и нашей работе по проверке open-source проектов. После сравнительно недавней проверки Linux Kernel, я догадывался, с какими проблемами мне придётся столкнуться и описал их в ответном письме. Неожиданно мне предложили содействие в сборке операционной системы и интеграции анализатора. Дополнительно на официальном сайте была доступна очень обширная документация и я решил попробовать.

Через некоторое время я получил долгожданный лог проверки анализатором и после анализа результатов, я решил написать две статьи, описав самые подозрительные на мой взгляд участки кода. Это первая часть.
Читать дальше →

Исследование защиты игры Limbo. Кейген

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


Всем привет. Многие знают об этой замечательной игре — LIMBO! Вы даже наверняка покупали ее в Стиме, или качали с торрентов…
Я тоже ее купил когда-то (что и вам советую!), и прошел). Но, как всегда, мне было этого мало, и я, из спортивного интереса, решил изучить ее защиту. Так и появился кейген к игре LIMBO.
Читать дальше →

Fortran 2003: учим Фортран и С дружить

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

На языке Фортран написано огромное количество кода, отлаженного и работающего многие годы. Я не собираюсь поднимать вопрос «что лучше — Фортран или С?». У каждого языка есть свои сильные и слабые стороны. Но, учитывая большое распространение языка С, всё более популярными в определенных кругах становятся случаи «гибридных» приложений, когда часть кода пишется (скорее, уже написана) на языке Фортран, а другая – на С. Вот только у этих языков есть определенная специфика, про которую я частично уже говорил, и чтобы написанное нами приложение работало корректно, нужно учитывать много нюансов. Различия в типах данных, соглашениях о вызове (calling convention), именах (naming convention) делают задачу создания mixed language приложения далеко нетривиальной. Хорошо, что в стандарте Fortran 2003 появился целый набор средств, специально разработанный для решения задачи интероперабельности C и Фортрана. Кстати, не помню других языков, которые бы стандартизировали подобную работу — ещё один «плюсик» Фортрану за протянутую «руку дружбы».
Читать дальше →

CLion 1.0 — мощный инструмент для мощного языка

Время на прочтение6 мин
Охват и читатели59K
В сентябре прошлого года мы порадовали вас новостью о начале программы публичного превью (Public Early Access Program) нашей новой кросс-платформенной IDE для разработки на C и C++ — CLion. А уже сегодня мы готовы сказать — релиз CLion 1.0 состоялся! За два года от первого (полушутливого) объявления о начале разработки C++ IDE мы прошли огромный путь — переосмыслили свои навыки и умения по работе с кодом на C++, дружно освоили CMake, расширили команду, протестировали CLion на десятках больших проектов на C и C++.

Но самое главное — это каждодневная поддержка C++ коммьюнити, которое (спасибо вам!) приняло нас очень благосклонно. Спасибо за слова поддержки, репорты багов, предложения новых фич, сотни ретвитов и репостов наших новостей и анонсов! Сегодня мы готовы показать вам и рассказать, что же вошло в CLion 1.0.


Читать дальше →

qt-items — новый фреймворк, или попытка найти Теорию Всего

Время на прочтение7 мин
Охват и читатели14K
Как известно, физики давно пытаются найти Теорию Всего, в рамках которой можно было бы объяснять все известные взаимодействия в природе. Склонность к обобщениям присуща не только физикам, но и математикам, и программистам. Способность меньшим количеством сущностей объяснять и предсказывать большой спектр явлений очень ценна. Для программистов в роли теорий выступают различные API и фреймворки. Некоторые из них решают узкоспециализированные проблемы, а какие-то претендуют на роль универсальных теорий. Примером последних может выступать Qt — универсальный фреймворк, предназначенный, в основном, для разработки GUI.

Далее я расскажу, что мне не нравится в Qt и как его можно сделать ещё более универсальным, мощным и удобным для работы.

Демо-видео (лучше смотреть в HD):


Далее

Управление ресурсами с помощью явных специализаций шаблонов

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


RAII – одна из наиболее важных и полезных идиом в C++. RAII освобождает программиста от ручного управления ресурсами, без неё крайне затруднено написание безопасного с точки зрения исключений кода. Возможно, самое популярное использование RAII – это управление динамически выделяемой памятью с помощью умных указателей, но она также может с успехом применяться и к другим ресурсам, особенно в мире низкоуровневых библиотек. Примеры включают в себя дескрипторы Windows API, файловые дескрипторы POSIX, примитивы OpenGL и тому подобное.
Читать дальше →

Встречайте ReSharper C++

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

В течение десяти с небольшим лет своего существования ReSharper был ориентирован на .NET-разработчиков, что не удивительно для плагина к Visual Studio. 2 года назад, в чем-то благодаря удачной первоапрельской шутке, мы вплотную занялись поддержкой С++ в ReSharper, и вот совсем недавно был выпущен первый официальный релиз ReSharper C++ — нового продукта специально для разработчиков на C/С++ в Visual Studio. (Тем, кто заждался релиза CLion для кросс-платформенной разработки на C/C++, понадобится еще немного терпения.)

Чем же может быть полезен ReSharper C++? Разберем основные возможности продукта.


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

Ближайшие события

Доступно свежее обновление ReSharper Ultimate

Время на прочтение3 мин
Охват и читатели17K
Всем привет! Только что произошел очередной релиз наших инструментов для .NET-разработчиков вместе с первой версией ReSharper для разработчиков C++. Вместе взятые, все эти инструменты называются ReSharper Ultimate, и инсталлятор, содержащий их свежие версии, можно скачать здесь!



Полный список входящих в новый релиз ReSharper Ultimate обновлений таков: ReSharper 9.1, ReSharper C++ 1.0, dotMemory 4.3, dotTrace 6.1, dotCover 3.1 и dotPeek 1.4. Разберем наиболее заметные изменения в этих продуктах.
Если интересно...

О переводе одного руководства

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


Проект FLProg достаточно давно дружит с еще одним некоммерческим проектом — издательством журнала «Радиоежегодник». Я уже рассказывал о нем в одном из своих предыдущих постов. Поскольку журнал не имеет своего представительства на Хабре, главный редактор попросил меня представить на Ваш суд рассказ-перевод одного из своих авторов В.Н. Гололобова . ​И хотя журнал имеет в основном радиолюбительскую​ тематику, редакции интересно мнение профессионалов о переводе, посвящённом программированию.
Подробности

(Перевод) Введение в разработку C++ в UE4

Время на прочтение11 мин
Охват и читатели182K
Часть 1. Введение. Создание класса и добавление свойств. Расширение класса С++ с помощью Blueprint.
Часть 2. Классы геймплея. Структуры. Отражение (reflection) в Unreal. Object/Actor итераторы. Менеджер памяти и сборщик мусора.
Часть 3. Префиксы в именах классов. Целочисленные типы. Типы контейнеров. Итераторы контейнеров. Цикл For-each, хеш-функции.
Часть 4. Бонусная. Unreal Engine 4 для Unity разработчиков.

image

Эта статья является переводом части документации по UE4. Оригинальную статью вы можете найти пройдя по это ссылке.
Далее

Статический анализ кода

Время на прочтение11 мин
Охват и читатели45K
John CarmackПримечание от переводчика. Изначально эта статья была опубликована на сайте AltDevBlogADay. Но сайт, к сожалению, прекратил своё существование. Более года эта статья оставалась недоступна читателям. Мы обратились к Джону Кармаку, и он сказал, что не против, чтобы мы разместили эту статью на нашем сайте. Что мы с удовольствием и сделали. С оригиналом статьи можно познакомится, воспользовавшись Wayback Machine — Internet Archive: Static Code Analysis.

Поскольку все статьи на нашем сайте представлены на русском и английском языке, то мы выполнили перевод статьи Static Code Analysis на русский язык. А заодно решили опубликовать её на Хабре. Здесь уже публиковался пересказ этой статьи. Но уверен, многим будет интересно прочитать именно перевод.


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

Пример простейшего cgi сервера

Время на прочтение7 мин
Охват и читатели45K
Думаю многие знают, как работает CGI взаимодействие между клиентом и сервером: клиент получает от сервера и отдает серверу данные через стандартные stdin и stdout. Многие наверное даже сами писали CGI клиентов, ведь по сути — любой скрипт для веб-сервера это и есть CGI-клиент.
А многие ли задавались вопросом, как именно происходит эта «магия»? Каким образом стандартные функции для ввода/вывода вместо экрана взаимодействуют с сервером?

Результаты поиска ответа в сети меня не удовлетворили и я решил сам написать простейший CGI сервер, который сможет:
  • Запускать дочерний процес — CGI скрипт
  • Передавать скрипту переменные окружения и переменные командной строки
  • Принимать от скрипта ответ
  • Завершаться, когда завершится процесс клиента

Кроме этого, мне хотелось, чтобы клиент и сервер компилировались как в Windows, так и в Linux.
Подробности

Заставляем камеру в Qt работать на Android

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


Уже сейчас Qt – неплохая среда для разработки мобильных приложений, однако некоторые моменты там остаются недоработанными. Так, например, если попробовать запустить стандартный пример с камерой, он будет работать в системе Windows, но не на Android. При этом примеры, использующие камеру в через Qml, вполне рабочие. А значит работа с камерой на Android — реализована, но полного доступа к ней нет. А если мы хотим свободы иметь доступ к видеопотоку?
Читать дальше →

Простая игровая тв-приставка на Arduino

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

Вступление


При свете дня, а затем и во сне, возникла у меня идея создания собственной регламентированной тв-приставки. Собственно, тут-то открылся передо мной богатый и насыщенный мир радиотехники. Так как ранее я не имел дела с серьезной разработкой электроники, мой выбор пал на более простой вариант — Arduino и ее самая распространенная модель — Uno.




План работы

1. Разобраться с библиотекой
2. Спаять плату видео вывода
3. Написать код
4. Вырезать корпус


Финальная внешняя составляющая не особо важна в случае с подобными проектами.

Шаг 1. Разбираемся, что к чему


После нескольких десятков минут отчаянного гугления пришел к выводу, что создать приставку даже типа Денди у меня не получится. Ну, что тут делать, раз взялся, буду доводить дело до конца.
Читать дальше →