воскресенье, 28 мая 2017 г.

МТС Smart Race2 4G. Первый операторский смартфон с Android Nougat.

В конце мая 2017 года в розничные торговые точки оператора МТС поступила очередная операторская новинка - МТС Smart Race2 4G. Фактически новый аппарат представляет собой очередное бюджетное устройство на базе уже хорошо знакомого нам по другим моделям SoC от Mediatek - MT6737M с тактовой частотой 1.1 GHz (Quad Core), однако, отличительной особенностью нового гаджета является ОС, Smart Race2 4G - это первое операторское устройство на российском рынке с Android 7.0 (Nougat) на борту. Появление новинки прошло без каких-либо анонсов и т.п., так, что даже на момент написания этого поста в официальном интернет-магазине оператора модель отсутствует в списке в категории "Смартфоны МТС", однако, фактически во многих регионах она уже есть на прилавках. Поэтому я как всегда решил рассказать вам о ней одним из первых.


Для тех кто не любит "длинных и скучных" обзоров - могу сразу перейти к сути. Цена новинки - 3990 руб. без дополнительных условий, т.е. за эту цену вы получаете сам аппарат, без необходимости обязательного подключения пакета услуг, определенного тарифа и т.п., как это обычно бывает у конкурентов. Базовые технические характеристики смартфона вы можете посмотреть на обратной стороне коробки, а также в кратком руководстве пользователя:


Как обычно, для удобства, я решил свести их в единую таблицу, немного дополнив информацией, отсутствующей в руководстве:


МТС Smart Race2 4G
Операционная система: Google Android 7.0 32-bit (Nougat)
Процессор: 1.1 GHz, 4-ядерный, MediaTek MT6737M (Cortex-A53), графическая подсистема - Mali-T720.
Память: 1 Gb (RAM) + 8 Gb (ROM), пользователю доступно ~4 Gb во внутренней памяти, поддержка карт памяти microSDHC (+ возможность форматирования SD как внутренней памяти, Adopted Storage)
Экран: TN, 4.5", 480x854 пикселей, 16 млн. цветов, мультитач (2 точки одновременного касания)
Камера: 5 MPix - основная, 0.3 MPix - фронтальная
Количество SIM: 2 (SIM стандартного размера + micro SIM)
Стандарты и диапазоны: LTE (FDD): 800/1800/2600 MHz (только SIM1)
UMTS: 900/2100 MHz (только SIM1)
GSM: 850/900/1800/1900 MHz
Габаритные размеры, вес: 133 x 66.8 x 9.9 мм, 124.4 гр.
Другое:
  • Simlock (первый слот, SIM1)
  • OTG отсутствует
Батарея: 1800 мА·ч
Цена: 3990 руб.

За исключением Nougat'а, к сожалению, здесь мы не видим ничего нового. А общее впечатление при взгляде на технические характеристики значительно портит TN дисплей, известный своими недостатками в виде маленьких углов обзора и плохой читаемости на солнце. На фоне последних появившихся в продаже аналогичных устройств (имеется ввиду бюджетный / операторский сегмент) с IPS дисплеями - использование TN в новом гаджете выглядит мягко говоря спорным, хотя сомнений в том что даже при этом недостатке аппарат найдет своих "поклонников" - у меня нет.

Комплектация МТС Smart Race2 4G никаких нареканий не вызывает:


Зарядка 5В 1А, micro USB кабель и даже комплектные наушники. Внешне же устройство как две капли воды похоже на другие бюджетки и ничего примечательного в дизайне обнаружить так и не удалось. Для сравнение несколько фото МТС Smart Race2 4G рядом с Smart Surf2:


Органы управления: кнопка включения питания и качелька громкости вынесены на правую кромку аппарата, а разъем для подключения microUSB и наушников находится на верхнем торце:


Под задней крышкой аппарата находятся разъемы для mini-SIM (SIM1), micro-SIM (SIM2), а также разъем для установки microSD:


После включения устройства и завершения работы мастера первоначальной настройки мы видим рабочий стол Android 7.0 Nougat:


Ограничений  на использование в слоте SIM2 сим-карт других операторов по всей видимости не налагается, как видно, в первый слот у меня была вставлена SIM от МТС, во-второй - Tele2, обе симки без проблем зарегистрировались в сети, что несомненно плюс, т.к. в некоторых других МТС'овских устройствах оба слота были simlock. В качестве оболочки по-умолчанию установлен Yandex Launcher, однако, те, кому он по каким-то причинам не нравится, могут включить вместо него привычный Launcher3 через меню Настройки -> Приложения -> [Шестеренка "Настроить приложения"] -> Главное приложение.


Несколько скриншотов из интерфейса:




Здесь мы видим предустановленные приложения в интерфейсе Яндекс.Лаунчера, уже знакомые нам сервисы от МТС: Мой МТС, МТС Книги, МТС Локатор, МТС Пресса и некоторые другие (к слову, в версии прошивки МТС_Race2_UC_TS Rel05 удалить их штатными средствами не представляется возможным, пользователь может лишь отключить их) ... Новую функцию DuraSpeed, которая судя по ее описанию, помогает ускорить работу активного приложения, путем снижения работы фоновых приложений. Интерфейс стандартного (Launcher3) лаунчера, сведения о сертификации устройства в Google, а также средний объем использования оперативной памяти и доступный пользователю объем внутренней памяти. Как видно, из 8 Gb ROM примерно 3.93 Gb занимает система и 4.07 Gb по-умолчанию доступны пользователю.

Для интересующихся результатами синтетических тестов, вот несколько скриншотов из Antutu Benchmark:


Если сравнить полученный результат в 25627 очков у МТС Smart Race2 4G с другими аппаратами на том же чипсете, то мы увидим следующую картинку:

  • Tele2 Maxi LTE - 23789
  • 4Good Light A103 4G - 25987
  • МТС Smart Surf2 4G - 26392 

Другими словами, мы видим что Android 7.0 (Nougat) кардинально на производительность устройства не влияет и те, кто рассчитывал, что более современная ОС потенциально может раскрыть некий "скрытый потенциал" железа, в плане производительности, вынуждены будут разочароваться. 

На многих мобильных форумах в ветках обсуждения различных устройств часто приходится видеть вопросы пользователей "ну когда же выпустят 7.0 под наш девайс", запросы на создание кастомных прошивок (CyanogenMod / LineageOS) на базе Android N и т.п. Т.е. общая тенденция, которую можно наблюдать на данный момент, на мой взгляд выглядит так: "мы хотим Android 7.0, но не совсем понимаем зачем". Буквально недавно я наткнулся на небольшую статью Андрея Подкина на Mobile-Review, которая так и называется - "Для чего нужен Android 7", желающие могут ознакомиться с ней здесь. Спорить о том так ли необходим Android Nougat каждому - я не вижу особенного смысла, однако, с появлением МТС Smart Race2 4G возможность опробовать новую версию этой ОС от Google стала более доступной для большинства, т.к. по факту Race2 4G на данный момент является единственным бюджетным устройством в диапазоне до 4000 руб., официально поставляющимся в РФ с Android N. Вероятно что в будущем доля подобных устройств на рынке будет только увеличиваться.

Говорить о качество фото или GPS в бюджетном устройстве - я также не вижу смысла, т.к. качество 5 Mpix камеры без автофокуса на бюджетках я думаю все прекрасно представляют, что же касается GPS - то MTK, к сожалению, никогда не отличался хорошими результатами в плане геопозиционирования, особенно в бюджетных моделях. Для примера могу сказать что в GPS Test'е МТС Smart Race2 использовал 4-5 спутников из 10 найденных и успешно определил свое местоположение. Однако, я склонен рассматривать камеру и GPS в подобных устройствах как "приятный бонус" в контексте "оно есть и работает", другими словами, при цене устройства в 3990 руб. соотношение цена / качество этих компонентов вполне приемлемое.

Обновлено 28.05.2017 18:46 (MSK)

Cекретные коды Dialer'а:

  • *#787# - Internal Version Display (информация о внутренней версии ПО, в моем случае это была RS630T_Technosew_V09_20170306
  • *#8264# - информация об оборудовании (LCM, сенсорах камеры и т.п.)
  • *#*#15#*#* - Factory Mode (различные тесты)
  • *#*#7548#*#*, *#*#629#*#*, *#*#334766#*#* - Factory Mode (аналогично предыдущему)
  • *#*#3646633*#*# - стандартное инженерное меню Mediatek.

пятница, 26 мая 2017 г.

История одного recovery. На примере МТС Smart Race2 4G.

