20 июня 2009

Использование акселерометра мака для симулятора

Захотелось мне использовать в своём приложении акселерометр, симулятор его не поддерживает, а железяка для тестирования ещё в пути. А тут такая оказия - на ловца и пост с описанием и решением проблемы бежит.
Если очень коротко, то идея состоит в захвате данных с акселерометра мака и посылке этих данных по сети приложению в симуляторе.
Итак, берём Unimotion, собираем, туда же кладём питон скрипт, приведённый в указанном выше посте. Запускаем эту связку:

./motion -f 17 | python sendaccsim.py

Из симулятора акселерометра берём два файла (AccelerometerSimulation.h и AccelerometerSimulation.m) и подключаем хедер там, где используем акселерометр. Запускаем симулятор, крутим наш мак и так и сяк. Со стороны выглядит странно, внимание, использовать только при наличии вменяемых коллег.

Пара MacOs полезностей

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

Возможность развернуть окно по хотекею.
Ну что за моветон, показывать в окне лишь часть необходимого для восприятия содержимого, и не иметь в самой keyboard-friendly системе шортката для разворачивания окна? Solved. Читаем пост, пишем скрипт, вешаем на хоткей в QuickSilver.

Возможность запретить показ иконки запущенного приложения в доке.
Я и так знаю, что у меня бегут QuickSilver и Namely, мне не нужны их иконки в доке. И если первый имеет для такого опцию - что с остальным? Dock Dodger в помощь. Читаем дисклеймер, не пугаемся - всё обратимо, отучаем приложения от дурного поведения.
Пока всё, остался открытым вопрос файлового менеджера.

14 июня 2009

Linux -> MacOs switcher'ство

Ну вот вам и первый свитчерский пост.
Я не буду говорить, как хорош или плох мак и линукс, я яростно ненавижу макодрочеров и не понимаю оголтелых линупсоедов (да-да, можете начинать отписываться), скажу в этой заметке лишь о том, чего мне не хватало в маке после линукса.
Вообще, хорошей отправной точкой может послужить SIMBL с его плагинами, из которых я сразу поставил InputSwitcher, дабы в каждом окне была своя раскладка клавиатуры (согласитесь, глупо иметь в терминале русский и в IM, за редким случаем, английский) и Visor - терминал должен быть под рукой всегда, на любом из Spaces, а это и zsh и git и vim и многое другое. В качестве замены gkrellm (не идеальной, не хватает иногда шкал, обновляемых в реальном времени) подойдёт iStatMenus - видно, когда процесс ушёл в бесконечный цикл, пора прибить обожравшийся памяти браузер или невовремя дорвавшийся до тарифицирумого траффика iTunes. Для быстрого запуска приложений в стиле автодополнения коммандной строки и krunner подойдёт namely.
Кроме того, нашёл мак сборки давно знакомых вещей - git, MacVim, zsh, arora, keepassx - это всё-таки такой специальный уличный юникс, много чего родного тут работает.
Чего не хватает до сих пор - толкового двухпанельного файлового менеджера и плеера (iTunes не предлагать, плавали  - знаем). Тут я готов прослыть извращенцем и поставить krusader & amarok в маковской сборке.
Такой вот кратенький забег. Для остального либо нашлись очевидные аналоги - либо вопрос пока открыт...

13 июня 2009

О текущем положении

В связи с некоторыми жизненными обстоятельствами, сдерживающими публикацию материалов, часть их пролежала даже не в столе а в голове, но Besser spät als gar nicht, как говорят немцы.
Итак, уже две недели я работаю в новой компании, основная сфера моей деятельности теперь будет связана с разработкой под маки и в частности под iPhone OS. Как вы понимаете, из этого вытекает несколько вероятных следствий:
  • появятся посты с мак и свитчерской тематикой
  • появятся посты о разработке в данной области
  • посты про Linux не пропадут, но упадёт их частота
  • к maemo возможно даже увеличение внимания - я стал чаще таскать свою таблетку
Ну вот, предупреждённый вооружён, думайте сами, а я пока продолжу просвещаться, радоваться жизни и черкать следующую заметку.
PS: Тап, опять тебе спасибо.

28 мая 2009

низкий уровень звука в maemo

