Немецкая ИТ-компания переоборудовала ядерный бункер 1960-х годов в современный дата-центр глубоко под землёй. В условиях почти полного отсутствия кислорода работает несколько инженеров.
Апгрейд бункера времён холодной войны осуществила фирма IT Vision Technology. Работа заняла два года. Уровень кислорода специально уменьшили, чтобы снизить риск пожара.
Среди клиентов компании — военно-воздушные силы Евросоюза и другие серьёзные компании, так что надёжность и безопасность являются ключевыми условиями работы IT Vision Technology.
Бункер находится в 160 км от Франкфурта. Изначально он был рассчитан на размещение 250 солдат, но с площадью 6900 м2 может вместить до 750 человек. Бункер находится на глубине 6 метров под землёй, а внешние стены имеют толщину 3,5 метра.
Компания IT Vision Technology инвестировала 3,5 млн евро в модернизацию бункера. Сейчас фирма собирается улучшить окружающий ландшафт, сделать пешеходные и велосипедные дорожки, парковки для автомобилей.
Когда ты независимый аналитик или сотрудник небольшой компании, то возникает проблема содержания базы различных вредоносных семплов в порядке. Кто-то использует для этого собственный приватный или локальный сервер с каким-нибудь Wiki-движком или самописной оберткой для базы данных. Но когда у тебя большое количество вроде бы однотипных семплов, то иногда хочется сделать небольшую заметку на будущее при поверхностном анализе для интересных файлов, а автоматический анализ, увы, не всегда справляется.
Intro
Сегодня речь пойдет о Viper. Под таким коротким названием скрывается модульный фреймворк для организации бинарных файлов и их анализа. Viper ориентирован на вирусных аналитиков и эксплойт-разработчиков, но он также пригодится и для обычных реверсеров из-за интересных модулей, база которых постоянно пополняется. К тому же немаловажным плюсом является то, что он написан на Python, и это позволяет модифицировать его под себя на лету.
Установка
Рассматривать установку мы будем на примере Debian-подобной системы. Для начала установим зависимости и сторонние программы, которые нам пригодятся для комфортной работы.
Так как фреймворк написан на Python, то нам потребуется для начала установить менеджер пакетов/библиотек — pip (на OS X я дополнительно использовал easy_install, о причине напишу в конце раздела):
sudo apt-get install gcc python-dev python-pip
После этого устанавливаем библиотеки для основного функционала:
Далее соберем первую программу из исходников — ssdeep. Скачиваем последнюю версию с официального сайта проекта:
~ $ tar -zxvf ssdeep-X.XX.tar.gz
~ $ cd ssdeep-X.XX
~ $ ./configure && make
~ $ sudo make install
~ $ sudo pip install pydeep
После этого уже можно переходить к установке самого фреймворка, но для полноты возможностей нужно установить две программы: YARA и androguard. Об этих утилитах мы уже писали, но повторюсь на всякий случай. Так же скачиваем последние версии с их официальных сайтов и собираем.
~ $ tar zxf androguard-1.9.tar.gz
~ $ cd androguard-1.9/
~ $ sudo python setup.py install
Теперь наконец-то можно скачать исходники и самого фреймворка. Можно взять архив с самого сайта, но там до сих пор указана версия 1.0 без многих интересных возможностей, поэтому будем использовать dev-версию:
git clone https://github.com/botherder/viper.git
И теперь уже устанавливаем собственно сам фреймворк:
$ cd viper
$ sudo pip install -r requirements.txt
Первый запуск фреймворка Viper
Все описанные шаги без проблем воспроизводятся в рамках OS X. Лично я для этого использовал macports. Единственная ошибка, с которой я столкнулся, была в невозможности отобразить цвета консоли (пример ошибки представлен на скриншоте), вместо этого выводился набор лишних символов. Эта проблема решилась установкой пакета:
$ sudo easy_install readline
В начале я пробовал его установить через pip, но, увы, процесс завершился с ошибкой.
Пример ошибки с цветами в OS X
Пример окна в OS X после решения проблемы
На Windows сам фреймворк тоже можно поставить, только без использования сторонних программ, которые собираются из исходников, или воспользоваться эмулятором *nix-среды — cygwin.
В комплекте к фреймворку также идет скрипт для его обновления:
$ ./update.py
На выходе ты получишь статус: обновился или нет тот или иной файл. До выхода версии 1.1 я столкнулся с проблемой, что скрипт не мог удалить какой-то файл во время процесса обновления. Ошибка оказалась в том, что до изменения этот файл был папкой с файлами. В таком случае поможет или ручное удаление, или клонирование фреймворка в другое место с переносом базы.
Android-вирусы
Начнем изучение функционала фреймворка на примере Android-вирусов. Для этого мы и устанавливали androguard (без него команда apk просто не будет работать). Загрузим первый семпл в фреймворк:
viper > open -f ~/samples/malware.apk
И первая команда, которая будет использоваться для любых файлов, — info.
viper malware.apk > info
Вывод информации о файле
Теперь мы точно знаем, что это Java-архив и, возможно, Android, поэтому выведем общую информацию о файле через аргумент -i, используя установленный ранее androguard:
viper malware.apk > apk -i
Компоненты Android-приложения
Здесь мы узнаем о названии приложения и его компонентах: Activity, Receivers, Broadcasts. Это в основном пригодится после декомпиляции.
Далее мы можем узнать о требуемых правах доступа:
viper malware.apk > apk -p
Первым делом ищем различные READ_SMS, RECORD_AUDIO или просто странные права доступа. В моем случае приложение требует не просто чтение внешней карты памяти, а ее монтирование android.permission.MOUNT_UNMOUNT_FILESYSTEMS.
И вывести содержимое APK-архива с указанием типа файла:
viper malware.apk > apk -f
Такая возможность может помочь найти ложные файлы, как в моем случае, под изображениями прячутся sh-скрипты и ELF-файлы.
Список и тип файлов из Android-приложения
Также все указанные выше операции можно вывести сразу:
viper malware.apk > apk -a
Для примера я вывел информацию о другом Android-вирусе, популярном Dendroid. Здесь все как по учебнику, приложение хочет читать и отправлять SMS, звонить, доступ к микрофону и прочее.
Вывод информации о вирусе Dendroid
Но вернемся к нашему первому трояну. Этот семпл я часто даю в качестве примера тем, кто только начинает анализировать вредоносные программы для ОС Android. Здесь мы видим, что приложение не требует доступа к SMS или звонкам, что обычно и смущает немного продвинутого пользователя.
И последняя, самая нужная функция — декомпиляция приложения:
viper malware.apk > apk -d /tmp/decompiled_apk
[*] Processing the APK, this may take a moment...
[*] Decompiling Code
[*] Decompiled code saved to /tmp/decompiled_apk
Еще одна особенность — мы можем запускать терминальные команды прямо из фреймворка, используя символ !. Откроем наш декомпилированный код:
viper malware.apk > ! gedit /tmp/decompiled_apk
Декомпилированный код Android-вируса
Вспомним странные файлы «изображения» и попробуем найти по их имени что-нибудь интересное. Был найден код, в котором изменялось расширение png на sh, выставлялись права на выполнение и запускались через командную строку:
После поверхностного анализа были найдены строчки в одном из бинарных файлов (gbfm.sh):
...
[**] Gingerbreak/Honeybomb -- android 2.[2,3], 3.0 softbreak
[**] (C) 2010-2011 The Android Exploid Crew. All rights reserved.
...
Это указало на то, что создатели использовали исходники эксплойта Gingerbreak, которые автор выкладывал для получения прав администратора на Android-телефоне. И надо отдать вирмейкерам должное — они изменили некоторые строчки, но не стали удалять копирайты :).
Помимо Android-программ, заодно немного затронем модуль для анализа Java-файлов jar. У него не так много функций: список файлов внутри JAR-архива, возможность вытянуть его содержимое и информация из файла manifest. Сделаем дамп одного из Java-эксплойтов:
viper out.jar > jar -d /tmp/jar
Дамп вредоносного JAR-архива
Как видишь, это одна из разновидностей эксплойтов, которую просто как анализировать, так и создавать. Внутрь архива мы можем вставить, используя стандартные средства, любой exe-файл и без манипуляций с Java.
Вредоносные документы
Перед тем как перейти к модулям, ответственным за работу с офисными документами, разберем несколько общих модулей.
Для начала возьмем команду shellcode. Она ищет по своей базе шаблоны шелл-кодов и выводит смещения, по которым они могут быть найдены.
viper malware.docx > shellcode
Помимо поиска шелл-кодов внутри файла, тебе может потребоваться поиск XOR-ключей. Хоть и XOR-шифрование считается довольно слабым, его все равно продолжают использовать. Поэтому был добавлен модуль, который брутит файл с помощью XOR-метода и ищет определенные строки. По умолчанию взяты самые распространенные:
This Program
GetSystemDirectory
CreateFile
IsBadReadPtr
IsBadWritePtrGetProcAddress
LoadLibrary
WinExec
CreateFileShellExecute
CloseHandle
UrlDownloadToFile
GetTempPath
ReadFile
WriteFile
SetFilePointer
GetProcAddr
VirtualAlloc
http
Также можешь задать и сам вручную через аргумент -s:
viper malware > xor -s www
Начнем с офисных документов формата doc/docx. Для работы с такими файлами создан модуль office.
viper > open -f ~/Downloads/document.doc
Для начала узнаем метаданные файла (шаблон, время создания и прочее):
viper.py document.doc > office -m
Метаданные офисного документа
Часть из этих данных мы можем узнать также через команду info.
Теперь узнаем, что за OLE-объекты присутствуют в файле:
Вот и первая странность — SWF-ролик внутри документа. И если честно, я еще не встречал «хорошего» Word-документа с видео внутри. Также ты можешь увидеть OLE-структуры doc-файла:
viper document.doc > office -s
Теперь вытащим все объекты из документа, в том числе и SWF-файл:
viper document.doc > office -e /tmp/documentdoc
Дамп файлов из Word-документа
Теперь все объекты находятся внутри раздела с названием documentdoc. Для нас интерес представляют:
Saved Decompressed Flash File to /tmp/documentdoc/ObjectPool-_1382429393-Contents-FLASH-Decompressed1
Saved Flash File to /tmp/documentdoc/ObjectPool-_1382429393-Contents-FLASH-1
Как видишь, офисный модуль автоматически разархивировал SWF-файл, но мы все равно воспользуемся встроенным модулем swf, чтобы рассмотреть и его работу. Правда, пока что весь его функционал заключается в распаковке Flash-ролика и автоматическом открытии в фреймворке с выводом дампа в шестнадцатеричном виде на экран:
viper document.doc > open -f /tmp/documentdoc/ObjectPool-_1382429393-Contents-FLASH-1
viper ObjectPool-_1382429393-Contents-FLASH-1 > swf decompress
...
[*] Flash object dumped at /tmp/ce79b287214d513ff1b1030be96cda90.swf
[*] Session opened on /tmp/ce79b287214d513ff1b1030be96cda90.swf
viper ce79b287214d513ff1b1030be96cda90.swf >
Само собой, в фреймворке поддерживаетя поиск строк, в том числе есть возможность найти домены внутри файла. Воспользуемся на примере этого файла:
Если последние три — системные домены, то первая — это ссылка на сервис по сокращению URL-адресов, которая ведет на загрузку и запуск exe-файла. Саму же ссылку можно увидеть в hex-дампе или при выводе всех строчек из файла:
viper ce79b287214d513ff1b1030be96cda90.swf > strings -a
По аналогии с офисными документами в фреймворке есть возможность работать с файлами в формате PDF. Информация о файле:
viper.py document.pdf > pdf id
Объекты в PDF-документе:
viper.py document.pdf > pdf streams
Которые можно сдампить и при желании сразу открыть внутри фреймворка:
viper.py document.pdf > pdf streams -o 1
Как видишь, эти модули довольно просты и при анализе эксплойтов таких форматов требуют дополнительные программы. Например, утилита от Adobe для анализа SWF-файлов SWF Investigator или комплект SWFTools. Но при желании и наличии времени все это можно добавить в виде модулей, что облегчит и увеличит скорость анализа.
Анализ PE-файлов
Ну и наконец-то рассмотрим функционал для анализа вредоносных программ для ОС Windows. Для этого мы будем использовать модуль pe. В качестве подопытного я нашел семпл DarkComet. Первое, что нам пригодится, — это экспортные и импортные функции:
viper rat.exe > pe exports
viper rat.exe > pe imports
Язык, на котором, возможно, написана программа, и время ее компиляции:
viper rat.exe > pe language
[*] Probable language: Delphi
viper rat.exe > pe compiletime
[*] Compile Time: 2012-01-15 20:49:40
Троян типа Rat я взял неслучайно. Автором и одним из контрибьюторов кода выложено большое количество готовых модулей для вытаскивания полезной информации из вирусов такого типа. Для этого используется модуль с одноименным названием rat, и на данный момент, как видишь, уже поддерживается порядка 20 типов троянов.
Из них мы можем сразу вытянуть адрес управляющего сервера и, возможно, данные к FTP-серверу:
viper rat.exe > rat -a
[*] Automatically detected supported RAT DarkComet
[*] Configuration:
...
| GENCODE | -smcAx/.rVLD |
| MUTEX | DC_MUTEX-V918LXH |
| NETDATA | darkrat.ddns.net:1604 |
...
Помимо модуля, еще используются готовые правила для программы YARA, но ориентированные не только на RAT:
viper rat.exe > yara scan
YARA-правила при желании можно редактировать прямо из фреймворка. Достаточно вывести список текущих и выбрать номер желаемого. По умолчанию все редактирования ведутся из редактора nano:
Немного ниже я распишу подробнее работу с большим количеством семплов, а пока что рассмотрим некоторый массовый функционал модуля pe. Для примера я взял набор семплов по трояну SpyEye. У большинства команд для модуля pe есть возможность сравнить текущий открытый файл с другими, используя аргумент --scan. Я приведу некоторые из них:
viper malware.exe > pe language --scan
viper malware.exe > pe resources --scan
viper malware.exe > pe compiletime --scan
На скриншоте ты можешь видеть, что помимо анализируемого файла еще три из примерно 30 семплов скомпилированы в одно и то же время до секунды, что наводит на мысль об использовании одного и того же криптора. В подтверждение к этому мы также видим, что схоже не только время, но и ресурсы приложения.
Также ты можешь найти свежий материал для исследования, воспользовавшись различными трекерами вредоносных (как изначально, так и вследствие взлома) сайтов. К примеру:
Фреймворк позволяет загружать файлы и работать с ними не только локально, но и по URL-адресу:
viper > open -u http://site.com/malware.exe -t
Аргумент -t позволяет скачать файл не напрямую, а через Tor (зачем лишний раз палить IP-адрес аналитиков?). Для этого нужно поставить сам Tor и Python-библиотеку для него:
sudo apt-get python-socksipy privoxy tor
Файл загружается во временную папку /tmp и со случайным именем, которое будет указано после в командной строке viper. После манипуляций с семплом или сразу после загрузки можно сохранить файл на диск с помощью команды store (она также автоматически добавит его в текущий проект, о котором мы поговорим позже):
viper tmprvGrYl > store
По умолчанию они сохраняются в раздел binaries фреймворка.
Сохранение загруженного файла на диск
Массовый анализ
Во время исследования часто приходится сталкиваться с анализом большого количества семплов. А как уже было упомянуто в начале статьи, фреймворк создан не только для анализа, но и для организации своей базы данных семплов. В этом нам помогает простая система проектов.
Новые проекты создаются через аргумент -p или --project name_project при запуске фреймворка. Если проект с таким именем есть в базе, то он будет загружен, если нет, то будет создан.
После запуска фреймворка ты можешь вывести список всех проектов и изменить на нужный в данный момент:
Если проекта с указанным именем не будет в наличии, то он также будет создан. Все проекты хранятся в разделе projects фреймворка, и удалить проект можно только локально из него.
Управление проектами внутри фреймворка
Возможно, все твои подопытные хранились в одном месте, например в разделе «Загрузки», или был получен архив с большим количеством различных семплов. В этом случае ты можешь создать отдельный проект и загрузить как все файлы из папки, так и соответствующие какому-то критерию:
--file-size (-s) — по размеру (возможный максимум);
--file-type (-y) — по типу файла;
--file-name (-n) — по шаблону имен;
--tags (-t) — по тегам.
Разберем на примере самого нужного критерия при большом количестве семплов — типа файла. Для этого воспользуемся уже упомянутой командой store, но с другими аргументами. Загрузка всех файлов:
viper > store --folder /home/dukebarman/samples
Загрузка exe-файлов:
viper > store --folder /home/dukebarman/samples --file-type PE32
Загрузка Java-файлов:
viper > store --folder /home/dukebarman/samples --file-type Java
Если не уверен в типе файла, то его можно посмотреть в разделе Type, если откроешь нужный файл и введешь команду info.
Помимо этого, поддерживается команда find. После загрузки всех файлов в проект ты можешь осуществить поиск по нужным параметрам: all, latest, name, type, mime, md5, sha256, tag и note. К примеру, найдем все APK-файлы:
viper > find name *.apk
Или просто выведем все семплы из текущего проекта:
viper > find all
После чего мы можем открыть нужный файл через его номер. Например, под номером 3:
viper > open -l 3
Поиск Android-приложений в базе с помощью команды find
Следующая полезная команда — fuzzy. Позволяет сравнить открытый файл с другими семплами в проекте и найти похожие. По умолчанию выводит те, у кого схожесть выше 50%. Но если задать параметр -v, то он выведет процент схожести для каждого файла. Пример работы представлен на скриншоте.
Далее можно проверить все добавленные семплы с помощью YARA (если в данный момент не открыт какой-либо файл), и при желании она автоматически добавит теги к семплам:
viper project > yara scan --tag
Проверка всех семплов проекта с помощью YARA
Помимо проектов, ты можешь использовать сессии для одновременной работы с несколькими файлами. Аргументы идентичны тем, которые есть в системе проектов:
Команда close используется для завершения работы с текущей сессией, но не с самим фреймворком.
Outro
Несколько возможностей мы с тобой не успели рассмотреть, поэтому распишу вкратце:
работа с песочницами (см. врезку);
clamav — сканирование файла с помощью локального антивируса clamav;
exif — метаданные;
idx — парсинг Java *.idx файлов;
html, email — импорт вредоносных файлов из тела письма или HTML-страницы.
После прочтения у тебя наверняка возникли идеи, что можно добавить или изменить в этом фреймворке. Поэтому приглашаю задавать свои вопросы на канале ###viper IRC-сервера irc.freenode.net. Также ты можешь их написать или сообщить об ошибке в раздел issues GitHub-репозитория. Лично я в данный момент использую этот фреймворк для приведения в порядок своей базы с различным вредоносными эксплойтами (SWF, docx, Java и так далее), найденными на просторах интернета.
Ну а пока что на этом все, остается лишь пожелать тебе удачи в исследовании серпентария темной стороны.
Нередко пользоваться смартфоном или доставать его из кармана бывает не совсем удобно: во время дождя, за рулем автомобиля, на совещании… Или просто лень вставать с теплого дивана, чтобы посмотреть, что именно пришло на телефон. В данной статье я расскажу, как настроить уведомления, приспособить под себя и использовать в полную мощь едва ли не самые популярные умные часы — Pebble.
Введение
На сегодняшний день только ленивый не писал об этих часах. Самый успешный проект на Kickstarter (собрано было более десяти миллионов долларов), Pebble произвели революцию и стали предметом обожания многих гиков. Сейчас часы продаются по цене 99 долларов за пластиковую модель с силиконовым ремешком (на выбор предоставлены восемь цветов) и 199 долларов за второе поколение часов — стальную модель с кожаным и металлическим ремешком. Обе имеют пыле- и влагозащиту, и лично я свои часы практически не снимаю.
Благодаря особенностям экрана (E Ink) при среднем использовании заряд держится около недели. В них можно плавать, бегать, делать ремонт, спать, и в каждом случае часы могут быть активным помощником. Достаточно зайти в маркет и ввести в поиске слово pebble или зайти в раздел Apps приложения на телефоне. Можно найти приложения для уведомлений, навигации, управления музыкой, спуском затвора на камере телефона и камерой GoPro, а также десятки игр, сотни интересных программ (watchapp) и тысячи циферблатов (watchface) на любой вкус. После недавнего обновления появился компас и стали правильно функционировать фоновые процессы, позволяющие нормально работать трекерам активности и умным будильникам.
В этой статье я расскажу про самые интересные программы из маркета, а также, в лучших традициях журнала, покажу, как настроить часы самостоятельно под свои нужды, не имея навыков программирования. Помогут нам в этом две основные программы: Tasker и AutoPebble.
INFO
Несмотря на бешеную популярность часов, единственным официально поддерживаемым языком остается английский. Добавить русский можно, собрав свою прошивку на pebblebits.com.
Play Market и Pebble Store
Все приложения Pebble можно разделить на два типа. Те, что доступны в Google Play, называются компаньонами — companion app. Watchface и программы, не нуждающиеся в компаньонах, можно скачать напрямую из Pebble Store.
Apps for Pebble
Перво-наперво обязательно ставим данное приложение из Google Play. Это неофициальный магазин приложений и циферблатов. Хотя сами приложения там собраны из того же маркета, зато каталог циферблатов гораздо более полный. Да и работает программа намного быстрее официального приложения. Кстати, создать свой собственный циферблат поможет программа Canvas или один из онлайн-сервисов.
Выбор циферблатов
Нотификаторы
Далее нам понадобится более продвинутый и функциональный нотификатор. Таких в маркете около десяти, но я рекомендую остановиться на одном из этих трех:
Notification Center for Pebble — расширяет базовый функционал встроенного приложения. Позволяет просматривать историю и текущие уведомления. Имеет фильтр приложений для отображения и может убирать уведомления из шторки (dismiss) для версий Android 4.3+.
Notify Pebble — имеет собственный интерфейс показа уведомлений, показывает время и иконку приложения. Может удалить все уведомления из шторки или запустить приложение на телефоне. Также имеет в настройках светлую и темную темы, режим «Не беспокоить», разную вибрацию для разных приложений и настраиваемую высоту шрифта.
YaNC PRO — отличается принципом работы. На телефоне генерируется картинка, которая затем отправляется на часы. Это позволяет отображать любые языки, включая иероглифы, и видеть присланные смайлы.
Расширить базовые возможности уведомлений о входящем звонке поможет Pebble Dialer. Позволяет выключить микрофон и поставить смартфон на громкую связь, что пригодится, когда руки заняты/грязные/мокрые или все одновременно.
INFO
Для работы всех нотификаторов необходим доступ к уведомлениям в настройках.
Комбайн
Идем дальше и переключаемся на более узкоспециализированный софт. В Pebble всего восемь слотов для установки приложений, поэтому рекомендую установить один из доступных в маркете комбайнов «все в одном», к примеру Pebble Notification & Reminder. Это мощнейший набор утилит для управления телефоном. Своего рода швейцарский нож в мире Pebble. Умеет запрашивать текущие уведомления, показывает погоду на неделю прямо на циферблате, есть противоугонка — можно выбрать, что делать при потере связи с часами: вибрировать или включить сирену на телефоне. Посылает предупреждение о низком заряде телефона. В меню управления телефоном можно управлять статусом Wi-Fi, узнать статус передачи данных и GPS, поставить на вибрацию, увеличить/уменьшить громкость, посмотреть заряд батареи.
В разделе утилиты можно «найти телефон» — запустить на телефоне громкую мелодию, запомнить текущие координаты, запустить навигацию к сохраненным координатам с получением подсказок прямо на часы, сделать фото, показать календарь и посмотреть в подробностях записанные события. В разделе управления компьютером можно направлять команды, предварительно настроив IP и порт в приложении (поддерживаются PowerPoint или Spotify). Ключевая особенность программы, благодаря которой она и получила название, — возможность создания напоминаний, которые в нужное время появятся на телефоне.
Управление напоминаниями
INFO
Отдельно управлять настройками смартфона можно с помощью Toggles Pebble.
Спорт и трекеры активности
В одном из последних обновлений прошивки Pebble добавили возможность фонового исполнения процессов, что позволило точно отслеживать акселерометр и с некоторой долей погрешности следить за подвижностью человека, считать шаги, время, проведенное в глубоком сне, и потраченные калории. Поэтому следующим шагом я рекомендую установить один из спортивных трекеров.
UPIt Pebble Pro for UP/UP24 — дополнение к браслету Jawbone UP и UP24. Позволяет выводить на часы всю необходимую информацию с браслета в реальном времени. Кроме того, имеет удобные виджеты для телефона и поддержку нескольких циферблатов в Canvas.
Swim.com Pebble Uploader — для тех, кто любит поплавать. Необходимо лишь привязать аккаунт одноименного сайта и выставить в настройках длину бассейна.
Pebble Runner — для бегунов. Отслеживает маршрут, а также автоматом отследит время круга и покажет лучший круг. Конечно же, телефон с включенным GPS должен находиться рядом.
Программа Sleep as Android проследит за сном и разбудит в нужную фазу, так же как и LetsMuv. Последняя к тому же посчитает потраченные калории. Misfit покажет пройденные шаги прямо на экране циферблата, а также успехи за неделю. Количество пройденных шагов для достижения цели можно установить самому.
Камера, звук, мотор
Тебе наверняка понадобится приложение для удаленного управления камерой смартфона. Здесь на выбор три лучших из лучших: Watch Trigger, PblCamera и PebbleCam. Последние две имеют предпросмотр в реальном времени, так что можно найти правильную позу и посмотреть, помещаешься ли в кадр. Для записи видео есть Multimedia for Pebble. Управлять музыкой на телефоне удобнее всего через приложение Music Boss. Помимо внушительного списка возможностей и поддерживаемых плееров, программа имеет интеграцию с Chromecast и позволяет управлять воспроизведением и звуком с часов.
Заметки и текст
Pebble удобно использовать для заметок, поэтому в качестве must have приложения я рекомендую установить Push to Pebble, которая не требует установки watchapp на часы и отсылает текст через встроенный нотификатор. Если заметки хранятся в облаке, то можно использовать Keep for Pebble для Google Keep или WatchNote для Evernote.
Для более сложных случаев и длинного текста пригодится Pebble Reader, из которой с помощью встроенного файлового менеджера прямо с часов можно открыть файл txt в любой кодировке. Текущая страница запоминается при последующем открытии, также есть настройка шрифта и выбор из светлой или темной темы отображения. Можно накидать основные тезисы или содержание для презентации и доклада и держать руки свободными.
Pebble Reader
AutoPebble
Ну вот мы и добрались до самого интересного. AutoPebble — это плагин для Tasker, который позволяет управлять смартфоном с помощью часов (или наоборот) так, как только тебе вздумается. Фактически он способен заменить 80% всех доступных для часов приложений, но требует некоторых знаний и времени для настройки профилей.
О Tasker в журнале писали неоднократно, так что подробно описывать все профили не буду, а покажу лишь основные возможности и ключевые шаги настройки. Напомню принятые в статье обозначения: профиль (profile) определяет условия срабатывания события (event/state), в ответ на которое выполняется задача (task), состоящая из одного или более действий (action). По-прежнему рекомендую использовать английскую локализацию и отключить режим новичка (beginner mode) для манипуляций с профилями.
Итак, первым делом необходимо установить на смартфон AutoPebble. Он состоит из двух компонентов: приложения (watchapp) и собственно плагина для Tasker. Первый работает на часах и выполняет три функции:
Прием команд от плагина, с помощью которых можно запустить вибратор, вывести на экран сообщение или включить подсветку.
Вывод на экран меню, с помощью которого можно отправлять команды плагину, чтобы затем обработать их с помощью Tasker.
Перехват нажатий кнопок и снятие показаний с датчиков, которые также можно отправить плагину с целью настроить реакцию смартфона на нажатие кнопок на часах или взмах рукой.
В следующих примерах мы будем использовать преимущественно вторую функцию приложения, то есть управлять смартфоном с помощью меню. Для этого меню сначала необходимо сформировать. Создаем в Tasker профиль с условием: State -> Plugin -> AutoPebble App. Ставим галочку на пункте Watch App Opened. Далее создаем новую задачу и для действия определяем Plugin -> AutoPebble List. Это действие выведет на часы информацию в виде списка, пункты которого (максимум 20) можно переключать и запускать кнопками. В поле Labels следует ввести имена пунктов меню через запятую, а в поле Actions — команды (также через запятую), которые будут отправлены Tasker при выборе пунктов меню.
На данном этапе настройки эти поля можно заполнить произвольными значениями (например, «Test1, Test2», «test1, test2»). Далее по тексту мы рассмотрим несколько профилей Tasker и постепенно заполним меню разными пунктами, каждый из которых будет привязан к своему профилю в Tasker.
Управление звуком
Начнем с простого профиля, который позволяет быстро отключить звук смартфона. Настройка очень проста. Добавляем пункт меню с именем Mute и командой mute. Перехватываем команду в Tasker через событие State -> Plugin -> AutoPebble -> Command Filter: mute. Ставим галочку Exact (это надо делать всегда во всех профилях). Для задачи выбираем четыре действия (последнее действие опционально и необходимо для того, чтобы закрыть меню AutoPebble после завершения задачи):
Audio -> Media Volume 0
Audio -> Ringer Volume 0
Audio -> Notification Volume 0
Plugin -> AutoPebble App -> Control Watch App -> Close
Это все. Теперь, открыв меню AutoPebble на часах и выбрав меню Mute, мы быстро замьютим смартфон. Чтобы быстро вернуть все на место, можно создать дополнительный пункт меню (например, Unmute) и аналогичный профиль, вставив вместо нулей нужные значения громкости. Таким же образом можно создать профили для управления Wi-Fi, Bluetooth, передачи данных, Airplane Mode и так далее.
Настройка выключения звука
Поиск телефона
Еще один простой профиль, на этот раз для поиска смартфона. Принцип работы: при выборе пункта меню Find смартфон начнет проигрывать музыкальную композицию. Для начала добавляем в меню пункт Find phone с командой findphone. В профиле через State -> Plugin -> AutoPebble -> Command Filter: findphone ловим команду (обязательно ставим галочку на Exact), а в задаче выкручиваем громкость на максимум через Audio -> Media Volume и запускаем любимую музыку через File -> Open File. Возможно, на некоторых моделях предварительно необходимо разблокировать телефон. Обычно это можно сделать, добавив первым действием Alert -> Popup.
Блокировка смартфона при потере связи с часами с помощью Tasker
Очень полезный профиль, который включает или отключает блокировку экрана с помощью PIN’а в зависимости от того, находятся ли часы в зоне видимости Bluetooth. Позволяет, во-первых, не беспокоиться о вводе PIN’а, когда часы на руке, а во-вторых, защищает смартфон в том случае, если он где-то забыт. Настройка очень простая и вообще не использует возможности AutoPebble:
Событие (Event):
State -> Net -> BT Connected -> выбираем часы
Задача (Task):
Display -> Keyguard: Off
Exit Task:
Display -> Keyguard: On
Снятие блокировки при наличии связи с часами
Координаты и геолокация
Еще более сложный пример, включающий в себя сразу несколько профилей и дополнительный плагин. Суть его в следующем: нам нужно найти припаркованную на огромной стоянке супермаркета машину (как вариант — найти гостиницу в незнакомом городе). Традиционно все это делается с помощью Google Maps и отметок на карте, но так как мы люди ленивые и лишний раз смартфон из кармана доставать не очень любим, то сделаем то же самое с помощью часов.
Для этого нам понадобится два новых пункта меню в AutoPebble (пункты «Запомнить», «В путь» и команды coord, find), плагин AutoLocation и три Tasker-профиля. Первый профиль перехватит команду coord, создаст новый запрос координат и запустит монитор геолокации на смартфоне с помощью плагина AutoLocation. Второй профиль автоматически запустится, когда появится запрос геолокации, определит местоположение, выполнит проверку на точность местоположения, подкорректирует ее, если она недостаточна, запомнит координаты и остановит монитор геолокации. Третий профиль обрабатывает команду find и запускает программу навигации на смартфоне и/или часах с сохраненными ранее координатами.
В качестве события выбираем State -> Plugin -> AutoLocation Location. В единственном поле вводим “Car geofence”.
Создаем задачу и добавляем в нее условный блок Task -> If: %alaccuracy < 20. Он будет выполняться, если точность определения координат недостаточна.
Внутри блока изменяем переменную %alaccuracy: Variable set: %alaccuracy to %alaccuracy+20.
Добавляем действие Plugin -> AutoLocation manage: Geofence Name — Car geofence; Action — Add/Edit; Lattidude — %allatitude; Longitude — %allongitude; Radius — %alaccuracy.
Добавляем действие для остановки геолокации: Plugin -> AutoLocation Location -> Location Monitor -> Stop.
Закрываем блок через Task -> End If.
Наконец, третий профиль. Он будет отрабатывать при выборе пункта меню «В путь» и запускать карту:
В качестве условия выбираем State -> Plugin -> AutoPebble -> Command Filter: find.
Чтобы разбудить телефон, создаем Alert -> Popup c Title: “Поехали” и Text: “Загружаю карту”.
Далее добавляем Plugin -> Autolocation Info и заполняем только один пункт: Geofence Lookup -> Name и вводим все тот же “Car geofence” из первого профиля.
Добавляем Plugin -> AutoLocation Map. Вписываем переменные %allatitude и %allongitude в соответствующие поля и выбираем Mode -> Navigation.
Профиль определения координат
По желанию можно сразу запустить навигацию на часах. Я использую программу NavMe. Для этого последним действием добавляем Plugin -> AutoPebble App: Other Pebble App — выбираем NavMe, Action — Open.
Нотификатор своими руками
В завершение попробуем сделать собственный нотификатор. Для этого нам необходим еще один плагин от того же разработчика — AutoNotification, который будет перехватывать уведомления смартфона. Плагин автоматически записывает всю полученную информацию из уведомления в переменные Tasker (%antitle, %antext, %anapp, %anpicture), так что нам останется только собрать ее и отправить на часы в том виде, какой нам больше нравится.
В качестве условия профиля выбираем State -> Plugin -> AutoNotification Intercept. Ставим галочку на Event Behaviour, выбираем Only Created Notifications и Non-Persistent Only, то есть только созданные и те, которые не висят постоянно в шторке. Чтобы не собирать абсолютно все уведомления, фильтруем необходимый текст или приложение. Советую вписывать нужные приложения в поле Package Name. Плагин поддерживает регулярные выражения, и, чтобы создать один профиль для Hangouts и Viber, необходимо вписать (com.google.android.com|com.viber.voip) и поставить галочку на Regex. Символ | означает ИЛИ, а имя пакета можно посмотреть в настройках телефона: «Приложения -> Все» (тапнуть на нужном) или в адресной строке страницы приложения в веб-версии Google Play.
Для вывода текста на часы можно использовать два разных способа: если нужно вывести кнопки оповещения и реагировать на их нажатие, то это Plugin -> AutoPebble Notification, а если нужно просто отобразить текст, то это Plugin -> AutoPebble Text Screen. Настройка обоих вариантов показана на скриншоте «Нотификатор из Tasker».
Нотификатор из Tasker
Также понадобится отдельный профиль для удаления уведомления. Ловим команду “dn=:=” и для действия выбираем Plugin -> AutoNotification Cancel. Заполняем Other Id: %apcomm1; Package: %apcomm2; Tag: %apcomm3. Нотификатор готов. При наличии root, Xposed Framework и некоторых модулей можно добавить в уведомления кнопку «Пометить как прочитанное» для СМС и Gmail, которую также можно отобразить на часах. Более сложные профили можно посмотреть на канале разработчика Жуана Диаса (Joao Dias), а примеры работы описанного выше с пояснениями — на моем канале.
Продвинутый уровень
С помощью Tasker, AutoPebble и установленных на рутованном телефоне BusyBox и SQLite можно прямо с часов доставать информацию из баз данных, находящихся на телефоне. Мне, например, очень удобно использовать для хранения паролей, списков покупок и других записей программу Google Keep. Сам профиль можно найти в приложении к журналу. Отмечу, что вытащить из базы список заголовков всех заметок можно командой Script -> Run Shell: /system/xbin/sqlite3 /data/data/com.google.android.keep/databases/keep.db “SELECT c0title FROM text_search_tree_entities_content WHERE docid<21;”.
Последнее условие (WHERE docid<21) нужно для того, чтобы вытащить из базы только 20 записей, ведь для вывода информации через AutoPebble List доступно только 20 строк. Сам текст можно доставать командой “SELECT c0text FROM text_search_list_items_content WHERE c1list_parent_id = %apcomm;”, где %apcomm — это текст команды, переданной с часов, при нажатии на нужный заголовок. Он соответствует ID, который можно получить через “SELECT docid FROM text_search_tree_entities_content WHERE docid<21;”.
Аналогично можно вытаскивать из Google Keep непосредственно списки и помечать выполненными пункты или купленные продукты, затем перегружая экран без выполненного. Если заглянуть в базу, то можно увидеть, что заметки, оформленные в виде именно списков, имеют в tree_entity в графе type цифру 1. ID в ветке tree_entity соответствует docid в ветке text_search_tree_entities_content, а также list_parent_id в ветке list_item. В таблице list_item базы записи имеют атрибут is_cheked, и, чтобы пометить пункт как выполненный, нужно передать команду “UPDATE list_item SET is_checked=’1′ WHERE _id=%apcomm;”.
Настройка скрипта и профиль отображения заголовков
Выводы
Если ты еще не решил, нужны ли тебе умные часы, надеюсь, данная статья подтолкнула в верную сторону. Ну а если тебе не нравится черно-белый экран и кнопки, то все описанное, а также другие, более интересные действия скоро будут доступны и для всех устройств на Android Wear. На момент написания статьи в закрытой группе Google+ уже началось тестирование альфа-версии нового приложения от Жуана Диаса — AutoWear. А возможностей у цветного сенсорного экрана намного больше. Если учесть, что Tasker умеет делать HTTP Get и HTTP Post, это дает практически безграничные возможности управления приборами, домашней автоматизации и вывода информации на часы с различных серверов (видеопример).
Быстрый отбой звонка с ответной СМС
Еще один полезный профиль Tasker. Он завязан на приложение Pebble Dialer и позволяет при нажатии на часах кнопки отбоя звонка отправить одну из заготовленных СМС. Мне хватает трех: «За рулем, перезвоню позже», «На совещании, перезвоню» и «Занят, не могу разговаривать».
Для этого создаем профиль State -> Plugin -> AutoPebble Other App. В списке приложений выбираем PebbleDialer, направление: Watch To Phone, Key Filter: 0, Value Filter: 7 (каждой кнопке, а также длинному нажатию соответствуют разные значения цифр). Сами цифры можно посмотреть в логах AutoPebble, предварительно поставив галочку на Log other Apps.
Для действия выбираем или Plugin -> AutoPebble QuickScreen или Plugin -> AutoPebble List, в зависимости от количества желаемых ответов. По аналогии, каждому ответу будет соответствовать своя команда, которую необходимо будет отлавливать своим профилем. Для действия при срабатывании команды выбираем Phone -> Send SMS и в поле получателя вводим %CNUM — системную переменную, отвечающую за последний входящий номер. Желаемый текст вбиваем в поле ниже.
Управление компом
В номере 188 журнала я описывал профили управления компом через AutoRemote и EventGhost. Все эти профили можно настроить на подачу команд с часов. Кроме того, описывалась передача текста из браузера Google Chrome непосредственно на часы. Для этого необходимо настроить профиль, срабатывающий на команду “pebmsg=:=” и направляющий на часы AutoPebble Text Screen с текстом %arcomm”.
Организация Raspberry Pi Foundation порадовала фанатов мини-компьютера Raspberry Pi. Она объявила о выпуске «прокачанной» версии модели B+, которую назвали Raspberry Pi 2 Model B.
Новинка работает на более быстром процессоре Broadcom BCM2836 с тактовой частотой 900 МГц. Кроме того, материнская плата оснащена 1 ГБ оперативной памяти. По словам разработчиков, процессор и дополнительная память увеличивают производительность компьютера в несколько раз.
«Я думаю, теперь это пригодный в использовании персональный компьютер», — сказал Эбен Аптон, создатель Raspberry Pi. Он считает, что каждый может позволить себе купить компьютер за 35 долларов.
Новый процессор Broadcom BCM2836 представляет собой улучшенную версию предыдущего процессора BCM2835, но это четырёхъядерный SoC (четыре 32-битных ядра ARMv7 Cortex-A7) с некоторыми изменениями, которые позволили адресовать 1 ГБ оперативной памяти.
Эбен Аптон считает, что увеличенная производительность пригодится в разных приложениях, в том числе в системах распознавания образов вроде OpenCV.
Плата Raspberry Pi 2 будет продаваться по той же цене, что и B+, то есть за 35 долларов. Впрочем, Эбен Аптон думает, что некоторые корпоративные заказчики по-прежнему будут покупать старую модель в целях совместимости, так что её пока не снимают с производства.
Для гиков с реальной нехваткой средств доступна также модель A+ за 20 долларов.
С 2010 года компания Google выплатила хакерам более $4 млн, в том числе в 2014 году на эти цели потрачено более $1,5 млн. Максимальное вознаграждение получил Джордж Хоц (George Hotz). Ему заплатили $150 тыс., после чего талантливого юношу пригласили на стажировку в Google.
За прошедшие четыре с лишним года Google выплаты получили более 200 хакеров. В общей сложности, удалось исправить более 500 багов. Для браузера Chrome большинство багов пришлось на альфа- и бета-версии.
На фотографии внизу — три хакера, которые больше всех заработали в 2014 году по программе вознаграждения за найденные уязвимости, слева направо: Адриан (Румыния), Томаш (Польша), Николай (Украина).
В 2015 году компания Google намерена расширить программу поощрения хакеров. В частности, объявлено о новом эксперименте Vulnerability Research Grants, по условиям которого хакерам выплачивают гранты до того, как они приступили к работе.
Google планирует заранее публиковать список сервисов, программ и уязвимостей, по которым она наиболее заинтересована в расследовании. Для хакеров, которые готовы взяться за изучение проблемы, предусмотрено авансовое вознаграждение до $3133,70.
Корпоративные порталы (Enterprise Information Portal — EIP) из моды постепенно превратились в незаменимый инструмент бизнеса, обеспечивая сотрудников единой точкой доступа к данным, инструментами управления бизнес-процессами и средствами обмена информацией. Проект Liferay, распространяемый под Open Source лицензией, вполне успешно конкурирует с большинством коммерческих решений.
Проект Liferay
Liferay представляет собой веб-платформу для строительства бизнес-решений, объединяющую разные приложения в единое информационное пространство. С его помощью можно построить порталы с интеграцией корпоративных приложений, динамические веб-сайты, базу знаний и социальные сети. Сотрудники для доступа к данным и обмена информацией будут использовать одно приложение. Распространяется с исходным кодом под двойной лицензией: GNU GPL и коммерческой. Liferay далеко не новичок на рынке и пользуется в мире популярностью. Начиная с 2011 года аналитическое агентство Gartner в отчете Magic Quadrant for Horizontal Portals относит Liferay к лидерам, где он находится рядом с решениями от Microsoft, IBM, SAP и Oracle. С официального сайта портал скачали более четырех миллионов раз, разработчики говорят о примерно 350–500 тысячах установок в организациях самого разного назначения. Cреди них и компании с мировым именем: министерство обороны Франции, Cisco, Andorra Telecom и многие другие.
Как и принято в любых подобных системах, Liferay легко адаптируется под любые условия. После установки базовая система содержит только некоторый оптимальный набор. Все дополнительные функции Liferay реализованы посредством подключения модулей, называемых портлетами. В Liferay Marketplace доступно большое число готовых к использованию компонентов, часть из которых распространяется бесплатно.
В Liferay Marketplace найдем большое количество портлетов
Портлеты можно создавать самостоятельно на разных языках программирования: Java, PHP, Ruby, Python, фреймворке Grails и других. Разработчики предоставляют IDE, SDK и API, упрощающие создание приложений. Поэтому портлеты и темы для Liferay можно найти поиском в GitHub, sf.net, Google Code и других ресурсах. Документация и открытость проекта позволяет при необходимости легко подключить любое приложение. К слову, текущая версия Liferay в установке по умолчанию не поддерживает русский, локализация выполнена за счет портлета (для русского 86%).
Сервер Liferay готов к применению в организациях любого размера, легко масштабируется, может работать в кластере и развертываться в облаке. Поддерживается интеграция со службами каталогов LDAP и Active Directory, системами Single Sign-On (CAS, OpenSSO, NTML, SiteMinder). Для работы с почтой подойдет любой SMTP/S, IMAP/S или POP3/S сервер. Все приложения и информация при помощи различных методов (SOAP, REST, RSS, внутренние API) интегрируются в единый интерфейс, упрощающий работу с Liferay. На сегодня это десятки продуктов: для генерации отчетов, системы электронного документооборота, CMS, ERP/CRM, система бизнес-аналитики Pentaho BI, Libre/OpenOffice и многое другое. Все это позволяет быстро и с минимумом затрат внедрить корпоративный портал с нужными функциями.
Портал, созданный с применением Liferay, может включать в себя систему управления контентом, блоги, wiki, форум, базу знаний, доску сообщений, соцсеть, документооборот (с поддержкой MS Office), средства организации совместной работы (календарь, задачи, оповещение, обмен сообщениями), управление бизнес-процессами и взаимодействием с клиентами, планирование ресурсов и многое другое. Пользователь, кроме мессенджера, получает доступ к электронной почте посредством встроенного веб-клиента. Также реализована система оповещений и рассылки (email, RSS, SMS или любого другого).
Одна установка Liferay может обслуживать несколько организаций и сайтов. Портал поддерживает одновременно несколько языков интерфейса, при подключении выдается страница по настройкам браузера. Внешний вид портала автоматически подстраивается под размер экрана, в том числе под мобильные устройства.
Реализована система доступа, основанная на принадлежности к организации, роли и группе. В итоге пользователь получает доступ к документам и приложениям только на основании от своей роли, группы и организации. Информация, выкладываемая в блог или сайт, может премодерироваться и публикуется только после утверждения уполномоченным лицом. После установки уже имеется несколько встроенных ролей и групп под основные операции, но легко создать новые. Анонимный пользователь получает доступ к каким-то базовым страницам, а сотрудники или бизнес-клиенты обладают изначально большими правами.
Для создания контента предлагается встроенный редактор с функцией проверки правописания, но в Marketplace доступно несколько альтернатив. Любая информация в Liferay структурируется при помощи тегов и категорий. Liferay поддерживает протокол MS SharePoint, то есть пользователи могут работать с файлами MS Office, находящимися на локальных дисках, и загружать их в хранилище Liferay. Поддерживаются версии документа, блокировка редактирования, автоматическая конвертация формата, галерея изображений, поиск, доступ по WebDAV, публикация и многое другое. Внешний вид портала, веб-сайта или отдельной страницы меняется при помощи тем и макетов. Внешний вид и функциональность кабинета полностью настраивается как администратором, так и самим пользователем при помощи тем, шаблонов, портлетов и виджетов. Для статей, записей и подобного также предусмотрены шаблоны, что позволяет стандартизировать документацию. Реализован и каталог программного обеспечения, он позволяет определить набор ПО, доступного пользователям для загрузки.
Проект разработал собственный клиент синхронизации документов с порталом Liferay Sync, поддерживающий drag’n’drop, журналирование изменений и откат к предыдущим версиям, возможность редактирования файла сразу несколькими пользователями. Доступны версии для Windows, OS X, iOS и Android. При такой функциональности какой-то особой подготовки от пользователя и администратора не требуется. Все действия выполняются интуитивно, поддерживается drag’n’drop, AJAX делает среду интерактивной.
Теперь самое интересное. Liferay выпускается под двойной лицензией: Community Edition под лицензией GNU GPL и коммерческой Enterprise Edition. Возможности CE несколько урезаны: недоступна поддержка 24 х 7 х 1, встроенные функции аналитики, аудита, контроля производительности. Но что-то из этого можно компенсировать при помощи бесплатных плагинов. Все основные функции портала остались нетронутыми, и на первых порах смысла в покупке EE нет, достаточно использовать CE, чтобы как минимум присмотреться к Liferay. В ЕЕ плата берется в зависимости от функциональности сервера, никаких клиентских лицензий (вроде Client Access License, используемой в продуктах Microsoft) не предусмотрено, поэтому в случае расширения ничего доплачивать не придется. Стоит отдельно отметить большое количество официальных партнеров, занимающихся внедрением Liferay по всему миру.
На сегодня актуальная версия — 6.2, но уже ведется разработка 7.0.0, и можно ознакомиться с предрелизом. Проект предоставляет хорошую подборку документации (на английском). Поэтому ответ можно найти на любой вопрос и без официальной поддержки. Но иногда документация запаздывает, поэтому некоторые вопросы по версии 6.2 следует смотреть в более ранних релизах. Например, Getting Started на момент написания этих строк для 6.2 отсутствовал.
Также следует отметить наличие еще одного продукта Liferay Social Office, ориентированного на организацию совместной работы, с базовыми функциями портала.
Liferay vs MS SharePoint
Нетрудно заметить, что Liferay напрямую конкурирует с MS SharePoint. Даже сами разработчики в первое время не стеснялись называть его открытым аналогом SP. Между любыми решениями для организации порталов много общего (Oracle Portal, IBM WebSphere Portal, SAP NetWeaver Portal не исключение), все они предоставляют базовый набор функций, и подчас он практически полностью совпадает. Но есть, конечно, и различия в организации. Самое главное — это отсутствие привязки к разработкам одного производителя. Естественно, что SP интегрирован с другими решениями Microsoft (сервер, MS SQL, MS Office и другими), без которых его функциональность либо нельзя использовать, либо функции будут неполными. То есть, чтобы все заработало по полной, понадобятся лицензии и еще на ряд продуктов, даже если они больше нигде использоваться не будут. И если подсчитать, то эти затраты будут немалы.
Аналогичная ситуация и с другими портальными решениями. Liferay здесь сильно выигрывает, так как не зависит от одного поставщика и прекрасно вписывается в уже существующую инфраструктуру, не требуя при внедрении дополнительных расходов на приобретение ПО. Администратор будет работать с привычными продуктами. На eApps готовый сервер с Liferay-Tomcat обойдется всего в 34 доллара в месяц, при этом будет доступна круглосуточная поддержка и прочие вкусности. Есть и минусы. Сегодня нетрудно найти специалиста по SP, а вот внедрением Liferay занимаются не так много компаний. Но при самостоятельном внедрении отыскать нужную информацию не так уж и сложно.
Установка Liferay в Ubuntu Linux
Liferay написан на Java и поэтому работает на любой платформе, для которой доступна JRE и сервер приложений. Официально поддерживается работа с ОС Windows, *nix, OS X. По умолчанию в качестве СУБД используется Hypersonic SQL, которая ставится автоматически, но она подходит для тестовых сред и небольших нагрузок. В промышленных средах лучше подключить: MySQL, PostgreSQL, MS SQL, Oracle, DB2, Sybase или Ingres. Готовые образы с предустановленным Liferay можно найти в Amazon AWS, Bitnami, eApps и многих других облачных сервисах. Это самый простой и быстрый способ протестировать в работе Liferay (хотя развертывание Liferay на подготовленную ОС занимает от силы минут пять). Для теста подойдет любой современный компьютер с 2+ Гб ОЗУ (на облачных серверах минимально работает и с 1 Гб). Проект предлагает готовые комплекты с серверами приложений Tomcat, Geronimo, GlassFish, JBoss, Jetty, JOnAS, Resin и исходный код. Установим Liferay CE с сервером приложений Tomcat на систему, работающую под управлением Ubuntu 14.04 LTS с СУБД MySQL. Выбор сервера приложений — вопрос вкуса. Другие варианты установки отличаются только особенностями конфигурирования используемых приложений. В случае необходимости миграции на другую СУБД в панели управления предложен удобный инструмент. Проверяем наличие JDK:
$ java -version
Если Java нет, в ответ не получаем список пакетов, которые нужно установить. Ставим:
$ cd /opt/liferay-portal-6.2-ce-ga2/tomcat-7.0.42/bin/
$ sudo ./startup.sh
Собственно, это всё. В ответ получим список переменных. Если ошибок не последовало (tail -f ../logs/catalina.out, netstat -ant | grep 8080), переходим на портал. Открываем браузер и подключаемся к порту 8080 (http://localhost:8080). Вначале предстоит пройти установки, предложенные Basic Configuration.
Окно Basic Configuration
Здесь три подраздела:
Portal — название и язык по умолчанию, флажок Add Sample Data позволит добавить записи и наглядно оценить возможности портала;
Administrator User — данные администратора (имя и email);
Database — выбор СУБД для работы, по умолчанию стоит Hypersonic.
В принципе, все понятно. Нам нужна MySQL. В поле Database выбираем Change и из списка MySQL, вводим учетную запись и пароль и нажимаем Finish Configuration. Некоторое время придется подождать, пока будет выполнена установка. Настройки будут сохранены в файле portal-setup-wizard.properties.
Единственный минус такого способа — для подключения будет использоваться учетная запись администратора БД, что в промышленных установках не очень хорошо с точки зрения безопасности. Хотя после тестирования данные учетной записи можно легко поправить, прописав новую информацию в файл portal-ext.properties.
Пару слов о конфигурационных файлах. Все настройки изначально сохранены в JAR-файлах, но трогать их нельзя. Все изменения следует заносить в overriding-файлы с расширением properties. Но администратор может редактировать только два из них — portal-ext.properties и portal-setup-wizard.properties. Эти два файла считываются последними и переопределяют установки в других файлах. Сделать это можно в любом текстовом редакторе. Малое количество упрощает перенос настроек между несколькими серверами. Параметров внутри много, и все они расписаны в документации. Некоторые настройки доступны только в них. Например, возможность просмотра сессий пользователей, нагружающих систему, доступна лишь после активации ее в конфигурационном файле.
Как вариант, можем сразу создать БД и нужную учетную запись. Название базы lportal используется в Liferay по умолчанию, поэтому и мы выберем его.
$ mysql -u root -p
mysql> CREATE DATABASE lportal DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON lportal.* TO 'liferay' IDENTIFIED BY 'password';
mysql> quit;
Переходим к порталу. Принимаем условия лицензионного соглашения, указываем пароль администратора и ключевое слово для его восстановления.
Знакомство с интерфейсом Liferay
В результате получаем готовый портал. Точнее, в зависимости от задач, его еще настраивать и настраивать, но основа уже есть, и дальнейшие действия не требуют особой подготовки. После входа встречает приветственная страница Welcome To Liferay Portal, здесь мы получаем ссылки на основную документацию, которая может пригодиться при первом знакомстве. Для управления потребуется указать данные админа или, если это новый пользователь, создать учетную запись. Настройкам поддается буквально все: цвет, расположение, текст и так далее. Управление любыми указанными настройками понятно и логично, с ними справится пользователь без особой подготовки, поэтому расписывать их смысла нет. Но, учитывая, что их много, при первом знакомстве лучше просто все перепробовать самому.
Меню вверху страницы позволяет управлять сайтом, персональными настройками пользователя (включая добавление новых страниц) и администрировать Liferay. Под кнопкой Admin скрывается две основные настройки: в Site Administration добавить объект (страницу, статью, документ, вики, теги, навигацию и прочее), управлять страницей, макетом и настройками сайта.
Настройка страницы
Здесь же выбирается логотип, тема сайта, указывается описание, стиль ссылок, вид с мобильных устройств, правка CSS и многое другое. Глобальные установки Liferay доступны только для администратора в панели управления (Control Panel).
Здесь четыре основных пункта:
Users — управление учетными записями пользователей и организаций, группами и ролями, политикой паролей, мониторинг активности;
Sites — управление сайтами, шаблонами сайтов и страниц;
Apps — установка и конфигурация портлетов, управление лицензией;
Configuration — установки портала, функции администрирования.
Портлеты поставляются в виде WAR/LPKG-архивов. С помощью меню вверху страницы их можно установить (Admin -> Control Panel -> Configuration -> AppManager -> Install), указав URL или файл на локальном носителе. Чтобы скачать портлет, потребуется учетная запись в Store.
Например, в Liferay CE 6.2 почему-то убрали поддержку русского по умолчанию. Но это несложно решить. Скачиваем (его легко найти поиском) и устанавливаем портлет, как написано выше. Затем идем в Admin -> Control Panel -> Configuration -> Portal Settings -> Display settings и редактируем список доступных языков Available Languages. Сохраняем результат. После этого русский будет в списке Default Language. Выбираем. Здесь же регулируем часовой пояс, лого сайта, доступ к приложениям Google и прочие настройки.
Локализация Liferay
В других вкладках Control Panel можем просмотреть ресурсы, свойства системы/портала, установить уровни журналирования, указать данные SMTP/POP3-сервера, выполнить некоторые операции администрирования (очистить ОЗУ, сбросить кеш, проверить таблицы БД и другие), ограничить максимальный размер загружаемого файла и указать список разрешенных расширений. В случае необходимости создания нескольких порталов в Admin есть соседствующий пункт. Процесс очень прост: нажимаем «Добавить» и указываем название, почтовый домен, виртуальный хост и опционально максимальное количество пользователей. Описывать все настройки нет смысла, все они логичны, назначение многих понятно из названия.
Вывод
Liferay представляет собой очень мощное, но одновременно понятное в конфигурировании и сопровождении решение, которое прекрасно интегрируется практически в любую сеть и уже заслужило доверие именитых организаций.
Блуждая по форумам и разного рода сайтам, посвященным Android, мы постоянно сталкиваемся с советами, как увеличить производительность смартфона. Одни рекомендуют включить swap, другие — добавить специальные значения в build.prop, третьи — изменить переменные ядра Linux. Подобного рода рецептов в разных вариантах можно найти огромное количество, что на XDA, что на 4PDA. Но работают ли они на самом деле?
Введение
Пользуясь самыми разными *nix-системами на протяжении последних десяти лет, я всегда удивлялся, с каким упорством некоторые, казалось бы, грамотные пользователи смартфонов пытаются впихнуть общественности свои идеи оптимальной настройки Android и лежащего в его основе ядра Linux. И ладно бы дело ограничивалось легким тюнингом подсистемы управления виртуальной памятью или включением экспериментальных опций. Нет, обычно нам предлагают применить длиннющие скрипты, изменяющие буквально каждую переменную ядра, перемонтирующие файловые системы с разными странными опциями, включающие swap, активирующие различные системные демоны и выполняющие еще миллиарды различных операций.
Нет, ну можно, конечно, предположить, что ядро Linux, Android и фирменные прошивки для смартфонов разрабатывают безграмотные идиоты, работу которых необходимо кардинальным образом переделывать, но на практике почему-то оказывается, что самые известные инструменты тюнинга, опубликованные на XDA, — это не что иное, как сборная солянка из огромного количества разрозненных рекомендаций, придуманных непонятно кем и неизвестно зачем. Абсурд ситуации доходит того, что в этих инструментах можно обнаружить строки, без изменений скопированные из скриптов для увеличения производительности Linux-сервера в условиях высоких нагрузок (я не шучу, взгляни на содержимое известного скрипта ThunderBolt!).
В целом ситуация более чем запутанная. Все советуют всё, никто не советует ничего, а те, кто что-то понимает, сидят и, попивая чай, смеются над происходящим балаганом. Но попробуем все-таки разгрести всю эту кашу.
Pimp My Rom — один из самых известных инструментов тюнинга Android
Swap
Начнем со swap — самой абсурдной идеи из всех, что только можно придумать для применения в смартфонах. Ее смысл в том, чтобы создать и подключить файл подкачки, за счет чего удастся освободить полезное пространство в оперативной памяти. Сама по себе идея, конечно, здравая, но только если речь идет о сервере, которому интерактивность никуда не упирается. На смартфоне регулярно используемый файл подкачки приведет к неиллюзорным лагам, возникающим вследствие промахов мимо кеша, — достаточно представить, что будет, если приложение попытается отобразить одну из своих пиктограмм, а она окажется в свопе, который придется вновь загружать с диска, предварительно освободив место путем помещения в своп данных другого приложения. Ужас.
Некоторые юзеры могут возразить, что на самом деле после включения swap никаких проблем не возникает, но за это надо благодарить механизм lowmemorykiller, который регулярно убивает особо раздувшиеся и давно не используемые приложения. Благодаря ему девайс с 1 Гб памяти может никогда и не дойти до необходимости сброса данных в своп. Он же и является причиной того, почему в отличие от Linux-десктопа в Android своп не нужен.
Вердикт: очень глупая идея, реализация которой чревата серьезными лагами.
zRAM
Swap действительно очень медленный, и даже на десктопе его существование зачастую неоправданно, но что, если обмануть систему? Создадим виртуальный диск прямо в оперативке с встроенной функцией сжатия данных, подключим его как swap — и вуаля. Функция сжатия данных довольно дешева даже для современных мобильных процессоров, поэтому мы сможем расширить размер оперативки практически без потерь производительности.
Идея настолько правильная, что даже Google рекомендует применять zRAM для основанных на KitKat устройствах в том случае, если объем оперативки не превышает 512 Мб. Загвоздка только в том, что способ работает лишь для современных бюджетников, то есть устройств, основанных на многоядерных бюджетных процах от какой-нибудь MTK и 512 Мб оперативки. В этом случае поток шифрования можно вынести на отдельное ядро и вообще не париться о производительности.
На устаревших устройствах с одним ядром, для которых «гуру форумов» и рекомендуют применение данной технологии, мы вновь получим лаги, причем в довольно большом количестве. То же, кстати, относится и к технологии KSM (Kernel SamePage Merging), которая позволяет объединять одинаковые страницы памяти, освобождая таким образом пространство. Она также рекомендована Google, но на старых девайсах приводит к еще большим лагам, что вполне логично, учитывая постоянно активный ядерный поток, который непрерывно ходит по памяти в поисках дубликатов страниц (а так ли много этих дубликатов на самом деле?).
Вердикт: зависит от устройства, в большинстве случаев замедляет систему.
Seeder
В свое время это приложение наделало много шума и породило множество аналогов. В Сети появилось огромное количество сообщений о якобы феноменальном приросте производительности смартфона после его установки. Доморощенные сборщики кастомных прошивок начали включать его в свои сборки, а автор был объявлен спасителем. И все это при том, что Seeder не выполнял никаких грязных хаков, а просто исправлял один глупый баг Android.
Если вкратце, то баг состоял в том, что некоторые высокоуровневые компоненты среды исполнения Android активно использовали файл /dev/random для получения энтропии/соли. В какие-то моменты буфер /dev/random опустошался, и система оказывалась заблокирована до момента его заполнения необходимым количеством данных. А так как заполнялся он тем, что поступало с разных датчиков, кнопок и сенсоров смартфона, то времени на эту процедуру уходило столько, что пользователь успевал заметить лаг.
Для решения этой проблемы автор Seeder взял Linux-демон rngd, скомпилировал его для Android и настроил так, чтобы он брал случайные данные из гораздо более быстрого (но и намного более предсказуемого) /dev/urandom и каждую секунду сливал их в /dev/random, не позволяя последнему истощиться. Как результат — система никогда не испытывала недостатка в энтропии и спокойно работала.
Данный баг был закрыт Google еще в Android 3.0, и, казалось бы, нам незачем вспоминать о Seeder. Но дело в том, что приложение с тех пор активно развивалось и даже сегодня рекомендуется многими «экспертами» для применения. Более того, у приложения появилось несколько аналогов (например, sEFix), а многие создатели скриптов/инструментов для ускорения до сих пор включают подобную функциональность в свои творения. Иногда это тот же самый rngd, иногда — демон haveged, иногда просто симлинк /dev/urandom на /dev/random.
sEFix — один из наследников Seeder
Все, кто пробовал, наперебой кричат об эффективности решения, однако, если верить Рикарду Серкейре (Ricardo Cerqueira) из компании Cyanogen, в современных версиях Android /dev/random используется всего тремя компонентами: libcrypto (для шифрования SSL-соединений, генерации ключей SSH и так далее), wpa_supplicant/hostapd (для генерации WEP/WPA-ключей) и несколькими библиотеками для генерации случайных ID при создании файловых систем ext2/3/4.
Эффективность приложения в современном Android, по его мнению, связана вовсе не с пополнением пула /dev/random, а с тем, что rngd постоянно пробуждает устройство и заставляет его повышать частоту процессора, что позитивно сказывается на производительности и негативно на батарее.
Вердикт: плацебо.
Odex
Стоковые прошивки смартфонов всегда одексированы. Это значит, что наряду со стандартными для Android пакетами приложений в формате APK в каталогах /system/app/ и /system/priv-app/ (начиная с KitKat) также находятся одноименные файлы с расширением odex. Они содержат так называемый оптимизированный байт-код приложения, уже прошедший через верификатор и оптимизатор виртуальной машины и записанный в обособленный файл (это делается с помощью утилиты dexopt).
Смысл существования файлов odex в том, чтобы разгрузить виртуальную машину и таким образом ускорить запуск приложений (стоковых). С другой стороны, файлы odex мешают вносить в прошивку модификации, создают проблемы с обновлением, и по этой причине многие кастомные ROM’ы (включая CyanogenMod) распространяются без них. Вернуть (точнее, сгенерировать) файлы odex можно разными способами, в том числе с помощью простых утилит/скриптов вроде Odexer Tool. Пользоваться ими легко, и многие «эксперты» советуют это делать.
Проблема только в том, что это чистейшее плацебо. Не обнаружив odex-файлов в каталоге /system, система сама создаст их при следующей загрузке и поместит в каталог /system/dalvik-cache/. Именно этим она занимается, когда при загрузке новой прошивки на экране появляется сообщение «Идет оптимизация приложений…». В отношении приложений из маркета это тоже, кстати, работает. Но на этапе установки софта.
Вердикт: плацебо.
Твики lowmemorykiller
Реализация многозадачности в Android сильно отличается от других мобильных ОС и основана на классической модели. Приложения могут спокойно работать в фоне, в системе нет никаких ограничений на их количество, функциональность при переходе к фоновому исполнению не урезается. Все, как на десктопе, за исключением одной детали: система имеет полное право убить любое фоновое приложение в случае недостатка оперативной памяти или (начиная с KitKat) излишней жадности приложения к ресурсам.
Этот механизм, названный lowmemorykiller, был придуман для того, чтобы, сохраняя черты полноценной многозадачной ОС, Android мог нормально жить в условиях ограниченного объема памяти и отсутствующего swap-раздела. Пользователь может спокойно запускать любые приложения и быстро переключаться между ними, а система сама позаботится о завершении давно не используемых приложений и о том, чтобы в устройстве всегда оставалась свободная память.
В первые годы существования Android назначение данного механизма для многих пользователей было непонятным, поэтому стали популярными так называемые таск-киллеры — приложения, которые время от времени просыпались и завершали все фоновые приложения. Профитом в данном случае считалось большое количество свободной оперативки, что воспринималось как плюс, хотя никаких плюсов в этом, конечно же, не было. Зато было много минусов в виде более долгого переключения между приложениями, повышенного расхода заряда батареи и проблем c пробуждением владельца по утрам (будильник тоже убивался).
Со временем понимание принципов многозадачности пришло, и от таск-киллеров постепенно отказались. Однако их быстро сменил другой тренд — тюнинг самого механизма lowmemorykiller (например, с помощью приложения MinFreeManager). Основная идея метода в том, чтобы приподнять границы заполнения оперативной памяти, при достижении которых система начнет убивать фоновые приложения. Этакий способ «и нам и вам», который позволяет освободить немного памяти штатными средствами, не нарушая идей многозадачности Android.
Но к чему это в итоге приводит? Допустим, стандартные значения границ заполнения памяти — это 4, 8, 12, 24, 32 и 40 Мб, то есть при достижении свободного объема памяти 40 Мб будет убито одно из кешированных приложений (загружено в памяти, но не запущено, это такая оптимизация Android), при 32 — Content Provider, не имеющий клиентов, 24 — одно из редко используемых фоновых приложений, затем в расход идут сервисные процессы приложений (например, сервис музыкального проигрывателя), видимые на экране приложения и текущее запущенное приложение. Разница между последними двумя в том, что «текущее» — это приложение, с которым в данный момент имеет дело юзер, а «видимое» — это то, что, например, имеет уведомление в строке состояния или отображает поверх экрана какую-либо инфу.
В целом все это значит, что в смартфоне всегда будет свободно 40 Мб памяти, которых вполне достаточно для того, чтобы вместить еще одно приложение, после чего проснется поток LKM и начнет очистку памяти. Все ОK, все довольны. Система по максимуму использует память. А теперь представим, что будет, если юзер воспользуется советом доморощенного «эксперта» и поднимет эти значения так, что последнее будет составлять, ну, допустим, 100 Мб (обычно повышаются только три последних значения). В этом случае произойдет одна простая вещь: юзер потеряет 100 – 40 = 60 Мб памяти устройства. Вместо того чтобы использовать это пространство для хранения фоновых приложений, что полезно, так как сокращает время переключения на них и заряд батареи, система будет оставлять его свободным непонятно для чего.
Справедливости ради стоит сказать, что тюнинг LKM может быть полезен для девайсов с совсем уж небольшим объемом памяти (меньше 512) и Android 4.X на борту или для временного увеличения порогов. Некоторые разработчики твиков прямо рекомендуют использовать «агрессивные» настройки только в случае запуска тяжелого софта вроде hi-end игр, а все остальное время оставаться на стандартных. В этом действительно есть смысл.
MinFreeManager — приложения для тюнинга механизма lowmemorykiller
Вердикт: лучше не трогать.
Твики I/O
В скриптах, публикуемых на форумах, можно часто встретить твики подсистемы ввода-вывода. Например, в том же скрипте ThunderBolt! есть следующие строки:
Первая дает планировщику ввода-вывода понять, что он имеет дело с твердотельным диском, вторая увеличивает максимальный размер очереди ввода-вывода с 128 до 1024 (переменная $i в командах содержит путь к дереву блочного устройства в /sys, например /sys/block/mmcblk0/, скрипт проходит по ним в цикле). Далее по тексту можно встретить следующие строки, относящиеся к планировщику CFQ:
Далее следует еще несколько строк, относящихся к другим планировщикам (кстати, обрати внимание на совершенно лишние точки с запятой в конце команд). Что во всех этих строках не так? Первые две команды бессмысленны по двум причинам:
Планировщики I/O в современном ядре Linux сами способны понять, с каким типом носителя информации они имеют дело.
Такая длинная очередь ввода-вывода (1024) совершенно бессмысленна на смартфоне. Более того, она бессмысленна даже на десктопе и применяется на высоконагруженных серверах (из рекомендаций по настройке которых она, видимо, и попала в данный скрипт).
Часть скрипта ThunderBolt!
Последние три бессмысленны по той простой причине, что для смартфона, где фактически нет разделения приложений по приоритетам на ввод-вывод и нет механических накопителей, лучший планировщик — это noop, то есть простая FIFO-очередь — кто первый обратился к памяти, тот и получил доступ. И у данного планировщика нет каких-то особенных настроек. Поэтому все эти многоэкранные списки команд лучше заменить на один простой цикл:
for i in /sys/block/mmc*; do
echo noop > $i/queue/scheduler
echo 0 > $i/queue/iostats
done
Кроме включения планировщика noop, для всех накопителей он отключает накопление статистики I/O, что также должно позитивно сказаться на производительности (хотя это всего лишь капля в море, которая будет совершенно незаметна).
Еще один твик, который часто можно найти в скриптах тюнинга производительности, — это увеличение значения readahead для карты памяти до 2 Мб. Механизм readahead предназначен для заблаговременного чтения данных с носителя еще до того, как приложение запросит доступ к этим данным. Если ядро видит, что кто-то достаточно долго читает данные с носителя, оно пытается вычислить, какие данные понадобятся приложению в дальнейшем, и заранее загрузит их в оперативку, позволяя таким образом сократить время их отдачи.
Звучит круто, но, как показывает практика, алгоритм readahead очень часто ошибается, что приводит к лишним операциям ввода-вывода и расходу оперативной памяти. Высокие значения readahead (1–8 Мб) рекомендуются к применению на RAID-массивах, тогда как на десктопе или смартфоне лучше все оставить как есть, то есть 128 Кб.
Изменить планировщик ввода-вывода можно с помощью Trickster Mod
Вердикт: кроме noop, не нужно ничего.
Твики системы управления виртуальной памятью
Кроме подсистемы I/O, принято также тюнинговать подсистему управления виртуальной памятью. Зачастую изменению подвергаются только две переменные ядра: vm.dirty_background_ratio и vm.dirty_ratio, которые позволяют регулировать размер буферов для хранения так называемых грязных данных, то есть тех данных, которые были записаны на диск приложением, но еще до сих пор находятся в оперативной памяти и ждут, пока они будут записаны на диск.
Стандартные значения этих переменных в десктопных Linux-дистрибутивах и Android примерно следующие:
Это значит, что при достижении размера буфера «грязных» данных в 10% от всего объема оперативки проснется ядерный поток pdflush и начнет записывать данные на диск. Если же операции записи данных на диск будут слишком интенсивными и, даже несмотря на работу pdflush, буфер будет продолжать расти, то при достижении 20% от объема оперативки система переключит все последующие операции записи в синхронный режим (без предварительной буферизации) и работа пишущих на диск приложений будет заблокирована до того момента, пока данные не будут записаны на диск (в терминологии Android это принято называть лагом).
При этом важно понимать, что, даже если размер буфера не достиг 10%, система так или иначе запустит поток pdflush через 30 с. Что нам дают эти знания? Фактически ничего, что мы могли бы использовать в своих целях. Комбинация 10/20% вполне разумна и, например, на смартфоне с 1 Гб памяти составляет примерно 100/200 Мб памяти, чего более чем достаточно в условиях редких всплесков записи, скорость которых зачастую ниже скорости записи в системную NAND-память или SD-карту (при установке софта или копировании файлов с компа). Но создатели скриптов оптимизации с этим, конечно же, не согласны.
Например, в скрипте Xplix можно найти примерно такие строки (в оригинале они намного длиннее из-за проверок на количество оперативной памяти и использования BusyBox):
Данные команды применяются к устройствам с 1 Гб памяти, то есть устанавливают лимиты «грязного» буфера, равные (примерно) 500/900 Мб. Такие высокие значения абсолютно бессмысленны для смартфона, так как работают только в условиях постоянной интенсивной записи на диск, то есть опять же для высоконагруженного сервера. В ситуации со смартфоном они будут ничем не лучше стандартных. Кстати, в скрипте ThunderBolt! применяются гораздо более разумные (и близкие к стандартным) значения, но я сомневаюсь, что от их применения пользователь заметит хоть какую-то разницу:
Первые две команды выполняются на смартфонах с 512 Мб оперативки, вторые — с 1 Гб, третьи — с более чем 1 Гб. Но на самом деле есть только одна причина изменять стандартные значения — девайс с очень медленной внутренней памятью и/или картой памяти (привет китайцам). В этом случае разумно разнести значения переменных, то есть сделать примерно так:
Тогда при резких всплесках операций записи система, не успевая записывать данные на диск, до последнего не будет переключаться на синхронный режим, что позволит уменьшить лаги приложений при выполнении записи.
Вердикт: лучше не трогать.
Выводы
Существует огромное количество и более мелких оптимизаций, включая «тюнинг» сетевого стека, изменение переменных ядра Linux и Android (build.prop), но 90% из них не оказывают никакого влияния на реальную производительность устройства, а остальные 10% либо улучшают одни аспекты поведения устройства в ущерб других, либо настолько незначительно повышают производительность, что ты этого даже не заметишь. Из того, что реально действует, можно отметить следующее:
Разгон. Небольшой разгон позволяет повысить производительность, а андервольтинг — сохранить немного батарейки.
Оптимизация баз данных. Сильно сомневаюсь, что это даст заметный прирост скорости работы, но теория говорит нам, что работать должно.
Zipalign. Забавно, но, несмотря на встроенную в Android SDK функцию выравнивания контента внутри APK-файлов, в маркете можно найти большое количество софта, не прошедшего через zipalign.
Отключение ненужных системных сервисов, удаление неиспользуемых системных и редко используемых сторонних приложений (об этом я уже писал в одной из прошлых статей).
Кастомное ядро с оптимизациями под конкретный девайс (опять же не все ядра одинаково хороши).
Уже описанный планировщик ввода-вывода noop.
Алгоритм насыщения TCP westwood+. Есть доказательства, что в беспроводных сетях он намного эффективнее применяемого в Android по умолчанию Cubic. Доступен в кастомных ядрах.
Бесполезные настройки build.prop
LaraCraft304 с форумов XDA Developers провела исследование и выяснила, что внушительное количество настроек /system/build.prop, которые рекомендуют к применению «эксперты», вообще не существуют в исходном тексте AOSP и CyanogenMod. Вот их список:
ro.ril.disable.power.collapse
ro.mot.eri.losalert.delay
ro.config.hw_fast_dormancy
ro.config.hw_power_saving
windowsmgr.max_events_per_sec
persist.cust.tel.eons
ro.max.fling_velocity
ro.min.fling_velocity
ro.kernel.checkjni
dalvik.vm.verify-bytecode
debug.performance.tuning
video.accelerate.hw
ro.media.dec.jpeg.memcap
ro.config.nocheckin
profiler.force_disable_ulog
profiler.force_disable_err_rpt
ersist.sys.shutdown.mode
ro.HOME_APP_ADJ
Оптимизация баз данных
Скрипт для оптимизации баз данных настроек системы и приложений. Для работы, естественно, требуется root и BusyBox.
#!/system/bin/sh
for i in \
`busybox find /data -iname “*.db”`;
do \
/system/xbin/sqlite3 $i ‘VACUUM;';
/system/xbin/sqlite3 $i ‘REINDEX;';
done;
Что мы знаем о Magic Leap? Она разрабатывает очки дополненной реальности, которые должны объединять графику и реальность на новом, доселе невиданном уровне. Может, лучше Microsoft HoloLens. Компания даже получила объёмный патент, вот только оказалось, что изложенные в нём идеи принадлежат вовсе не ей.
Пользователь Imgur под ником «DoctorCosmos» (вероятно, менеджер Metaio Брендан Скалли) сравнил патентные иллюстрации Magic Leap с несколькими известными концептами, появлявшимися в AR-области в последние несколько лет. Результаты вызывают вопросы о том, так ли талантливы разработчики компании, которые вообще-то должны представить рынку оригинальный продукт, а не копию.
Помните короткометражку «Sight», в которой пользователь линз дополненной реальности режет огурец, зарабатывая виртуальные достижения.
Или концепт Ringo Holographic Interface от тогдашнего студента в области дизайна интерфейсов Ивана Тихиенко (Ivan Tihienko) из далёкого 2008-го.
А это концепт дополненной реальности от дизайнера Джозефа Джанки (Joesph Juhnke) под названием «The Future of Firefighting» или «Будущее пожаротушения».
Ещё одно совпадение было найдено при сравнении набросков Magic Leap с работой The Aeon Project команды под руководством дизайнера Михаэля Харбоуна (Michaël Harboun). Эти ребята размышляли на тему развлечений и решения рутинных задач в пробках.
Два изображения были позаимствованы из диссертации гарвардского дизайнера Грега Трэна (Greg Tran). Проект именуется «Meditating Mediums — The Digital 3D». Сейчас Грег — разработчик Samsung.
Стоит упомянуть и известный всем фильм «Особое мнение».
Редакция издания Gizmodo запросила комментарии упомянутых дизайнеров. Трое сказали, что никогда не связывались с Magic Leap по поводу своих работ, а один из них вообще не слышал о такой компании. Специалист по патентным делам Кремниевой долины Джон Феррелл (John Ferrell) отметил, что сложившаяся ситуация весьма необычна, так как в патентном ведомстве США принято настаивать на оригинальности изображений, а за заимствование можно получить отказ в регистрации.
Тем не менее Magic Leap не пыталась зарегистрировать в качестве интеллектуальной собственности упомянутые в иллюстрациях кейсы, а патентовала реализующие их технологии. В условиях полного непонимания потребителем смысла в приобретении очков дополненной реальности заимствование удачных идей является успешной стратегией. Будет лучше, если очки получат кейсы, уже знакомые общественности, чем если они окажутся настолько невообразимыми, что попросту не найдут понимания у аудитории.