Не так давно я рассказывал вам о первом операторском смарфтоне с Android 7.0 (Nougat) на борту - МТС Smart Race2 4G, до полноценного обзора нового устройства руки по не дошли, но он обязательно появится на страницах этого ресурса в ближайшее время. Сегодня же я бы хотел поговорить о "кастомизации", а именно особенностях сборки кастомного recovery (TWRP) под этот аппарат. Пост ориентирован скорее не на конечных пользователей, которые используют возможности TWRP в повседневной жизни, а на разработчиков. Честно говоря, начиная собирать TWRP (естественно из исходников) для данного аппарата я и не предполагал, что придется столкнуться с какими-либо сложностями, т.к. по большому счету платформа Mediatek на базе которой построен гаджет, также как и чипсет MT6737M хорошо изучены и никаких потенциальных проблем со сборкой TWRP для подобных устройств никогда не возникало. Однако в случае с МТС Smart Race2 4G, именно из-за Android 7.0, пришлось столкнуться с определенными сложностями и этот пост - небольшое "руководство-размышление" об их решении.

Сразу скажу, что т.к. аппарат построен на базе Nougat, то собирать TWPR для него обязательно на базе исходников из ветки 7.1 OmniROM (можно конечно собрать android_bootable_recovery и в составе CyanogenMod / LineageOS), но опять же, "платформа" 7.1 обязательна. Почему? Если опустить аргумент об идеологической правильности подобного подхода, скажу, что на базе Marshmallow TWRP также прекрасно соберется, но при попытке запуска под его управлением любых стоковых бинарников, например, vold, logcat и т.п. вы неизбежно получите ошибку cannot locate symbol "__write_chk", т.к. все стоковые бинарники используются экспортируемую функцию __write_chk из libc, которой в Marshmallow просто нет. Таким образом собирая TWRP на исходниках от 6.0 вы автоматически собираете libc без __write_chk, что приведет к неработоспособности части бинарников собранных под Nougat внутри получившегося TWRP. Поэтому если вы часто собираете TWRP для различных устройств и еще не успели склонировать репозитарий того же OmniROM 7.1 - сейчас самое время сделать это, т.к. по всей видимости устройств с Nougat на Mediatek будет появляться все больше и вам рано или поздно придется это сделать.

Других особенностей, касающихся именно процесса сборки TWRP - вообщем-то нет, все штатно, также как и в случае с 6.0. Собранный у меня кастомный recovery отлично запустился на аппарате, но вот как раз тут и начались "приключения". Как известно, раздел userdata в Android N является шифрованным, т.к. объявлен в fstab'е как forceencrypt с хранением ключей шифрования в metadata. Вот как раз это и послужило началом всей истории. Загрузившись в только что собранный TWRP я обнаружил что он запрашивает пароль для дешифровки userdata и не монтирует его. При этом пароль в устройстве, т.е. ни PIN-код для разблокировки, либо загрузки Android, ни графический ключ не был явно задан.

Т.е. фактически TWRP по каким-то причинам не смог расшифровать раздел с помощью default_password. Включение отладочных средств TARGET_USES_LOGD и TWRP_INCLUDE_LOGCAT в BoardConfig.mk при сборке также не помогло установить причину проблемы. Вывод logcat и dmesg в этом плане был малоинформативен.

Конечно в данной ситуации можно было поступить проще (подобное решение можно увидеть в многочисленных сборках TWRP, в котором разработчикам было лень разбираться с шифрованием), например, просто разобрав boot и изменив forceencrypt на encryptable с последующим форматированием раздела userdata и потерей всех данных. Но это ведь не наш путь, т.к. в моем понимании у пользователя устанавливающего TWRP на аппарате уже есть какие-то данные и терять их из-за того что TWRP не может справиться с расшифровкой раздела, как минимум не хотелось бы. Другими словами, TWRP должен монтировать существующий на устройстве раздел userdata, все другие варианты (отключение шифрования и т.п.) являются "полумерами", к тому же еще и снижающими безопасность устройства.

