Ответы пользователя по тегу Программирование
  • Как практиковаться в программировании?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Решать реальные задачи. Написание кода - это всего лишь небольшая часть в разработке ПО. Язык программирования - это инструмент. Рекомендую присмотреться к готовым схемам изучения ЯП. Например: https://roadmap.sh/ А так же пробовать не только решать разные задачи, но и разные ЯП и разными способами. Так же имеет смысл присмотреться к играм с мощными редакторами и системами модификации: создать свой квест/карту/игру очень даже неплохо мотивирует делать что-то большее. Ну и, конечно же, учиться, учиться и учиться. Причем еще и учиться учиться. И обязательно учить английский и математику. IT меняется и развивается очень быстро и без навыков и способностей к самостоятельному обучению тут очень быстро можно оказаться за бортом и уйти на дно как топор.
    Ответ написан
    Комментировать
  • Как игра понимает, что используется не физическая клавиатура?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Проблема с эмуляцией ввода в играх в том, что в винде существует несколько разных АПИ и методов получения пользовательского ввода - возраст ОС, легаси, обратная совместимость и все такое прочее. И каждый разработчик использует то, что нравится/нашел/встроенное в движок/попалось под руку, а некоторые специально усложняют возможности программной эмуляции для блокировки ботов. Поэтому надо пробовать несколько вариантов, а если не работает - то остается либо свой драйвер в ядре ОС либо эмуляция с внешнего устройства.
    Ответ написан
    Комментировать
  • Как сделать из локального чата публичный?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Вам следует описать конкретно, что именно у вас не получается. В целом ваша задача состоит из следующих подзадач:
    1. Арендовать сервер
    2. Арендовать домен
    3. Подключить сервер к домену
    4. Сделать дополнительные настройки на сервере в соответствии с требованиями вашего приложения
    5. Разместить приложение на сервере
    6. Запустить приложение
    Ответ написан
    8 комментариев
  • Какая есть бесплатная библиотека на C# для воспроизведения и записи аудио на Linux+Windows?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Дык VLC же есть, прям первая ссылка в гугле на биндинг: https://github.com/videolan/libvlcsharp
    Да даже если не можете найти конкретно либу или вот VLC биндинг завести, то что мешает тупо в командной строке запускать любой бесплатный плеер для воспроизведения/записи?
    Ответ написан
  • Как проверить запросы, которые пришли в Postman?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Postman manual -> Designing and developing your API -> Mocking an API -> Setting up mock servers:
    https://learning.postman.com/docs/designing-and-de...
    Ответ написан
    Комментировать
  • Почему код не правильно работает?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Просто отформатируйте код в нормальный вид - это не просто так придумали, а для удобства. Кроме того, вам IDE даже точное место ошибки показывает - выделяет красным и подчеркивает. Что именно тут непонятного?
    Ответ написан
  • Как реализовать эту блок схему в код?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Для реализации алгоритма потребуется использовать константы, переменные, операторы ветвления и цикл. Или https://freelance.habr.com/
    Ответ написан
    Комментировать
  • Как погрузиться в начала/фундамент программирования?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Как построенн язык программирования, например: Как понять, как устроенны ключевые слова; Препроцессорные процессы: define, include и др.; - Я правильно понимаю, нужно опустится на ещё более низкий уровень до ассемблера? - Ассемлер является той фундаментальной сущностью в программировании (не считая машинный код, который и так человек не должен понимать)?

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

    Возможно достичь понимания работы программ не физически, а программно. (Я не знаю как это точно сказать.) То есть не как в комп’ютере выполняется программа, а как работает отдельная сущность - программа? - И вообще это возможно, либо я просто многое чего хочу от жизни?

    Любая программа - это просто алгоритм. Так что смотрим что делает программа и спокойно разбираем её алгоритм. А если есть исходный код - то вообще все полностью можно разобрать.

    Ну и вообщем, какие-то фундаментальные знания - на чём базуется/построенна програмированние и IT, тоже не помешало. Например рекомендуют SICP почитать, правильно ли я тогда пойду или это не то. Если да, можете ещё набросать ваши варианты? Буду признателен.

    Фундамент - бинарная логика. Над ней - процессорные инструкции или машинный код. Далее - ассемблер, минимально простая абстракция для составления инструкций для процессора. Следующий этаж - язык программирования высокого уровня, который в своем составе имеет какой-то типовой набор абстракций (переменные, функции, операции с памятью, блоки и разные типы данных), функций и алгоритмов для более человечного описания алгоритмов и для работы с данными. ЯП бывают разные и решают проблему в какой-то определенной области или для какой-то цели. Также существуют предметно/проблемно-ориентированные ЯП (DSL - domain-specific language) - более узкие решения. Дальше - стандартные и дополнительные библиотеки для упрощения работы с определенными данными, алгоритмами и прочее. Выше лежат фреймворки реализующие какой-то определенный каркас/функционал для реализации программ/алгоритмов для решения задач в рамках какой-то специфической области.
    Ответ написан
    4 комментария
  • Как процессор ''понимает'' машинный код?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никак не понимает - у него нет сознания для понимания чего бы-то ни было. Биты сами по себе реализуются на физическом уровне: есть сигнал - есть бит, нет сигнала - ноль. И далее сигнал либо идет дальше либо нет. Есть транзисторы - на базе транзисторов строятся другие логические элементы, которые перенаправляют сигнал дальше в зависимости от состояния. И вот это все вместе позволяет делать вещи такого типа: если вот тут такое-то сочетание битов, то сложить содержимое вот этих двух регистров, если другое - то вычесть и т.д. (примерно, конечно). В процессоре есть декодер команд - вот в нем и реализована вся эта логика по выполнению команд. Рекомендую изучить основы компьютерной схемотехники, устройство процессоров, транзисторов и как оно все работает.
    Ответ написан
  • Как реализовать условные конструкции в языке Форт?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Как мне реализовать оператор ветвления так, чтобы он поддерживал вложенность.

    Стеком, конечно. Для этого, обычно, используется т.н. стек управления или управляющих структур. Он существует только во время компиляции. Точный механизм не помню, но то ли кладем в этот стек код операции то ли адрес точки ветвления для вычисления смещения ветвления то ли все вместе.
    И ещё, не подскажите ли, как разбить код на функции? А то функция eval-forth-program слишком большая и сложная.

    Традиционно форт реализуется с использованием т.н. шитого кода. Так же есть и вариации шитого кода и другие механизмы. В целом логика такая: есть список - это словарь слов. Логика интерпретатора крайне проста:
    1. Получить следующий символ из входного потока
    2. Если ноль или конец строки - выход
    3. Если не разделитель - перейти к следующему символу
    4. Если разделитель - искать слово в словаре
    5. Если слово найдено - выполнить его
    6. Не найдено - сообщить об ошибке

    Далее, организовываем два стека - основной, возврата, переменную STATE (интепретация/компиляция), основной словарь или список словарей, минимальный набор слов для компиляции - двоеточие, точка с запятой и далее по мере надобности все остальное. Главное запустить интерпретатор, от него компилятор, а далее уже можно средствами самого форта реализовать остальной минимальный набор слов, затем учим форт компилировать и собирать самого себя и получаем самодостаточную систему. Рекомендую книги Лео Броуди к прочтению и регистрацию на форт-форуме - там тоже очень много материалов по теме реализации форта )
    Ответ написан
    1 комментарий
  • Как сделать программу которую невозможно закрыть?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Максимум, что можно сделать - при получении сигнала/сообщения об остановке/закрытии окна не останавливать приложение/не закрывать окно. В случае остановки процесса - перезапускать его сторонним приложением. Сам процесс легко убивается таск-менеджером или ОС. За исключением редких некоторых багов на уровне системы (конкретно windows), когда процесс завис наглухо либо что-то в системе и система по каким-то причинам не способна его завершить.
    Ответ написан
    Комментировать
  • Как написать функцию с параметрами от нуля до бесконечности?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Создать бесконечный блок памяти и использовать его в системе/языке программирования для передачи параметров для данной функции.
    Ответ написан
    Комментировать
  • Как программируют телекоммуникационное оборудование?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Вообще-то, это не так работает. Сначала ставится задача типа "Разработать устройство такое-то с такими-то функциями". Далее это все прорабатывается до полноценного ТЗ со всеми подробностями. Далее это ТЗ передается инженерам, которые уже под требования ТЗ подбирают оборудование и ПО. Программисты сразу получают плату разработчика с тем же процессором и на ней уже могут производить отладку ОС и ПО. Инженеры тем временем проектируют плату, электронику, тестируют это все. В большинстве роутеров сегодня работает обычный линукс и на обычном процессоре типа ARM. Большая часть того, что там используется стандартизировано и легко покупается и компонуется в один девайс. ПО там зачастую обычный веб сервер с кучей скриптов для настройки стандартных линуксовых прогамм.
    В более сложных и больших сетевых устройствах, которые работают на магистралях, например, все несколько сложнее — там могут использоваться специальные процессоры и ПЛИС, которые программируются несколько иначе. Так же там может быть вообще полностью своя прошивка или какие-то другие специфические системы.
    Ответ написан
    Комментировать
  • Как назвать папку своих конфигов?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    MyConfigs
    Ответ написан
    Комментировать
  • Как получить контекст запущенной программы?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    А что именно вы понимаете под контекстом? Традиционно контекст запуска приложения — это значения переменных окружения. А то, что какое окно активно — это свойство самого окна и доступно через API операционной системы, какой пункт меню выбран — это тоже особенности окна, если окно и меню реализовано системным API, а если не системным — то эти параметры доступны только изнутри самого приложения, но не снаружи (за исключением графического отображения интерфейса приложения). Рекомендую почитать про устройство операционных систем, как они работают с ресурсами и приложениями.
    Ответ написан
    Комментировать
  • С чего начать создание приложения для майндмэппинга?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Разработка приложения начинается с разработки ТЗ, как впрочем и любая другая разработка. Вот с этого и начните. Разработка ТЗ включает в себя такие вещи как:
    • Требования
    • Ограничения
    • Базовые скелеты интерфейса
    • Сценарии использования
    • Описание внутреннего функционала
    • Описание взаимодействия с внешними системами

    Затем все вот это расширятся в частное ТЗ, где каждый пункт описывается подробно и в деталях, рисуется полноценный дизайн приложения и как оно должно выглядеть. Это называется этап декомпозиции — большая задача разбивается на множество более мелких, а те в свою очередь еще более мелких. Описывается поведение каждого элемента интерфейса и его функционал. Так же описывается взаимодействие со всеми внешними системами и интерфейсы взаимодействия. Например ОС — используемые АПИ, сервисы, файловая система; сетевые сервисы — описание взаимодействия с их API и описание используемых ими данных. Подробно описываются сценарии использования — как пользователь может решить какую-то задачу, используя данное приложение. Разрабатывается структура приложения, его модули и подсистемы, используемые фреймворки и библиотеки. Создаются тесты приложения — отдельных модулей, бизнес-логики, интерфейса, API и прочего. И так далее. Программирование — это лишь одна из составных частей в разработке ПО. И не всегда самая большая.
    Вот после того, как напишете полное ТЗ, можно приступать к планированию разработки. В любом случае, вам необходимо ознакомиться с основами программирования (да-да, те самые большие книжки, но в сети полно более коротких туториалов, в т.ч. онлайн), какие существуют языки программирования, почему/чем отличаются и почему/чем похожи и т.д. А далее уже можно потихоньку брать по одной задачке из вашего ТЗ и поэтапно решать.
    Ответ написан
    2 комментария
  • Как создать программу для вызова процедуры в определенной программе по горячей клавише?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Зависит от особенностей реализации интерфейса программы: если эти кнопки реализованы нативно — по ним можно кликнуть программно через WinAPI; если использовалась какая-то сторонняя библиотека реализации интерфейса, то тут уже сложнее — возможно сработает отправка клика по координатам в окне через отправку сообщения, если не сработает — тогда есть вариант с перемещением курсора и кликом в определенной точке. Оба варианта легко реализуются программами автоматизации — nnCron и прочее.
    Ответ написан
    Комментировать
  • Как начать понимать программирование?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Программирование — всего лишь перевод алгоритмов с абстрактного человеческого языка на такой же абстрактный искусственный язык ЭВМ, но более строгий логически и ограниченный язык. Так что по сути своей программисты — это переводчики с одного языка на другой. Важно уметь четко и однозначно формулировать свои мысли, иметь абстрактное и образное мышление, а так же хорошую память. И конечно иметь огромное желание постоянно учиться и развиваться, изо дня в день, из года в год — по-другому тут никак.
    Для начала рекомендую изучить устройство ЭВМ и принципы, по котором оно все работает. Так же полезно изучить историю появления ЭВМ — чтобы понимать откуда вот это все вокруг взялось и почему оно вообще есть.
    Ответ написан
    1 комментарий
  • Какие технологии используются для разработки такого интерактивного приложения?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Для киосков обычно используется хром в режиме киоска или nwjs. Соответственно для вывода изображений используется HTML + JS. В данном случае вероятно использовали несколько разных библиотек и допилили их — вот галерея в середине вполне стандартный слайдер. Пару реальных примеров с полным списком библиотек можете посмотреть у меня в профиле: раз и два. В первом случае вот есть как раз похожий слайдер - он сделан на чистом CSS3, но у меня там полная анимация перелистывания с вращением и поддержкой GPU ускорения, а в видео просто плоский слайдер. В качестве ОС для киоска лучше всего подходит линукс, но можно и винду использовать (но это дороже). В качестве железа вполне пойдет девайс типа малинки/оранжпи и т.п.
    Ответ написан
  • Для чего нужны переменные флаги?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Используется точно так же и все остальные переменные - для временного или постоянного хранения логического значения, передачи его куда-то еще, или хранения результата вызова какой-то функции/процедуры. Например WinAPI может возвращать логический флаг.

    bool flag = true;
    while(flag){
        flag = doSomeJob();
    }


    Или вот еще реальный пример - паттерн "Dispose" в C#:
    private bool disposedValue = false; // Для определения избыточных вызовов
    
    protected virtual void Dispose(bool disposing)
    {
        if (!disposedValue)
        {
            if (disposing)
            {
                // TODO: освободить управляемое состояние (управляемые объекты).
            }
    
            // TODO: освободить неуправляемые ресурсы (неуправляемые объекты) и переопределить ниже метод завершения.
            // TODO: задать большим полям значение NULL.
    
            disposedValue = true;
        }
    }
    
    // TODO: переопределить метод завершения, только если Dispose(bool disposing) выше включает код для освобождения неуправляемых ресурсов.
    // ~Cloud() {
    //   // Не изменяйте этот код. Разместите код очистки выше, в методе Dispose(bool disposing).
    //   Dispose(false);
    // }
    
    // Этот код добавлен для правильной реализации шаблона высвобождаемого класса.
    public void Dispose()
    {
        // Не изменяйте этот код. Разместите код очистки выше, в методе Dispose(bool disposing).
        Dispose(true);
        // TODO: раскомментировать следующую строку, если метод завершения переопределен выше.
        // GC.SuppressFinalize(this);
    }
    Ответ написан
    Комментировать