Продолжая ковырять таблетку.
Как уже неоднократно убеждались владельцы, использовать maemo девайсы в качестве плеера крайне неудобно - они тихие.
А дело в том, что каждый раз при втыкании и вытыкании наушников программым методом снижается уровень pcm канала. Понаблюдать и порулить этим можно из миксера aumix, который водится в том же треде. И как одно из решений - тем же самым аумиксом по крону устанавливать звук на максимум (не бойтесь, не оглохнете - плеера управляют другим каналом):

aumix -w + 100

Это решение универсально и гарантированно выжмет максимум во всех приложениях. Правда, не кардинально, но ощутимо.

Ещё один путь - сорвать к чертям программный микшер, что, например, позволяет делать mplayer:
cat ~/.mplayer/config
softvol=1
softvol-max=300

300% от нормального - уже достаточно для мегаполиса и поездов с идущей в комплекте гарнитурой (даже слегка слишком - появляются шумы, которые слышны даже моему отдавленному взводом медведей уху). Минус - шумы, не все плееры поддерживают вывод через mplayer (kagu умеет).

В принципе, этого достаточно, хотя остаётся ещё несколько путей - replay gain, HAL, крутейшие наушники KOSS - но я уже слегка оглох...

27 мая 2009

идентификация ОС

Байка: в одном продукте под ОС семейства видовс версия ОС определялась по наличию в корне диска c: папок с именами windows, winnt и т.п., что приводило к странным флуктуациям при наличии нескольких или отсутствию таковых.

Призказка: работал на n810 плеер kagu, да и перестал. И UKMP тоже перестал. А без kagu n810 вообще не плеер, поскольку была в kagu самая главная возможность любого плеера - быстро поставить его на паузу (аппаратной кнопкой на корпусе или на родной гарнитуре).

Сказка: а причина была как в той самой байке - из-за странного способа идентификации ОС: по наличию определённого пути (который я удалил, дабы в автодополнении шелла не мешал). Вот так:

#/usr/bin/MediaCenter.py
if os.name=="posix" and os.path.exists('/media/mmc1'): ISMAEMO=1

Из-за этого устанавливалась неправильная глубина цвета и любое приложение, использовавшее pygame, падало.

Мораль: надо определять ОС другим способом. Хотя бы по ядру:
uname -a
Linux Nokia-N810-23-14 2.6.21-omap1 #2 Wed Jul 16 12:29:11 EEST 2008 armv6l unknown

12 марта 2009

дисковые буфера и hibernate в Linux

Пока нет ничего серьёзного к опубликованию, вот вам лёгенькая тема.
Заметил давно, что используемый мой метод hibernate в виде ядра с патчами tuxonice и скриптом оттуда же ну слишком уж медленный. Краткое раскидывание мозгами и раскапывание вопроса показало, что достаточно большую долю времени занимает сохранение дисковых буферов, что само по себе весьма экстравагантный финт - сохранять на винт кеш обращений к винту. Решил отключать кеш перед засыпанием и восстанавливать после просыпания:

#/etc/hibernate/common.conf
OnSuspend 10 echo 3 > /proc/sys/vm/drop_caches
OnResume 10 echo 0 > /proc/sys/vm/drop_caches

Время засыпания теперь - "как в лучших домах Лондона и Филадельфии".

01 марта 2009

Убираем многословность в Kopete

Часто бывает - постишь код, кусок документации или просто цитату в Kopete и лог разговора моментально забивается так, что за деревьями леса не видно. Скальпель!
В папке с темой оформления окна разговора Kopete (я скопировал одну из стандартных, получился такой путь: ~/.kde/share/apps/kopete/styles/PXClear/Contents/Resources) ищем main.css и добавляем

.OutgoingMessage, .NextOutgoingMessage
{
            height: 40px;
            overflow:hidden;
}

.OutgoingMessage:hover, .NextOutgoingMessage:hover
{
            height:auto;
}

.IncomingMessage, .NextIncomingMessage
{
            height: 40px;
            overflow:hidden;
}

.IncomingMessage:hover, .NextIncomingMessage:hover
{
            height:auto;
}


посты длиннее двух строчек (с моим размером шрифта) отображаются полностью только при наведении на них мышки.

