Публикации

вчера в 11:24

Caesar III: game loop

Если бы меня спросили, какая часть технической реализации игры «Цезарь» мне интересна больше других, я бы вспомнил о расчете одного «дня» городской жизни. Отдельные компоненты математической модели города тоже интересны в реализации, но эти «шестеренки» будут крутиться только в сборе. Большая часть игры проходит внутри «игрового цикла», в котором проводятся вычисления параметров компонентов, выполняются перемещения игровых объектов, создаются новые события и объекты. Если вам интересно узнать, как была устроена симуляция города в одной из лучших игр 1998 года — добро пожаловать под кат. Описания, псевдокод и схемы помогут вам лучше узнать об используемых алгоритмах.


26541
196
dalerank 170,3
вчера в 17:52

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

Дорогие разработчики, вы чувствуете себя неуютно, потому что вы быстро пишете только на восьми языках для трех семейств устройств? Вздрагиваете ли вы, едва заслышав о переходе на очередной фреймворк? Откладывали ли вы любимый проект из-за того, что не могли определить, какая облачная платформа подойдет лучше всего?
Возможно, у вас тоже паралич разработчика. Бойтесь! Это не лечится.

Богатство доступных программистам опций сегодня просто чудовищно. Мы задохнулись под тем, что извергает рог изобилия. Последние несколько лет я зарабатывал на том, что писал на Java, Objective-C, C, C++, Python, Ruby, JavaScript, PHP (прошу прощения) с разными вариантами SQL/баз данных (MySQL, PostgreSQL, MongoDB, BigTable, Redis, Memcached и другими). Нравится ли это мне? Черт побери, нет. По большей части я просто чувствую вину за то, что не делал ничего на Erlang, Clojure, Rust, Go, C#, Scala, Haskell, Julia, Scheme, Swift или OCaml.
image

Я — жертва паралича разработчика: чувства ущербности из-за того, что индустрия софта развивается быстрее, чем может успеть один человек.
вчера в 11:51

Методы расширения в С++ перевод tutorial

Несколько дней назад Бьёрн Страуструп опубликовал предложение N4174 комитету по стандартизации С++ названное "Call syntax: x.f(y) vs. f(x,y)". Вот вкратце его суть: объявить выражение x.f(y) (вызов для объекта х метода f с аргументом y) эквивалентным выражению f(x,y) (вызов функции f с аргументами x и y). Т.е.

x.f(y) означает:
  1. Попробовать вызвать x.f(y): если класс объекта х содержит метод f, который может принять аргумент y — используем этот метод.
  2. Если пункт №1 не удался — проверяем, существует ли функция f, которая может принять аргументы x и y. Если это так — используем её.
  3. Если не найдено ни того, ни другого — генерируем ошибку.

f(x,y) означает ровно то же самое:
  1. Попробовать вызвать x.f(y): если класс объекта х содержит метод f, который может принять аргумент y — используем этот метод.
  2. Если пункт №1 не удался — проверяем, существует ли функция f, которая может принять аргументы x и y. Если это так — используем её.
  3. Если не найдено ни того, ни другого — генерируем ошибку.

Таким образом мы получаем возможность писать методы расширения, о которых мечтали многие С++ программисты. Я считаю это предложение одним из самых важных в эволюции языка С++.
13462
82
tangro 443,8
вчера в 12:36

Язык Go: реабилитация императивного программирования из песочницы

Практически все современные языки программирования включают в том или ином виде объектно-ориентированные возможности, тем не менее, авторы языка Go постарались максимально ограничиться императивной парадигмой. Это не должно вызывать удивление, если учесть что одним из авторов языка является Кен Томпсон (разработчик UNIX и языка С). Такая ярко–выраженная императивность языка может ввести опытного объектно-ориентированного программиста в некоторое недоумение и посеять сомнения насчёт возможности решения современных задач на таком языке.

Эта статья призвана помочь программистам, заинтересовавшимся в Go, разобраться в императивных особенностях языка. В частности, помочь реализовывать ключевые паттерны проектирования. Кроме этого, будут приведены некоторые интересные решения реализованные в самом Go, его стандартной библиотеке и инструментарии, которые приятно удивят многих.
10580
154
вчера в 12:40

Дизайнер игр: модель для сборки



Привет, меня зовут Александр Мишулин, я работаю креативным директором в Allods Team, подразделении Mail.Ru Group, которое занимается разработкой клиентских игр. Под термином «креативный директор» может скрываться многое. В моем случае это руководство направлением игрового дизайна в Allods Team, в первую очередь – на проекте Skyforge. Достаточно часто нам задают вопросы «Что такое дизайнер игр?», «Как им стать?», «Что вы ждете от кандидата в дизайнеры?», и сегодня я хотел бы ответить на часть таких вопросов и рассказать об этой профессии.
19094
140
GamesMRG 38,6
вчера в 16:09

Борьба с утечками памяти в Android. Часть 1

Этой статьей мы открываем цикл статей на Хабре о нашей разработке под Android.
Согласно докладу компании Crittercism от 2012 года, OutOfMemoryError — вторая по распространенности причина «крашей» мобильных приложений.
Честно говоря, и в Badoo эта ошибка была в топе всех крашей (что неудивительно при том объеме фотографий, которые просматривают наши пользователи). Борьба с OutOfMemory — занятие кропотливое. Мы взяли в руки Allocation Tracker и начали играться с приложением. Наблюдая за данными зарезервированной памяти, мы выявили несколько сценариев, при которых выделение памяти росло с подозрительной стремительностью, забывая при этом уменьшаться. Вооружившись несколькими дампами памяти после этих сценариев, мы проанализировали их в MAT (http://www.eclipse.org/mat/).
Результат был занимательный и позволил нам в течение нескольких недель снизить количество крашей в разы. Что-то было специфично для нашего кода, но также выявились типичные проблемы, присущие большинству Android приложений.
Сегодня поговорим о конкретном случае утечки памяти. О нем многие знают, но часто закрывают на это глаза (а зря).
9919
208
mutable 31,6
вчера в 22:08

FTDI наносит ответный удар

Иногда борьба корпораций с конечными пользователями приобретает гротескную форму, что и побудило меня написать этот пост. Коротко: я перестал беспокоиться любить FTDI.

Если вы используете устройство с подключением через конвертер USB2COM на чипе FTDI под Windows — берегитесь. В рамках борьбы с пользователями за интеллектуальную собственность FTDI ломает контрафактные чипы программными средствами.

5779
43
вчера в 14:14

Как отлаживать свой мозг из песочницы

GTD
Перевод статьи Оливера Эмбертона (Oliver Emberton) «How to debug your brain». Оригинал можно найти здесь.

Наши мозги – самое глючное барахло после Internet Explorer.


Для воспроизведения одного распространенного бага, попробуйте приказать себе «пойти в тренажерку». Мозги большей части людей в ответ обновят статус в Facebook и примутся за просмотр роликов с котятами. Это не ожидаемое поведение.

image

К счастью, я разработал заплатку. Но сперва давайте я расскажу, как работает весь этот мозг.
26334
266
Tyleesa 19,5
вчера в 04:34

«Пурпурный» I2P — окно в мир C++ приложений

I2P*
Известно, что официальный I2P написан на Java, что само по себе отталкивает потенциальных пользователей, тем самым снижая полулярность сети, чем могла бы быть. Кроме того Java приложения достаточно требовательны к ресурсам, потому запуск I2P на слабых устройствах сопряжен с трудностями, а порой и невозможен. Также выяснилось что Java в Африке не та же самая Java, и поддержка стойкой криптографии зависит от страны, из-за чего пришлось отложить массовый переход на ECDSA.
Поэтому реализация I2P на C++ всегда была актуальной задачей. Из множества попыток «пурпурный I2P» (Purple I2P) на настоящий момент является наиболее успешной и пригодной для практического использования. Название обусловлено цветом рубашки на иконке I2P, чтобы отличать от официального I2P, где цвет — красный и обозначает семейство приложений, использующих данную реализацию I2P. i2pd же представляет собой I2P маршрутизатор общего назначения.

10338
58
orignal 31,4
вчера в 14:59

Особенности отражения DDoS атак и история атаки на один крупный банк



Раньше DDoS-атаки могли успешно отбиваться на стороне ЦОДа атакуемой компании. Быстрые умные действия админа и хорошее фильтрующее железо гарантировали достаточную защиту от атак. Сегодня услуги ботнетов стремительно дешевеют, и DDoS становится доступен чуть ли не в малом бизнесе.

Около половины атак идут на интернет-магазины или коммерческие сайты компаний в духе «завалить конкурента», почти всегда атакуют сайты СМИ, особенно после «горячих» публикаций, намного чаще, чем кажется, бьют по госсервисам. В России главные цели – банки, розница, СМИ и тендерные площадки. Один из крупных российских банков, например, периодически блокирует трафик из Китая – атаки оттуда приходят с завидной регулярностью, одна из последних была больше 100 Гб/с.

Соответственно, когда атака переваливает, скажем, за 10 Гб/с, отражать её на своей стороне становится проблематично из-за банального забивания канала. Именно в этот момент нужно делать переключение на центр очистки данных, чтобы весь «плохой» трафик отсеивался ещё где-то около магистральных каналов, а не шёл к вам. Сейчас расскажу, как это работает у одного из наших вендоров защитных средств – Arbor, мониторящего около 90 Тбит/сек (45% мирового трафика Интернета).
16623
137
AVrublev 30,4