Задать вопрос
  • Как сделать взаимодействие между несколькими процессами?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Как уже было сказано - это называется IPC
    Если нужно обмениваться данными, то можно использовать техники:
    - Сокеты: TCP/IP можно практически везде, Unix-domain - только в unix системах, но будет быстрее
    - Сигналы: можно передавать данные вместе с сигналом, но только int/указатель, т.е. вариантов не много
    - stdout/stdin: при создании дочернего процесса получить его stdout/stdin потоки и работать с ними
    - Каналы: можно создать канал (анонимный или именованный) и общаться через него
    - Внешний сервис для общения: какой нибудь RabbitMQ, но это чересчур
    - Общая память (Shared Memory): но может не работать во некоторых ЯП
    - Общение через файлы: один процесс пишет в файл и по окончании шлет сигнал другому процессу, который этот файл читает
    - Memory Mapped File : тот же вариант, что и с файлами, но быстрее и при больших данных можешь словить OOM и большое потребление памяти
    - ZeroMQ - это очередь сообщений, которая работает в user-space

    Дополнительно надо помнить, что есть ограничения различных платформ, ОС, ЯП и некоторые варианты там работать не будут
    Ответ написан
    Комментировать
  • Какие виды договоров можно заключить при работе удаленно?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    ГПХ
    Договор на предоставление услуг
    Лицензионный договор
    Ответ написан
    1 комментарий
  • Можно ли сделать git merge, чтобы в главной ветке появился только коммит слияния?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. git merge feature --squash
    2. git commit

    Проблему решает --squash флаг при merge, только останется закоммитить это дело
    Ответ написан
    Комментировать
  • Как собрать JSON из класса?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Ты не инициализируешь основной массив. Это таким образом делается.
    Rootobject rootobject = new Rootobject();
    rootobject.keyboard = new string[2][];
    Ответ написан
    1 комментарий
  • GCC Добавляет лишние пробелы при компиляции?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Скорее всего проблема в кодировке файла. Попробуй сконвертировать формат файла в utf-8, если другой, и дополнительно смени тип новой строки с \r\n на \n (не уверен, что важно)
    Ответ написан
    Комментировать
  • Как сформировать Json из массива?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Ты записываешь данные в неинициализированные массив.
    Т.е. у тебя каждый элемент внешнего массива - null.

    Просто инициализируй их:
    var keyboard = new Inline_Keyboard[3][];
    keyboard[0] = new Inline_Keyboard[1];
    keyboard[1] = new Inline_Keyboard[2];
    keyboard[2] = new Inline_Keyboard[2];
    rootobject.inline_keyboard = keyboard;


    P.S. но лучше замени на List
    Ответ написан
    6 комментариев
  • Как пофиксить ошибку сериализации в XML?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Попробуй в классе ScenarioManeger Chapter[] заменить на List<Chapter>.
    Скорее всего, при десериализации XML хочет добавить в массив новый элемент, но массив динамически не изменяется, поэтому и возникает ошибка
    Ответ написан
    9 комментариев
  • Как управлять локализацией дат?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Даты в БД хранишь в формате UTC. Можно даже без таймзон. Главное, чтобы все представляли единый формат/точку отчета.

    На клиенты отправляешь эту дату. JS может создавать Date используя ISO формат - клиент эту дату парсит и используя свою временную зону парсит.

    В общем, смысл следующий:
    - В БД даты хранятся относительно UTC
    - На и с клиента даты отправляются в UTC формате - представление даты с учетом таймзоны будет на стороне пользователя/UI, а коде бизнес-логики работа ведется с UTC

    Клиент лучше знает, какая у него таймзона и локаль
    Ответ написан
    2 комментария
  • Почему не находит файл C# в csc?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Проверь, что директория откуда запускаешь - та же самая, что и та, которая этот .cs файл хранит.
    На всякий случай, выполни cd /file/path, где /file/path - полный путь до директории с этим файлом.

    P.S. судя по всему, нужная версия фреймворка у тебя установлена, поэтому хотя бы запускается
    Ответ написан
    Комментировать
  • Как установить виртуальную систему на внешний SSD-диск?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Если хочешь, чтобы виртуальная машина хранилась на этом SSD и на разных ПК ее можно было бы запустить, то просто храни образ этой ВМ на SSD.
    - Для существующей тебе надо экспортировать ее на внешний носитель: Файл - Менеджер Виртуальных Носителей - Переместить
    spoiler
    65db191f1e451942728819.png

    - Если хочешь новую создать, то просто скажи, чтобы на этом SSD ее данные хранились
    spoiler
    65db1894db0ca660537228.png


    Чтобы загрузиться: Машина - Добавить
    Ответ написан
  • Как исправить ошибку?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    event - это функция, а не поле, поэтому event(func) - невалидная конструкция для списка инициализации (тебе компилятор об этом и говорит)
    Если хочешь, чтобы вызываемая функция инициализировалась в конструкторе, то храни само поле функции и внутри event() ее вызывай. Примерно так:
    class menu_item
    {
    public: 
    	menu_item(std::string name, std::function<void()> func) : _name(name), _func(func)
    	{
    		
    	}
    	
    	void event()
            {
                  _func();
            }
    	
    	std::string const& name = _name;
    	
    private: 
    	std::string _name;
            std::function<void()> _func
    };
    Ответ написан
  • Как ос генерируют виртуальные адреса, по которым будет поиск, не физические? Почему программы с одних адресов начинаются?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Ты уже сказал про старшие 20 бит, скорее всего знаешь про сегментную организацию виртуальной памяти.
    20 бит используются в 32 битных системах, а сейчас большая часть 64 битная, но это не важно.
    Принцип следующий:
    Существует 3 таблицы:
    - PGD - Page Global Directory
    - PMD - Page Middle Directory
    - PTE - Page Table Entry

    Они иерархические, т.е. запись в PGD указывает на запись в PMD, а PMD - на PTE.
    В итоге, ты приходишь с 3 "числами" - индексы для этих таблиц и последовательно приходишь к нужной PTE.
    Но тебе нужно еще 4 число - смещение относительно полученного в PTE значения (там хранятся "начала" выделенных сегментов/интервалов памяти)
    Теперь последовательно запиши эти адреса и получишь виртуальный адрес.

    TLB в данном случае - это просто кэш, чтобы ты постоянно не ходил через этот ад указателей. Он в процессе выделения памяти не участвует.

    Как выделяется реальная память - деталь реализации, о которой знать не нужно.
    Если интересно - вот статья про память в линуксе.

    P.S. пример показан на C# - там собственная виртуальная память и GC. Поэтому показывает не то, что выделила ОС.
    Ответ написан
    Комментировать
  • Как в XMLSpy конвертировать в строку .NET объект?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Может попробовать toString(), который в самом js?
    Ответ написан
  • Чем отличаются свойства класса определенные в конструкторе от свойств вне конструктора JS?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    В первом случае - ты объявляешь поле. Т.е. говоришь, что у класса есть такое поле
    Во втором случае - это поле инициализируешь значением. Т.е. присваиваешь какое-то значение, до этого момент там null
    Ответ написан
  • Что можно разработать на C++ кроме нативных GUI-приложений и серверной части веб-приложений?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Изучать новый ЯП стоит для расширения своего кругозора. В твоем случае - надо понять фичи C++, которых нет в C#/TypeScript.
    В данном случае, это:
    - управление памятью (new/delete)
    - RAII
    - move семантика, l-/r- value ссылки
    - Шаблоны, SFINAE
    - Системные вызовы и простая кроссплатформенность (C# предалагает свою абстракцию над ОС и тебе об этом думать не нужно)

    Поэтому и проект надо выбирать соответствующий (управление памятью, взаимодействие с ОС напрямую и т.д.).
    В качестве такого, могу предложить варианты:
    - Консольная утилита для изменения метаданных изображения (это больше про управление памятью, т.к. целое изображение в памяти надо эффективно хранить)
    - Библиотека для HTTP запросов (это больше про ОС и кросплатформенность)
    - Собственная база данных, можешь хранить все в JSON - главное это работа с диском и фс

    Дополнительно - build-your-own-x
    Ответ написан
    Комментировать
  • Как правильно реализовать Coroutine и метод OnMouseDown, чтобы увеличить кол-во очков за нажатие на объекты в течение определенного времени?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Согласно туториалу, таймеры лучше делать через отдельные объекты, а не методы-корутины.
    Ответ написан
    Комментировать
  • Unity не считывает курсор мыши. Что делать?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Где присвоение значения полю Lookpoint?
    Ответ написан
    Комментировать
  • Какое решение посоветуете для хранения больших архивов (в сумме 20тб)?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Самое простое - S3 хранилище:
    - AWS S3
    - MinIO
    - Яндекс S3

    Также есть вариант с Hadoop - можно файл хранить на множестве серверов с репликацией. Но не знаю есть ли облачный вариант
    Ответ написан
    3 комментария
  • Как подключить статическую библиотеку (.a) в C++?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Для g++ надо добавить флаги:
    - -LlibraryPath - путь до директории с библиотеками, где libraryPath - это путь
    - -llibraryName - название библиотеки, но без префикса lib

    Примерно так:
    {
        "tasks": [
            {
                "type": "cppbuild",
                "label": "C/C++: g++.exe build active file",
                "command": "d:\\Soft\\msys64\\ucrt64\\bin\\g++.exe",
                "args": [
                    "-fdiagnostics-color=always",
                    "-g",
                    "${file}",
                    "-o",
                    "${fileDirname}\\${fileBasenameNoExtension}.exe",
                    "-LD:\\Projects\\console\\Bank System App",
                    "-lpdcurces"
                ],
                "options": {
                    "cwd": "d:\\Soft\\msys64\\ucrt64\\bin"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": "build",
                "detail": "Task generated by Debugger."
            }
        ],
        "version": "2.0.0"
    }

    P.S. на Windows с gcc не собирал, могу ошибаться
    Ответ написан
  • Как записать управляемый объект делегата, в неуправляемую память, или какие есть решения?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Объекты этой структуры будут в неуправляемой памяти, То есть зафиксированы.

    Неуправляемые объекты не подвергаются процессу сбора мусора - они вообще не проверяются.
    Вот и происходит следующее:
    1. Имеется массив объектов неуправляемой памяти
    2. В каждом объекте имеется ссылка на объект управляемой памяти
    3. GC запускается и т.к. неуправляемые объекты не проверяются, то объекты на которые ссылаются неправляемые исчезают, т.к. ссылок на них, возможно, больше не осталось.

    Попробуй:
    - Вызвать GC.KeepAlive на ссылках управляемой памяти (кол-беках)
    var funces = new Fun[];
    // Код
    GC.KeepAlive(funces);

    - Либо сохраняй массив объектов управляемой памяти вместе с целевым массивом, чтобы переменная с этим массивом хранилась в этом же методе и на нем вызови GC.KeepAlive (иначе область видимости ограничивается методом, в котором они создались). Примерно так:
    var (arr, managedObjects) = Create(funces);
    // Код
    GC.KeepAlive(managedObjects);

    - Либо, попробуй перед началом работы метода запрещать сборку мусора - GC.TryStartNoGCRegion/GC.EndNoGCRegion

    Самое что непонятное. хоть вопрос на что где когда отправляй, почему то ломается то нет.

    Во-первых, работа GC не детерминирована - он может запуститься в любой момент.
    Во-вторых, DEBUG или RELEASE режимы компиляции добавляют различные оптимизации и т.д. в процесс работы.
    В-третьих, при подключенном дебагере все локальные переменные не будут собраны GC, т.к. на них неявно появляются указатели.
    Ответ написан