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

    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 и легко могут сверстать что-то, а еще есть фулл-стек программисты.
    Ответ написан
    Комментировать
  • Что изучать для написания своего кроссплатформенного приложения?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Основные принципы программирования не зависят от платформы или ЯП. Изучать надо то, что нравится. Кроссплатформенных ЯП хватает. Например C# - для него есть Xamarin.
    Ответ написан
    5 комментариев
  • Как развивать свои навыки ,когда нет рабочих проектов?

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

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

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никого не слушайте и идите туда, к чему ближе сердце, разум и душа располагают — собственное счастье намного важнее. Тем более, что современный мир IT развивается настолько стремительно, что внезапную популярность и актуальность может набрать практически все что угодно.
    А сменить поле деятельности можно успеть в любой момент — было бы желание учиться чем-то новому.
    Ответ написан
  • Веб-сервер своими руками

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Вот пара линков полезных: citforum.ru/programming/unix/sockets/ и allasm.ru/set_12.php
    В целом логика под виндой и никсами одинаковая. Самое «сложное» в веб сервере — работа с сокетами. Работает примерно так:
    1. Инициализируем сокеты;
    2. Создаем (socket) — ОС выдаст нам новый сокет;
    3. Настраиваем сокет (setsockopt);
    4. Ассоциируем (bind) этот сокет с айпи и портом;
    5. Начинаем «слушать»(listen) сокет — вообще, слушает ОС, а мы только обрабатываем данные;
    6. В цикле принимаем (accept) соединения — accept возвращает управление и новый сокет как только появится запрос на указанные ранее порт и айпи (иначе INVALID_SOCKET вернет);
    7. Начинаем асинхронный(для проверки/тестов все можно и в одном потоке делать) прием данных (recv) из полученного сокета;
    8. Обрабатываем принятые данные.
    9. Отправляем ответ (send);
    10. После окончания приема закрываем сокет;
    11. Возвращаемся в начало цикла — пункт 6.
    Само собой при асинхронной обработке цикл будет только получать новые сокеты и отдавать их «воркерам» — рабочим потокам.
    В скобках — вызовы апи сокетов, под линуксом почти все то же самое.
    Под виндой все сокеты в Ws2_32.dll.
    Если что непонятно — отвечу в меру своих знаний 8)
    Ответ написан
    1 комментарий