Тогда я вспомнил, что начиная с определенной версии TWPR в нем появилась возможность использования стоковых бинарников vold с помощью включения TW_CRYPTO_USE_SYSTEM_VOLD в сборку, информация об этом есть в этом коммите - crypto: Use system's vold for decryption. Бегло изучив все что там говорится, а также проанализировав содержимое исходников в /bootable/recovery/crypto/vold_decrypt/ я включил этот флаг в BoardConfig.mk и пересобрал recovery. Т.е. теперь уже TWRP использовал бинарник vold находящийся в system ... Однако дешифрование раздела и его монтирование все равно не происходило, т.к. при сборке vold в стоковой прошивке разработчиками была включена проверка boot_mode. Что она из себя представляет?

Для лучшего понимания приведу следующий исходник:

int get_boot_mode(void)
{
  int fd;
  ssize_t s;
  char boot_mode[4] = {'0'};
  char boot_mode_sys_path[] = "/sys/class/BOOT/BOOT/boot/boot_mode";

  fd = open(boot_mode_sys_path, O_RDONLY | O_NOFOLLOW | O_CLOEXEC);
  if (fd < 0)
  {
    SLOGE("fail to open %s: %s", boot_mode_sys_path, strerror(errno));
    return 0;
  }

  s = read(fd, boot_mode, sizeof(boot_mode) - 1);
  close(fd);

  if(s <= 0)
  {
    SLOGE("could not read boot mode sys file: %s", strerror(errno));
    return 0;
  }

  boot_mode[s] = '\0';
  return atoi(boot_mode);
}

Здесь get_boot_mode возвращает текущий режим загрузки устройства, который она читает из /sys/class/BOOT/BOOT/boot/boot_mode . Так вот стоковый vold вызывает некий аналог этой get_boot_mode и если устройство загружено в режиме отличном от system, т.е. в recovery mode или в любом другом доступном режиме, то монтирование / дешифрование userdata невозможны в принципе. В логах вы увидите нечто вроде <5>fs_mgr: %s: bootmode(%d) is NOT normal mode, disable 'default encrytion', flag=(0x%x -> 0x%x)". Скачав и установив бесплатную demo версию IDA v6.95.160810 мы можем увидеть эту проверку самостоятельно:


Где в дальнейшем используются результаты этой проверки и как именно - разбираться досконально я не стал, однако, факт отключения default encryption в vold при загрузке в режиме recovery, естественно, нас не устраивал. Из этой сложившейся ситуации есть несколько выходов:

  • Непосредственный патч vold для обхода этой проверки.
  • Написание собственной библиотеки с размещением ее в LD_PRELOAD, которая перехватывала бы попытки обращения в цепочке open("/sys/class/BOOT/BOOT/boot/boot_mode") -> __read_chk -> close от любых приложений и всегда возвращала бы нужное значение (т.е. 0 = normal_mode).
  • Сборка vold из исходников Android N для MT6737M от Mediatek с корректировкой всех проверок в исходниках.

Любая из этих реализаций должна привести к успеху, поэтому какой именно воспользоваться - не имеет большого значения. Здесь главное не забыть, что собранный из исходников или модифицированный vold должен корректно загружаться из init.recovery.vold_decrypt.rc, например так:

service sys_vold /path_to_your_vold/vold \
        --blkid_context=u:r:blkid:s0 --blkid_untrusted_context=u:r:blkid_untrusted:s0 \
        --fsck_context=u:r:fsck:s0 --fsck_untrusted_context=u:r:fsck_untrusted:s0
    socket vold stream 0660 root mount
    socket cryptd stream 0660 root mount
    setenv PATH /system/bin
    setenv LD_LIBRARY_PATH /system/lib64:/system/lib
    disabled
    oneshot

Однако, даже решив эту проблему - мы не получим полноценного решения по дешифрованию userdata в TWRP, т.к. платформа использует еще и teei_daemon для поддержки шифрования. Изучить как он запускается и работает можно посмотрев внутрь init.microtrust.rc из boot'а. И наконец последний шаг на пути к успеху, это обеспечение корректного запуска и работы этого демона при дешифровании, "красивым" и правильным шагом здесь, на мой взгляд, является помещение его инициализации в соответствующий init.recovery.vold_decrypt.$(item).rc (разобраться с этим подробнее вам поможет /bootable/recovery/crypto/vold_decrypt/Android.mk).

В качестве результата проделанной работы я получил незаменимый опыт (что главное), а также полноценной работающий TWRP 3.1.1-0:


Как видно из фото - раздел userdata успешно расшифрован и примонтирован (Data succefully decrypted, new block device: '/dev/block/dm-0') created). Mission accomplished ;)

