среда, 27 ноября 2013 г.

Достаём контакты с Андроидного смартфона с неработающим тачскрином и отключенной синхронизацией

Второй раз за пол-года возникли проблемы с Андроидным телефоном. Первый раз просто по глупости разбил тачскрин. Новый ехал из Китая 2 месяца, причём в итоге деньги мне вернули за недоставку до дедлайна, а на следующий день он таки приехал :) Жаль не надолго. Начались проблемы с тачскрином, достигшие апофигея сегодня - просто хаотично нажимаются произвольные участки экрана. Пользоваться невозможно. Опять на помощь приходит старый СониЭрикссон которому уже лет 8 и очень тихий микрофон. Но другого выхода нет. Не покупать же в локальных магазинах, а доставка китайца опять месяца на 2.

Самое важное в телефоне - это контакты. Их и будем вытаскивать и вставлять в СониЭриксон. Синхронизации контактов нет, всё хранится локально. В Андроиде - в базе sqlite3, а именно тут:

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

Про копирастию. Нельзя торговать музыкой так же как пирожками

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

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

воскресенье, 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.

среда, 4 сентября 2013 г.

БФУиК Rocks! LPC1788 + MX29LV800 = хэдкраб под TSOP48 в отладочную плату


Как быстро подключить микросхему в корпусе TSOP48 с шагом выводов 0.5?

Понадобилось подключить флешку MX29LV320 к LPC1788 на плате Starterkit SK-MLPC1788. Точнее так: у заказчика есть рабочее железо с этой флешкой, а мне нужно заставить её работать на том железе не имея его. Купить новую плату с этой флешкой - не вариант по соображениям сроков доставки, да и найти не удалось готовых даже у китайцев.
Выгоднее сделать свой хэдкраб. Лаборатория БФУ им.Канта спасает мир.

среда, 21 августа 2013 г.

Одинаковый бинарник для прошивки ARM Cortex-M3 через штатные средства и собственный загрузчик

Понадобилось сделать такой фокус на LPC1788. Дано: приложение и загрузчик, для его прошивки в рабочем устройстве. Загрузчик традиционно находится в начале адресного пространства (с 0 по 0x4000, например, в моём случае). Всё остальное занимает приложение. Нужно сделать возможным прошивать приложение через ISP или JTAG и так же без изменений с помощью собственного загрузчика.

Сначала в упор не понимал как это сделать, но на electronix.ru подсказали. Пишу для закрепления себе, возможно ещё кому-то пригодится. Способ должен быть рабочий для всех МК с ядром Cortex-M3/M4, но проверено только на LPC17xx.

Добро пожаловать в Зомбилэнд - циничный взгляд на БалтАртек глазами участника Garage48

9-11 августа проходил хакатон Garage48 на территории лагеря БалтАртек. Как участник этого мероприятия решил рассказать про впечатления от самого лагеря. Про само мероприятие отдельная запись.

С первых же минут прибывания в лагере у нас возникло ощущение "что-то тут не так". Чуть позже возникла ассоциация - Зомбилэнд. Если вы не смотрели этот фильм - рекомендую сделать это сейчас вместо чтения данного текста. Если смотрели - можете добавить в свой дневник бесполезных дел за сегодня то время, что вы потратите на чтение.

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

суббота, 10 августа 2013 г.

Garage48 @ Kaliningrad 2013 "Bender Rodriguez" Team

Онлайн репортаж из БалтАртека на меропритяии Garage48 http://garage48.org/
Команда "Bender Rodriguez" решает главную проблему человечества - "Killing all humans"

понедельник, 5 августа 2013 г.

Для чего нужна вычислительная мощность?

Часто в рекламных сообщения о выпуске нового процессора/микроконтроллера в число главных достоинств ставят вычислительную мощность. И вот в очередной раз читая книгу "The Definiteve Guide to ARM Cortex-M3" задался вопросом "а зачем нам собственно эта вычислительная мощность?". В современном смартфоне её во много сотен тысяч раз больше чем на космическом корабле Буран, облетевшем землю и севшем на аэродроме полностью автоматически. А мы же используем это для запуска птичек по свиньям.

понедельник, 29 июля 2013 г.

Готовимся наблюдать за проблемой 2038 или POSIX clock для гиков

Вероятно многие слышали о конце светапроблеме 2038. Не будем углубляться в её суть т.к. это есть в википедии. Можно разве что вывести мораль: signed типы можно использовать тогда и только тогда, когда для хранимой в нём сущности невозможно или неэффективно использовать unsigned тип. Я ни раз натыкался на проблемы из-за арифметики знаковых чисел и ни в одном из этих случаев не было необходимости использовать signed. Да, конечно, надо всегда помнить про это, читать ворнинги компилятора на приведение знаковых к беззнаковым типам, но есть более простой и эффективный способ исключить такие проблемы.

Deploying Qt5 app или зачем RTFM

Буквально в тот же вечер как я решил начать писать в блоге, удалось столкнуться с интересной проблемой. Малюсенький проект, состоящий из железки (Arduino ибо дёшево и сердито для такой задачи) плюс софтины столь же примитивной, но из-за нехватки денег у заказчика на оверкильной технологии - Qt, да ещё версии 5.1.0. Ибо за пол-дня пишется.

воскресенье, 28 июля 2013 г.

Почему я выбирал make install

Преврати свой дистрибутив в свалкСлаку

Как всё начинается

Новый пользователь по совету друзей и из собственного любопытства (не берём более конкретные цели) устанавливает какой-либо дистрибутив GNU/Linux. Не важно какой, но с вероятностью 0.99 это будет пакетный дистрибутив. Всё здорово, но вот он захотел установить какую-то программу. По привычке как он это делал в Windows или MacOSX. Заходит на сайт программы, скачивает архив и тут начинается самое интересное.

пятница, 26 июля 2013 г.

Initial commit

"Решив что пакетных менеджеров для GNU/Linux существует слишком много, разработчики Ubuntu решили сделать ещё один"

Затрудняюсь сейчас найти источник этой цитаты, но она отражает суть этого блога.

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

Cheers!