Dmitry Develop
176 subscribers
77 photos
35 videos
88 files
205 links
Этот канал в основном будет интересен новичкам в программировании и людям немного поопытнее.
Здесь я буду делиться своими новостями и достижениями в программировании.

Разработка, программирование; c++, gcc, g++, gnu, mingw; winapi, windows; vscode.
Download Telegram
Когда программа почему-то начинает вылетать каждый нечётный раз или после добавления всего одной кнопки, где-то есть ошибка или undefined behavior и приходится долго сидеть-искать в отладчике источник проблем.

Где-то вылез за границы массива, где-то увеличил размер динамической памяти вместо (size * sizeof(Block)) на просто (size)...

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

ссылка на канал | ссылка на группу
Реверс-инженерим полосу прокрутки в windows).

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

ссылка на канал | ссылка на группу
Мало ли кому понадобятся названия частей, формула, размеры и расчёты полосы прокрутки для графического интерфейса).

ссылка на канал | ссылка на группу
А это способ определить, используя события winAPI, какой последовательный COM порт был подключён или отключен.

WM_DEVICECHANGE
DBT_DEVICEARRIVAL
DBT_DEVICEREMOVECOMPLETE
DEV_BROADCAST_PORT_A

ссылка на канал | ссылка на группу
Устаревшая реализация (deprecated implementation).
Новая реализация с исправлением ошибок
...

Функция intMap нужна, чтобы сдвинуть, сжать или расширить числовой диапазон.

Например, когда число приходит в диапазоне от -128 до 127 (int8_t) и его нужно преобразовать в диапазон от 0 до 599 (высота окна в пикселях).

Нужно просто написать:
int64_t value { 0 };
intMap(&value, -128, 127, 0, 599);

ссылка на канал | ссылка на группу
Media is too big
VIEW IN TELEGRAM
Проверка работы моей реализации слайдера.

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

ссылка на канал | ссылка на группу
This media is not supported in your browser
VIEW IN TELEGRAM
Не знаю, что там лежит за левой границей массива, но это очень похоже на двоичную арифметику).

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

ссылка на канал | ссылка на группу
Этот код составляет строку для отладочного экрана.
Выглядит массивно и страшно).

Будет интересно узнать, сколько времени, тактов процессора или ассемблерных инструкций нужно, чтобы выполнить этот код.

А потом переписать, используя свои строковые функции и замерить снова.
Благодаря проекту, я запросто сделаю динамические строки.

ссылка на канал | ссылка на группу
Решил попробовать компилятор cl (msvc).

Постепенно узнаю, какие есть ключи у компилятора и у линкера.
Нашёл способ, как сделать для оконного приложения точку входа main, а не winmain.

ссылка на канал | ссылка на группу
Этот код и ключи компилятора позволяют использовать 1 GB стека).

ссылка на канал | ссылка на группу
Вчера я решил в программе вместо GetTickCount использовать таймер высокого разрешения, но почему-то всё перестало работать.

В отладчике оказалось, что таймер возвращает текущее время в виде отрицательного количества наносекунд, что не нормально.

Оказалось, всё дело в переполнении.
И я нашёл способ, как решить эту проблему и получить правильное значение.

ссылка на канал | ссылка на группу
Блин, это так классно!
Не знал, что в наше время можно не только онлайн компилировать программу на C++, но и даже отлаживать её, видеть call stack.

ссылка на канал | ссылка на группу
Это реализация библиотеки chrono в msvc, а именно std::chrono::high_resolution_clock::now().

Я недавно сделал обёртку над QPC/QPF и столкнулся с ошибкой переполнения типа int64_t, спустя вечер реализовал алгоритм, который практически никогда не столкнётся с переполнением.

Что я недавно сделал, разработчики microsoft уже давно придумали и реализовали даже с комментариями в коде).

ссылка на канал | ссылка на группу
Если кому-то действительно понадобится моя реализация функции timeNow, таймера высокого разрешения (получение времени с точностью до 100 наносекунд), я выложу код на github, а пока и картинки хватит).

frequency и tick хотелось бы сделать const, но я не знаю, как инициализировать const переменную non-const значением из функции без лямбды или создания дополнительных функций.

ссылка на канал | ссылка на группу
Как только все GetTickCount я заменил на мой timeNow, всё расчёты стали гораздо большего разрешения, даже FPS стал стабильным и точным.

ссылка на канал | ссылка на группу
Я сейчас задумываюсь о том, какие улучшения сделать в модуле Input (он хранит и обрабатывает ввод и события с клавиатуры и мыши).

Если вы уже разрабатывали игру или программу или только задумывались об этом, какие бы данные вам могли понадобиться?

Например, чтобы реализовать взаимодействие с графическим пользовательским интерфейсом (GUI), нужно знать координаты курсора (cursorPosition).

Чтобы реализовать перемещение элементов интерфейса курсором, например, виртуальных окошек, нужно знать на сколько пикселей он сдвинулся относительно значения в предыдущем кадре — дельту курсора (cursorMove).

Но для перемещения камеры cursorMove не подойдёт.
Это неточный способ, на него действует акселерация windows, а так же область движения будет ограничена размером экрана или окна.
Для более точного движения камеры без ограничений я использую raw input, это сырые данные без обработки напрямую с мыши, клавиатуры и не только.
Назвал эту переменную mouseMove.

ссылка на канал | ссылка на группу
1
This media is not supported in your browser
VIEW IN TELEGRAM
Ударил по столу и появились такие помехи на мониторе.
Прикольный эффект, я бы хотел повторить его, используя openGL.

ссылка на канал | ссылка на группу
🔥1
Какой компилятор C++ вы предпочитаете?
Anonymous Poll
57%
gcc
24%
msvc
33%
clang
Какой смысл во флаге -Wpedantic (-pedantic), если компилятор всё равно компилирует код с нарушениями стандарта C++?

В данном случае это VLA (variable length array — массив переменной длины на стеке).

Без флага -Werror все эти предупреждения не сильно полезны.

ссылка на канал | ссылка на группу
Часто ли вы сталкивались с проблемами вывода кириллицы в консоль?

Что думаете насчёт написания статьи, которая ответит на вопросы: почему так происходит, как это можно решить?
Anonymous Poll
62%
Нужна
38%
Не нужна