p.s. Во-избежание наболевшего вопроса "а где можно скачать готовую сборку TWRP" - скажу сразу что дата public релиза пока не определена. Однако все необходимые для сборки моменты уже рассмотрены в этой статье и любой желающий, ориентируясь на мои наработки может пройти тем же путем. 

четверг, 25 мая 2017 г.

Мониторинг GPU (и не только) с отправкой статистики в Telegram.

В один прекрасный день, отчасти познакомившись с различными статьями в интернете, например вот этой - Raspberry и Telegram: предпосылки создания умного дома и этой - Отправка состояния сервера через Telegram, а также благодаря просьбам нескольких знакомых, занимающихся майнингом на видеокартах, я задумался о реализации возможности отправки статистики состояния GPU (теоретически, это не обязательно именно статистика с GPU, а статистика чего угодно) в Telegram, в рамках периодического мониторинга. На тот момент, когда я заинтересовался этой проблемой общая задача стояла так, есть некий ПК с 6-ю видеокартами на борту. Необходимо периодически в какой-то удобной форме отправлять / отображать с него статистику по температурам и скорости вращения вентиляторов каждого из GPU в процентах. Конечно всегда можно пойти и другим путем, например, настроив на этом ПК тот же Open Hardware Monitor. В нем помимо всего есть также встроенный web-сервер со статистикой (т.е. ни Apache, ни другой web-сервер для отображения статистики через web поднимать не нужно, достаточно настроить Remote Web Server в Open Hardware Monitor), отображение информации при обращении к которому выглядит примерно так:


Или, например, считать ту же самую информацию с помощью WMI (Open Hardware Monitor представляет Data Interface, доступный через WMI, ознакомиться с API которого можно здесь), отправляя ее потом на сервер статистики / по email / в SMS, вообщем как угодно просто в текстовой форме. Однако, в данном случае задача может осложниться тем, что примеров чтения информации о датчиках через WMI из Open Hardware Monitor очень мало (с наиболее удачным из них можно познакомиться здесь - How to reboot a rig if it stops mining?). Вот пример готового PowerShell скрипта, который читает информации о температурах всех GPU AMD установленных в системе:

$GPUTemps = Get-WmiObject -namespace root\openhardwaremonitor -class sensor | Where-Object {$_.SensorType -Match "temp" -and $_.Identifier -like "*gpu*"} 
$GPUNumber = 0
$GPUTempString = ""
ForEach($GPU In $GPUTemps)  {
 $GPUNumber++
 $GPUTempValue = $GPU.value
 $GPUTempString = $GPUTempString + $GPU.value + ";"
        #Write-Host "[" $GPUNumber "]" $GPUTempValue    
}
Write-Host $GPUTempString

Однако при попытке выполнить данный скрипт у вас может возникнуть ошибка:


Связанная с ExecutionPolicy. Почитать про ExecutionPolicy для PowerShell скриптов можно тут - Set-ExecutionPolicy и тут - 15 способов обхода PowerShell Execution Policy, и выполнив в консоли тот же самый скрипт как powershell -ExecutionPolicy RemoteSigned ./getinfo.ps1 мы получаем результат:


Т.е. строку с температурами всех GPU в системе - 63;63;63;63;62;63; Полученные данные вполне можно уже отправлять как обычный текст любым доступным для вас способом или даже настроить Zabbix Agent'ы для мониторинга.

Но как же быть с отправкой этих данных в Telegram, спросите вы? Сейчас расскажу ... но пока хотелось бы обратить внимание на другой момент. Как вы понимаете, получать данные в о текущем состоянии температур в текстовом виде - хорошо, но неплохо бы добавить и графиков. Здесь есть два пути - первый, это отправка полученных данных на некий сервер статистики и построение графиков с помощью того же Google Chart Tools API. Способ этот хорош, но для реализации требует наличия самого сервиса и некоторых навыков программирования, поэтому его реализацию мы оставим на потом. А пока обратимся к уже существующим средствам визуализации. Думаю многим из тех кто читает эту статью знакома утилита MSI Afterburner в которой вывод всех необходимых графиков с сенсоров уже реализован (см. скриншот).