28 февраля 2009

О web-based IDE и тонких клиентах вообще

Вся эта шумиха вокруг web-based IDE(bespin, heroku) и тонких клиентах для веб-сервисов вообще (google mail, docs) останется шумихой до тех пор, пока тонкий клиент (ноутбук, MID, телефон etc. + браузер) не будет считаться неработоспособным, если он не в состоянии функционировать в течении всего периода бодрствования человека без подзарядки (скажем 20 часов - в случае более длительного периода без доступа к розетке вам скорее нужно ружьё, нож и палатка) и обеспечить доступ в сеть из любой точки земного шара, включая метро, самолёт, глухую тайгу и дикие горы.

08 февраля 2009

Improving KDE4.2 taskbar plasmoid

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

 1 diff --git a/plasma/applets/tasks/windowtaskitem.cpp b/plasma/applets/tasks/windowtaskitem.cpp
 2 index aaaabbd..d4adaa4 100644
 3 --- a/plasma/applets/tasks/windowtaskitem.cpp
 4 +++ b/plasma/applets/tasks/windowtaskitem.cpp
 5 @@ -84,6 +84,10 @@ void WindowTaskItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
 6          if (isGrouped()) {
 7              parentGroup()->collapse();
 8          }
 9 +       else{
10 +           m_task->close();
11 +           close();
12 +       }
13      } else {
14          AbstractTaskItem::mousePressEvent(event);
15      }


В связи с чем вопрос - кому-то интересно такое поведение плазмоида?

02 февраля 2009

gentoo, kdeprefix useflag, KDE 4.2, Phonon and backends

Ну в общем в курсе все, что 4.2 вышел, он крут и наступило щастье. Так что это пока не обсуждаем.
А вот то, что поломался звук - предмет нашего разговора.
Поломался звук, amarok не играет, а всё потому что phonon не видит свои backend'ы, ибо всё раскидано в разных местах, понеже кто-то на useflag kdeprefix внимание обращает, а кто-то нет и кладёт всё по FHS.
Варианта, как водится, два.
1. Отмержить к чёрту все версии KDE ниже 4.2, отключить kdeprefix, только тогда ставить 4.2. Более правильный на мой взгляд. В воздухе повисшим оставим тот вопрос, что же делать с k3b и прочим антиквариатом.
2. Помочь найти потерянные backends.

ln -s /usr/share/kde4/services/phononbackends/ /usr/kde/4.2/share/kde4/services/phononbackends

Костыль, но быстрый и действенный.

31 января 2009

Escaping Unicode in Ruby

Ещё одна крупица мудрости и благодати позволит преобразовывать non-ASCII символы в строке в их экранированный Unicode эквивалент вроде \u0444:

1 class String
2   def escape_unicode
3     unpack('U*').map {|c| c < 0x80 ? c.chr : '\u%04x' % c}.join
4   end
5 end


>> puts "фывыфdd".escape_unicode
\u0444\u044b\u0432\u044b\u0444dd

Работает и в 1.8 и в 1.9.
Воистину, Ruby велик и Hal Fulton его пророк.
По мотивам одного перлового модуля. Короче в 5 раз.

29 января 2009

Midori, Mer, Nokia Internet Tablets, webkit.



Это именно то, о чём я так долго мечтал и считал единственно приемлемым для NIT - легковесный webkit-based браузер вместо того убожества, которое есть сейчас. Его ещё конечно нужно допиливать, в частности хилдонизировать, но это уже мелочи.
Собственно сама основная новость - выход Mer - не менее важна, читать рукоммендую тут.

26 января 2009

Дата в maemo

Приложение "Часы" в ITOS, скажем так, несколько странное, и при установке даты заставляет устанавливать не часовой пояс, а город, в списке доступных городов моего города нет, более того, города, по которому назван мой часовой пояс, там тоже нет! Такого бредового подхода я нигде не видел, да везде можно установить свой пояс в Asia/Yekaterinburg! Так что открываем рутову консоль и колдуем стандартное

echo "Asia/Yekaterinburg">/etc/timezone
date 01252055 (см. UPD)

