Когда возникла идея делать циферблаты для часов на Android Wear, к делу приступили без страха. Опыт разработки под «большой» андроид был, а на часиках крошечный экран и всего одна кнопка — легче лёгкого.
Не очень хорошо помню, как я оказался в дебаггере DOSBox, и почему я ковырялся в 16-битном ассемблере, восстанавливая функцию распаковки ресурсных файлов MM3.CC – но это было здорово. Игра у меня появилась на какой-то из последних распродаж humble bundle, а потом в сети я наткнулся на страницу Джеффа Людвига, где описывались проблемы с модификацией игры, связанные с компрессией в MM3.CC. В частности, там было написано следующее:
Оказалось, что этот алгоритм довольно сложно взломать, и пока ещё никто не научился распаковывать эти данные.
Вызов был принят. В его статье расписано, как он пытался бороться с алгоритмом. Я же распишу, как это делал я сам, и в конце дам ссылку на утилиту с открытым кодом, которая умеет не только распаковывать, но и запаковывать файл MM3.CC file.
DOS Packer
Посмотрев на MM3.EXE, я обнаружил, что это сжатый исполняемый файл DOS, с неким несжатым оверлеем, в начале которого стоит FBOV. Я ничего не знал про ДОСовские компрессоры, но я подсмотрел у Джеффа Людвига, что он использует вещь под названием “Universal Program Cracker” v1.11. Я нашёл версию 1.10 (выпущенную 25 июня 1997 года) и распаковал ехе. И мне удалось даже правильно обработать данные оверлея. И всё равно мне хотелось узнать название паковщика. Мне подсказали, что нужно использовать программу Detect It Easy, и действительно – она выдала:
Использование исключений для контроля хода выполнения программы (flow control) — давняятема. Я хотел бы суммировать этот топик и привести примеры правильного и неправильного использования исключений.
Визуализация в бизнес-аналитике очень важна. Например, концепт этих графиков отрисован совместно с Infographer.
Проблема со специализированным софтом для бизнес-аналитики в том, что он стоит как самолёт — и нужен только тогда, когда у вас под боком есть большая-пребольшая компания с соответствующим объёмом данных. В целом сейчас на рынке не так уж много спецов, кто такие системы щупал, имеет опыт работы с ними и может толком сказать, что это, зачем оно надо и что даст после внедрения.
Первое и главное применение бизнес-аналитики — это тупо в лоб уметь строить произвольные отчёты, пока руководители подразделений или члены совета директоров совещаются. Один из моих любимых примеров — с какого завода поставлять водку в магазины: с далёкого (дорогая логистика и 2 недели в дороге), но дешёвого по себестоимости производства или же с ближайшего (1 день), но дорогого?
Понятно, что можно поковыряться и ответить через неделю. Но чаще нужно более быстрое моделирование и не сотни разрозненных отчётов, а единая среда, где финансовый специалист может просто взять и получить необходимые данные без привлечения всего IT-отдела. Есть и ещё специфические задачи, которые решают эти и смежные системы. Сейчас расскажу.
Думаю, что у каждого пользователя Android рано или поздно возникает необходимость понять, какое приложение за ночь съело всю батарею притом, что телефон лежал с погашенным экраном. Участь найденного виновника не завидна: чаще всего его просто удаляют. Итак, что же сделать, чтобы наши приложения использовали аккумулятор минимально? В статье я постараюсь дать ответ на этот вопрос и рассказать о подходах к уменьшению потребления аккумулятора, которые мне доводилось использовать.
Под игрока — с семака, под вистующего — с тузующего.
Ещё одна народная мудрость.
Похоже, в этом посте всё смешалось. "Дурак" в заголовке, преферансные поговорки в эпиграфе и КДПВ, не имеющая отношения ни к тому ни к другому. Впрочем, само понятие "джокера", к предмету сегодняшнего разговора, отношение имеет самое непосредственное.
Полностью переработан дизайн сайта www.euler2012.com.
Для основного продукта компании — бесплатного GPS сервиса ViaLatM, выбран слоган — «GPS снимает стресс».
Почему мы выбрали такой слоган? Сервис позволяет снять ряд проблем, которые так или иначе приводят к стрессу. Например когда ждешь кого-то к себе, или ждешь известий как близкие добрались до места назначения. В этой статье описывается вариант использования сервиса для решения этой проблемы.
На сайте опубликованы:
Спецификация протокола ViaLatM Mobi — для взаимодействия с сервисом мобильных приложений на различных смартфонах
API доступа к сервису, которое позволяет разработчикам взаимодействовать с сервисом ViaLatM из других приложений и web сайтов.
Конечно, можно быть успешным программистом и без сакрального знания структур данных, однако они совершенно незаменимы в некоторых приложениях. Например, когда нужно вычислить кратчайший путь между двумя точками на карте, или найти имя в телефонной книжке, содержащей, скажем, миллион записей. Не говоря уже о том, что структуры данных постоянно используются в спортивном программировании. Рассмотрим некоторые из них более подробно.
Статья предназначается для всех любителей старой-доброй Total Annihilation и ее открытой реализации в виде SpringRTS + Balanced Annihilation.
Несмотря на то, что виджет Air Screen Keeper оказался, по большому счету, бесполезной затеей, на его примере ввиду небольшого размера можно отразить основные идеи построения расширений к играм на основе движка Spring.
Итак, суть виджета (т.е. расширения) — сообщить игроку в той или иной форме о том, что т.н. воздушный экран, состоящий из множества самолетов, выполняющих команду «патруль», атакован врагом с земли. Обычно такие атаки в разгаре битвы (8 на 8 игроков) не очень заметны и можно легко прохлопать, как противник таким образом уничтожит до 70% самолетов, если отвлечься на что-то сиюминутное.
Поэтому в качестве заметного сообщения будем использовать маркер на карте, видимый только игроку, и будем ставить его в месте, где был атакован наш самолет. Кроме того, чтобы не заполонить маркерами все на свете, будем выставлять их с задержкой в несколько секунд.
К сожалению, отсутствует видео, где это можно было бы посмотреть вживую. Вместо этого приведу пример более сложного виджета, управляющего конструкторами для автоматической застройки шахт по добыче металла в пределах периметра базы игрока. Кстати, последний вычисляется автоматически благодаря алгоритму, описанному в замечательной статье о построении минимальных выпуклых оболочек.
Исследователи информационной безопасности обнаружили ряд серьезных уязвимостей в одном из компонентов ядра мобильной ОС Android под названием Stagefright (библиотека для работы с файлами мультимедиа, например PDF). Первым о проблемах в компоненте Stagefright заявил исследователь из компании Zimperium Labs Джошуа Дрейк (Joshua J. Drake). Кроме того, об обнаружении серьезной уязвимости в Android заявила компания TrendMicro.
Как сделать программы быстрее? Один из эффективных способов – оптимизация кода. Зная особенности платформы, для которой создаётся приложение, можно найти эффективные способы его ускорения.
Механизм лямбда-выражений, представленный в Java8, стал такой фичей, которая чётко разделила код до нее и после (кажется, такое же может случится с Java9 и модульной системой, но в плохом смысле). В Java8 стало больше функциональных трюков, разнообразная обработка больших массивов данных стала значительно проще и теперь занимает куда меньше места. Однако, касательно рационального использования лямбда-выражений существует много вопросов таких как: насколько рационально часто их использовать? существенна ли потеря производительности теряется при переходе от обычного цикла в `forEach()` с лямбда-выражением и так далее. Большинство курсов (даже курс Oracle) игнорируют эти вопросы. В этом посте будет описан как раз один из, наверное, наименее популярных вопросов, но не менее интересный чем остальные:
Как работать сериализация лямбда-выражений в Java и как её можно использовать?
По мнению многих разработчиков, в большинстве случаев к слишком быстрому разряду аккумуляторов смартфонов приводит плохая оптимизация приложений. В мае этого года в Google прошла очередная ежегодная конференция Google I/O, на которой было анонсировано много всего интересного для разработчиков. В частности, когда речь зашла об Android M, то одной из центральных тем были именно производительность мобильных устройств и продолжительность работы от аккумулятора. Давайте взглянем на новые функции и инструменты, которые помогут пользователям и разработчикам выжать ещё больше из аккумуляторов мобильных устройств.
При работе программных модулей, хранящих в оперативной памяти большое количество данных, способ их хранения оказывает сильное влияние на потребление памяти и быстродействие. Один из способов ускорения системы и экономии ресурсов может заключаться в использовании более примитивных структур данных – структур вместо классов и примитивных типов вместо структур. Конечно, такой подход ломает ООП и возвращает к использованию «старых» методов программирования. Однако, в некоторых случаях такая примитизация может решить множество проблем. Простой тест показал возможность сокращения потребляемой памяти более чем в три раза.
Затрагиваемые вопросы:
Влияние программной архитектуры на потребление памяти и производительность;
Различия при работе в 32 и 64 битных режимах;
Различия между указателями и индексами массива;
Влияние выравнивания данных внутри классов/структур;
Влияние кеша процессора на производительность;
Оценка стоимости поддержки ООП в языках высокого уровня;
Признание факта необходимости учитывать низкоуровневые особенности платформы даже при разработке на языках высокого уровня.
Цель данной статьи — обсудить терминологию. Статья — не о том, как и для чего, а только исключительно об использовании терминологии. Статья отражает мнение автора и не претендует на научность.
Вступление
Если вы работаете в области программирования распределенных систем или в интеграции систем, то большая часть изложенного здесь вам не в новинку.
Проблема возникает, когда встречаются люди, использующие разные технологии, и когда эти люди начинают технические разговоры. При этом часто возникает взаимное недопонимание, обусловленное терминологией. Я здесь попытаюсь свести воедино терминологии, используемые в разных контекстах.
В мобильной разработке бывает потребность сделать приложение для работы без интернета. Например, словарь или справочник, который будет использоваться в суровых полевых условиях. Тогда для работы приложения нужно единожды выкачать архив с данными и сохранить его у себя. Сделать это можно посредством запроса в сеть, но так же можно зашить архив с данными внутрь приложения.
Согласно требованиям Google Play, apk-файл приложения должен быть не более 50 МБ, так же можно прикрепить два файла дополнения .obb по 2 гигабайта. Механизм простой, но сложный при эксплуатации, поэтому лучше всего уложиться в 50 МБ и возрадоваться. И в этом нам помогут целых два архивных формата Zip и 7z.
В этом посте я бы хотел поделиться результатами исследования способов оплаты, которые предпочитают пользователи при совершении покупок онлайн. Данное исследование охватило более сотни способов оплаты и тысячи сайтов, подключенных к агрегатору платежей «Единая касса» Wallet One в России. Сразу можно констатировать, что главной тенденцией 2015 года станет рост популярности онлайн-банкинга. За последний год количество покупателей, предпочитающих этот способ, возросло на 5,55%.
Наиболее востребованным способом все еще является оплата банковской картой, хотя количество транзакций, по сравнению с аналогичным периодом в 2014 году, снизилось на 5,86%. Также процент пользователей, предпочитающих расчеты электронными деньгами, уменьшился на 4,47%.
Специалисты компании, которая проводила исследование, объясняют такие результаты тем, что раньше многие выбирали оплату электронными деньгами только для того, чтобы не делиться данными своей карты с незнакомыми интернет-магазинами. С развитием онлайн-банкинга такая необходимость отпала. По этой причине онлайн-банкинг растет, а банковские карты и электронные деньги падают. Кроме того, банки прикладывают много усилий, чтобы сделать свои личные кабинеты максимально удобными.
Процентное распределение способов онлайн-платежей за первое полугодие 2015 и 2014 г.г. соответственно представлены на графиках:
В этой статье я бы хотел осветить вопрос ввода пользователем чисел с заданной точностью.
Давайте посмотрим что имеется в арсенале Android и решим эту задачу.
То, что не поддаётся измерению, не поддаётся и улучшению.
— Лорд Кельвин
Чтобы ускорить игры, написанные при помощи HTML5, для начала нужно определить их узкие места. Подсчёт FPS – это неплохой метод, но чтобы увидеть полную информацию, необходимо разобраться в нюансах поведения Chrome.
Инструмент about:tracing позволяет избежать лишней работы, связанной с увеличением быстродействия, и основанной большей частью на догадках. Вы сэкономите энергию и деньги, если чётко проследите работу браузера при помощи этого инструмента.
Он показывает вам всё, что делает Chrome, причём настолько детально, что сперва это даже может ошеломить. Многие функции Chrome изначально предназначены для трассировки, поэтому прямо из коробки для оценки производительности можно использовать about:tracing.
Для этого просто напишите about:tracing в адресной строке.
Инструмент трассировки позволяет включить запись, запустить игру на несколько секунд и посмотреть данные трассировки. Пример того, как они могут выглядеть: