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

Разработка, программирование; c++, gcc, g++, gnu, mingw; winapi, windows; vscode.
Download Telegram
Dmitry Develop
IMG_20240930_100642.jpg
Это что ещё за булочка?)
А это мне сегодня пришли два микроконтроллера esp32-c3 ревизии модели FN4 со встроенной памятью 4MB.

Их покупку мне проспонсировал один участник группы по arduino.
С моей стороны нужно будет сделать инструкцию, как развернуть окружение в vs code для полноценной работы с этими микроконтроллерами.

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

ссылка на канал | ссылка на группу
🔥52🥰1👏1
Dmitry Develop
grub2Test.png
Ох, сколько же незаконченных дел у меня накопилось за этот и предыдущие месяцы, а сил и желания на них всё не могу найти.

В последнее время было много заказов с просьбой установить разные версии операционной системы windows.
Удалять старое содержимое 1.iso, а потом распаковывать содержимое 2.iso в корень флешки неудобно и/или долго.

Решил я наконец попробовать сделать флешку с ventoy, а не просто делать с ним эксперименты на виртуальном диске.

Установил при помощи Ventoy2Disk, положил все нужные iso образы на нужный раздел,

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

Вспомнил, каким образом ventoy размечает диск, какой отступ у первого раздела, где находится раздел с ventoy, а ещё у прошивки bios может быть ограничение 137 GB или любое другое число, дальше которого она не сможет загрузиться или увидеть файлы.
А флешка у меня, на минуточку, на 2 TB, так что вероятная причина мне сразу стала понятна.

Хорошо, открыл документацию, нашёл нужный пункт, прочитал, сделал всё по рекомендации, а именно создал третий раздел, который будет после скрытого раздела VTOYEFI, тем самым сдвигая его ближе к началу диска.
Примерно разделы будут выглядеть так: [iso storage(120 GB), VTOYEFI(32 MB), the rest(???)].
И после этого раздел с моей флешкой появился, и я успешно загрузился.

Это всё была теория в домашних условиях на современной технике с возможностью оперативно исправить проблемы, если они возникнут.
Но первая же практика показала, что мне не просто так не понравился ventoy: он просто не запустился на ноутбуке клиента, что бы я не делал.
В итоге я просто распаковал содержимое нужного iso файла, сделал раздел активным, через bootrec восстановил стандартный загрузчик windows (bootmgr) и после этого как обычно загрузился и установил windows.

Мне ventoy не понравился своей очень жёсткой структурой:
первый раздел должен иметь строго 1 MB отступ, ни больше, ни меньше, и иметь название только и только "Ventoy", ничего другого.
второй раздел должен идти строго за первым без каких-либо отступов и иметь название "VTOYEFI", насчёт строгости размера не уверен, но он 32 MB по умолчанию.
А ещё есть куча проверок в загрузчике, который при малейшем отступлении от этих правил выдаёт ошибку и прекращает какую-либо работу.
Изменил хотя бы одну букву названия? Ошибка!
Переместил загрузчик в начало или хочешь хранить iso файлы на третьем разделе? Фатальная ошибка!

Автор ventoy объясняет такую строгость и монолитность простотой поддержки, а я вижу в этом только одни недостатки, особенно для энтузиастов.

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

У меня была не одна попытка за всё время, но сегодня я смог из-под windows установить на виртуальный диск загрузчик grub2, он даже грузится в qemu, а потом смог настроить grub.cfg, чтобы у меня появились хотя бы какие-то пункты в меню.

Возможно, я создаю себе лишнюю работу, но мне нравятся изучать что-то новое, сложное и интересное).

ссылка на канал | ссылка на группу
🔥71👍1🫡1
Dmitry Develop
image_2024-11-09_03-24-10.png
Принесли мне недавно ноутбук с описанием проблемы: появляется синий экран спустя примерно 10 минут после запуска и через раз происходит загрузка при включении.

А вот конкретную ошибку они почему-то не додумались посмотреть, запомнить и рассказать мне.

Включаю ноутбук, что-то делаю, смотрю журнал ошибок и через некоторое время он намертво зависает, даже курсор не двигается, на caps lock проверить не смог, не было индикатора.
И тут внезапно синий экран смерти с ошибкой CRITICAL_PROCESS_DIED.

