Pull to refresh
0
@vozoryread⁠-⁠only

Пользователь

Send message

Защита игр и мобильных приложений от взлома для чайников (Unity, C#, Mono)

Reading time8 min
Views71K
Всем снова здравствуйте! Дошли руки написать крутую статью на весьма важную тему для разработчиков игр. Итак, поговорим о защите ваших драгоценных игр и приложений, которые вы пилите на Unity в надежде заработать на буханку хлеба, от взлома злобными школьниками. Почему школьниками? Потому что надежной на 100% защиты априори быть не может. И кто захочет, все равно взломает. Вопрос лишь в том, сколько времени и сил он на это потратит. И как любят шутить безопасники — терморектальный криптоанализ никто не отменял.

Итак, в статье я постараюсь максимально доступно рассказать о 3 аспектах (и конечно, предложу реализацию):
  • защита данных приложения (сейвов)
  • защита памяти приложения
  • защита внутриигровых покупок (Google Play)

image
Читать дальше →
Total votes 31: ↑26 and ↓5+21
Comments34

Как сделаны фоны в Homeworld2 изнутри

Reading time4 min
Views48K
Эта статья является переводом сразу двух статей от Simon Schreibt. Обе статьи на одну тему и являются взаимодополняющими. Не пугайтесь того, что в начале все набрано большими буквами, это стилистика автора и я постарался максимально её сохранить.

То, что вы видите тут



это сногсшибательные фоны



одной из наиболее прекрасных научно-фантастических игр.




H o m e w o r l d 2


Осторожно траффик
Total votes 58: ↑51 and ↓7+44
Comments10

Откуда берутся бреши в безопасности программ?

Reading time6 min
Views40K
                                             — У нас дыра в безопасности.
                                             — Ну, хоть что-то у нас в безопасности.
                                                                                  Анекдот

image Если вы Windows-пользователь, то вам должны быть знакомы всплывающие каждый второй вторник месяца окошки, рапортующие об установке «критических обновлений безопасности». Microsoft прилагает немалые усилия, постоянно работая над исправлениями уязвимостей в своих операционных системах, но оно того стоит: в мире, где число кибератак день ото дня только возрастает, ни одна лазейка в обороне наших компьютеров не должна оставаться открытой для потенциальных злоумышленников.

Недавнее обсуждение в списке рассылки, посвящённого 66192-й SVN ревизии ReactOS, показало как это легко — внести в код ядра критическую уязвимость. Я буду использовать этот случай как пример простой, но влияющей на безопасность ошибки, а также для наглядного представления некоторых мер, которым необходимо подвергать код ядра, если вы действительно хотите получить безопасную систему.

Отыщем уязвимость

Читать дальше →
Total votes 91: ↑79 and ↓12+67
Comments9

Тренировка мозга и ее геймификация

Reading time5 min
Views41K

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

Творческое мышление


Представим задачу стоящую перед творческим мышлением в виде абстрактной двухмерной плоскости, на которой где-то находятся несколько точек приемлемых решений. Перед человеком стоит проблема найти одну из таких точек-решений, но сложность состоит в невозможности перебрать все возможные варианты, поэтому в большинстве случаем на помощь приходит озарение. Классическая схема решения творческой задачи состоит из стадий
1) Подготовка — формулирование задачи
2) Инкубация — временное отвлечение от задачи
3) Озарение — появление интуитивного решения.
Читать дальше →
Total votes 27: ↑20 and ↓7+13
Comments22

Продолжаем тренировать мозг. Добавляем соревнования

Reading time2 min
Views14K

Полгода назад я написал пост о моем интересе к упражнениям для тренировки мозга, результатом которого был небольшой сайт с такого рода упражнениями, созданный для всех желающих вступить на путь когнитивного просветления. Так как сайт делался с оглядкой на десктопные игры и приложения, то и получился он по сути таким приложением только в вебе. Но недавно было решено исправить этот маленький недостаток и добавить какое то взаимодействие между пользователями сайта, в надежде что кому то это сможет придать дополнительную мотивацию к тренировокам. Первое что приходит в голову это конечно же система соревнований.
Читать дальше →
Total votes 10: ↑8 and ↓2+6
Comments7

Игра: Загрузка иностранного языка в мозг

Reading time9 min
Views139K
Бывает ли у вас такие ситуации, когда слово, идиома или грамматическая конструкция иностранного языка никак не могут удержаться в голове, несмотря на то, что вы встречали её уже много раз и даже специально учили? А сколько процентов иностранных слов вы помните спустя месяц после их изучения? А спустя полгода? Сложно ли вам мотивировать себя на занятия иностранным языком?



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

