2021-04-08

Умные часы на Андроид

Изучаю рынок умных часов в надежде найти что нибудь более мощное взамен моих теперешних Amazfit Stratos. Вначале понравились Amazfit GTS - выглядят очень интересно, но оказывается в эта серия часов имеют в качестве прошивки не Android как на Stratos а какую-то собственную проприетарноуе систему на собсвенной закрытой операционной системe. Почему-то производители кроме Amazfit Stratos и еще нескольких другиx моделей не используют android в качестве операционной системы а делают свои велосипеды. Вроде бы неплохая Android Wear живёт достаточно недолго от аккумулятора в то время "проприетарная" система на базе Android версии 4 которая стоит в часах линейки Amazfit Stratos показывает вполне неплохую автономность.

Amazfit Stratos могут работать от одного заряда больше недели, что меня вполне устраивает. Это гораздо лучше Wear - которая живёт от аккумулятора меньше, а стоит дороже. Сейчас они меня вполне устраивают, все же ещё мне хочется в часах иметь квадратный экран и микрофон с динамиком.

При этом, Amzfit Startos оказываются вполне умные и на них можно устанавливать приложения под Android при помощи утилиты adb и использовать часы в качестве полноценного android устройства. Странно то, что в то время как в других линейках часов есть версии с круглым экраноми и квадратными экранами, в линейке Amazfit с андроидом все модели имеют только круглый экран и нет ни одной модели с квадратным экраном, хотя для андроида с его меню в правом верхнем углу круглая форма экрана очень неудобна - меню оказывается обрезано закруглением экрана и пользоваться им становится невозможно. Возможно модель с квадратным экраном все же существует но я пока такую не нашёл. Попробую поизучать другие модели и посмотреть что они умеют. 

В табличке с приложениями для телефонов серии Amazfit Stratos появились графы для моделей Pace и Verge что вселяет определенную надежду на то что существуют и другие модели умных часов которые можно расширять по функционалу так как хочется а не только как предусмотрел производитель.

 

Оставить комментарий

 
  2021-04-05

Автоматический полив комнатных растений

Выложил на гитхаб файлы из проекта "Поливалка".

Наверно, любая домохозяйка время от времени сталкивается с вопросом - кому бы поручить полив комнатных растений во время длительного отсутствия, например во время отпуска. Конечно на помощь всегда могут прийти добрые родственники или соседи. Если беспокоить других людей не хочется - на помощь могут прийти подручные средства из пластиковых бутылок мокрых тряпок и тазиков…. Однако по приезду можно обнаружить, что  цветы все равно завяли така как система которую вы установили перед отъездом дала сбой, корни засохли, а вся вода из емкости вылилась на пол и залила соседей… 

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

Читать дальше в разделе "Статьи"...

 

Оставить комментарий

 
  2021-04-05

Видео стриминг с ESP32

В сети есть много примеров того как превратить плату esp32 cam в веб-камеру способную стримить видео поток. Однако, такая веб-камера может раздавать контент только на одно устройство, что делает такое решение не очень функциональным.

Задался вопросом, как сделать так, чтобы видеопоток от веб-камеры можно было принимать на нескольких устройствах. К удивлению, в сети, почему-то, очень мало успешных решений для потокового вещания с ESP32, хотя подобный проект мог бы быть довольно интересным.

Однако, существуют примеры того, как организовать потоковое вещание при помощи nginx от других источников, ту же идею можно применить и для нашего случая.

После нескольких вечеров экспериментов мне удалось организовать стриминг от устройства на esp32 cam в локальной сети на несколько устройств. В качестве реверсивного прокси-сервера используется nginx. FFMpeg преобразует RTSP поток от веб-камеры в RTMP видео поток который посылается на веб-сервер и раздается нескольким устройствам одновременно. В качестве видео плеера я использовал VLC но может подойти и любой другой.

