Вы когда-нибудь задумывались о том, что происходит с вашим приложением после того, как система убила его процесс за ненадобностью? Печально, но многие об этом даже не беспокоятся, словно это будет происходить в параллельной вселенной и их это не касается. Особенно этому подвержены новички. Их слепая вера в непоколебимость статик ссылок просто поражает.
В этой статье я расскажу о некоторых ошибках, которые могут возникнуть в результате нарушения шестой заповеди (не убей) по отношению к процессу приложения, и о том как проверить на сколько качественно он возвращается с того света.
Потратив несколько суток подряд (без перерыва на сон) на изучение поддержки HTML5 всеми любимыми Android-гаджетами, решил, что данной теме стоит уделить внимание. В статье постараюсь раскрыть по шагам все этапы (конечно же базовые/ключевые/основные) создания HTML5 Игрового приложения для Android от идеи до релиза самого APK файла. Возможно, ничего нового я и не открою маститым разработчикам, но для новичков постараюсь описать все как можно проще, со скриншотами и пояснениями.
Когда возникла идея делать циферблаты для часов на 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 г.г. соответственно представлены на графиках: