Задать вопрос
  • Целесообразно ли перенести Docker и /home на новый nvme?

    @Drno
    Переставить всю систему в 1 раздел - / и не париться.
    сделать рейд
    настроить бэкапы
    Ответ написан
    2 комментария
  • Есть какие-нибудь ресурсы по построению правильной серверной архитектуры на node.js/io.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Архитектурные принципы не очень связаны именно с нодой, они будут примерно одинаковыми, на каком бы языке вы не писали. Первое, что я могу посоветовать, когда Вы переходите от технологий программирования к архитектуре систем, это как переход от кладки кирпича к архитектуре зданий - нужно отложить все шаблоны, которые Вы знали до того и подняться на другой уровень абстракции. А именно, нужно перестать мыслить такими понятиями, как DI (dependency injection), REST, MVC, ORM, RPC, шаблонизаторы, компоненты, сокеты, промисы и прочее - это все технологии. Что же нужно понять это: слои (layers), модули, контракты, адаптеры, клиент-сервер, 3-звенная архитектура, микросервисы, СМО (системы массового обслуживания), и т.д. Где так все собрано в одном месте - не могу сказать, я лично по крупицам все осваивал, на что положил 20 лет профессиональной деятельности. Почитайте про ISO/OSI, загляните в три мои статьи habrahabr.ru/post/227753 и habrahabr.ru/post/204958 и habrahabr.ru/post/117791 Раньше хорошие статьи по архитектуре были на www.osp.ru но, к сожалению, давно не читал его. Можно начать с книг Гради Буча и освоения UML, этот дядька сформировал достаточно полный подход и методологию проектирования программных систем, которая ведет правильным путем, но на практике, в каждом отдельном случае может быть заменена интуицией архитектора и существенно упрощена. Удачи!
    Ответ написан
    6 комментариев
  • Как узнать, входит ли игрок1 (x,y,z) в поле игрок2 (x,y,z)?

    @WitFed
    Программист
    Это что-то из олимпиадного ? Разовые сдвиги между "кадрами" не очень большие ? Резко прыгать никто не будет между соседними моментами времени ?
    Как видно из рисунка, зелёным помечены круги игроков, расстояние между которыми до 2R, где R -- радиус взаимодействия, одинаковый для всех.
    Расстояния будут попарно считаться как суммы квадратов разностей dx*dx + dy*dy.
    Можно для начала рассматривать для каждого игрока только товарищей, у которых дельты по осям обе не больше 4хR.
    Их тогда в среднем будет сильно меньше 1000.
    Были на 4хR, за "секунду" сблизились каждый на R, и уже "на связи" ! ;)
    Хранить и пересчитывать ближайших с надо запасом, чтобы при небольших сдвигах одного не сравнивать его расстояния со всеми остальными, а только если он сдвинется на R и более.
    Надо иметь массив А[1000,999] с парами {№ соседа, расстояние}, максимальным (вдруг они таки "столпятся" и захотят "пообщаться", и тогда пойдут тормоза, выбрать ближайших будет сильно дольше).
    Ещё массив Л[1000] с текущим количеством "соседей" для каждого А[i].
    И, конечно, позиции Х/У для всех О[1000], где был последний полный пересчёт А[i].
    В первый раз пересчитать все расстояния, каждому в А[i] писать только "недалёких", до 16хRхR.
    Потом -- сортировка всего А[i], и первые ближайшие до 4хRхR окажутся достойными для общения.
    После каждого сдвига игрока И[i] его список пересчитывается целиком, если дельта с О[i] больше RхR (и О[i] обновляется).
    В обратном случае -- просто пересчёт дистанций/сортировка внутри прежнего списка А[i] на длину Л[i].
    Новый список с дистанциями до 4хRхR надо сравнить со старым, и если кто-то там новый появился, то его пометить для перестройки позже.
    И кто "пропал с дистанции" -- тоже требует перестройки.
    Полной или не очень, просто добавить/удалить себя к нему -- надо ещё додумать.
    Инкрементальные действия между "степами" будут пропорциональны количеству немного шевельнувшихся между "степами" игроков И[i], и в основном на длину списков их "соседей", этого достаточно ?
    Ответ написан
    Комментировать