Как стать автором
Обновить
67
0
Гордый Хохол @Nomad1

Погромист игоръ

Отправить сообщение

Laplace Blur — Можно ли блюрить Лапласом вместо Гаусса, во сколько раз это быстрее, и стоит ли того потеря 1/32 точности

Время на прочтение7 мин
Количество просмотров11K
image

«Блюр» в простонародье — эффект размытия, в цифровой обработке изображений. Бывает очень эффектен и сам по себе, и как составляющее анимаций интерфейса, или более сложных производных эффектов (bloom/focusBlur/motionBlur). При всем этом честный блюр в лоб довольно медленен. И часто реализации встроенные в целевую платформу оставляют желать лучшего. То скорость печальна, то артефакты режут глаза. Ситуация рождает множество компромиссных реализаций, лучше или хуже подходящих для определенных условий. Оригинальная реализация с хорошим качеством достоверности и высочайшей скоростью, при этом нижайшей зависимостью от аппаратной части ждет вас под катом. Приятного аппетита!
Читать дальше →
Всего голосов 41: ↑40 и ↓1+39
Комментарии36

Бесшовный Wi-Fi-роуминг: теория на практике

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


Читать дальше →
Всего голосов 26: ↑25 и ↓1+24
Комментарии41

Learn OpenGL. Урок 4.10 — Инстансинг

Время на прочтение13 мин
Количество просмотров26K
OGL3

Инстансинг


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

Дейкстра за линейное время

Время на прочтение5 мин
Количество просмотров18K

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


Предыстория


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

Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии13

Конкурс по программированию: Торговля

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

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

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

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



Правила


Условия конкурса на английском языке размещены на GitHub. Ниже — перевод на русский язык.
Читать дальше →
Всего голосов 42: ↑37 и ↓5+32
Комментарии207

Google's Shell Style Guide (на русском)

Время на прочтение14 мин
Количество просмотров22K

Предисловие


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


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


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


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


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


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


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


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

Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии10

Modbus-RTU на скриптах

Время на прочтение4 мин
Количество просмотров25K

Аннотация


Здесь описан способ реализации протокола 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/'`]"
Читать дальше →
Всего голосов 7: ↑5 и ↓2+3
Комментарии1

Мультиплеер в быстрых играх (Часть IV: Хэдшот! Путешествуем во времени)

Время на прочтение3 мин
Количество просмотров57K

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

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

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


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

Обычно это отлично работает, но это становится большой проблемой для событий, которым нужна высокая пространственно-временная точность. Например если хочется разнести врагу башку!
Читать дальше →
Всего голосов 65: ↑64 и ↓1+63
Комментарии77

Загрузка Windows Recovery Environment (или любого WIM-образа) с USB flash

Время на прочтение5 мин
Количество просмотров103K
Windows Recovery Environment


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

Читать дальше →
Всего голосов 9: ↑8 и ↓1+7
Комментарии15

Как сжать плоского кота

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

Так перед нами появилась задача: «как сжать плоского кота»? Почему кота? Да потому, что на котиках тестировали, на чем же еще черно-белые картинки проверять. Не на долларовых банкнотах же.
Читать дальше →
Всего голосов 85: ↑80 и ↓5+75
Комментарии65

Metaballs без шейдеров + физика жидкостей

Время на прочтение7 мин
Количество просмотров20K
Как-то раз возник у меня диспут с хабраюзером ZimM по поводу безшейдерного 2D движка: я утверждал, что для простых 2D игр шейдеры не обязательны, почти все эффекты можно сделать спрайтами, его же позиция была обратной. Я не раз в уме возвращался к этому спору и придумывал задачи, не реализуемые на первый взгляд без шейдеров, и именно решение одной такой задачи и привело к созданию игры, где игрок управляет жидкостью наклоном телефона.
Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии11

История одного клона

Время на прочтение6 мин
Количество просмотров24K

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


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

Как заставить дженкинс сделать вашу жизнь проще и стать счастливым

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

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

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

Поехали!


Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии2

OpenGL ES 1.1 в Windows 8 и Windows Phone 8.1

Время на прочтение7 мин
Количество просмотров16K
В далеком 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.
Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии15