Доступные временные зоны можно поглядеть так: ls -R /usr/share/zoneinfo/, а время записывать в формате ММДДЧЧмм.
Ещё +1 к карме и +5 к кошерности девайса.
UPD: я тут сам был и других ввёл в заблуждение. Оказывается, maemo не сохраняет системное время в аппаратные часы, что приводит к тому, что после перезагрузки время опять возвращается на круги своя. Из используемого в maemo busybox стандартная утилита для синхронизации системного и аппаратного времени hwclock была вырезана. Установить аппаратные часы можно так:
/mnt/initfs/usr/bin/retutime -T 2009-01-25/20:04:36

При этом время нужно указывать UTC (или гринвическое, как удобнее называйте).

23 января 2009

Таблетка от головы

Вот читаешь этих аналитиков по девайсам - это смех какой-то. Вот вам статья: Таблетка от (для?) счастья, аж с тремя фактическими ошибками, написанная владельцем (!) девайса.
1. микрофон в корпусе есть. Проверено лично разговором в скайпе.
2. DVD-рипы без дополнительного пережимания смотреть не получится даже в mplayer'е, процессора не хватит. Могут быть флуктуации, но в общем случае это так и обсуждено не раз и скрипты для конвертации уже все написали.
3. Звук там нормального уровня, только его, как и подсветку, искуственно занизили, но тут уж и правда, сразу не обнаружишь такую программу как aumix, впрочем, нужная тема на форуме находится на раз в поисковиках. Это, кстати, самое слабое место - при втыкании наушников звук снова приглушается, так что можно считать, что автор почти прав.
Тем не менее, остаётся согласится - в качестве плеера не тянет. Впрочем, это моё временное мнение. Например, в ванной посмотреть фильм - милое дело.
PS а за регистрацию без поддержки OpenID "им надо в раковину нассать".

11 января 2009

Not Rails

Вот вам кусочек кода Rails разработчика, пример того, что бывает, когда в уме Ruby is Rails:

35     def admin
36       unless logged_in?
37         redirect_to home_path
38       else
39         true
40       end
41     end

Сразу видно, что язык как таковой он не знает. Иначе бы назвал функцию "admin?" Но это так, незнание идиом, мелочи. А вот то, что она будет всегда возвращать true (или поднимать exception) станет сюрпризом, если использовать эту функцию в проверках. А всё потому что возвращать она будет статус редиректа как результат unless.
Поэтому надо всё-таки учить Ruby, или иметь кого-то, знающего его, для code review.

22 декабря 2008

отделяя дистрибутивы от котлет

Офигенно радуют в обзорах а-ля "что там нового в недавно вышедшем нашем любимом  дистрибутиве Х" фразы типа "Eclipse обновлён до версии 3.4". Ребята, да что за чушь вы пишете?  Разработчики дистрибутива ни строчки кода не написали для того, чтобы обновился этот Eclipse. Зачастую 1 всё, что сделали дистростроители - собрали его в формате пакетного менеджера дистрибутива или написали правило сборки (в той же Генту даже это делается сообществом). Да, это тоже работа, но к обновлению Eclipse относящаяся косвенно. Если учесть, сколь мало успешных примеров разделяемых между различными дистрибутивами одного семейства репозитариев, по большей части мартышкина работа.
"Улучшенная поддержка вебкамер" тоже не из дистрибутива произрастает, а из ядра. И снова степень участия дистростроителей в этом может быть разной, чаще всего - никакой.
В общем, ковырять вот так вот статейки можно долго и со смаком, в то же время окончательного и однозначного понимания того, что есть дистрибутив и что можно считать заслугами его строителей при релизе, у меня до сих пор нет. Немало в его достижении помогает статья любимого мною автора Алексея Федорчука Что же такое дистрибутивы Linux? Однако есть ещё несколько моментов.
Атрибутом любого дистрибутива является документация к нему, а заслугой создателей - её полнота, актуальность, доступность на родном языке и далее по тексту. Это может быть как руководства администратора, так и пользователя, иногда разработчика или maintain'ера пакета.
Самая же главная заслуга создателей дистрибутивов - интеграция. Интеграция имеющейся у них на руках глины в виде всего зоопарка ПО для создания жизнеспособной (могущей поддерживать себя и свои внутренние процессы типа обновления), по возможности красивой и удобной системы, предоставляющей пользователю окружение для осуществления уже его процессов (рабочих, развлекательных и пр.) Простейший пример - Gentoo (низкая степень интеграции) и Sabayon (высокая степень). То самое "сделать красиво".
Поскольку эта запись найдена в черновиках - прямо вот тут мысль обрывается и возникает вопрос - что ещё можно и должно считать частью дистрибутива, а что - вкладом в него (а вообще - в Open Source мир) со стороны независимых сторонних разработчиков?
  1. Я не говорю всегда - некоторые сообщества дистрибо-фанов и разработчиков именно дистрибутивов могут и контрибутить в различные проекты, особенно полезные именно им. К примеру - SuSE и Kickoff - целое юзабилити-исследование + разработка меню - и всё для того, чтобы улучшить юзерэкспириенс своих потребителей.

