воскресенье, 20 октября 2013 г.

Ещё один проигрыватель аудиокниг под Андроид

Так получилось что я люблю аудиокниги и с приобретением смартфона на Андроиде решил использовать его в качестве проигрывателя. Попробовав несколько различных платных и бесплатных приложений пришёл к решению что надо писать свой. Основная претензия к ним: глючно работает сохранение текущей позиции в книге. В Akimbo вообще периодически у текущей книги сбрасывается позиция на начало. У других просто проблемы с воспроизведением в каких-то местах. Например, стоит прервать воспроизведение и потом продолжить его, как может перескочить на неверную позицию. Самым лучшим пока считаю Audiobook 303, но он так же подвержен произвольным скачкам позиции воспроизведения.

Вторая претензия - это попытка захавать все mp3 с SD-карточки и рассортировать в своей базе "коллекции". А я хочу просто указать каталог на файловой системе и не нужно пытаться за меня организовать коллекцию.

И так решил написать свой плеер

среда, 16 октября 2013 г.

Смена серийного номера Android-устройства

Многие китайские производители Android-девайсов не заморачиваются на присваивание своим поделкам уникальных серийных номеров. По крайней мере в софте. И можно столкнутся с проблемой когда одновременно подключено более 1 устройства с одинаковым серийником. В таком случае adb будет ругаться и чтобы залить и отлаживать своё приложение нужно отключать одно из устройств:
[2013-10-16 00:03:10 - MyAwesomeApp] Failed to install MyAwesomeApp.apk on device '0123456789ABCDEF': adb rejected install command with: more than one device
[2013-10-16 00:03:10 - MyAwesomeApp] com.android.ddmlib.AdbCommandRejectedException: more than one device
[2013-10-16 00:03:10 - MyAwesomeApp] Launch canceled!
Это никуда не годится. Имея root-привелегии можно решить эту проблему.

воскресенье, 13 октября 2013 г.

Кое-что о протоколе ccTalk

Используется такой протокол во всевозможных аппаратах, работающих с приёмом/выдачей денег для связи контроллера с устройствами приёма/выдачи денег. Это торговые автоматы, игровые, терминалы оплаты. Это не единственный протокол у них, но один из стандартных. Однако ничто не запрещает использовать его и в других применениях, например для опроса клавиатуры, связи с ЖК-дисплеем и т.д. (такие варианты спецификацией даже предусмотрены).

Позволяет подключать на одну шину много устройств, прост в реализации. Подробные спецификации есть на сайте http://www.cctalk.org/ в 4 pdf-файлах, причём с примерами реализации для популярных устройств (монетоприёмники, купюроприёмники).

В этой записи я расскажу про некоторые основные моменты, которые не становятся понятны с первого прочтения спецификации.

четверг, 10 октября 2013 г.

Переключение раскладки по Caps Lock

Привычка - очень сильная вещь. Привычка переключать раскладку клавиатуры по Ctrl+Shift оказалась чрезвычайно долгоиграющей.

Регулярно испытывал неудобства, например, в Eclipse где многие нужные хоткеи состоят из Ctrl+Shift+что-то. А поскольку данная комбинация перехватывается иксами (или кем там в DE), то хоткеи эти в программах не работают. Долго мучился из-за этого. Причём Caps Lock уже давно отключен за ненадобностью и вредностью - легко задеть его случайно.

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

В KDE изменить хоткей для переключения раскладки элементарно (олдфаги помнят в 3.х версии это был тот ещё квест). А вот в LXDE+Openbox оказалось чуточку сложнее. Решение ниже

четверг, 26 сентября 2013 г.

Фикс ошибки сборки libtorrent-rasterbar: error: expected class-name before '{' token

При сборке libtorrent-rasterbar-0.16.10 (возможно и других версий) можно получить такую ошибку:
In file included from disk_buffer_pool.cpp:33:0:
../include/libtorrent/disk_buffer_pool.hpp:52:2: error: expected class-name before '{' token
  {
  ^
make[1]: *** [disk_buffer_pool.lo] Error 1
Похоже на баг с инклюдами.  boost::noncopyable оказывается не определён на момент компиляции этого файла.

Грязный хак для исправления - добавить в начало файла include/libtorrent/disk_buffer_pool.hpp:
#include <boost/utility.hpp> 
Разработчики в курсе, ну а пока решаем проблему так.

Фикс ошибки svn: E170000: Unrecognized URL scheme for

Внезапно решил обновить svn, а поскольку дистрибутив уже не поддерживается лет дцать, то только исходники. Версия 1.8.3. Собрал, но получил ошибку при попытке достучаться до репозитория по http:
svn: E170000: Unrecognized URL scheme for http:// ...
Возникает если svn собран без библиотеки serf, которая нужна для доступа по http к репозиторию. При этом скрипт configure не ругнётся об отсутствии этой библиотеки (если в лог не заглянуть), а молча соберёт svn без поддержки http. Установка библиотеки решает проблему. Кстати, собирается она с помощью scons причём очень свежей версии.



суббота, 21 сентября 2013 г.

GPIO на BeagleBoneBlack: правильный доступ на Python

Про то как помигать светодиодом на платах вроде BeagleBone написано очень много. Но есть несколько проблем из-за которых я и решил написать этот пост.

И так, нужно просто управлять цифровым выходом в программе на Python. Для доступа к GPIO из user-space используется sysfs. Можно прямо из консоли (echo 45 > /sys/class/gpio/export), но это не особо удобно поскольку номера выводов придётся считать вручную. Есть библиотека для Python от adafruit которая реализует эту скучную работу и даёт простой API. Её и будем использовать.
 
Первая проблема: права доступа к /sys.
Вторая проблема: баг в библиотеке от adafruit.

 Решение ниже.

вторник, 17 сентября 2013 г.

I2C расширитель GPIO PCF8574 в GNU/Linux - это не могло быть проще

Наверное только ленивый не писал в блоге про подключение PCF8574 к Raspberry Pi или аналогичной плате. И мой черёд пришёл, только это будет BeagleBone Black и 2 микросхемы PCF8574.