• Vertex Wireless VW210: редкий роутер и его внутренний мир

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

    КДПВ курильщика (для тех, у кого дорогой трафик)

    Несколько лет в глухой деревне трудится, не покладая рук, этот неуловимый Джо сетевой промышленности. Выбор пал на него, благодаря поддержке единственно рабочего решения для данной местности, а именно CDMA 450 от местного оператора «Сотел» (аля SkyLink). В отличии от других роутеров/модемов для данного стандарта того времени он единственный позволил добиться устойчивой связи с помощью какой-то матери и направленной антенны. Но вот беда: сайт производителя (а возможно и он сам) исчез с горизонта этих наших интернетов в далёком 2011 году. Осталось лишь пафосное видео на YouTube и упоминания их продуктов у разномастных продавцов и операторов.
    Внимание! Под спойлером много картинок большого размера и с гикпорн содержанием!
  • Некоторые особенности программирования временных событий в играх

      Дóжили. Недавно была обнаружена проблема синхронизации игрового процесса с реальным временем не где-нибудь, а в игре "Quake Champions". Название игры "Quake" раньше было синонимом чего-то крутого, высокотехнологичного и идеального. И в голову не могло придти, что через какую-то пару десятков лет и камня на камне не останется от былого превосходства, а в новой игре с именем "Quake" появятся грубые ошибки, приводящие к тому, что один из игроков может получить преимущество только потому, что у него лучше "железо". Дело в том, что скорость стрельбы в новом шутере зависит от fps, то есть, количество пуль, выпущенных игроками с разным значением fps за один и тот же промежуток времени будет разным, а значит один из них может получить преимущество.


      Данная статья рекомендуется к прочтению всем разработчикам игр, а в особенности разработчикам программ для движущихся механизмов. Да, подобные проблемы были и в коде библиотеки для работы с шаговыми двигателями для Arduino. Но если вы создаете программы для управления полетом ракет, или для атомных реакторов, то, ребята, вам эта статья не поможет. Вам нужны другие уровни синхронности, и специальное железо, работающее под управлением RTOS.

      Читать дальше →
    • Как я создавал карты континентов для своей игры

      • Перевод
      image

      Часть 1. SVG и системы координат


      До недавнего времени размеры карт в моей игре Dragons Abound были фиксированными и несколько недетерминированными. Я считал их «региональными» — не картами всего мира, но его значительными частями, такими например, как западное побережье США или часть Европы. Меня вполне устраивал этот масштаб, но я хотел немного поэкспериментировать с игрой, чтобы посмотреть, смогу ли я генерировать карты целого мира (или хотя бы большего размера). Но прежде чем я приступлю к этому, давайте немного поговорим о картах фэнтези-миров.

      Мир — это большое пространство. Большинство карт фэнтезийных «миров» даже близко не походят на истинный размер. Возьмём, например, Средиземье, в котором происходит действие «Властелина колец»:


      Хоть и кажется, что на ней запечатлён огромный мир, на самом деле Средиземье создано на основе Европы.
      Читать дальше →
      • +53
      • 21,1k
      • 3
    • Laplace Blur — Можно ли блюрить Лапласом вместо Гаусса, во сколько раз это быстрее, и стоит ли того потеря 1/32 точности

        image

        «Блюр» в простонародье — эффект размытия, в цифровой обработке изображений. Бывает очень эффектен и сам по себе, и как составляющее анимаций интерфейса, или более сложных производных эффектов (bloom/focusBlur/motionBlur). При всем этом честный блюр в лоб довольно медленен. И часто реализации встроенные в целевую платформу оставляют желать лучшего. То скорость печальна, то артефакты режут глаза. Ситуация рождает множество компромиссных реализаций, лучше или хуже подходящих для определенных условий. Оригинальная реализация с хорошим качеством достоверности и высочайшей скоростью, при этом нижайшей зависимостью от аппаратной части ждет вас под катом. Приятного аппетита!
        Читать дальше →
      • Бесшовный Wi-Fi-роуминг: теория на практике

          Разбираемся с технологиями роуминга (Handover, Band steering, IEEE 802.11k, r, v) и проводим пару наглядных экспериментов, демонстрирующих их работу на практике.


          Читать дальше →
        • Learn OpenGL. Урок 4.10 — Инстансинг

          • Перевод
          • Tutorial
          OGL3

          Инстансинг


          Представьте, что вы задумали сцену, содержащую огромное количество моделей объектов, причем преимущественно эти модели содержат одинаковые вершинные данные, разнятся только матрицы трансформации, примененные к ним. Например, сцена с травяным полем, где каждая былинка представлена маленькой моделью, составленной буквально из пары треугольников. Конечно же, для достижения нужного эффекта придется отрендерить эту модель не один раз, а тысячу, десять тысяч раз за кадр. Поскольку в каждом листике содержится буквально пара треугольников, то его рендер будет практически мгновенным. Но вот тысячи повторных вызовов функций рендера совокупно очень заметно ударят по производительности.
          Читать дальше →
          • +39
          • 10,5k
          • 4
        • Дейкстра за линейное время

          Приветствую всех и особенно тех кто интересуется задачами дискретной математики и теорией графов.


          Предыстория


          Так уж вышло, что ведомый интересом я занимался разработкой сервиса построения тур. маршрутов. Задача состояла в том, чтобы на основании интересующего пользователя города, категорий заведений и временных рамок спланировать оптимальные маршруты. Ну и одной из подзадач было рассчитывать время в пути от одного заведения до другого. Так как я был юн и глуп я решал эту задачу в лоб, алгоритмом Дейкстры, но справедливости ради стоит заметить, что только с ним можно было запустить итерацию из одного узла до тысяч других, кэшировать эти расстояния было не вариантом, заведений больше 10к только в одной Москве, а решения типа манхэттенского расстояния на наших городах не работает от слова совсем.

          Читать дальше →
        • Конкурс по программированию: Торговля

            UPDATE: Объявления для участников.
            UPDATE 2: Промежуточные результаты и объявления.

            Компания Hola вновь объявляет конкурс по программированию! Победителей ожидают призы:

            1. Первое место: 3000 USD.
            2. Второе место: 2000 USD.
            3. Третье место: 1000 USD.
            4. Жюри может присудить по своему усмотрению специальный приз в 400 USD.
            5. Если Вы отправите кому-то ссылку на этот конкурс, поставив наш адрес в CC, и этот человек займёт призовое место, Вы получите половину суммы приза (разумеется, не в ущерб награде победителя). За одного победителя такую награду может получить только один человек — тот, кто отправил ссылку первым.

            Авторы интересных решений будут приглашены на собеседования.



            Правила


            Условия конкурса на английском языке размещены на GitHub. Ниже — перевод на русский язык.
            Читать дальше →
          • Google's Shell Style Guide (на русском)

            • Перевод
            • Tutorial

            Предисловие


            Какой Shell использовать


            Bash единственный язык shell скриптов, который разрешается использовать для исполняемых файлов.


            Скрипты должны начинаться с #!/bin/bash с минимальным набором флагов. Используйте set для установки shell опций, что бы вызов вашего скрипта как bash <script_name> не нарушил его функциональности.


            Ограничение всех shell скриптов до bash, дает нам согласованный shell язык, который установлен на всех наших машинах.


            Единственное исключение составляет если вы ограничены условиями того под что вы программируете. Одним из примеров могут стать пакеты Solaris SVR4, для которых требуется использование обычного Bourne shell для любых скриптов.


            Когда использовать Shell


            Shell следует использовать только для небольших утилит или простых скрптов-оберток.


            Хотя shell-скриптинг не является языком разработки, он используется для написания различных утилит во всем Google. Это руководство по стилю является скорее признанием его использования, а не предложением использовать его в широком применении.

            Читать дальше →
          • Modbus-RTU на скриптах

            Аннотация


            Здесь описан способ реализации протокола Modbus-RTU при помощи shell-скрипта и обвязки в виде js-кода. Обсуждаемый метод может быть использован для реализации других потоковых протоколов, где нужно оперировать массивами байт в ограниченном окружении (роутер).



            Идея в трёх строчках


            Для нетерпеливых показываю основную идею:

            printf "\x00\x03\x00\x00\x00\x01\x85\xDB" > $tty
            ( dd if=$tty of=$ans count=256 2> /dev/null ) & /usr/bin/sleep $timeout; kill $!
            echo "[`hexdump -ve '1/1 "%d,"' $ans | sed 's/\(.*\),/\1/'`]"
            
            Читать дальше →
            • +3
            • 19,7k
            • 1
          • Огромные пятна гигантских планет


              Большое красное пятно Юпитера и Земля в масштабе

              Ураганы происходят на Земле постоянно, но только на 4 планетах-гигантах из внешней области Солнечной системы они достигают поистине гигантским масштабов: их длительность измеряется годами (вместо пары недель на Земле), а скорость в них может почти на порядок превосходить скорость в земных ураганах.
              Читать дальше →
            • Мультиплеер в быстрых играх (Часть IV: Хэдшот! Путешествуем во времени)

              • Перевод

              1. Части I, II (синглплеер с авторитарным сервером)
              2. Часть III (Появление врага)
              3. Часть IV (Хэдшот!)

              Как повесить идеальный хэдшот если у тебя пинг 2 секунды? Вы узнаете в этой статье.

              Текущий алгоритм работы мультиплеера


              • Сервер получает команды с клиентов и времена их отправления
              • Сервер обновляет состояние мира
              • Сервер с некоторой частотой отправляет свое состояние всем клиентам
              • Клиент отправляет команды и локально воспроизводит их результат
              • Клиент получает обновленные состояния мира и:
                • Применяет состояние от сервера
                • Заново применяет все свои команды, которые сервер не успел применить.
                • Интерполирует предыдущие состояния других игроков
              • С точки зрения игрока, есть два серьезных последствия:
                • Игрок видит себя в настоящем
                • Игрок видит других в прошлом.

              Обычно это отлично работает, но это становится большой проблемой для событий, которым нужна высокая пространственно-временная точность. Например если хочется разнести врагу башку!
              Читать дальше →
            • Загрузка Windows Recovery Environment (или любого WIM-образа) с USB flash

              • Tutorial
              Windows Recovery Environment


              Загрузиться в WinRE может быть полезно для быстрого ремонта установленной Windows: восстановление запуска системы, восстановление из образа, откат к точке восстановления, изменение параметров загрузки, наконец, доступ к командной строке, а значит возможность делать много разных интересных вещей, типа format C:.
              Кроме того, можно запускать regedit.exe и другие системные программы, и даже некоторое стороннее ПО, если конечно для работы оно не требует запущенной «нормальной» Windows.
              Альтернативным решением конечно является загрузка с установочного DVD или ISO-образа, но запуск WIM-образа Среды восстановления напрямую будет происходить быстрее — он весит гораздо меньше, чем целый DVD.
              К тому же, на одной USB-флешке можно расположить несколько WIM-образов, например, 2 образа WinRE разной разрядности (x32 + x64), и другие образы с «ремонтных» DVD. У меня таким же образом загружается AntiWinLocker, и это без необходимости иметь отдельный ISO с ним.
              В общем, возможность загрузить WIM-образ может быть очень полезной. Поэтому перейдем к делу.

              Читать дальше →
            • Как сжать плоского кота

              Однажды в студеную зимнюю пору… ровно год назад, у нас появилась нетривиальная задача. Есть экран на электронных чернилах, есть процессор 16МГц (да-да, во встраиваемой электронике, особенно сверхнизкого энергопотребления, встречаются и такие) и совсем нет памяти. Ну, т.е. килобайтов 8 RAM и 256 Flash. Килобайтов, Карл. И в эти унылые килобайты необходимо запихнуть несколько изображений 800х600 в четырех оттенках серого. Быстро перемножив в уме 800 на 600 и на 2 бита на пиксель получаем 120 тысяч байтов. Несколько не влезает. Надо сжимать.

              Так перед нами появилась задача: «как сжать плоского кота»? Почему кота? Да потому, что на котиках тестировали, на чем же еще черно-белые картинки проверять. Не на долларовых банкнотах же.
              Читать дальше →
            • Metaballs без шейдеров + физика жидкостей

                Как-то раз возник у меня диспут с хабраюзером ZimM по поводу безшейдерного 2D движка: я утверждал, что для простых 2D игр шейдеры не обязательны, почти все эффекты можно сделать спрайтами, его же позиция была обратной. Я не раз в уме возвращался к этому спору и придумывал задачи, не реализуемые на первый взгляд без шейдеров, и именно решение одной такой задачи и привело к созданию игры, где игрок управляет жидкостью наклоном телефона.
                Читать дальше →
              • История одного клона


                  Три пути у человека, чтобы разумно поступать:
                  первый, самый благородный, — размышление;
                  второй, самый легкий, — подражание;
                  третий, самый горький, — опыт.
                  Конфуций


                  Однажды прохладным весенним вечером 2013 года захотелось мне сделать собственный аналог приятнейшей старой игры Scorched Earth, но с разными вытребеньками. Под хорошее настроение и заводную музыку я бросился кодить на первом попавшемся под руки IDE и фреймворке. По злой иронии это оказался WFP для Windows 8 Store. А вот для полета снаряда и реакции окружения я взял Farseer Engine — C# порт Box2D.
                  Сам уже не помню, как от идеи разрушаемой земли и баллистических ракет я перешел к катапультам, строениям из блоков и монолитному ландшафту. Так и началась двулетняя история моего клона Angry Birds.
                  Атака клонов
                • Как заставить дженкинс сделать вашу жизнь проще и стать счастливым

                    Когда разработка мобильных приложений в компании переходит на промышленные рельсы, неизменно всплывает вопрос об автоматической сборке. Continuous Integration — это то, что является неотъемлемой частью процесса. Итог этого процесса — сборки для тестирования на устройствах компании для OTA распространения заказчикам и удаленным тестировщикам.

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

                    Итак, эта статья о том, как реализовать копирование сертификатов и профилей для iOS сборок и свойств, и ключей для Android сборок на все слейвы дженкинса в рамках Continuous Integration. Такая автоматизация экономит время и помогает избежать ошибок. Статья будет интересна разработчикам мобильных приложений и тем, кто администрирует Jenkins.

                    Поехали!


                    Читать дальше →
                    • +10
                    • 32,7k
                    • 2
                  • OpenGL ES 1.1 в Windows 8 и Windows Phone 8.1

                      В далеком 1998 году я пытался сделать свою игру с OpenGL. Разработка с трудом дошла до альфы и была заброшена, но что особо запомнилось, так это как удобно было делать под GL интерфейсы — ортогональная проекция, пара трансформаций, биндинг нескольких вершин с GL_TRIANGLE_STRIP и у нас уже есть кнопка. И вот, спустя шестнадцать лет и занимаясь мобильным игростроем я столкнулся с таким же подходом в OpenGL ES 1.*, разве что 2D текстуры без вращений можно теперь рисовать через glDrawTexfOES.
                      Я поддерживал несколько проектов, сделанных по этому принципу и понемногу в голове выстроился коварный план: сделать кросс-платформенную 2D игру на мобильных с OpenGL ES и на C#, а на десктопах с обычным OpenGL. Цели я добился не с первого раза и было с этим много проблем, но в результате очередной проект у меня работает без изменений бизнес-логики на iOS, Android, BlackBerry, Windows XP/7, Mac OS X, Linux, ReactOS, Windows 8, Windows Phone 8.1. Материала набралось на много статей, но в этот раз я расскажу именно о поддержке Windows Runtime.
                      Читать дальше →