.NET/Mono в Java? Легко!

Время на прочтение11 мин
Количество просмотров20K
Здравствуйте. Хочу представить свой проект – компилятор .NET/Mono в Java. Целью проекта является создание компилятора, и набора стандартных библиотек позволяющих переносить написанные приложения и библиотеки на платформу Java, версии 1.6 и выше. Из аналогичных проектов мне известен лишь проект dot42. Но он заточен под Android и имеет собственную стандартную библиотеку не совсем совместимую с .NET/Mono.

Пока есть только альфа версия, и поэтому для реального использования компилятор пока не годится, однако уже частично работоспособен, генерирует валидный код Java и поддерживает часть стандарта ECMA-335.

Исходные коды на github.com: https://github.com/zebraxxl/CIL2Java

Подробнее о том, что не поддерживается, что поддерживается и как это все работает.
Всего голосов 74: ↑71 и ↓3+68
Комментарии36

Айтишник на отдыхе: добавим немного астрономии?

Время на прочтение6 мин
Количество просмотров125K

Стремительно приближается лето и сопутствующие ему выезды на природу. Посиделки затягиваются заполночь, и над головой появляются звезды. Но, как правило, зведное небо таинственно и непонятно — астрономию в школах не преподают толком, наверное, уже с конца 80-х, да и кто помнит, чему его учили в школе, если это не использовалось в жизни постоянно? А в небе хватает интересного, особенно если потратить чуть-чуть времени на астрономическое обеспечение выезда на природу.
Читать дальше →
Всего голосов 107: ↑104 и ↓3+101
Комментарии81

Star Trek: текстовая игра 1971 года

Время на прочтение5 мин
Количество просмотров81K


Когда на хабре составляли список лучших игр всех времён и народов, в комментариях несколько раз проскальзывала мысль, что тема превращается в список самых старых игр, которые можно вспомнить. И тогда я подумал, а что если действительно попытаться вспомнить самую первую игру, в которую я играл?

Может быть я ошибаюсь, ведь это было почти 30 лет назад, но мне кажется, что такой самой первой, и кстати, очень даже неплохой для того времени игрой, был Star Trek. Считается, что первоначальная версия была создана Майком Мэйфилдом (Mike Mayfield) в 1971 году, но я застал его в середине 80-х. Возможно сейчас процесс игры покажется уже не таким захватывающим, как тогда, поэтому я решил написать о нём исключительно по оставшимся воспоминаниям, и с небольшим использованием исходного кода.
Читать дальше →
Всего голосов 80: ↑80 и ↓0+80
Комментарии62

Молнии

Время на прочтение4 мин
Количество просмотров42K


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

По крайней мере, таков план.

Но как же именно вам, как разработчику игры, отрендерить такой эффект?
Читать дальше →
Всего голосов 99: ↑97 и ↓2+95
Комментарии22

Создание standalone библиотеки под android

Время на прочтение2 мин
Количество просмотров15K
В этой статье я расскажу как создать библиотеку, которая использует другие библиотеки и при этом уместить всё в одном jar.

Допустим мы пишем библиотеку, она использует другие библиотеки и, в частности, для примера, support library. Если бы мы использовали maven, то в pom файле просто прописали зависимости и не парились. Но что если нашу библиотеку будут использовать люди, которые не пользуются системами сборок или пользуются ant' ом?

Мы можем положить зависимости рядом с нашим jar. Но тогда неизбежны конфликты библиотек разных версий, например, если мы используем одну версию support library, а в самом приложении другая. Тогда придется руками одну из них удалять.

Можно пойти другим путем, вспомним что jar это обычный zip файл. Мы распакуем все зависимости, получим байт-код в виде .class файлов, далее компилируем код нашей библиотеки, кладем все .class файлы в одно место и собираем из них jar. Но если в приложении используются те же библиотеки что и у нас, то получим ошибку что в проекте два одинаковых класса.
Читать дальше →
Всего голосов 16: ↑12 и ↓4+8
Комментарии8

Информация

В рейтинге
Не участвует
Откуда
Украина
Дата рождения
Зарегистрирован
Активность