Задать вопрос
  • Может кто объяснить, что происходит при кликании ярлыка программы на физическом уровне?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Мышь посылает команды «Я нажата» и «Я отпущена». Считаем, что мышь USB’шная — тогда диспетчер шины 125 раз в секунду даёт мыши таймслот, и она за это время посылает 8-байтовый пакет, и в нём есть поля «сдвиг по X, сдвиг по Y, нажатые кнопки». Сама ОС ведёт счёт координатам курсора мыши. Отображение курсора мыши — это отдельная функция графического драйвера (из-за требовательности к скорости).
    2. ОС из этих команд генерирует событие «Двойной щелчок по координатам (X, Y)» и посылает текущей программе (в данном случае — оболочке Windows, explorer.exe, он же Проводник).
    3. Рабочий стол — это сильно модифицированный ListView из comctl32.dll (если я правильно назвал эту библиотеку). Впрочем, событие «двойной щелчок» обрабатывается самим Проводником, и если какой-то элемент выделен, он говорит: запусти файл, библиотека shell32.dll, функция ShellExecute с глаголом «open».
    4. Библиотека оболочки shell32.dll имеет специальную ветвь кода для запуска ярлыков. Она разбирает файл ярлыка и вызывает более низкоуровневую функцию CreateProcess.
    5. Ядро Windows делает всё, что нужно, чтобы создать процесс, завести под него отдельное «пользовательское» адресное пространство, отдельный стек вызовов, потоки ввода-вывода и т.д. Сам EXE-файл и его библиотеки становятся частью системы подкачки Windows, и если какая-то страничка сегмента кода будет выброшена, она подгружается прямо из EXE/DLL. Разрешает динамические адреса, которые становятся известны только при загрузке программы (т.н. relocations). Процесс загрузки программы — дело сложное, с ним я незнаком.
    6. Считаем, что программа GUI’шная. Тогда при загрузке, как ни странно, ничего внешне не происходит (только трещит винт, подкачивая данные в оперативную память). Сама программа говорит WinAPI: мне нужно создать такое-то окно, с такими-то кнопками в заголовке, с отображением на панели задач.
    7. Система сама посылает окну события: «Я изменяю свой размер», «Я показываюсь», «Я перерисовываюсь». Программа может перехватить эти события и сделать по ним что-то своё. Если у окна есть неклиентская часть (заголовок, рамка), показывает их сама Windows.
    8. За перерисовку клиентской части окна (то есть того, что внутри рамки) отвечает одна из нескольких подсистем Windows. Наиболее распространённая — GDI (интерфейс графических устройств), хотя всё чаще используют библиотеки аппаратного ускорения — DirectX/OpenGL/Vulkan.
    9. Как только сработали события перерисовки — внутренние Windows и пользовательские — мы видим на экране окошко!
    Ответ написан
    2 комментария
  • Нормальный ли этот HDD?

    SagePtr
    @SagePtr
    Еда - это святое
    Ну так если одновременно и проверять диск поблочно на скорость доступа (линейно), и копировать туда файлы - то в любом случае скорость проверки будет значительно падать, ибо считывающая головка будет прыгать туда-сюда между проверяемой дорожкой и записываемой. А перемещение головки - довольно медленная операция.
    Ответ написан
    Комментировать
  • Как выбрать данные за каждый час из базы SQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT SUM(`sum`), COUNT(*)
      FROM `table`
      GROUP BY `name`, HOUR(`datetime`)
    Ответ написан
    Комментировать
  • Как добавить в БД огромный массив?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Одним инсертом скорее всего вставить не получится, как на стороне мускуля есть ограничения по буферу запроса так и со стороны пхп есть ограничения по таймауту, длинне передаваемого запроса и проч( много настроек короче.) Как написал Eugene Mosyukov есть 3 варианта, но если вам необходимо использовать только код - разбивайте на инсерты по 100 строк в цикле, это 100 запросов у вас выйдет, должно быстро вставиться, можно до 200-300 строк за раз попробовать, если есть возможность этот массив получать всегда то экспериментом только вывести количество можно.

    Макс Васильев:
    Я слышал, что множественные запросы в цикле не приветствуются.
    да, это плохая практика, но она относится к задачам типа "в цикле делаем вычисления, и тут же в цикле делаем запрос". Создаются куча запросов к базе на пустом месте, там где можно сформировать 1 запрос и после цикла отправить все сразу 1 запросом. У вас другая ситуация - данных много, больше чем за раз обрабатывает буфер бд, цикл здесь для преодоления оверхеда по размеру, тут он будет в тему, ибо все равно не отправляет по 1 строке, а формирует большие запросы с разовым исполнением
    Ответ написан
    3 комментария
  • Существует ли Zabbix-агент на Javascript?

    @Ethril
    Заббикс же спокон веку умеет веб-мониторинг по довольно сложным сценариям (с аутентификацией, переходом по страницам, поиском шаблонов на странице...), прямо с сервера, ничего не надо ставить дополнительно.
    Ответ написан
    2 комментария
  • Почему архив tar хранит одинаковые файлы с разным временем создания?

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

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вообще-то во многих точках доступа есть опция "Clients isolation" (Wireless isolation, AP isolation и прочие названия). Собственно эта опция изолирует трафик клиентов wifi-сети между собой внутри точки доступа. - https://www.howtogeek.com/179089/lock-down-your-wi...
    Теперь нам останется только изолировать сами точки доступа друг от друга. Для этого можно делать VLAN-ы на каждую точку.
    Ну а в центр поставить коммутатор(ы) L3, чтобы он(и) разруливали маршрутизацию между этими виланами.
    В центр ставим бооольшой (лучше парочку с failover) DHCP сервер, а на коммутаторах настраиваем DHCP-proxy на нужные vlan.
    Да, чтобы не заниматься возьней с маршрутами, я бы еще поднял OSPF.

    Ах, ну да, в DLINK есть функции Assymmetric VLANS и Traffic Segmentation. Наверное и у других производителей есть подобное.
    Ответ написан
    Комментировать
  • Как заработать на blade сервере (или по крайней мере не уходить в минус)?

    athacker
    @athacker
    Монетизировать -- вряд ли удастся. Сам по себе блейд -- это ни о чём. Для продажи чего-то на этих мощностях нужна будет обвязка -- сети, коммутаторы и пр.

    Для пользы человечеству -- поставьте где-нибудь в чулане-подвале, и подключите все лезвия в BOINC, на любой из понравившихся проектов. Либо отдайте в доступ команде FreeBSD под сборку/автотесты.
    Ответ написан
    1 комментарий
  • Как поставить Linux на Вирт. машину на маке?

    0xcffaedfe
    @0xcffaedfe
    Developer & Reverser
    обучиться серверному администрированию на Linux

    Лучше начать с обучающего видео на тему "как пользоваться гуглом".
    Ответ написан
    2 комментария
  • Как удалить файлы в папках linux?

    BuriK666
    @BuriK666
    Компьютерный псих
    find /var/www/html/images -type f -size 0 -delete
    Ответ написан
    Комментировать