Pull to refresh
0
0
Дмитрий @EvilGen

User

Send message

Boids — простой алгоритм перемещения групп юнитов

Reading time3 min
Views31K
Во время разработки клона одной игрушки мне понадобилось перемещать группы юнитов от одной планеты к другой. Первое что пришло в голову — заспавнить юниты один за другим и двигать их по прямой. Но это выглядело не очень весело, кроме того — нужно было как-то обходить планеты. После беглого ознакомления с алгоритмами группового перемещения я решил попробовать Boids. В итоге получилось такое:



Под катом описание алгоритма с примерами кода.

Читать дальше →
Total votes 63: ↑60 and ↓3+57
Comments23

Идеальные требования возвращаются

Reading time7 min
Views6.9K

В прошлых частях


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

Во второй части я рассказывал про частые проблемы предпроекта.

В прошлой заметке мы обсуждали первую часть базовых принципов:

  • Устройство IT-системы и классификация IT-продуктов.
  • Уровни V-модели и жизненный цикл системы.
  • Взгляд на систему как на финансовый актив.

В этой заметке мы закончим с описанием «как правильно», чтобы дальше обсудить, что делать, если правильно не выходит.

О чём вы узнаете из этой заметки:

  • О конусе неопределенности и фазах проектирования.
  • О том, как работает оценка.
  • О полном составе задач предпроектной фазы и реализуемых при этом ценностях.
  • О том, как получить достаточное количество ресурсов на предпроект.

Если вы не хотите ждать следующих частей цикла, можно посмотреть видео моего доклада, на основе которого пишется эта серия статей.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments5

Генерация и решение лабиринта с помощью метода поиска в глубину по графу

Reading time6 min
Views115K
image

В этой статье речь пойдет о самом простом в реализации алгоритме генерации «идеального» лабиринта и его применении для поиска пути.

Мы рассмотрим алгоритм, основанный на бэктрекинге, позволяющий создавать лабиринты без циклов, имеющие единственный путь между двумя точками. Алгоритм не самый быстрый, довольно требователен к ресурсам, по сравнению с алгоритмом Эйлера или Крускала, но очень прост в реализации и позволяет создавать ветвистые лабиринты с очень длинными тупиковыми ответвлениями.

Заинтересовавшихся — прошу под кат.
Читать дальше →
Total votes 37: ↑35 and ↓2+33
Comments26

Алгоритм Эллера для генерации лабиринтов

Reading time5 min
Views152K
Это топик-перевод статьи Eller's Algorithm. В ней рассказывается о способе программной генерации лабиринтов. Дальнейшее повествование идет от лица автора.

 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  
|__   |__       __ __|__   |   __|  |  |  |  |
|__   |__   |__|   __ __|   __ __      |     |
|        |  |  |     |  |__      |__|  |  |  |
|__|__|  |  |   __|   __|__   |   __|__|  |__|
|   __|  |     |__ __ __|  |  |__|  |     |  |
|  |  |  |  |__|  |__   |  |   __|__ __|  |  |
|  |__    __    __ __    __|  |   __   |  |  |
|  |  |  |  |      __|  |   __|  |  |__|  |  |
|  |     |     |__   |  |  |  |  |  |__    __|
|  |  |__|__|__ __|  |     |  |  |      __|  |
|__ __|  |  |  |__   |__|   __|     |   __ __|
|   __|  |   __|__      |__   |__|  |__    __|
|  |  |     |  |     |__|  |   __    __|   __|
|   __|  |__ __|__|      __|  |  |     |  |  |
|   __ __   |      __|__|  |__   |  |  |__|  |
|__ __ __|__ __|__ __ __ __ __|__|__|__ __ __|


Алгоритм Эллера позволяет создавать лабиринты, имеющие только один путь между двумя точками. Сам по себе алгоритм очень быстр и использует память эффективнее, чем другие популярные алгоритмы (такие как Prim и Kruskal), требуя памяти пропорционально числу строк. Это позволяет создавать лабиринты большого размера при ограниченных размерах памяти.