Под катом вас ждет рассказ о методе изучения иностранного языка при помощи карточек (flashcards), о технике эффективного использования метода и о принципиальных особенностях и алгоритмах одного варианта программной реализации.
Читать дальше →
Total votes 58: ↑48 and ↓10+38
Comments56

SASS против LESS

Reading time6 min
Views185K
«Какой препроцессорный язык стоит использовать для CSS?» является очень актуальным вопросом в последнее время. Несколько раз меня спрашивали об этом лично, и казалось бы, каждые пару дней этот вопрос поднимался в сети. Очень приятно что беседа перешла из темы о плюсах и минусах препроцессинга к обсуждению какой же язык является лучшим. За дело!

Если быть кратким: SASS.

Немного развернутый ответ: SASS лучше по всем пунктам, но если вы уже счастливы с LESS — это круто, по крайней мере вы уже упростили себе жизнь используя препроцессинг.

Развернутый ответ: ниже
Читать дальше →
Total votes 62: ↑50 and ↓12+38
Comments72

LESS: программируемый язык стилей

Reading time13 min
Views430K
Я не люблю CSS. Он простой и понятный. Это движущая сила Интернета, но он слишком ограниченный и им трудно управлять. Пришло время привести этот язык в порядок и сделать его более полезным, используя динамический CSS при помощи LESS.
Объясню свою позицию на примере. Почему бы вместо использования #FF9F94 для получения темно-персикового цвета просто не хранить значение этого цвета в переменной для её последующего использования? Что бы перекрасить сайт достаточно будет изменить значение переменной всего в одном месте и всё.
Другими словами: это будет очень изящно, если мы будем использовать немного программирования и логики в CSS, что бы сделать его более мощным инструментом. Хорошо, что это всё возможно с использованием LESS.
Так что же такое LESS?
Total votes 161: ↑147 and ↓14+133
Comments136

WebSocket RPC или как написать живое WEB приложение для браузера

Reading time4 min
Views63K


В статье речь пойдет о технологии WebSocket. Точнее не о самой технологии, а о том, как ее можно использовать. Я давно слежу за ней. Еще когда в 2011 году один мой коллега прислал мне ссылку на стандарт, пробежав глазами, я как-то расстроился. Выглядело настолько круто, и я думал, что в момент, когда это появится в популярных браузерах, я уже буду планировать, на что потратить свою пенсию. Но все оказалось не так, и как гласит caniuse.com WebSocket не поддерживается только в Opera Mini (надо бы провести голосование, как давно кто-либо видел Opera Mini).

Кто трогал WebSocketы руками, тот наверняка знает, что работать с API тяжело. В Javascript API достаточно низкоуровневый (принять сообщение — отправить сообщение), и придется разрабатывать алгоритм, как этими сообщениями обмениваться. Поэтому и была предпринята попытка упростить работу с вебсокетами.

Так и появился WSRPC. Для нетерпеливых вот простое демо.
Читать дальше →
Total votes 39: ↑34 and ↓5+29
Comments64

Ошибки новичка в сфере разработки игр

Reading time15 min
Views98K

Оригинал изображения

Полгода назад я рассказывал про свой опыт работы фрилансером на oDesk. После этого я решил оставить разработку Android приложений на заказ и заняться своей давней мечтой — созданием игр. Мы с друзьями объединились, и работа закипела…

Для начала хочу рассказать о текущем состоянии проекта:
Время от разработки до публикации: 2 месяца
Время нахождения в магазинах приложений: 3 месяца
Загрузки iOS: > 15000 (93 % русскоязычные пользователи)
Загрузки Android: > 35000 (63 % русскоязычные пользователи)

Данный проект не является финансово успешным на данный момент, поэтому я хочу рассказать о наших ошибках.
Статья в первую очередь предназначена для новичков в сфере разработки игр.
Читать дальше →
Total votes 55: ↑50 and ↓5+45
Comments22

Основы CG-рисунка на примерах: рисуем осциллограф, применяем 3D

Reading time3 min
Views153K


Всем привет! Меня зовут Иван Смирнов, я работаю концепт-художником в Allods Team, игровой студии Mail.Ru Group, на проекте Skyforge. Помимо этого я преподаю на факультете концепт-арта в Scream School и веду онлайн-курсы. Не так давно я проводил лекцию по основам CG-рисунка: в частности, речь шла о том, как нарисовать простой предмет, например, осциллограф. Материалами этой лекции я спешу поделиться с вами. Осторожно, траффик!
Читать дальше →
Total votes 124: ↑117 and ↓7+110
Comments46

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6

Reading time7 min
Views404K

Содержание курса



Улучшение кода






Official translation (with a bit of polishing) is available here.




Постановка задачи


Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.

Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:



Внимание, это обучающий материал, который в целом повторит структуру библиотеки OpenGL. Это будет софтверный рендер, я не ставлю целью показать, как писать приложения под OpenGL. Я ставлю целью показать, как сам OpenGL устроен. По моему глубокому убеждению, без понимания этого написание эффективных приложений с использованием 3D библиотек невозможно.
Читать дальше →
Total votes 198: ↑196 and ↓2+194
Comments120

Что нужно знать, чтобы хорошо рисовать?

Reading time5 min
Views262K


Давид Ревуа — прекрасный художник, работающий со свободным программным обеспечением, постоянный член сообществ Krita Foundation и Blender Institute, концепт-художник анимационных проектов Gooseberry Open Movie Project, Mango Open Movie Project (Tears of Steel) и Durian Open Movie Project (Sintel). В этой статье он делится с начинающими художниками списком знаний, которые необходимо приобрести, чтобы работы получались реалистичными. Он обращает внимание, что для рисования «в цифре» следует обзавестись теми же навыками, что и в традиционной технике. Итак, приобщимся к его опыту.
Читать дальше →
Total votes 134: ↑128 and ↓6+122
Comments113

Процедурная генерация случайных игровых подземелий

Reading time6 min
Views65K
image

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

Оригинальное описание алгоритма


1. Сначала я задаю нужное количество комнат – к примеру, 150. Естественно, цифра произвольная, и чем она больше, тем сложнее будет подземелье.

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

Вместо равномерно распределённых случайных чисел (какие выдаёт генератор Math.random в большинстве языков), я использую нормальное распределение Парка-Миллера. В результате вероятность появления маленьких комнат превышает вероятность появления больших. Зачем это надо, объясню позже.

Кроме того я проверяю, что соотношение длины и ширины комнаты не слишком велико. Нам не нужны как идеально квадратные комнаты, так и сильно вытянутые.

3. И вот у нас есть 150 случайных комнат, расположенных на небольшом пространстве. Большинство из них наезжают друг на друга. Теперь мы осуществляем их разделение по технологии separation steering, чтобы разделить прямоугольники так, чтоб они не пересекались. В результате они не пересекаются, но находятся достаточно близко друг от друга.

4. Заполняем промежутки клетками размером 1х1. В результате у нас получается квадратная решётка из комнат различного размера.

5. И тут начинается основное веселье. Определяем, какие из клеток решётки являются комнатами – это будут любые клетки с шириной и высотой, превышающими заданные. Из-за распределения Парка-Миллера мы получим сравнительно небольшое количество комнат, между которыми есть довольно много свободного пространства. Но оставшиеся клетки нам также пригодятся.

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

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

8. Дерево получается аккуратным, но скучным – никаких вам замкнутых ходов. Поэтому мы случайным образом добавляем обратно примерно 15% ранее исключённых рёбер графа. В результате получится граф, где все комнаты гарантированно достижимы, с несколькими замкнутыми ходами.

9. Чтобы превратить его в коридоры, для каждого ребра строится серия прямых линий (в форме Г), идущих по рёбрам графа, соединяющим комнаты. Тут нам пригождаются те клетки, которые остались неиспользованными (те, что не превратились в комнаты). Все клетки, накладывающиеся на Г-образные линии, становятся коридорами. А из-за разнообразия размеров клеток стены коридоров будут неровными, что как раз хорошо для подземелья.

И вот пример результата!

Осторожно — под катом много монстров анимированных гифок!
Читать дальше →
Total votes 53: ↑49 and ↓4+45
Comments16

MMORPG без лишних деталей: Open Source

Reading time2 min
Views25K


Как говорится: «обещанного три года ждут». Примерно столько лет назад мы начали разработку своей «оригинальной» браузерки. О ней мы уже рассказывали: MMORPG без лишних деталей, как рассказывали и о наших скромных успехах год спустя.

При этом мельком упоминалось, что код игры постепенно открывается. И вот наконец настал тот момент, когда мы открыли его полностью: github.com/Tiendil/the-tale под BSD лицензией. А это значит, что вы вот прямо сейчас можете начать пилить свою собственную браузерку с… ну с чем захотите.

Разработчики игр, будущие владельцы браузерок и просто любопытствующие приглашаются под кат.
Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments25

Beat-chart – лучший друг гейм-дизайнера

Reading time3 min
Views37K
Всем привет!

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


Забегая немного вперед – так выглядит кусочек уже готовой локации в действии.
Читать дальше →
Total votes 43: ↑43 and ↓0+43
Comments12

Разработка ММО РПГ – практическое руководство. Сервер (часть 1)

