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

Разработка, программирование; c++, gcc, g++, gnu, mingw; winapi, windows; vscode.
Download Telegram
Media is too big
VIEW IN TELEGRAM
Написал прошивку для микроконтроллера, написал программу на c++ для пк и соединил их при помощи последовательного порта и своего стандарта общения.

Сетка теперь пожирнее и абсолютно идеальная).
Слайдеры в будущем эти превратятся в нормальные графики.

Когда-нибудь я напишу свою лёгкую библиотеку или framework, чтобы писать такие приложения в своём стиле быстрее и удобнее.

ссылка на канал | ссылка на группу
Ещё один пример того, когда сначала программируешь, а потом задумываешься о проектировании программы.

Очень много повторяющегося кода, это плохо.

ссылка на канал | ссылка на группу
Media is too big
VIEW IN TELEGRAM
Ух, давно я не писал такой говнокод, это просто ужас, на мой код даже мне страшно смотреть).
Зато работает).

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

ссылка на канал | ссылка на группу
Теперь отрисовка графика гораздо лучше выглядит.

ссылка на канал | ссылка на группу
Media is too big
VIEW IN TELEGRAM
Как жаль, что я не доделал свою строковую библиотеку, она бы очень сильно упростила написание программы и прошивки.

ссылка на канал | ссылка на группу
Во многострочном комментарии написан примерный аналог кода в текущей прошивке на моей библиотеке.

Писать код на моей библиотеке гораздо быстрее, проще и безопаснее.
Осталось только её написать (портировать на arduino).

ссылка на канал | ссылка на группу
В будущем я буду хранить все настройки проекта в файле конфига.

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

Что скажете о таком виде?
Пока не могу определиться каким префиксом делать комментарии.
Формат записи данных хочу сделать в стиле C++.
Так же можно будет для самых хитрых шифровать конфиг и где-то хранить контрольную сумму.
И в случае повреждённого конфига или кем-то отредактированного, то есть при не соответствии контрольной суммы, просто удалять или делать конфиг по-умолчанию, или выводить предупреждающее сообщения.

ссылка на канал | ссылка на группу
Вот тебе и windows API.

Один и тот же текст в двух разных кодировках даёт разный результат.

ссылка на канал | ссылка на группу
Это код "ассемблер в мире С++" по уровню неудобства, сложности, но гибкости).
Я пока не придумал, как сделать мою библиотеку удобной и гибкой, но в Си стиле.

Наверное, стоит сделать 3 уровня абстракции.
1) Работа со строками, как с массивом байтов.
2) Работа со строками, как с массивом символов.
3) Как 2, только с доступом к низкоуровневым тонкостям.

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

Пример, как проверить сравнить символ по индексу:
string = "Привет";

bool result { };
stringCompareCharIndex(string, 5, "т", &result);

ссылка на канал | ссылка на группу
utf8 -> utf16 ... works!

Написать конвертер из utf-8 в utf-16 оказалось гораздо проще, чем я думал.

Пока читал различные статьи, форумы и документацию, я задумался, почему создатели сделали всё так тупо?

utf-32 требует 4 байта на символ, что очень много, но даёт произвольный доступ к символам.
utf-8 памяти требует от 1 до 4 байт на символ сам корректирует ошибки передачи байтов и имеет однозначный порядок их записи.

utf-16 ни то, ни это.
Странно это всё, мне не нравится по какому пути пошёл стандарт unicode.
Он превратился в сборную солянку и головную боль для программистов.

ссылка на канал | ссылка на группу
Так выглядит преобразование кодировки utf-8 в utf-16.

Вот как код итерации строки по символам вынести в отдельную функцию и оставить возможность получать дополнительные данные о символе (номер, размер, индекс символа и байта) без лишних действий?

Или, может, оставить всё в таком виде?
Иначе 100% придётся делать какую-то временную переменную или итератор, что, по-моему, только излишне усложнит код.

ссылка на канал | ссылка на группу
🫡1
Обещали через 1-2 месяца доставить, а в итоге пришло через 2-3 недели).

ссылка на канал | ссылка на группу
Вот оно совершенство).
Не представляю, как разработчики в этом месиве символов что-то находят).

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

ссылка на канал | ссылка на группу
Опыт написания игрового движка в прошлом очень помог совладать с этим ужасным winAPI.

Я наконец-то могу писать программу именно в своём стиле, а не в том, который диктует winAPI.

Плюсы моего стиля заключаются в простоте и скорости создания логики и графики.
На фото как раз есть пример создания меню.

ссылка на канал | ссылка на группу
Что ж, видимо, я буду не только строковую библиотеку писать, но и менеджер ввода.

А если буду разбивать проект на более-менее независимые модули (window, graphics, input, ...), то можно будет и исходники игрового движка посмотреть (там очень много готового сделано) и переписать по-новому.

ссылка на канал | ссылка на группу
Media is too big
VIEW IN TELEGRAM
За один оставшийся день нужно:
1) разработать дизайн и найти нормальные цвета
2) получать данные с последовательного порта
3) масштабировать, рисовать и сохранять в файл график
4) реализовать работу слайдера (полоса прокрутки), кнопкок и меню

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

ссылка на канал | ссылка на группу
Что про дизайн скажете?

Хочется использовать небольшую палитру цветов для GUI.
Чёрный, светло- и тёмно-серый. Может быть ещё белый.
Размеры все кратные 2 или чётные.
Размер текста 14 px.

Хочется ещё рамку в 2 px у каждого элемента сделать, но пока не придумал, как это сделать, чтобы выглядело красиво.

И каким образом менять элемент при наведении курсора или клике?
Менять цвет фона или рамки?

Мне очень приглянулся стиль кнопок в WPF, надо будет подсмотреть).

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

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

В конце графика видно, что некоторые точки меняются по значению других переменных в коде, которые лежат за границей массива.
Две точки меняются от экранных координат курсора, другая когда двигается слайдер

ссылка на канал | ссылка на группу
Я почти-почти понял, как масштабировать и рисовать график).

Осталось коэффициенты поправить, чтобы после масштабирования графики были пропорциональными.

ссылка на канал | ссылка на группу
Media is too big
VIEW IN TELEGRAM
От этих коэффициентов и выходов за границы массива уже болит голова).

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

Если всё по-нормальному сделать, оформить в виде библиотеки, фреймворка или движка, будет неплохой плоттер).

ссылка на канал | ссылка на группу