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

Разработка, программирование; c++, gcc, g++, gnu, mingw; winapi, windows; vscode.
Download Telegram
Dmitry Develop
escapeSequencesVT100.png
/*
g++ -fexec-charset=cp1251 -o vt100.exe vt100.cpp
*/

#include <windows.h>

/*
Функция управляет обработкой управляющих последовательностей VT100 у консоли.

В случае успеха возвращает ERROR_SUCCESS.
В случае ошибки возвращает код последней ошибки.
*/
DWORD controlVT100Sequences(HANDLE hConsoleHandle, bool enable = true)
{
// сбросить lastError
SetLastError(ERROR_SUCCESS);

// получить режим консоли
DWORD mode { };

if(GetConsoleMode(hConsoleHandle, &mode) == 0)
{
return GetLastError();
}

// изменить режим консоли
if(enable)
{
mode |= (DWORD)ENABLE_VIRTUAL_TERMINAL_PROCESSING;
}
else
{
mode &= ~(DWORD)ENABLE_VIRTUAL_TERMINAL_PROCESSING;
}

// сбросить lastError
SetLastError(ERROR_SUCCESS);

// установить режим консоли
if(SetConsoleMode(hConsoleHandle, mode) == 0)
{
return GetLastError();
}

return ERROR_SUCCESS;
}

int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);

const HANDLE consoleOutput { GetStdHandle(STD_OUTPUT_HANDLE) };

const char* coloredText
{
" \033[44mСиний фон\033[49m\n"
" \033[44m\033[31mКрасное слово\033[39m"
" | "
"\033[32mЗелёное слово\033[39m\033[49m\n"
};
const char* VT100DisabledText { "Disabled VT100:\n" };
const char* VT100EnabledText { "Enabled VT100:\n" };

// обработка управляющих последовательностей VT100 отключена
controlVT100Sequences(consoleOutput, false);

WriteConsoleA(consoleOutput, VT100DisabledText, strlen(VT100DisabledText), nullptr, nullptr);
WriteConsoleA(consoleOutput, coloredText , strlen(coloredText) , nullptr, nullptr);

// обработка управляющих последовательностей VT100 включена
controlVT100Sequences(consoleOutput, true);

WriteConsoleA(consoleOutput, VT100EnabledText, strlen(VT100EnabledText), nullptr, nullptr);
WriteConsoleA(consoleOutput, coloredText , strlen(coloredText) , nullptr, nullptr);

return 0;
}

Решил попробовать в первый раз управляющие последовательности VT100 и написать код, который включит их обработку в терминале.

Документация:
GetConsoleMode
SetConsoleMode
windows console virtual terminal sequences
ANSI/VT100

ссылка на канал | ссылка на группу
🔥5
Dmitry Develop
open_server_panel_5_4_3_setup.exe
OpenServer (OSPanel) это некоммерческая портативная программа для web-разработчиков, полноценный локальный web-сервер с плагинами, базой данных и многим другим.
Звучит, как реклама, но я начал пользоваться этой программой более 5 лет назад.
И вот, даже на работе он мне понадобился).

Я хотел скачать установочный файл программы, но на официальном сайте намеренно занижена скорость скачивания до ~0.1 MB/s, а размер файла почти гигабайт.

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

В windows можно без сторонних программ вычислить контрольную сумму файла.
Для этого нужна программа certutil.exe (документация).

certutil -hashfile "open_server_panel_5_4_3_setup.exe" MD5

Хэш MD5 open_server_panel_5_4_3_setup.exe:
420078689ee2b5c743d7b3bb578fb662

certutil -hashfile "open_server_panel_5_4_3_setup.exe" SHA1

Хэш SHA1 open_server_panel_5_4_3_setup.exe:
bba5646cef239f32dd77fac742e55926d81b450f

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

ссылка на канал | ссылка на группу
👍4🤯1
Мой таймер возвращает время, как беззнаковое число, в количестве наносекунд.
Нужно вычислять разницу между двумя промежутками времени.
Бывает, уменьшаемое меньше вычитаемого, поэтому результат вычитания будет меньше нуля, и в беззнаковой переменной из-за underflow результат будет ооочень большим.

Поэтому я написал эту небольшую функцию:
Функция вычитает два беззнаковых числа left - right без underflow.
Модуль результата вычитания сохраняется в difference.
Если результат выражения был отрицательным, в negitiveSign сохраняется true, иначе false.
void uint64AbsoluteSubtract(uint64_t left, uint64_t right, uint64_t* difference, bool* negitiveSign, status_s* status);


Если left = 10, right = 5, то
difference = 5, negitiveSign = false.

Если left = 5, right = 10, то
difference = 5, negitiveSign = true.
uint64 left { X }, right { Y };

uint64 difference { };
bool negitiveSign { };