Читать дальше →
Total votes 122: ↑117 and ↓5+112
Comments35

Диаграмма Вороного и её применения

Reading time25 min
Views121K
Доброго всем времени суток, уважаемые посетители сайта Хабрахабр. В данной статье я бы хотел рассказать вам о том, что такое диаграмма Вороного (изображена на картинке ниже), о различных алгоритмах её построения (за , — пересечение полуплоскостей, — алгоритм Форчуна) и некоторых тонкостях реализации (на языке C++).



Также будет рассмотрено много интересных применений диаграммы и несколько любопытных фактов о ней. Будет интересно!
Читать дальше →
Total votes 92: ↑89 and ↓3+86
Comments49

Сила и красота декораторов

Reading time5 min
Views83K
Одним из самых сложных для понимания и осознания элементов языка является декоратор, хотя по сути это очень простая вещь, доступная для понимания даже начинающему программисту. Новых Эверестов я не открываю, а лишь предлагаю краткий обзор возможностей и несколько типичных примеров использования. Этакий короткий экскурс в метапрограммирование на питоне.

Upd 1: изменил несколько категоричное утверждение о несходстве паттерна Декоратор и одноимённой языковой конструкции на более мягкое.

Читать дальше →
Total votes 98: ↑97 and ↓1+96
Comments30

[Перевод] BADLAND – игра на cocos2d-iphone

Reading time3 min
Views20K
BADLAND был запущен 4 апреля 2013 на App Store для iPad, iPhone и iPod touch. С тех пор было продано более 100 000 экземпляров. Сыграйте в эту игру (iTunes link) или посмотрите трейлер, прежде чем продолжить чтение — так вы получите более полную картину об игре, про которую я собираюсь рассказать. BADLAND была создана нашей инди-компанией, называемой Frogmind и состоящей из двух человек. Это наша первая игра на iOS и в ней используется последняя версия cocos2d-iphone 2.1 наряду со множеством других open source библиотек.


Читать дальше →
Total votes 36: ↑24 and ↓12+12
Comments16

Метрика #5 — Подкаст о технологиях и проектировании интерфейсов и сервисов

Reading time1 min
Views3.3K
Всем привет! С вами «Метрика» – шоу для тех, кто создает и анализирует продукты и сервисы на различных платформах.

В этом выпуске


Дмитрий Новиков и Павел Грозян (grozyan) вместе с Платоном (hryusha) и Дмитрием (dmitrykabanov) обсуждают дизайнерские будни и быт в компании MacPaw, холиварят на тему скевоморфизма и просто делают фан.
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments0

Сервисы дистрибуции мобильных приложений для iOS. Часть 1: TestFlight

Reading time7 min
Views56K

Вступление


С каждым годом становится всё очевиднее, что для распространения тестовых версий iOS-приложений нужны специализированные сервисы. Это актуально не только для компаний, занимающихся разработкой приложений в “промышленных масштабах”, но и для инди-разработчиков. Причины: увеличение количества устройств с “нестандартным”/”не кратным” размером экрана, отличия в архитектуре центрального и графических процессоров — всё то, что раньше было повседневностью для разработки под Android, теперь становится справедливым и для iOS.

Исторически самым популярным сервисом дистрибуции являлся TestFlight — практически идеал, как в техническом отношении, так и в юзабилити. Однако, после приобретения компанией Apple в начале 2014 года, сервис претерпел ряд неоднозначных изменений, которые с одной стороны сказались негативно на его позиции лидера, а с другой дали шанс альтернативным сервисам побороться за первое место и предложить как минимум равноценную замену, а может быть и что-то более удобное и функциональное.

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

В обзоре участвуют следующие сервисы (в таком порядке и будут публиковаться части обзора):
  • Apple TestFlight
  • HockeyApp
  • Ubertesters
  • Crashlytics (как часть Fabric)