Reading time10 min
Views46K
Турель Аннигилятор
  • Игровой backend: из каких модулей он должен состоять?
  • Расчет параметров персонажа: виртуальные методы или сложение массивов?
  • Логика поведения: на каком уровне она должна находится?
  • Перемещение персонажей: кто этим должен управлять?

        Сегодня мы продолжим знакомиться с разработкой и проектированием он-лайн игры на примере космической ММО RPG «Звездные Призраки». В этой статье речь пойдет о backend'е на С++ и она будет насквозь техническая.

        В тексте будет много отсылок к функционалу «Звездных Призраков», но я постараюсь излагать материал так, чтобы вам не было нужды вникать (и играть) в наш продукт. Однако, для лучшего понимания материала желательно потратить пару минут и посмотреть, как это все выглядит.

        В статье мы сосредоточимся именно на архитектурных решениях применительно к backend'у MMO RPG в реальном времени. Исходного кода будет не много и он точно не будет содержать таких специфических для С++ вещей как множественное наследование или шаблоны. Задача данной статьи помочь в проектировании игрового сервера и ознакомить всех желающих со спецификой игрового backend'а.

        Описываемые решения достаточно универсальны и вполне подойдут для многих RPG. В качестве иллюстрации в конце статьи я приведу пример использования описанной архитектуры в игре «про эльфов».
Далее
Total votes 33: ↑29 and ↓4+25
Comments29

Разработка ММО РПГ – практическое руководство. Эпизод 1

Reading time8 min
Views53K
image
  • Вам интересно, сколько стоит разработка онлайн-игры?
  • Вы хотите узнать, как организовать разработку ММО от идеи до релиза?
  • Задумывались ли вы о технических трудностях создания онлайн-игр?


        В цикле статей «Разработка ММО РПГ – практическое руководство» вы получите ответы на эти и многие другие вопросы. Все цифры реальны. Все схемы, таблицы, исходный код, диаграммы БД и прочее взяты из реально существующего и успешно работающего проекта.
        В тексте будет много отсылок к геймплею и внешнему виду нашей игры «Звездные Призраки». Я постараюсь излагать материал так, чтобы вам не было нужды вникать (и играть) в наш продукт, но для лучшего понимания материала желательно потратить пару минут и посмотреть, как это все выглядит.
        Готовы? Тогда в путь!
Подробности
Total votes 37: ↑27 and ↓10+17
Comments50

12 малоизвестных фактов о CSS

Reading time9 min
Views60K
Предлагаю читателям «Хабрахабра» перевод статьи «12 Little-Known CSS Facts (The Sequel)». Она совсем недавно была упомянута в дайджесте интересных материалов из мира веб-разработки и IT.

Update: немного «шлифанул» перевод напильником. Выражаю благодарность всем неравнодушным читателям.
Внимание! Под катом почти 1.5 Мб картинок и много интересных ссылок.

Итак, начнём-с…

1. В свойстве border-radius можно использовать slash-синтаксис.


Об этом уже писалось 4 года назад, но многие новички и даже некоторые опытные разработчики не знают о существовании этой «фишки».

Верите или нет, но следующий код валиден:

.box {
  border-radius: 35px 25px 30px 20px / 35px 25px 15px 30px;
}

Читать дальше →
Total votes 73: ↑71 and ↓2+69
Comments21

12 малоизвестных фактов о CSS (продолжение)

Reading time12 min
Views58K
Больше года назад я опубликовал 12 малоизвестных фактов о CSS (перевод на хабре), и по сей день это была одна из самых популярных статей на SitePoint. С тех пор я собирал больше интересностей и маленьких советов по CSS для новой публикации. Мы же все знаем, что каждый успешный фильм должен способствовать выходу новомодного сиквела, верно?


Автор иллюстрации SitePoint/Natalia Balska.

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

Примечание переводчика
0. Да, я видел опубликованный пару часов назад перевод этой же статьи. Но мне совесть не позволит удалить многодневный труд из-за опоздания на пару часов :) в общем, на ваш суд.

1. Оригинальная статья изобилует рабочими демонстрациями с CodePen. Хабр, к сожалению, не поддерживает вставки с подобных ресурсов, а заменять рабочие динамические примеры статичными картинками, думаю, не имеет смысла. Поэтому статья получилась немного «лысой» простыней, но, я надеюсь, заинтересованные читатели будут открывать недостающие примеры по ссылкам в новом окне.

2. Хотя я имею непосредственное отношение к верстке, перевод получился большим и не таким простым, как показался поначалу. Замечания по ошибкам, опечаткам, терминологии и т.п. просьба присылать личным сообщением в хабрапочту.
Читать дальше →
Total votes 56: ↑51 and ↓5+46
Comments13

Information

Rating
Does not participate
Registered
Activity