Таким образом, сервер получает трафик виде одного потока от камеры esp32 который затем уже раздаётся на несколько потребителей. Веб сервер был поднят на устройстве Raspberry Pi Zero W -  мини компьютера размером с половину пластиковой карточки и стоимостью в десять долларов. Вычислительных способностей этого малыша оказалось достаточно для перекодирования в реальном времени видеопотока с ESP32 Cam и раздачи его на оконечные устройства.

Команда для перекодирования потока при помощи ffmpeg у меня получилась вот такой:

ffmpeg -rtsp_transport tcp -i rtsp://192.168.0.61:8554/mjpeg/1 \
    -f flv -tune zerolatency -preset ultrafast -r 10 -an \
    rtmp://localhost:1935/live/ccc

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

 

 

Оставить комментарий

 
  2021-04-03

Аудиокниги Андрея Кравеца

Являясь запойным книгоманом я могу читать книги целые дни напролёт. Иногда - если книга интересная могу надолго выпасть из реальности и никто не сможет до меня достучаться пока я не дочитаю последнюю страницу до конца. Поэтому, я стараюсь найти способ сделать так, чтобы эта моя особенность не оказывала негативного влияния на прочие сферы моей жизни. Один из таких способов заместительной терапии являются аудиокниги.

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

Но не у всякой печатной книги есть ее аудио вариант. Поэтому, аудиокниги для себя я долгое время делал сам. Как только компьютеры стали более-менее хорошо синтезировать текст я стал конвертировать текстовые книги в mp3 файлы чтобы проигрывать их при помощи аудиоплееров. Свою первую аудиокнигу, кажется это был Властелин Колец, я читал при помощи программы под windows govorilka которая могла наговаривать тексты при помощи разговорного API от Microsoft. Потом были различные версии аналогичных программ на android. Сейчас же мобильные устройства достаточно мощные, что могут начитывать книги в реальном времени без промежуточного преобразования в аудио файлы. Я до сих пор использую расширение для FBReader которое использует text-to-speech API.

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

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

Поэтому, если вы так же как и я любите аудиокниги ни в коем случае не подписывайтесь на его канал! Аудиокниги вызывают привыкание!

 

 

Оставить комментарий

 
  2021-03-30

Не ту страну назвали Гондурасом

Перенес все записи из тегов "гондураша" и "беспредел" в новый тег "сказочная страна". Но сегодня, прочитав про будни Навального в колонии, понял что тег "сказочная страна" опять устарел. Теперь было правильно переименовать "сказочная страна" в Скопин - ведь то что мы видим в стране, те кто сейчас ей руководит,  кто и что в этой стране решает судьбы людей ведут себя точно как Скопинский маньяк. Не удивительно что Невзоров в одной из своих невзоровских сред так подробно на и красочно описал поведение скопинского маньяка в отношении своих подопечных. Тут напрашиваются совершенно прямые и однозначные параллели. 

П.С. Переименовал сказочную страну в массаракш, не такая она уж и сказочная последнее время.

 

Оставить комментарий

 
  2021-03-29

Мониторинг серверов c Grafana и Influxdb

Есть меня несколько серверов которые бы мне хотелось постоянно мониторить на предмет оперативной памяти, диского пространства и т.п. Хотя сами сервера расположены в разных местах все они объединены между собой по openvpn. Для того чтобы решить задачку мой выбор пал на связку influxdb+grafana.

Influxdb это так называемая timeseries база данных, в которой мы можем хранить данные которые изменяются во времени. Grafana - это универсальный UI который удобно использовать для визуального представления таких данных. InfuxDB и Grafana поднимаются на при помощи docker-compose. К при этом для того, чтобы послать данные состояния сервера используется баш скрипт который периодически запускается через cron и при помощи curl посылает данные на сервер

Таким образом я всегда могу видеть состояние того или иного сервера. Все системы будем подымать в докере для этого достаточно склонировать репозиторий с docker-compose который содержит в себе 3 образа - influxdb, grafana и chronograph.