my.gpodder.org

Практически "тихо и незаметно" появилась в gpodder одна штука, которая в примечаниях к версии описана так: Support for gPodder web services (upload and download subscription lists). Суть её в том, что можно залить на сайт свой список подкастов и потом в другой экземпляр gpodder (на другом комьютере) загрузить. Само по себе уже хорошо, но есть ещё Podcast Top 50, что хорошо уже не только само по себе, но и тем, что в силу специфики аудитории сейчас там преобладают англоязычные подкасты линуксово-гиково-технической направленности. Чем несомненно стоит воспользоваться.

Вот что говорит об этом сам разработчик, Томас Перл (Thomas Perl):

Yep, I hope that the list is actually something worth to the users that will someday get the current "Top podcasts" list (that uses the PodcastAlley top podcast OPML) replaced with a community-based top podcasts list.

That said, as soon as I rewrite the (currently messy) codebase that is the webservice, I'm going to publish it under an open license, so users should still be able to run their own "my.gpodder.org" server or put up an alternative server in case I turn evil.

Still, for the current main use case (having a community-based top podcasts list), it's best to stay at the my.gpodder.org service, because we take the subscriber count from that data. If you want to just install a copy on your server to sync your (private) podcast list between many machines, you should be able to do so as soon as the code is cleaned up and released.

After that, it's also possible to take feature additions from the community, because the my.gpodder.org is open source then.

Так что счастливого подслушивания.

11 декабря 2008

О (без)полезности ORM

(Вынесено из комментов одного молодого блога.)
ORM штука полезная, но по сути костыль для существующих технологий, используемых в силу инертности мышления и исторических причин (ох уж эти мне исторические причины!). Когда программист хочет хранить свои объекты, а ему дают SQL простигосподи, - он кричит : дайте мне ORM. А надо ему не ORM в большинстве случаев, а что-нибудь типа Gemstone, может быть даже документ-ориентированную БД. Налицо несоответствие мировоззрений. Однако, на данный момент наиболее обкатанными хранилищами данных являются, как ни странно, реляционные базы данных. Вот и тащат их из проекта в проект, когнитивный диссонанс в голове разработчиков растёт, а голова от ног всё больше отстаёт.
В общем, ORM - это когда RDBMS не в ту дырку суют.

10 декабря 2008

Куда растут ноги у Oxite

Про выход Oxite уже лучше меня написали ProgBlog и Москалюк, так что не буду повторятся.
Ну конкурент Wordpress'у и прочее бла-бла - это полезно, хотя и не главное (этих самых CMS и прочих блогинговых движков на основе опять же MVC фреймворка RoR - хоть пруд пруди). А главное в ней то, что она не есть сферическая CMS в вакууме, а очень даже на .Net, что требует соответствующего хостинга (только не надо мне про моно - если виндовый хостинг я себе ещё представляю, то хостинг с моно - нет). И аудитория - держатели standalone блогов и выше - достаточно широка и многочисленна. Так что тут будут и длинный хвост и премиум клиенты. Ещё круче они продают  разве что винду для запуска всяких офисов и 1С, но тут уже подвижки разные есть, так что ситуация с этим более неоднородная.
В общем, на такой вот бесплатной, вроде бы, фиговине Microsoft сделает деньги. Этому нужно учится всем тем, кто задаёт вопросы о заработках на Opensource.