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

    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 Куратор тега Windows
    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);
    }
    Ответ написан
    Комментировать
  • Как вывести простые числа с помощью JavaScript?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    console.log("2, 3, 5, 7, 11")

    UPD:
    function GetNumbers(n){ 
        var nums = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199];
        return nums.slice(0, Math.max( 0, Math.min(n, nums.length) ) ).join(', ');
    }

    Использование:
    console.log( GetNumbers(5) );
    Результат:
    2, 3, 5, 7, 11

    Вот тут можно взять еще простых чисел: denisx.ru/tech/prime-number/prime-numbers-list
    Ответ написан
  • Программирование или что-нибудь другое?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Надо просто попробовать и посмотреть. На самом деле рутины как таковой мало, т.к. рутина обычно автоматизируется. Главная сложность - требуется постоянно изучать что-то новое, читать новые мануалы, решать новые проблемы и задачи. Надо бежать, чтобы хотя бы оставаться на месте - очень точно описывает не только программирование и IT, но и вообще все динамично развивающиеся области.
    Ответ написан
    6 комментариев
  • Как передать выполнение программы на сервер?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Достаточно технологии обмена файлами:
    1) Скопировать программу на мощный ПК
    2) Запустить её
    3) Забрать результат
    Ответ написан
    2 комментария
  • Правильная ли последовательность разработки проекта?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    1. Создание технического задания - какие фичи есть и как они работают.
    2. Создание частного технического задания - подробное описание каждой фичи, особенности, поведения и прочего (кнопки, меню, апи вызовы и прочее).
    3. Разработка архитектуры проекта под требования и ограничения ТЗ.
    4. Проработка архитектуры на более низком уровне - модули, подсистемы и прочее.
    5. Проектирование пользовательского интерфейса и его дизайн прочее.
    А далее уже более детальная разработка частей/модулей проекта и написание кода - независимые части/модули можно делать параллельно. От проекта к проекту детали могут меняться - но в целом логика примерно такая.
    Ответ написан
    Комментировать
  • Где хранят вызовы функций нормальные люди?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Обычно делается так:
    1. Разработка схемы архитектуры приложения;
    2. Декомпозиция архитектуры до атомарных операций;
    3. Некоторое количество итераций доработки архитектуры;
    4. Разбивка системы на системы/подсистемы/модули/подмодули и другие уровни - и вот тут как раз образуются классы, каждый из которых включает в себя какой-то определенный набор функций/процедур из файла или каталога(модуля).
    Ответ написан
    Комментировать
  • Как написать сервер клиент на C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    1. Спроектировать архитектуру системы и каждого приложения в отдельности;
    2. Сделать декомпозицию архитектуры;
    3. Спроектировать протокол обмена данными или взять готовый в виде библиотеки;
    4. Реализовать все.


    Сервер работает следующим образом (примерно, детали зависят от особенностей архитектуры и прочее):
    1. Слушает определенный порт и ждет подключения к порту;
    2. После подключения клиента к порту передает соединение в очередь к пулу процессов-воркеров (по числу процессорных ядер);
    3. Воркер обрабатыват соединение, проводит необходимые проверки, логин клиента и т.п.;
    4. После обработки соединение попадает в список подключенных процессов и обрабатывается ядром сервера.


    Клиент работает примерно так:
    1. Ищет сервер;
    2. Подключается к порту;
    3. Проходит аутентификацию и авторизацию;
    4. Ожидает данные от сервера / передает данные серверу.
    Ответ написан
    Комментировать
  • В каком порядке изучать математические дисциплины?

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Как вариант можно сделать просто опрос на каком-нибудь популярном ресурсе (да вот хоть на хабре), который даст некоторое приближение. И именно некоторое, т.к. зачастую, многие программисты знают HTML, JS и CSS и легко могут сверстать что-то, а еще есть фулл-стек программисты.
    Ответ написан
    Комментировать