git clone git@github.com:maxistar/docker-compose-influxdb-grafana.git
cd docker-compose-influxdb-grafana
git checkout influx1_8
docker-compose up -d

Influxdb версии 2.x требует авторизации и поэтому я использовал версию 1.8. Исправленный docker-compose.yaml живет в ветке influx1_8 где я использую именно эту версию, возможно в будущем разберусь как использовать и последнюю версию.

После того как InfluxDB и Grafana запущены, на сервере, который будем мониторить, создаем bash скрипт (script.sh).

#!/bin/bash

dbName="db0"

stat=`free | awk -v RS="" '{print "memory,host=acentauri used=" $9 "\nmemory,host=acentauri total=" $8 "\nmemory,host=acentauri swap=" $15 "\nmemory,host=acentauri swapused=" $16}'`

curl -s -i -XPOST "http://10.8.0.100:8086/write?db=db0" \
	--data-binary "$stat" 
 

делаем файл исполнимым и добавляем команду для запуска скрипта в cron:

chmod +x script.sh
contab -e

в открывшимся файле добавляем следующую строчку:

* * * * * /home/maxim/infrastructure/utils/memusage/script.sh

После того как данные начали посылаться на сервере настраиваем dashboard и наслаждаемся.

После того как начал мониторить состояние asterisk сервера он волшебным образом перестал зависать! Возможно его зависания были связаны с тем что зависает wifi модуль и я его перестаю видеть по сети.

 

Оставить комментарий

 
  2021-03-28

Быстрый тест на кароновирус

Любой житель Берлина, неважно граждан или приезжий, имеет право на еженедельный, бесплатный тест на короновирус. То есть, ты можешь совершенно бесплатно каждую неделю делать новый тест. А людям, работающим с людьми, например учителям, бесплатный тест положен два раза в неделю.

Для этого по всему Берлину открыты десятки центров где можно сделать тест. Один такой центр находится у нас прямо под окнами. Вчера проверили как это работает.

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

Все посетители в центре тестирования обязаны быть в маске и держать дистанцию полтора-два метра.

Буквально сразу после тестирования на электронную почту пришел пароль для доступа к результатам теста. А еще через полчаса пришел и сам тест в виде PDF файла.

Берегите себя и оставайтесь здоровыми!

 

Оставить комментарий

 
  2021-03-23

Лайфхак

Вам надоела однообразная контекстная реклама в интернет? Надоела навязчивая и неинтересная реклама онлайн курсов? Достали предложения диванных экспертов купить их говнокнижку?

Зайдите на сайт lаmoda и положите пару шмоток в корзину - и..., ваша контекстная выдача волшебным образом преобразится! Не благодарите.

 

Оставить комментарий

 
  2021-03-21

Доступ к домашнему фотоархиву

Домашний фотоархив у меня хранится на удаленном сервере в папке на дисках объединенных программным RAID5. Одна маленькая проблемка - сервер хоть и доступен по ssh, физически, находится в другом месте и, вообще в другой стране, поэтому, я давно ищу способ просматривать фотоархив через браузер.

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

Задался вопросом, почему я не могу найти решение которое бы мне подходило? Возможно, я просто не то ищу.

Что мне, собственно, нужно? Мне нужен веб интерфейс для фотоальбома, который будет генерироваться на основе картинок, разложенных по папкам и будет доступен по сети. Желательно чтобы решение работало максимально быстро и не требовало мощного железа. На что это похоже? На статический генератор сайтов!

Вчера попробовал несколько проектов статических фотогалерей и остановился на Sigal.

Sigal это статический генератор фотогалерей который создает статический сайт из папки с изображениями. Написан на Python 2.x, поддерживает субдиректории, имеет несколько тем и умеет работать со всеми основными медиаформатами.

Для установки достаточно набрать:

pip install sigal