Кто мешает нам использовать эти удобные, уже существующие графики и отправлять их непосредственно скриншотом куда-либо? По-сути никто. Весь вопрос состоит лишь в правильной оптимизации процесса. И здесь опять же есть два пути. Постараюсь рассказать о каждом из них "на пальцах". У Telegram есть достаточно неплохой API для ботов, т.е. как один из возможных вариантов решения изначально мне виделся следующий. Собираем на локальном хосте все необходимые данные в виде массива информации, т.е. например текстовые данные о температурах плюс скриншот с графиками. Отправляем все это с помощью GET/POST на сервер с Telegram ботом, который уже по запросу предоставляет всю эту информацию. Однако, подобный вариант опять же требует некоторых усилий, как минимум это поднятие сервера с HTTPS (для запуска бота) и время на написание самого бота. Этот вариант я также решил "отложить на потом", т.к. теоретически есть более простой вариант. К примеру, представьте себе что на машине с которой вы хотите снимать показания удаленно есть обычный Telegram клиент. Для отправки данных остается только каким-либо образом автоматизировать отправку текстового сообщения и полученной картинки (скриншота) нужному контакту. И вот тут как раз нам на помощь приходит проект telegram-cli от Vitaly Valtman'а.

С тем как работает telegram-cli и как можно его применять для отправки статистики вы уже наверняка познакомились в этой статье, однако в ней клиент собирают под Raspberry Pi, а наша задача собрать его именно для использования под Windows. Благо на Git'е есть небольшая инструкция по сборке под Windows с использованием CygWin, ей, с небольшими модификациями мы и будем руководствоваться.

Первым делом установим Cygwin отсюда (в моем случае была x64 система, поэтому я устанавливал качал именно  setup-x86_64 установщик). Установим его так:

 setup-x86_64 -q -P wget,tar,qawk,bzip2,subversion,vim

Чтобы у нас сразу был wget, tar и некоторые другие пакеты. Затем установим apt-cyg, чтобы иметь возможность устанавливать другие пакеты (это уже нужно делать в запущенном cygwin окружении):

 wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
 install apt-cyg /bin

Далее установим зависимости и соберем libconfig и libjansson:


 apt-cyg install cygwin32-gcc-core cygwin32-gcc-g++ gcc-core gcc-g++ make wget patch diffutils grep tar gzip
 apt-cyg install libevent-devel openssl-devel libreadline-devel lua-devel python3
 apt-cyg install zlib zlib-devel
 apt-cyg install dos2unix

 wget http://www.hyperrealm.com/libconfig/libconfig-1.5.tar.gz
 tar xvf libconfig-1.5.tar.gz && cd libconfig-1.5
 ./configure
 make && make install && cd ..

 wget http://www.digip.org/jansson/releases/jansson-2.7.tar.gz
 tar xvf jansson-2.7.tar.gz && cd jansson-2.7
 ./configure
 make && make install && cd ..
Затем соберем сам telegram-cli, для этого склонируем репозитарий:

 git clone https://github.com/vysheng/tg

И соберем все:

 cd tg
 dos2unix ./configure
 ./configure
  make

Если сборка прошла успешно, то в папке bin мы получим бинарники generate.exe, telegram-cli.exe и tl-parser.exe:


Но скорее всего будут проблемы, которые решаются так:

  1. Если сразу после запуска ./configure будет ошибка, это значит что файл ./configure у вас не в Unix кодировке, т.е. вместо LF (Line Feed) используются и другие символы для перевода строки. Именно поэтому мы делаем dos2unix ./configure, но если по каким-то причинам он отработает некорректно, то можно взять тот же Far Manager, открыть файл в текстовом редакторе в нем, а затем сохранить (Shift+F2), используя в качестве символа переноса LF (Unix Format).
  2. Если у вас возникает ошибка вида "tgl/tl-parser/tl-parser.c:1:0: ошибка: -fPIC ignored for target (all code is position independent) [-Werror]", это также легко исправляется. Открываем Makefile и из строки COMPILE_FLAGS удаляем ключ -fPIC, а из строки LOCAL_LDFLAGS ключ -rdynamic.
  3. Если у вас возникает ошибка после запуска make "event-old.h:10:0: ошибка: «BEV_EVENT_ERROR» переопределён [-Werror]" это значит что configure не определил libevent и некорректно сформировал config.h, тут еще проще, добавляем в конец config.h строчку #define EVENT_V2 1 и перезапускаем make.
