• Реализация маневрирования юнитов в играх (избегание столкновений)

      Задача движения юнитов в играх является одной из ключевых задач, стоящих перед разработчиками игр. От того, как двигаются игровые юниты, во многом зависит восприятие всего геймплея в целом.

      Традиционно считается, что достаточно реализовать алгоритм поиска пути и дальше всё будет работать само собой.

      На практике же мы имеем совсем другую ситуацию.

      Алгоритмы поиска пути разобраны досконально.

      Нужен поиск пути с весами? A*. Нужен поиск для большого количества юнитов? Flow Field или кластеризация.

      По большому счету по поиску пути не осталось не разобранных вопросов.

      И вот, поиск пути реализован и довольный игродел запускает свою игру… И видит, что болванчики полностью оправдывают своё название. Они конечно находят путь и едут туда, куда им сказали. Но при этом спотыкаются о препятствия… Толкаются друг с другом или проезжают насквозь… Упираются друг в друга при встречном движении…

      Эти проблемы и будем сегодня решать.



      Disclaimer
      Данная статья не претендует на исчерпывающее решение обозначенной проблемы.
      Я лишь рассказываю о том, как конкретно мне видится решение, над которым я работал. Это решение в оттюнингованном виде попало в один из зарелизенных в этом году РТС проектов, но осталось ли там на данный момент я не знаю. Комментарии и дополнения приветствуются.
      Читать дальше →
    • Когда будет термояд: 500-мегаваттный проект ITER глазами участника

        Если объяснять на пальцах, термоядерный реактор — это когда в магнитном поле удерживают плазму с температурой в 150 раз выше, чем на Солнце, а в трех метрах от нее находится охлаждающий контур гигантских катушек с температурой почти абсолютный ноль по Кельвину. По факту получаем самую горячую и самую холодную точки в галактике под одним колпаком. В реакторе два изотопа водорода «сплавляются» в гелий, высвобождая нейтрон, обладающий огромной энергией. По сути, это Солнце на Земле.


        ITER — международный проект по созданию опытного реактора мощностью 500 МВт, который официально перешел из стадии строительства на стадию сборки.

        Виталий Красильников — наш рассказчик, работает на проекте уже семь лет.
        Читать дальше →
      • Золотое кольцо скучнейших экскурсий: как это пытаются исправить

          Привет! Мы сейчас всерьёз упарываемся по развитию внутреннего туризма. Обычно я пишу про эту часть работы не на Хабр, но на днях появился один крутой пример, по которому можно отследить интересное продуктовое мышление и UX-подход. В реальном мире. В общем, компания внезапно поняла, что мир изменился, старые подходы не работают, и вообще-то вокруг есть много крутых технологий. Меня позвали как эксперта всё это оценивать и тестировать раннюю альфу турпродукта, и я просто хочу показать, как рациональное мышление может повлиять на туризм.

          Итак, у нас есть экскурсии по Золотому кольцу России. Для пенсионеров это желанное приключение, для молодёжи — особый подвид предельно скучного и бессмысленного занятия. «20 храмов за 3 дня», «Самые нудные экскурсоводы, сыпящие датами», «Очереди в банальных местах вроде заселения в отель» — это из отзывов. Думаю, вы и сами можете себе всё это представить.


          Вот так должно выглядеть заселение в отель: без людей и анкет, чёрт побери!

          Первый вопрос к любой деятельности — это зачем она делается. Обычно после грамотных ответов процентов 20 проектов в компании можно закрывать, потому что они плюс-минус бессмысленны. Второй вопрос — как всё декомпозировать и переделать каждый кусочек в соответствии с целью.

          В примере подошли немного иначе: переписали всё, что бесит, и просто начали думать, как это убрать. Подход, очень знакомый мне по рознице — это способ резко поднять уровень сервиса до небывалых высот. Давайте пройдёмся по тому, что конкретно сделали в этом примере.
          Читать дальше →
        • Музыка для ваших проектов: 12 тематических ресурсов с треками по лицензии Creative Commons

            Подборка пригодится разработчикам, дизайнерам, видеорежиссерам и контент-мейкерам, которые ищут музыку для своих проектов — приложений, игр или видеороликов.

            Представленные ниже площадки предлагают скачать полноценные композиции. О ресурсах, на которых можно найти отдельные звуки и семплы, мы расскажем в следующий раз.

            Читать дальше →
            • +55
            • 48.6k
            • 9
          • Лабиринты: классификация, генерирование, поиск решений

            • Translation

            В этом классическом посте подробно рассказывается о самых популярных способах создания и прохождения лабиринтов. Статья разделена на четыре части: классификация, алгоритмы генерации, алгоритмы решения лабиринтов и другие операции с лабиринтами.

            Классификация лабиринтов


            Лабиринты в целом (а значит, и алгоритмы для их создания) можно разбить по семи различным классификациям: размерности, гиперразмерности, топологии, тесселяции, маршрутизации, текстуре и приоритету. Лабиринт может использовать по одному элементу из каждого класса в любом сочетании.
            Читать дальше →
          • Трехмерный движок на формулах Excel для чайников

            • Tutorial


            В этой статье я расскажу, как мне удалось портировать алгоритм рендера трехмерных сцен на формулы Excel (без макросов).

            Для тех, кто не знаком с компьютерной графикой, я постарался как можно проще и подробнее описать все шаги. В принципе, для понимания формул должно быть достаточно знания школьного курса математики (+умение умножать трехмерную матрицу на вектор).

            Также я сделал небольшое веб-приложение, где можно потренироваться в создании формул для произвольных фигур и сгенерировать свой файл Excel.

            Осторожно: 19 картинок и 3 анимации под катом.
            Читать дальше →
          • Ещё один способ определения качества воздуха на Arduino — с передачей данных в сеть

            Меня зовут Евгений, и я — веб разработчик. Уже есть десятки постов о различных метеостанциях на ардуино, но мне хотелось написать о том, что в 2016 году можно быстро, легко и без знания электротехники собрать полезный датчик, претендующий на IoT, который легко может работать с вашей инфраструктурой, написанной на чём угодно.
            Да, я хочу в 2016 год
          • Производительность PHP: планируем, профилируем, оптимизируем



              Привет, Хабр! Два года назад мы писали о том, как перешли на PHP 7.0 и сэкономили миллион долларов. На нашем профиле нагрузки новая версия оказалась в два раза более эффективной по использованию CPU: ту нагрузку, которую раньше у нас обслуживали ~600 серверов, после перехода начали обслуживать ~300. В результате на протяжении двух лет у нас был запас мощностей.

              Но Badoo растёт. Количество активных пользователей постоянно увеличивается. Мы совершенствуемся и развиваем нашу функциональность, благодаря чему пользователи проводят в приложении всё больше времени. А это, в свою очередь, отражается на количестве запросов, которое за два года увеличилось в 2—2,5 раза.

              Мы оказались в ситуации, когда двукратный выигрыш в производительности нивелировался более чем двукратным ростом запросов, и мы опять стали приближаться к пределам нашего кластера. В ядре PHP снова ожидаются полезные оптимизации (JIT, предзагрузка), но они запланированы только на PHP 7.4, а эта версия выйдет не раньше, чем через год. Поэтому трюк с переходом сейчас повторить не удастся — нужно оптимизировать сам код приложения.

              Под катом я расскажу, как мы подходим к таким задачам, какими пользуемся инструментами, и приведу примеры оптимизаций, идей и подходов, которые мы применяем и которые помогли нам в своё время.
              Читать дальше →
            • Трагикомедия в NaN актах: как мы cделали игру на JS и выпустили ее в Steam

                “Эка невидаль”, — скажете вы, — “В топ-100 вашей игры нет, так что нещитово”. Тоже правда. Зато за год разработки Protolife мы поднакопили какой-никакой опыт, которым можем поделиться с потенциальными будущими игроделами. Ветераны индустрии, боюсь, ничего интересного для себя не найдут. Но, может быть, хоть повеселитесь от души.


                Что за игра-то? И кто “мы”?


                Мы — это команда из трех человек (GRaAL, A333, icxon), волею судеб названная Volcanic Giraffe без какого либо умысла. Работали долгое время вместе, несколько раз втроем участвовали в Ludum Dare (соревнования по написанию игр за выходные), и однажды решившие довести до релиза одну из наших поделок под названием Protolife.

                Если коротко: это необычная tower defense, где надо бегать героем-курсором и выстраивать оборону из блоков против постоянно растущей красной биомассы.
                Остальное под катом - осторожно, тяжелые пиксельартные картинки
              • Статический анализ PHP-кода на примере PHPStan, Phan и Psalm



                  Компания Badoo существует уже более 12 лет. У нас очень много PHP-кода (миллионы строк) и наверняка даже сохранились строки, написанные 12 лет назад. У нас есть код, написанный ещё во времена PHP 4 и PHP 5. Мы выкладываем код два раза в день, и каждая выкладка содержит примерно 10—20 задач. Помимо этого, программисты могут выкладывать срочные патчи — небольшие изменения. И в день таких патчей у нас набирается пара десятков. В общем, наш код меняется очень активно.

                  Мы постоянно ищем возможности как для ускорения разработки, так и для повышения качества кода. И вот однажды мы решили внедрить статический анализ кода. Что из этого получилось, читайте под катом.
                  Читать дальше →
                • Текстовый редактор — это вам не высшая математика, тут думать надо

                    Современные текстовые редакторы умеют не только бибикать и не давать выйти из программы. Оказывается, внутри них кипит очень сложный метаболизм. Хотите узнать, какие ухищрения предпринимаются для быстрого пересчета координат, как к тексту приделываются стили, фолдинги и софтврапы и как это всё обновляется, при чем тут функциональные структуры данных и очереди с приоритетами, а также как обманывать пользователя — добро пожаловать под кат!



                    В основе статьи — доклад Алексея Кудрявцева с Joker 2017. Алексей уже лет 10 пишет Intellij IDEA в JetBrains. Под катом вы найдете видео и текстовую расшифровку доклада.
                    Читать дальше →
                  • PostgreSQL: как и почему пухнет WAL

                      Чтобы сделать мониторинг полезным, нам приходится прорабатывать разные сценарии вероятных проблем и проектировать дашборды и триггеры таким образом, чтобы по ним сразу была понятна причина инцидента.


                      В некоторых случаях мы хорошо понимаем, как работает тот или иной компонент инфраструктуры, и тогда заранее известно какие метрики будут полезны. А иногда мы снимаем практически все возможные метрики с максимальной детализацией и потом смотрим, как на них видны те или иные проблемы.


                      Сегодня будем смотреть как и почему может распухать Write-Ahead Log (WAL) постгреса. Как обычно — примеры из реальной жизни в картинках.

                      Читать дальше →
                      • +42
                      • 12.2k
                      • 4
                    • Как подготовиться к собеседованию в Google и не пройти его. Дважды



                        Заголовок статьи звучит как epic fail, но на самом деле все не так однозначно. Да и в общем и целом эта история закончилась весьма позитивно, хоть и не в Google. Но это уже тема для другой статьи. В этой же статье я расскажу о трех вещах: каким образом проходил мой процесс подготовки, каким образом проходили интервью в Google и почему же на мой взгляд все не так однозначно, как может показаться.
                        Кому интересно, прошу под кат.
                      • fx — алтернатива jq для обработки JSON из командной строки


                          jq — самая популярная утилита для обработки JSON из командной строки, написана на C и имеет свой собственный синтаксис для работы с JSON.


                          Однако, обрабатывать JSON в командной строке не нужно очень часто, а когда потребность возникает, приходится мучиться с незнакомым языком программирования.


                          Так и появилась идея написать fx с простым и понятным синтаксисом, который никогда не забудешь. А какой язык программирования знают все? Правильно — JavaScript.

                          Читать дальше →
                        • Зарплаты ИТ-специалистов на конец 2017 года: отчёт сервиса зарплат «Моего круга»



                            Представляем первый отчет сервиса зарплат «Моего круга». Мы запустили сервис в конце ноября 2017 с целью регулярного мониторинга зарплат в ИТ-индустрии. Зарплаты оставляют сами специалисты, мы их собираем и предоставляем в агрегированной и анонимной форме всем в открытый доступ.

                            В течение декабря мы собрали порядка 7500 зарплат, и сегодня можем показать, как выглядели зарплаты на конец 2017 года. Пройдём по всем основным ИТ-специальностям и более глубоко разберём зарплаты разработчиков программного обеспечения. Посмотрим, как различаются зарплаты в этой сфере деятельности по городам, квалификациям и языкам программирования. В заключение, покажем зарплаты десяти компаний, по которым пользователи оставили достаточно данных.

                            Будет много диаграмм, все они подготовлены с помощью сервиса plot.ly. В публикации диаграммы будут картинками, при желании можно посмотреть на них в интерактивном режиме. Более детальную информацию по зарплатам любой желающий может получить непосредственно на сервисе зарплат «Моего круга», поигравшись с его фильтром.
                            Читать дальше →
                          • Превращаем докладчиков в спикеров #2: разбор выступления Артема Данилова, Авито

                              Мы начинаем профессиональный «разбор полетов» выступлений с HighLoad++, который поможет многим будущим и нынешним спикерам поучиться на чужих примерах. В прошлой публикации я рассказывал о том, что именно я буду делать и зачем все это нужно. Завершать каждый материал будет небольшой рассказ о важности какого-то определенного параметра в выступлении.



                              Первым под прицел попал Артем Данилов из Авито и его доклад про хранилище данных. В конце же вас ждет экскурс про дикцию.
                              Итак, поехали
                            • Переходим с Disqus на комментарии Github

                              • Translation
                              Какое-то время я хотел убрать комментарии из своего блога; в основном, потому что здесь вообще мало комментариев, да и не хочется возиться с лишними «тормозами» от Disqus. Посмотрев на время загрузки Disqus, я был потрясён тем, что приходится терпеть посетителям сайта по моей вине (кроме тех, кто использует блокировщики вроде Privacy Badger и uBlock Origin.

                              Эта статья заточена под Hugo, но код легко адаптируется для любого сайта.

                              Что не так с Disqus?


                              Вот как выглядит типичный журнал запросов с включенным Disqus.


                              А вот лог после отключения Disqus.


                              ЧЕГО!?
                              Читать дальше →
                            • Свайная суперсила

                                Более 600 тысяч тонн на площади фундамента в 5700 квадратных метров… Вряд ли вы найдете в мире аналоги параметров петербургского «Лахта центра». Держать супертолл и супертяж помогают сваи. Непростые. Они не опираются, они – висят.

                                image

                                Стало не по себе? Не спешите обходить участок строительства по радиусу в 500 метров. Разберемся, как можно получить надёжную опору от того, что находится в «висячем» положении.
                                Читать дальше →
                              • Справочник по антеннам для радаров

                                • Translation
                                Статья на перевод предложена alessandro893. Материал взят с обширного справочного сайта, описывающего, в частности, принципы работы и устройство радаров.

                                Антенна – это электрическое устройство, преобразующее электроэнергию в радиоволны и наоборот. Антенна используется не только в радарах, но и в глушилках, системах предупреждения об облучении и в системах коммуникаций. При передаче антенна концентрирует энергию передатчика радара и формирует луч, направляемый в нужную сторону. При приёме антенна собирает возвращающуюся энергию радара, содержащуюся в отражённых сигналах, и передаёт их на приёмник. Антенны часто различаются по форме луча и эффективности.

                                image
                                Слева – изотропная антенна, справа – направленная

                                Дипольная антенна





                                over9000 картинок
                              • htop и многое другое на пальцах

                                • Translation


                                На протяжении долгого времени я не до конца понимал htop. Я думал, что средняя загрузка [load average] в 1.0 означает, что процессор загружен на 50%, но это не совсем так. Да и потом, почему именно 1.0?

                                Затем я решил во всём разобраться и написать об этом. Говорят, что лучший способ научиться новому — попытаться это объяснить.
                                Читать дальше →