uint64AbsoluteSubtract(left, right, &difference, &negitiveSign, nullptr);


Получается, вместо этого кода:
if(left - right >= 15'625'000) { ... } else { ... }


Будет такой:
if(negative) return;
if(difference >= 15'625'000) { ... } else { ... }


(Раньше тут вместо 15'625'000 был 0 😏)

ссылка на канал | ссылка на группу
👍1
Dmitry Develop
image_2024-04-19_21-22-20.png
Что ж, сделаю небольшое предварительное объявление).

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

ссылка на канал | ссылка на группу
Dmitry Develop
ссылка на канал | ссылка на группу
Было интересно, но сложно).

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

Ну его, этот kdenlive, даже такую простую работу было очень сложно сделать.
Менять очерёдность слоёв нельзя.
Удобного и нормального управления нет.
Нормально копировать, вставлять и перемещать ключевые кадры группой нельзя.
Чтобы отразить картинку по ключевому кадру, приходится с фильтрами мучиться.
Замедленное воспроизведение в окне просмотра нет.
Даже полоса прокрутки часто уходила за границы экрана и вообще неадекватно работала.

ссылка на канал
| ссылка на группу
🕊2🔥1
Dmitry Develop
itgmMember.png
Хе-хе, на ITGM у меня останутся некоторые материальные сувениры на память: бейджик и бонус коды для игры компании Lesta.

Пока что я для себя не нашёл темы, которые мне были бы интересны или понятны.

Сходил послушать речь группы embeded group и ещё что-то там, но в итоге рассказывали только про ansible, о котором я слышу в первый раз.
Потом сходил mobile broadcast на тему "arduino + аккумулятор", но там тоже ничего интересного я не услышал и не увидел.

Пока соориентировался, пока додумался что и как, время этих докладов прошло: "Проектирование API. Сказ о аналитике и архитектуре" и "Паттерны построения LLM-based систем", эти две темы, думаю, мне были бы интересны.

ссылка на канал | ссылка на группу
Каким-то образом за последнюю неделю я стал популярным и мне начали писать с предложением сверстать сайт по фотографии и написать серверную сторону на node js + express.

Вообще не имел опыта с этим стеком технологий, а на HTML так вообще более 5 лет не писал.

Благо некоторый опыт в поиске и анализе информации помог мне базово разобраться как работает node js и какой код написать, а ещё было просто интересно).

ссылка на канал | ссылка на группу
1👍1🥰1
Dmitry Develop
Screenshot_20240526_100304_org.telegram.messenger.web.jpg
Вот так вот, занимаешься волонтёрством, следишь за спамом в чатах, удаляешь его или упоминаешь администраторов, а в один прекрасный день ты забанен в одной из групп).

Изменение:
Похоже, это всё произошло из-за нового бота, который меня и забанил.
Администратор группы разобрался в ситуации и разбанил меня).

ссылка на канал | ссылка на группу
Что-то меня vs codium начинает разочаровывать.
Вроде тот же vs code, а трудностей больше.

В vs code я в основном писал на C++, поэтому чуть больше понимаю как работает поддержка и интеграция этого языка, какие инструменты и расширения нужны, чем для других языков.

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

Ладно, для vs codium и C++ я нашёл расширения, которые мне понравились и работают быстрее или дают больше возможностей по сравнению с расширением от microsoft: clangd (llvm-vs-code-extensions.vscode-clangd), Native Debug (webfreak.debug) или CodeLLDB (vadimcn.vscode-lldb).

А вот в случае python я не сразу заметил подвох.
Было установлено расширение python (ms-python.python), вроде всё работало как обычно, но классы и другие сущности из других модулей или файлов не подсвечивались и были белого цвета.
При наведении очень долго редактор кода думает и спустя время показывает объявление и комментарий выделенного символа.
Но перейти к определению не работает, подсказки не работают.

Я даже не заметил, но расширения pylance не было и в vs codium он без модификаций работать из коробки не будет, его даже нет в списке расширений.
Я думал расширение python самодостаточное и ему не нужно для работы какие-то дополнительные зависимости.

По итогу для python я не нашёл какой-то нормальный аналог.
Видимо, придётся вернуться к vs code, так как на python я пишу по работе и мне кроме подсветки синтаксиса нужны и другие привычные в IDE инструменты, как intellisense и другие.

ссылка на канал | ссылка на группу
Dmitry Develop
winlator.png
Я не слежу за IT новостями, но эту я совершенно случайно увидел, когда искал есть ли проблема сейчас скачать и установить MSVC в России.

Winlator выпустили android приложение, которое позволяет запускать windows x86 и x86_64 приложения при помощи Wine и Box86/Box64 в операционной системе android.
Официальный сайт разработчика

У habr очень хорошо работает индексация в google: посту всего несколько часов, а он уже есть в поисковой выдаче.
Новость на сайте habr

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