TestFlight старой версии не будет рассмотрен, так как хотя он по-прежнему работает и доступен по адресу www.testflightapp.com, использование его в долгосрочной перспективе не имеет смысла по ряду причин:
  • нет никаких гарантий, что Apple не приостановит или не прекратит его работу в любой момент
  • SDK сервиса не доступно для скачивания, более того невозможно использовать сервис, если приложение использует SDK
  • сервис больше не является кросс-платформенным, поддерживается только распространения приложений для iOS (подробнее)

Важно! Буквально накануне публикации статьи команда TestFlight (старой версии) разослала уведомление, в котором сообщается, что старый сервис прекратит свою работу 26 февраля 2015 года (подробности).

Система оценки: сервисы будут оценены по 10-балльной шкале по каждому из разделов (Регистрация и интеграция, Основной функционал, Дополнительный функционал, Continuous Integration). Суммарная оценка позволит определить победителя (итоговое заключение войдет в последнюю часть обзора).

Читать далее. Осторожно, много картинок!
Total votes 15: ↑15 and ↓0+15
Comments36

Trust Hacking: 6 способов сразу вызвать доверие и продать больше

Reading time12 min
Views32K
Хотите, чтобы у вас покупали больше и чаще? Мы в Alconost перевели чудесный материал о том, как быстро завоевать доверие клиента. Все, что вам для этого понадобится — качественный продукт. Читайте, применяйте, продавайте!



Мы приобретаем товары только у людей и компаний, которым доверяем. В современном перенасыщенном маркетингом мире люди испытывают тревогу и почти животный страх перед продажами. Добейтесь доверия, и вы сможете продавать пресловутый снег эскимосам. Потеряйте доверие — и даже жаждущий в пустыне не купит у вас воду.

Однако мы часто недооцениваем стоящую перед нами задачу. Абсолютно все потребители сталкивались с пустыми обещаниями и некачественной продукцией. Из-за столь негативного прошлого опыта завоевать их доверие непросто.

Но мы можем сократить путь к доверию и увеличить продажи с помощью поведенческой психологии, в которой существуют принципы когнитивных искажений и эвристик (эвристика — это упрощенный способ мышления, простой способ сделать вывод, не прибегая к математическим расчетам или к научному мышлению — прим.пер.). Эти принципы относятся к ментальным моделям (порой иррациональным и несовершенным), которые используются для экономии времени или энергии при принятии решений. Хотя есть более 100 когнитивных искажений и эвристик, я хотел бы сосредоточиться только на тех, которые позволяют добиться мгновенного доверия в глазах потребителя.

Это — игра на доверии.

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

Приступим.
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments4

Ночные кошмары Питона: неявный `this`

Reading time3 min
Views27K
Обсуждение статьи "Не совсем крутой Ruby" зашло достаточно далеко: недостатки и достоинства Ruby между делом перетекали в обсуждение недостатков и достоинств Python. Не сильно удивило то, что передача self в качестве первого аргумента метода класса, некоторым хабравчанам кажется лишней. Ну что ж, не хотите явного self, будет вам неявный this! Под катом, немного магии на чистом Python.
Читать дальше →
Total votes 63: ↑58 and ↓5+53
Comments18

Введение в функциональное программирование на Python

Reading time10 min
Views152K
Рассуждая о функциональном программировании, люди часто начинают выдавать кучу «функциональных» характеристик. Неизменяемые данные, функции первого класса и оптимизация хвостовой рекурсии. Это свойства языка, помогающие писать функциональные программы. Они упоминают мапирование, каррирование и использование функций высшего порядка. Это приёмы программирования, использующиеся для написания функционального кода. Они упоминают распараллеливание, ленивые вычисления и детерменизм. Это преимущества функциональных программ.