Теперь, чтобы сгенерировать сайт наберем:

sigal build /path/to/your/images/

В результате выполнения в текущей директории появится папка _build которая будет содержать html файлы и превьюшки. Можно сразу скормить эту папку апачу или нджинксу или воспользоваться встроенной командой сигала:

sigal serve _build

Открываем адрес http://localhost:8000/ в браузере и наслаждаемся!

Конвертирование 617 гигабайт картинок заняло примерно четыре часа и финальный сайт с превьюшками весит примерно 5 гигабайт, то есть чуть меньше процента от реального размера фотоархива. Странички загружаются довольно шустро, даже несмотря на то, что трафик идет из России через openvpn с сервером в США и открывается в Германии через реверсивный прокси подняный на Raspberry pi Zero W.

А как вы храните свой фотоархив?

 

Коментариев: 2

 
  2021-03-20

Компилируем Android приложения в Docker

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

Посидев пару вечеров, собрал простенький образ, который будет делать за меня всю черновую работу. Теперь, чтобы собрать любое приложение для android, достаточно выполнить вот такую команду из корня проекта:

docker run --rm -v ${PWD}:/var/app maxistar/android:latest bash \
 -c "gradle build && gradle compileDebugSources"

Готовый apk файл будет сохранен в папку app/build/outputs/apk/debug/app-debug.apk - его можно сразу скопировать не телефон и установить его (не забудьте разрешить установку приложений из неизвестных источников). 

Как был сделан этот образ? За основу взял образ Debian 9.

Установил Java 8 (Java 11 у меня не завелась если знаете как подружить gradle и java 11 поделитесь секретом)

apt-get update
apt-get -y install git wget unzip default-jdk

Для сборки нам нужен gradle установим его

wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -P /tmp
unzip -d /opt/android /tmp/sdk-tools-linux-3859397.zip

Скачаем Android SDK:

wget https://services.gradle.org/distributions/gradle-6.8.3-bin.zip -P /tmp
unzip -d /opt/gradle /tmp/gradle-6.8.3-bin.zip

Еще нужно установить переменные окружения.

ENV ANDROID_SDK_ROOT=/opt/android
ENV GRADLE_HOME=/opt/gradle/gradle-6.8.3
ENV PATH=${GRADLE_HOME}/bin:${ANDROID_SDK_ROOT}/tools/bin:${PATH}

Теперь нужно скачать инструменты для сборки android приложений.

sdkmanager --update
sdkmanager "build-tools;30.0.2" "platform-tools" "platforms;android-30"
sdkmanager --licenses

Готовый Dockerfile выглядит вот так:

FROM debian:9

MAINTAINER Max Starikov <maxim.starikov@gmail.com>

ENV ANDROID_SDK_ROOT=/opt/android
ENV GRADLE_HOME=/opt/gradle/gradle-6.8.3
ENV PATH=${GRADLE_HOME}/bin:${ANDROID_SDK_ROOT}/tools/bin:${PATH}

RUN apt-get update && apt-get -y install git wget unzip default-jdk

RUN wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -P /tmp && \
    unzip -d /opt/android /tmp/sdk-tools-linux-3859397.zip && \
    wget https://services.gradle.org/distributions/gradle-6.8.3-bin.zip -P /tmp && \
    unzip -d /opt/gradle /tmp/gradle-6.8.3-bin.zip && \
    sdkmanager --update && \
    yes | sdkmanager --licenses  && \
    sdkmanager "build-tools;30.0.2" "platform-tools" "platforms;android-30" && \
    yes | sdkmanager --licenses && \
    mkdir /var/app

WORKDIR /var/app

Следует заметить, что образ довольно большой (примерно 850Mb) - и для его использования нужно быстрое интернет соединение, но зато, единожды скачав, скачивать повторно docker его больше не будет.

Образ доступен на docker hub. Исходник находится на github.

 

Оставить комментарий