И после перезагрузки он больше не загружался, а ssd диска не было даже в bios.
Вставил диск в мой внешний корпус, windows сообщил о диске в 0 байт и предложил его инициализировать, интересный случай...
С диском из моего ПК всё работает.

Разобрал ноутбук, и он оказался после залития, были следы влаги и какие-то разводы, какие-то дорожки и компоненты просто сгнили.
И самое главное, жидкость добралась до ssd диска и там тоже были следы коррозии.

Решил почистить их ватной палочкой с изопропиловым спиртом и отвалился какой-то чёрный smd компонент.
Ну всё, подумал я, приехали.
Прозвонил его мультиметром, это оказался резистор на 10 кОм.
Подумал, это какая-то подтяжка и этот элемент важен для работы диска.
Прозвонкой нашёл какие-то дорожки на m.2 разъёме шли на место обрыва.

Как бы я не пытался, припаять у меня smd компонент никак не получалось, сначала он плохо держался, а потом вовсе куда-то пропал).

Но с капелькой припоя вместо резистора диск всё равно заработал и ноутбук больше не зависал и синие экраны не кидал.

ссылка на канал | ссылка на группу
👍7🔥3
Dmitry Develop
ссылка на канал | ссылка на группу
Нравится мне форматировать код по колонкам, отдельно тип данных, отдельно имена и знак равно.

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

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

ссылка на канал | ссылка на группу
😁1
Dmitry Develop
IMG_20250108_214250.jpg
Ничего себе мне книги отдали).

Жаль, жёлтая книга - не связана с обучением и в общем хрень какая-то как по моему мнению, так и по отзывам на ozon.

Зелёная мне понравилась, хотя и является копией 1 в 1 какой-то другой книги.
По-моему там не хватает более подробного объяснения изменяемых и неизменяемых переменных, что происходит при изменении неизменяемых переменных и других вопросов.
Как-то косвенно затрагиваются ссылки.
Не хватает тонкостей работы, например, с кортежами.
Кортежи это неизменяемый тип данных, то есть после их создания нельзя добавлять, удалять или изменять элементы, однако, это не мешает изменять значение элементов, если они изменяемые.
Описания таких тонкостей я не видел, а они важны, у меня на собеседовании такой вопрос задавали.
Так же хотелось видеть в разделе ООП хотя бы краткого описания видов полиморфизма: ad-hoc и параметрический, было бы ещё лучше наличие примеров их реализаций, сравнение на практике и несколько задач на эту тему.
Так же не раскрыта тема сложных декораторов с 3 уровнем вложенности, а я такой когда-то уже писал

Чёрная интересна будет уже после прохождения жёлтой, там много разных практических тем.

ссылка на канал | ссылка на группу
🔥1
Dmitry Develop
Screenshot 2025-01-09 00-46-06.png
Кому понадобится наложить на видео или стрим overlay с нажатыми клавишами, мне понравились вот эти два решения:

Это плагин для obs с набором готовых настроек и атласов для отображения раскладки клавиатуры или игрового манипулятора с состоянием их клавиш:
https://obsproject.com/forum/resources/keyviz.1565/
https://github.com/mulaRahul/keyviz

Это самостоятельная программа с большим количеством настроек, которая показывает на экране нажатые клавиши и их сочетания:
https://obsproject.com/forum/resources/input-overlay.552/
https://github.com/univrsal/input-overlay

Я такую как раз использовал в последнем видео.

ссылка на канал | ссылка на группу
👍1
Dmitry Develop
image_2025-01-11_21-24-01.png
// compile_flags.txt
...
-fexec-charset=windows-1251


Никто не знает можно ли как-то clangd указать execution charset для строковых литералов?

Файл исходного кода у меня в utf-8, но -fexec-charset=windows=1251 перекодирует строки в windows-1251 в скомпилированной программе.

Соответственно я хочу, чтобы визуальные подсказки по ordinary string literal отображались с правильным размером типа данных (const char[N]) и правильными кодами символов (codepoint).