Забейте. Функциональный код отличается одним свойством: отсутствием побочных эффектов. Он не полагается на данные вне текущей функции, и не меняет данные, находящиеся вне функции. Все остальные «свойства» можно вывести из этого.

Нефункциональная функция:

a = 0
def increment1():
    global a
    a += 1


Функциональная функция:

def increment2(a):
    return a + 1


Вместо проходов по списку используйте map и reduce
Читать дальше →
Total votes 33: ↑30 and ↓3+27
Comments51

Руководство по магическим методам в Питоне

Reading time28 min
Views577K
Это перевод 1.17 версии руководства от Rafe Kettler.


Содержание


  1. Вступление
  2. Конструирование и инициализация
  3. Переопределение операторов на произвольных классах
  4. Представление своих классов
  5. Контроль доступа к атрибутам
  6. Создание произвольных последовательностей
  7. Отражение
  8. Вызываемые объекты
  9. Менеджеры контекста
  10. Абстрактные базовые классы
  11. Построение дескрипторов
  12. Копирование
  13. Использование модуля pickle на своих объектах
  14. Заключение
  15. Приложение 1: Как вызывать магические методы
  16. Приложение 2: Изменения в Питоне 3


Вступление


Что такое магические методы? Они всё в объектно-ориентированном Питоне. Это специальные методы, с помощью которых вы можете добавить в ваши классы «магию». Они всегда обрамлены двумя нижними подчеркиваниями (например, __init__ или __lt__). Ещё, они не так хорошо документированны, как хотелось бы. Все магические методы описаны в документации, но весьма беспорядочно и почти безо всякой организации. Поэтому, чтобы исправить то, что я воспринимаю как недостаток документации Питона, я собираюсь предоставить больше информации о магических методах, написанной на понятном языке и обильно снабжённой примерами. Надеюсь, это руководство вам понравится. Используйте его как обучающий материал, памятку или полное описание. Я просто постарался как можно понятнее описать магические методы.
Читать дальше
Total votes 143: ↑139 and ↓4+135
Comments59

Применение Octave для вычисления центра вращения звездного поля

Reading time11 min
Views4.3K
Я уже частично говорил о работе с FITS-файлами в Octave. Теперь расскажу о применении этого математического пакета для обработки конкретных данных, а именно: для вычисления центра вращения звездного поля по набору снимков, полученных с определенным интервалом.
Читать дальше →
Total votes 31: ↑27 and ↓4+23
Comments12

Лекции Технопарка. 2 семестр. Базы данных

Reading time4 min
Views86K


Очередной пост в рамках нашей постоянной рубрики «Лекции Технопарка». В этот раз предлагаем вашему вниманию лекции, посвящённые базам данных. Цель курса — получение студентами знаний в области проектирования реляционных баз данных, эффективной работы с базами данных, оптимизации запросов и схем данных, изучение особенностей использования баз данных в проектах с высокой нагрузкой и/или использующих большие массивы данных, noSQL и его применение для решения прикладных задач в WWW.
Читать дальше →
Total votes 47: ↑45 and ↓2+43
Comments0

Лекции Технопарка. 1 семестр. С/С++

Reading time6 min
Views110K
Мы продолжаем наши еженедельные публикации учебных материалов Технопарка. Предыдущие лекции были посвящены web-технологиям в целом, а также алгоритмам и структурам данных. В третьем блоке лекций рассказывается о языках С и С++.

Лекция 1. Язык С. Основы организации и использования оперативной и сверхоперативной памяти


Лекция начинается с введения в язык С: рассказывается об истории его появления, особенностях, преимуществах и недостатках, о сферах применения. Описываются основы препроцессорной обработки, рассматриваются вопросы управления памятью (модели управления памятью, области видимости объектов хранения) и производительность программ на языке С. Обсуждается связывание объектов хранения и их инициализация. Затем рассказывается о классах памяти в языке С. Следующая часть лекции посвящена проблематике указателей, а также работе с одномерными массивами. В заключение рассматривается стандарт POSIX и вопросы переносимости.