После того как мы все собрали, запускам telegram-cli из Cygwin окружения и регистрируем аккаунт, т.е. указываем номер телефона, пароль из SMS и все готово к работе:


С подробным списком команд можно ознакомиться в Wiki - Telegram CLI Commands. Теперь давайте займемся автоматизацией отправки сообщений.

В приведенном примере мы запускали telegram-cli из CygWin окружения. Если же оно не установлено, т.е. если мы попытаемся запустить собранный бинарник на машине где нет библиотек CygWin, мы естественно получим ошибку. Поэтому в папку с бинарником кладем еще и следующие используемые им библиотеки по списку:

  • cygcrypto-1.0.0.dll
  • cygevent-2-0-5.dll
  • cygncursesw-10.dll
  • cygreadline7.dll
  • cygwin1.dll
  • cygz.dll
  • cygconfig-9.dll

Плюс необходимо настроить переменные окружения TELEGRAM_CONFIG_DIR и TELEGRAM_HOME для того чтобы telegram-cli находил папку с config'ом. В общем случае пакетный файл для отправки сообщения пользователю @username может выглядеть так:


@echo off 
set TELEGRAM_CONFIG_DIR=.telegram-cli
set TELEGRAM_HOME=%~dp0
(echo dialog_list
timeout /t 3 > nul
echo msg @username Just a test ...
echo.
echo safe_quit
) | telegram-cli.exe --disable-readline 

Т.е. просто копируем это содержимое в .bat (.cmd) файл, например msg.cmd, запускаем его и пользователь @username получает сообщение Just a test. Если нам необходимо отправить картинку, то сделать это можно с помощью команды send_photo в telegram-cli.

Если кому-то тема отправки статистики в Telegram окажется интересной, чуть позже я выложу полный пакет готовый к работе. Т.е. скачал, распаковал, настроил запуск отправки статистике в планировщике и всё. Ну а пока буду рад выслушать ваши предложения и комментарии.

Обновлено 25.05.2017 16:59 (MSK)

Готовая сборка Telegram-Cli под Windows со всеми необходимыми библиотеками, а также примером скрипта для отправки скриншота из MSI Afterburner:

  • Архив: tg-cli-stat.7z 
  • Пароль на архив: decker.su
  • SHA256: 7e97be78699af80e719cf3b4fb4204d14f3c30cae5a569cd485bb02ca308f9a1

Подробная инструкция находится внутри архива в файле readme.txt.

вторник, 16 мая 2017 г.

МТС Smart Race 2. Продолжение линейки.

Судя по всему оператор МТС готовится представить очередную брендированную модель в линейке операторской продукции - МТС Smart Race 2. Напомню, что с обзором первой версии устройства (МТС Smart Race) вы могли познакомиться в июне 2016 года на страницах этого ресурса. Первая версия гаджета имела 4.5" дисплей, 1 Gb оперативной памяти, 8 Gb встроенной памяти, MT6735M на борту и Android 5.1 Lollipop. Что же касается МТС Smart Race 2, официального анонса устройства пока еще не было, но уже предлагаемые в интернет-магазине оператора разнообразные защитные пленки и стекла для нового устройства: [1],[2],[3],[4] позволяют сделать вывод о том, что размер дисплея нового гаджета не изменился. МТС Smart Race 2 также будет обладать 4.5" экраном.

Другой информации о новинке, к сожалению, пока нет.

Обновлено 20.05.2017 06:35 (MSK)

По новой, пока неподтвержденной информации, МТС Smart Race2 4G будет поставляться с Android 7 (Nougat). Таким образом, новинка имеет все шансы претендовать на звание первого операторского смартфона в РФ с Android 7 на борту. До этого одним из кандидатов на эту роль был Билайн Про 6, про который я рассказывал ранее. Но эту новинку российская розница, к сожалению, пока не увидела, т.к. Про 6 вышел на грузинском рынке. Также стал известен предполагаемый производитель МТС Smart Race2 4G, это уже известная нам по другим устройствам от МТС компания Fortuneship.

Обновлено 20.05.2017 20:27 (MSK)

Смартфон поступил в продажи в ряд торговых точек МТС. Стоимость нового устройства - 3990 руб. без дополнительных условий. Технические характеристики, а также внешний вид МТС Smart Race2 4G видны на фото:


Чуть позже моих постоянных читателей ждет подробный обзор новинки. Следите за новостями.