При указании аргумента, отличного от utf-8, для -finput-charset или -fexec-charset, в редакторе появляется ошибка:
Invalid value 'windows-1251' in '-fexec-charset=windows-1251' clang(drv_invalid_value).
Ошибка появляется для любого значения, отличного от utf-8.

По информации из интернета я понял, вроде, что дело то ли в используемом кодировщике iconv или ICU и какой-то их особенности под windows в виде отсутствии поддерживания другой кодировки.
То ли это особенность самого clangd, который также не поддерживает кодировку любую другую кодировку кроме utf-8.

ссылка на канал | ссылка на группу
🔥1
Dmitry Develop
winlibsProgramVerions.png
Сборки gcc + mingw с сайта winlibs не перестают меня удивлять: уже который раз обращаю внимание на то, что в их сборке находятся самые или почти актуальные версии программ.

Версия g++ на данный момент последняя стабильная: 14.2.0.
Версия clang++ и clangd на данный момент отстаёт от стабильной всего на 5 minor версий: 19.1.1.

А ещё, да, это portable сборка, которую достаточно скачать, разархивировать, добавить в переменные среды (path), что может быть необязательно, если вы знаете, как это сделать временно, и можно работать, даже на флешке и на другом компьютере в школе или у друга.
Никаких установщиков и трудностей выбора каких-то пакетов.

Репозиторий git.
Репозиторий llvm.

ссылка на канал | ссылка на группу
👍1
Dmitry Develop
vscodeTerminalProfileCustomization.png
⚠️ не используйте этот способ, пока не прочитаете обновление по этой публикации:
https://t.me/a248640develop/330

Продолжаю настраивать чистый и пустой vs code после переустановки windows 11.

Следующая проблема, с которой я столкнулся, оказалась в отсутствии папки bin компилятора в переменных среды (PATH), из-за этого не запускается скомпилированная им программа, так как она не полностью самодостаточна и зависит его его библиотек времени выполнения (runtime).

Странно, что я до сих пор не сделал публикацию в канале на тему "portable/standalone/переносных программ", так как я думал не неё сослаться или сделать отсылку.
Но в своей группе я неоднократно говорил насколько сильно мне нравится такой вид программ и наличие возможности выбора.

Проблема понятна, просто добавить папку в переменные среды и всё, но я, как любитель переносных программ и по возможности минимального вмешательства в систему подумал, а можно ли как-то обойтись без изменения PATH, чтобы программа работала?

Я знаю, что в терминале можно временно изменять переменные окружения.
Например, для cmd будет: set path=path_to_compiler_bin;%path%.
Это самый простой способ временно изменить PATH и запустить процесс с этими изменёнными переменными, и чтобы windows смогла найти все нужные exe и dll файлы.

Я подумал, а можно ли как-то в vs code перед запуском терминала выполнить какую-то свою команду или запустить скрипт?
Как активация виртуального окружения python, например.
Да, можно, для этого есть настройка "terminal.integrated.shellArgs.windows": [""], но она, к сожалению или к счастью, стала устаревшей и была удалена.

На замену ей пришли профили терминала: "terminal.integrated.profiles.NNN", в которых можно не только создавать свои, но и переопределять настройки для стандартных, можно поменять не только аргументы, которые мне были и нужны, но и путь до исполняемого файла и даже иконку.

В настройки уровня пользователя, проекта или решения нужно добавить следующий текст:
// settings.json
{
"terminal.integrated.profiles.windows":
{
"Command Prompt":
{
"path":
[
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe",
],
"args":
[
"/k",
"echo hello & echo world & prompt $g$s",
],
"icon": "terminal-cmd",
},
},

"terminal.integrated.defaultProfile.windows": "Command Prompt",
}


И в итоге вместо стандартного содержимого терминала:
Microsoft Windows [Version 10.0.22631.4602]
(c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

C:\Users\user>_


В моём случае будет:
hello
world

> _


Я для примера решил вывести текст hello и world на разных строках и изменить префикс ввода (не знаю как на русском это назвать лучше).
Любителям "а как убрать путь из консоли" посвящается).

Вместо команды "echo hello & echo world & prompt $g$s" можно сделать вызов любого скрипта, даже vcvarsall.bat, что позволит легко использовать компилятор cl.exe (MSVC).

ссылка на канал | ссылка на группу
👍21🔥1