Читать дальше →
Total votes 72: ↑70 and ↓2+68
Comments83

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

Reading time3 min
Views14K
Привет, Хабр! Часто ли вы ищете что-нибудь на своем смартфоне? Натыкались на ужасные мобильные версии сайтов? С этого дня всё должно измениться.



Поиск на мобильных устройствах отличается от десктопного: актуальные и свежие результаты пользователям нужны вне зависимости от того, где они находятся и насколько качественное подключение используют. Мобильное приложение? Замечательно. “Классический” сайт? Хорошо. Мобильная версия? Превосходно. Но что делать, если разработчик не позаботился о грамотной обработке переадресаций с десктопной версии на мобильную? Пользователи из-за этого теряют время, иногда — деньги, нервы, билеты на самолёт и много чего ещё.

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

Мы начали с обновлений, обеспечивающих правильность настройки и просмотра сайтов в результатах на современных устройствах. После этого мы упростили для пользователей определение в выдаче страниц, оптимизированных для мобильных устройств и внедрили индексирование приложений, чтобы показывать полезную информацию и из приложений. Сегодня мы расскажем про два важных изменения, которые помогут пользователям чаще находить контент, приспособленный для мобильных устройств.
А именно:
Total votes 14: ↑10 and ↓4+6
Comments24

Лекции Технопарка. 1 семестр. Алгоритмы и структуры данных

Reading time2 min
Views149K
Очередной пост в рамках нашего цикла лекций Технопарка. В этот раз мы предлагаем вашему вниманию курс, посвящённый алгоритмам и структурам данных. Автор курса — Степан Мацкевич, сотрудник компании ABBYY.

Лекция 1. Основы


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


Читать дальше →
Total votes 52: ↑48 and ↓4+44
Comments14

Software renderer — 1: матчасть

Reading time29 min
Views83K
Программный рендеринг (software rendering) — это процесс построения изображения без помощи GPU. Этот процесс может идти в одном из двух режимов: в реальном времени (вычисление большого числа кадров в секунду — необходимо для интерактивных приложений, например, игр) и в «оффлайн» режиме (при котором время, которое может быть потрачено на вычисление одного кадра, не ограничено настолько строго — вычисления могут длиться часы или даже дни). Я буду рассматривать только режим рендеринга в реальном времени.

У этого подхода существуют как недостатки так и достоинства. Очевидным недостатком является производительность — CPU не в состоянии конкурировать с современными видеокартами в этой области. К достоинствам стоит причислить независимость от видеокарты — именно поэтому он используется как замена аппаратного рендеринга в случаях, когда видеокарта не поддерживает ту или иную возможность (так называемый software fallback). Существуют и проекты, цель которых — полностью заменить аппаратный рендеринг программным, например, WARP, входящий в состав Direct3D 11.

Но главным плюсом является возможность написания подобного рендерера самостоятельно. Это служит образовательным целям и, на мой взгляд, это — самый лучший способ понять лежащие в основе алгоритмы и принципы.

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

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

В конце статьи будет ссылка на гитхаб проекта, который можно рассматривать как пример реализации.
Читать дальше →
Total votes 95: ↑90 and ↓5+85
Comments51

Как вращается камера в 3D играх или что такое матрица поворота

Reading time11 min
Views122K
В этой статье я кратко расскажу, как именно преобразуются координаты точек при повороте камеры в 3D играх, css-преобразованиях и вообще везде, где есть какие-то вращения камеры или предметов в пространстве. По совместительству это будет кратким введением в линейную алгебру: читатель узнает, что такое (на самом деле) вектор, скалярное произведение и, наконец, матрица поворота.
Читать дальше →
Total votes 113: ↑105 and ↓8+97
Comments44

Information

Rating
Does not participate
Location
Донецк, Донецкая обл., Украина
Date of birth
Registered
Activity