• Как из под Windows писать и отлаживать С++ код под Raspberry pi?

    TrueBers
    @TrueBers
    Гуглю за еду
    Адекватно отлаживать код можно только на той платформе, для которой он пишется. Иначе никак.
    C++ -- он и в Африке C++. Можно писать хоть в блокноте, главное тулчейн, которым он собирается. А у C++ с кросскомпиляцией всё не так уж радужно на практике, как это рисуют в теории.

    Смотря для какого API вы писать хотите, для какой системы. Например, в Убунте тулчейны более древние, чем в Арче. Это накладывает весомый отпечаток на боль, которую придётся испытывать в разработке и отладке.

    при работе по SSH некорректно работают практически все функции glut
    При работе по ssh вообще сложно пробросить графический сервер, чтобы он работал адекватно. А ещё есть как минимум X и Wayland. У них разные методы удалённой отладки будут.

    Проще будет VNC поднять и отлаживать таким образом, чем городить костыли.
    И, как уже сказала копи-паста из бота, используйте GLFW или SDL, они намного проще собираются и отлаживаются, чем говно мамонта под названием GLUT.
    Ответ написан
    Комментировать
  • Ffmpeg ухудшает аудио при конвертации видео?

    TrueBers
    @TrueBers
    Гуглю за еду
    При конвертации видео, аудио-поток вообще не трогается, а остаётся тем же, максимум ремуксится. Значит вы неверный параметр передаёте.

    ощущение

    какое может быть ощущение, если у вас под рукой ffmpeg, который всю досконально информацию по потоку даст вместо ваших "ощущений"? Сравните характеристики потока до и после транскодирования и избавитесь от сомнительных ощущений.

    Банальный параметр -codec:a copy должен помочь в большинстве случаев.
    Ответ написан
  • Как работает виртуальная сеть?

    TrueBers
    @TrueBers
    Гуглю за еду
    1. Адаптер создаётся средствами операционной системы, как простая болванка, которая извне подчиняется всем правилам сетевой маршрутизации, а изнутри чисто программно делает с пакетами то, что написано в коде драйвера-фильтра.
    В винде про это можно почитать на MSDN. Про линукс немного инфы есть здесь.

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

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

    Ещё более продвинутая технология -- SR-IOV, которая честно поделит устройство между разными системами, но нужна так же поддержка технологии процессором, платой, сетевым адаптером и гипервизором.

    2. Технология NAT это просто подмена адреса и запоминание, какой поменялся на какой, чтобы потом при ответном пакете вернуть его обратно в нужную подсеть. В виртуалках он по умолчанию используется как простейший способ изоляции подсетей. Чтобы подсеть виртуалки не поломала основную сеть. А тем, кому нужны конкретные задачи, могут переключить режим NAT в какой-то другой, более "опасный" для сети режим, при этом понимая, что он делает.
    Ответ написан
    Комментировать
  • Как включить виртуализацию?

    TrueBers
    @TrueBers
    Гуглю за еду
    Этот процессор был очень пограничным для полной поддержки аппаратной виртуализации. Как минимум он ещё не поддерживает аппаратный SLAT, а это прямо ощутимые тормоза.
    Вполне возможно там что-то глючило, и решили вырубить поддержку в микрокоде.
    Плата тоже может ограничено уметь в виртуализацию, т. к. в то время она только развивалась и поддержка вполне могла быть экспериментальной.

    Есть пара способов:
    Обновить прошивку платы.
    Обновить микрокод процессора.

    Если ни один из них не поможет, то вряд ли уже что-то поможет. Слишком экспериментальной ещё была виртуализация в те времена.
    Ответ написан
    Комментировать
  • Как увеличить виртуальную память?

    TrueBers
    @TrueBers
    Гуглю за еду
    Подкачка -- это только одна из частей понятия виртуальной памяти. Вы в целом не можете контролировать её. На то она и виртуальная.

    Она может включать в себя все общие замапленные DLL-ки, например. Которые по факту занимают память только один раз на всю систему, а учитываются как будто в каждом процессе что-то отъедают.
    Процесс может замапить себе хоть терабайт памяти виртуальной, но физические страницы будут выделены только по факту Copy-on-Write.

    Забейте на виртуальную, главное, чтобы физической хватало.
    Ответ написан
    Комментировать
  • Как конвертировать системный диск с Windows 10 с MBR в GPT?

    TrueBers
    @TrueBers
    Гуглю за еду
    Официальной утилитой от MS?

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

    Намного проще заново установить систему в режиме UEFI.
    Ответ написан
    Комментировать
  • Почему дублируются Leases в DHCP Mikrotik?

    TrueBers
    @TrueBers
    Гуглю за еду
    адреса повторяются по несколько раз для 1 мак
    Мак никак не гарантирует уникальность лиза, если передана опция 61 Client-identifier. Вы замазали зачем-то кучу полезных для дебага данных, как будто вас по маку сейчас сдеанонят... DHCP сервер должен идентифицировать лизы по паре ClientID:IP, и только если не передан ClientID, использовать пару HardwareAddress:IP. Проверьте, что у вас там под замазкой.

    Таймер, который больше, не просто не уменьшается, а растёт.
    Если он растёт, значит приходят одинаковые пары client-id(61):requested_IP и продлевают жизнь лиза, соответственно.

    Это может быть связано с несколькими инстансами работающих dhcp-клиентов у пиров. Какой-то косяк у этих реализаций с transaction-id, возможно. Ну или какой-то косяк в архитектуре сети, релеях.

    Попробуйте отдавать лизы по юникасту, если включен Always Broadcast.

    менял. было 3 часа, сделал 1 час. но после этого уже перезапускал и всё сбрасывалось. стоит ли делать такой малый промежуток?
    Не в 90х же живём. Вообще стоит 10 минут поставить время жизни, за 3 часа в 2024-м может слишком много чего произойти. Лизы по 2 дня у вас на скриншоте -- это треш какой-то. Где-то явно лишние реквесты приходят пачками.

    Что в логах по топику dhcp приходит? Что сниффер показывает?
    Ответ написан
    Комментировать
  • Виндовс бут менеджер стоит на одном диске, а сама винда на другом?

    TrueBers
    @TrueBers
    Гуглю за еду
    В современных системах на базе UEFI загрузчик почти всегда находится на отдельном EFI system partition. Переносить его никуда не нужно, так и должно быть.
    Он оказался на другом диске, потому что вы так установили систему или ставили с какой-то кривой сборки. В теории, если есть неразмеченного пространства в районе 500Мб, можно создать EFI system partition и скопировать на него содержимое предыдущего. Либо как уже написали, запустите процесс восстановления загрузчика. Не знаю, что он будет делать в этой ситуации, но попробовать можно, перед этим отключив ненужный диск.
    Ответ написан
    Комментировать
  • Дамп игры на c++?

    TrueBers
    @TrueBers
    Гуглю за еду
    Для получения методов игры дампить ничего не нужно, если только игра не запакована самомодифицируемым кодом.
    Нужен дизассемблер, отладчик, знание системного программирования и реверс-инжиниринга.

    На Юнити бывает как минимум два типа кода: il2cpp, когда генерируется код на C++, а потом компилируется в нативный код; второй тип -- managed .net код. Для каждого из них нужны свои инструменты и знания.

    Достаточно дизассемблера типа Ghidra, Ida Pro, radare2. Отладчика типа WinDbg, x64dbg или CheatEngine. Фреймворка динамической инструментации типа Frida. Для managed кода хорошо подойдёт .dotPeek или ILSpy в качестве декомпилятора.

    Ещё очень неплохо будет знать какой-нибудь низкоуровневый язык программирования типа Rust, Си, C++.

    Ну и ещё несколько тысяч часов опыта...
    Ответ написан
  • Как починить синий экран?

    TrueBers
    @TrueBers
    Гуглю за еду
    По одному дампу мало что можно сказать.
    Похоже на баг драйвера NVIDIA Share, которая в фоне постоянно записывает кадры и позволяет из этого буфера либо сохранить видеофайл, либо наделать скриншотов.
    Попробуйте отключить в NVidia GeForce Experience, если включена.
    Ответ написан
  • Что сделать, чтобы Unity не ухудшал спрайт?

    TrueBers
    @TrueBers
    Гуглю за еду
    Отключить фильтрацию текстур.
    Ответ написан
  • Можно ли создать приватный сервер игры?

    TrueBers
    @TrueBers
    Гуглю за еду
    1. Скачать игру.
    2. Провести реверс-инжиниринг.
    3. Формализовать сетевой протокол.
    4. Реализовать его на любимой технологии.
    5. Написать сервер.
    6. Играть.
    7. PROFIT!
    Ответ написан
    2 комментария
  • Как расшифровать файл .car?

    TrueBers
    @TrueBers
    Гуглю за еду
    Может быть, открыть гугл, погуглить "car file unpacker" и найти скрипт для распаковки?
    Да не, бред какой-то...
    Ответ написан
    Комментировать
  • Математика для геймдева. Какие материалы посоветуете для изучения?

    TrueBers
    @TrueBers
    Гуглю за еду
    Это всё мифы и легенды, что для геймдева нужны невероятные знания математики и линейной алгебры. Только если не пишешь авиасимулятор, симуляцию гидроаэродинамики, частиц или что-то подобное.

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

    Тот же курс по OpenGL от Джоуи де Фриса learnopengl.com можно взять. Отличный курс. У него есть адаптации под различные языки программирования.
    На его основе ещё есть курсы по Vulkan и, возможно, DirectX.

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

    Геймдев -- скорее про архитектуру ПО и паттерны проектирования, про взаимодействие, про оптимизацию, расположение данных в памяти, понимание, как эти данные по железу гоняются, как их эффективнее прочитать или записать. Математику красивых пост-процессингов за нас написали профессора из исследовательских центров NVidia, AMD, Intel, и т.п.
    Ответ написан
    Комментировать
  • Есть ли фриланс на С++ с нуля?

    TrueBers
    @TrueBers
    Гуглю за еду
    C++ -- инструмент, а не цель.

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

    На C++ можно писать ОС, игры, прикладные программы, системные утилиты, драйверы, прошивки, серверы, базы данных, да хоть чёрта лысого.
    Что интересно самому, тем и занимайся. C++ тут не причём, это 10% от всего, что нужно изучать.

    Большинство заказчиков на фрилансе вообще не шарят за языки и технологии. Им важно, чтобы задача была выполнена, а на чём ты её напишешь, большинству обычно всё равно.
    Ответ написан
    2 комментария
  • Как исправить ошибку LNK2001 unresolved external symbol __imp_GetUserNameW C++?

    TrueBers
    @TrueBers
    Гуглю за еду
    Гуглим название функции: GetUserNameW.
    Заходим по первой же ссылке на документацию Microsoft.
    Там спускаемся в раздел Requirements.
    В строке "Library" видим Advapi32.lib.

    Теперь гуглим текст ошибки LNK2001 unresolved external symbol и переходим по первой ссылке, которая снова, внезапно, по невероятному стечению обстоятельств оказывается документацией Microsoft.
    Там читаем описание ошибки, и что нужно сделать, чтобы её устранить. Там даже ссылка на StackOverflow оставлена!

    2 основных варианта: либо в настройках проекта добавляем эту библиотеку к списку линкуемых, либо прямо в коде говорим линкеру #pragma comment(lib, "Advapi32").
    Браво! Вы великолепны!
    Да ещё и потратили в 3 раза меньше времени, чем писать сюда вопрос.

    Не сложно, если захотеть, правда?
    Ответ написан
    Комментировать
  • MSVCP140.dll, что делать sfml?

    TrueBers
    @TrueBers
    Гуглю за еду
    6440f5fb8784f355684811.png
    Ответ написан
  • Не работает интернет после установки Linux. Что делать?

    TrueBers
    @TrueBers
    Гуглю за еду
    Первая же ссылка в гугле по запросу "RTL8821AU Linux" говорит о том, что Realtek забил болт на всех, и исходники драйвера для этого чипа никогда не публиковались, соответственно, их не может быть в ядре изначально.

    Единственный вариант -- это собрать среверсенный драйвер через dkms или установить с пользовательского репозитория уже собранный модуль.

    Для Федоры: https://copr.fedorainfracloud.org/coprs/sunwire/dk...
    Для Арча: https://aur.archlinux.org/packages/rtl8821au-dkms-git
    Для Убунты не припомню собранного актуального модуля.

    Для самостоятельной сборки: https://github.com/morrownr/8821au-20210708

    UPD: От себя добавлю, что драйвер очень глючит, что под Линуксами, что под Виндой. Если используется не для кулхацкинга и режима монитора, то лучше купить что-то понадёжнее.
    Ответ написан
    Комментировать
  • Как можно перебирать слова в C++?

    TrueBers
    @TrueBers
    Гуглю за еду
    Обычно, слова в коде Морзе в рукописном варианте делят не пробелами, а прямым слешем: "/". А если в кодировке, то 7-ю длительностями низкого уровня.

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

    C++23
    #include <string>
    #include <string_view>
    #include <ranges>
    #include <array>
    #include <utility>
    #include <algorithm>
    #include <cassert>
    #include <stdexcept>
    
    template <typename Key, typename Value, std::size_t Size>
    struct Map {
    	std::array<std::pair<Key, Value>, Size> data;
    
    	constexpr Value at(const Key key) const {
    		const auto iter = std::find_if(std::begin(data), std::end(data),
    			[&key](const auto& v) { return v.first == key; });
    
    		if (iter == std::end(data)) {
    			throw std::range_error("unknown character");
    		}
    		return iter->second;
    	}
    };
    
    static constexpr std::array<std::pair<std::string_view, char>, 51> MORSE_MAP = { {
    	{"•-", 'A'},      {"-•••", 'B'},    {"-•-•", 'C'},   {"-••", 'D'},
    	{"•", 'E'},       {"••-•", 'F'},    {"--•", 'G'},    {"••••", 'H'},
    	{"••", 'I'},      {"•---", 'J'},    {"-•-", 'K'},    {"•-••", 'L'},
    	{"--", 'M'},      {"-•", 'N'},      {"---", 'O'},    {"•--•", 'P'},
    	{"--•-", 'Q'},    {"•-•", 'R'},     {"•••", 'S'},    {"-", 'T'},
    	{"••-", 'U'},     {"•••-", 'V'},    {"•--", 'W'},    {"-••-", 'X'},
    	{"-•--", 'Y'},    {"--••", 'Z'},    {"-----", '0'},  {"•----", '1'},
    	{"••---", '2'},   {"•••--", '3'},   {"••••-", '4'},  {"•••••", '5'},
    	{"-••••", '6'},   {"--•••", '7'},   {"---••", '8'},  {"----•", '9'},
    	{"•-•-•-", '.'},  {"--••---", ','}, {"---•••", ':'}, {"••--••", '?'},
    	{"•----•", '\''}, {"-••••-", '-'},  {"-••-•", '/'},  {"-•--•", '('},
    	{"-•--•-", ')'},  {"•-••-•", '"'},  {"-•••-", '='},  {"•-•-•", '+'},
    	{"-••-", 'x'},    {"•--•-•", '@'},  {"/", ' '} } };
    
    constexpr auto decode(std::string_view morse) {
    	constexpr auto map = Map<std::string_view, char, MORSE_MAP.size()>{ MORSE_MAP };
    	return morse
    		| std::ranges::views::split(' ')
    		| std::ranges::views::transform([](auto&& range) {
    			return map.at(std::string_view{ range });
    		})
    		| std::ranges::to<std::string>();
    }
    
    int main() {
    	const auto CODE = "•••• • •-•• •-•• --- --••--- / •-- --- •-• •-•• -••";
    	const auto TEXT = "HELLO, WORLD";
    
    	assert(decode(CODE) == TEXT);
    
    	return 0;
    }
    Ответ написан
    Комментировать
  • Как убрать предупреждение "F может быть равно NULL"?

    TrueBers
    @TrueBers
    Гуглю за еду
    Как минимум, не мешать Си и Си++, а писать на чём-то одном, и различать их.
    Во-вторых, зачем от предупреждения избавляться? Его нужно понять, почему оно появляется. Когда будет понимание, тогда всё станет на свои места.

    Достаточно предположить, что функция fopen_s внезапно не сможет открыть файл и вернёт ошибку. Допустим, файла не существует, или на его открытие нет прав у пользователя. Ты же не проверяешь возврат результата из функции открытия и пытаешься что-то записать в F, даже если функция не смогла открыть файл и вернула ошибку. А когда она вернёт её, переменная F останется нулевыем указателем или, в первом твоём случае, вообще будет обращение к неинициализированной переменной, где ты получишь неопределённое поведение. Вот оно и ругается на эту ветку развития событий.

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