Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет dibr ([info]dibr)
@ 2009-03-21 13:33:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Весеннее обострение
     Мир КПК полон оригинальными и свежими решениями интересных проблем. Например.

     Известно, что тач-скрин нужно калибровать. Ибо это штука аналоговая по сути, и при переводе нажатий "в цифру" неизбежны геометрические искажения. Простейшие искажения (сохраняющие прямые прямыми) можно разделить на "сдвиг", "масштаб", "перекос/поворот" и "трапеция". Простейшая функция калибровки, первой приходящая в голову, выглядит как линейная комбинация x и y, то есть x' = a·x + b·y;     y' = c·x + d·y.
     MS Win Mobile при калибровке экрана просит нажать на пять точек: четыре по углам и одну в центре. Это даже на одну больше чем необходимо знать для исправления всех перечисленных выше искажений. А теперь внимание, вопрос: что делать программисту, пишущему функцию калибровки, после того как он выяснил что приведенная выше простейшая (линейная) функция калибровки не может исправить искажения типа "трапеция" (не сохраняющие параллельность прямых)?
     Казавшийся очевидным мне ответ: "добавить перекрестные члены вида C·x·y".
     Решение от Микрософт: "всё равно использовать линейную функцию, при получающейся ошибке более допустимой считать тачпад не прошедшим калибровку и попросить нажать точки заново". И так в бесконечном цикле - то есть, если тачпад имеет чуть более чем ничтожные искажения типа "трапеция" - пользователя будут гонять по экрану калибровки вечно (а в сервисе предложат заменить экран).
     Любопытно, что под Palm OS есть утилита, калибрующая тачпад аж по 100 точкам, то есть позволяющая нормально работать даже с полуубитым тачпадом, не то что со слегка перекошенным. Под винду же - только вопли о проблеме (а она существует), и решения вида "замена тачпада". Не думаю что из-за низкой квалификации пользователей винды - в форумах встречаются весьма низкоуровневые и нетривиальные решения виндовых проблем. Похоже из-за того, что работа с тачпадом (вместе с формулой) вшита так глубоко в пузо винды, что подобраться к ней не представляется возможным.

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

     И ещё одно забавное решение. Называется WiFi-рация. Программка, умеющая при нажатии кнопки и при наличии WiFi (или BT) соединения вещать (броадкастами, видимо) звук в эфир. Чтобы все остальные такие же программки, находящиеся в той же WiFi сети (в том числе в сети "точка-точка"), могли это слышать. То есть интерфейс - чисто как у раций: нажал, сказал, все услышали, никаких спецдействий (кроме запуска WiFi и собственно программы) не требуется.
     Программка называется 4talk (последняя версия 1.4, есть версия 1.3 с "лекарством"), и радует именно тем, что работает сразу, без необходимости что-то там настраивать :-)

     Вот такими разными бывают решения проблем в мире КПК.

     Disclaimer: инфа не 100%: я не уверен что микрософт пользуется именно этой формулой, и я не могу утверждать что принудительное снижение громкости связано именно с вылетом динамиков. Но мои эксперименты с win mobile и результаты чтения форумов говорят о том, что очень похоже что так оно и есть.


(Добавить комментарий)


[info]pe3yc@lj
2009-03-21 08:47 (ссылка)
Этот 4talk работает только с WM или с симбианом тоже?

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2009-03-21 09:13 (ссылка)
Как я понял, только WM. Во всяком случае в списке поддерживаемых ОС только разные WM...

http://www.4pockets.com/product_info.php?p=62

(Ответить) (Уровень выше)


[info]dibr@lj
2009-03-21 09:21 (ссылка)
> в списке поддерживаемых ОС только разные WM

...а, и ещё "виндоуз обычный", который WinXP. Запускается, но как работает не проверял, потому что на "большом компьютере" у меня нет wifi.

(Ответить) (Уровень выше)


[info]tyomitch@lj
2009-03-21 14:27 (ссылка)
Под PalmOS, если во время калибрации тыкать здорово мимо точек, устройство получается практически неуправляемое, без шансов попасть в любую из экранных кнопок.

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

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2009-03-21 17:04 (ссылка)
Сейчас в винмобайле есть ограничение на максимальную погрешность того что получилось после калибровки. Никто не мешает ввести нелинейный член, и ввести ограничение на него - если он больше скольки-то, то экран считаем битым.
А сейчас фигня получается: небольшую ошибку мы *вообще* не корректируем, а когда она становится "заметной" - ломаемся. Уж хотя бы в случаях, когда экран "прошёл калибровку", но трапецию всё равно видно невооруженным глазом - можно было бы и учесть нелинейный член...

(Ответить) (Уровень выше)


[info]dibr@lj
2009-03-21 18:19 (ссылка)
Кстати, только что по приколу и с первой попытки(!) откалибровал тачпад "вверх ногами". Просто тыкал не в точку, а в противоположное ей по вертикали место. Получил аналогично "практически неуправляемое устройство" - тыки распознавались вверх ногами, как я и предполагал.

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

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tyomitch@lj
2009-03-22 06:50 (ссылка)
"--Ага! -- сказали суровые русские мужики, и пошли снова валить лес топорами." (ц)

Всё равно, ткнуть N раз мимо точек можно и без злого умысла: например, если попадёт КПК в руки младенцу. А если юзер рассчитает, куда нужно N раз ткнуть, чтобы намеренно сделать устройство неуправляемым, -- то он его заслужил.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2009-03-22 07:28 (ссылка)
> например, если попадёт КПК в руки младенцу

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

> А если юзер рассчитает, куда нужно N раз ткнуть, чтобы намеренно сделать устройство неуправляемым, -- то он его заслужил.

Так зачем тогда защита от тыка не туда, если она (1) легко обходится, (2) не нужна, ибо перекалибровку можно легко перезапустить заново и (3) создает проблемы при тыке куда надо? Поэтому я и говорю, что вот это вот поведение винды - это не хитрый план по защите от неправильных тыков, а обычное раздолбайство программистов, поленившихся взять формулу из учебника математики не для 5 класса средней школы, а хотя бы для 9 класса той же школы. Пальмовая идеология, где калибровка делается в точности как юзер ткнул, мне нравится куда больше, чем вот такая вот трогательная забота в исполнении микрософт...

(Ответить) (Уровень выше)


[info]vikky_13@lj
2009-03-21 18:31 (ссылка)
Очень интересно. И про тачскрин и про wifi рацию.
Я, конечно, точно не знаю, почему тачскрин такой "недоделанный", но протестую против того, что "видимо, работа с тачпадом (вместе с формулой) вшита так глубоко в пузо винды, что подобраться к ней не представляется возможным.". Нет, Windows CE и ее модификация Windows Mobile-очень интересное модульное решение.У нее, фактически, нет большого тяжелого недоступного ядра. Есть очень компактное ядрышко, но оно, насколько я помню, к экрану никакого отношения не имеет. Все производители железок, желающие Win CE в своих девайсах использовать, получают набор отдельных компонент, к которым могут добавлять свои, да и у многих компонент в поставке есть исходники(!). Все это строится при помощи Microsoft Platform Builder. Видимо, юзеров-антикалибровщиков не так много, чтобы возиться с правкой :)

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2009-03-22 07:38 (ссылка)
Модульность у MS вполне спокойно сочетается с монолитностью :-) То есть, ядрышко там может быть и компактное, но вполне может оказаться, что та часть, что преобразует координаты с тачпада и доставляет их в виде системного события - "штатной замене не подлежит". То есть, к примеру, драйвера тачпада заменить можно, а "калибратор" - вшит в систему (необязательно в ядро), нигде не документирован (свой на замену не напишешь), и естественно идёт без исходников (кстати, об исходниках - где я могу их добыть, если я не производитель железки?). Ну, вот не сочли они необходимым "калибратор" выносить в отдельный модуль.

Я не говорю что эти именно так как я предполагаю - потроха WM я не видел, может и в самом деле у пользователей просто квалификации не хватило (хотя, хватило же им квалификации докопаться до скрытого эквалайзера на плате). Я вспоминаю win95/98/ME, в которой работа с ком-портовой мышью была настолько глубоко вшита в винду, что ком-портовая мышь ездила по экрану и нажимала кнопки даже если пользователь вынес из системы все упоминания о указующих устройствах вообще и мышах в частности...

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]vikky_13@lj
2009-03-22 08:10 (ссылка)
Года три назад в MS была акция-что-то типа регистрируешься на сайте и бесплатно получаешь исходники предыдущей версии WinCE. Думаю, что даже если акция кончилась (что почти наверняка), то многие в ней поучаствовали, и теперь готовы поделиться-всякие торренты, рапидшары, ....
Но, возможно, ты и прав насчет зашитости в систему.

(Ответить) (Уровень выше)


[info]fromvancouver@lj
2009-03-23 18:44 (ссылка)




Насчет «вшитости» калибровки однозначно ответить трудно. С точки зрения пользователя готового устройства поменять действетельно ничего уже нельзяю (в WM7 это частично не так, но об этом позже). А вот с точки зрения производителя есть полная свобода действий.

До WM7 за калибровку отвечал исключитльно драйвер тачскрина. А этот драйвер делает не MS а производитель (OEM). Так что решать как будет производиться калибровка и по скольким точкам это все решает OEM. Но в 99% случае OEMы используют предоставленную MS библиотечную функцию

VOID TouchPanelSetCalibration(INT32 cCalibrationPoints,INT32* pScreenXBuffer,INT32* pScreenYBuffer,INT32* pUncalXBuffer, INT32* pUncalYBuffer)

Ссылка на нее есть в MSDN. cCalibrationPoints определяет сколько точек для калибровки будет использовано. Я, правда, не знаю как качество калибровки улучшается с увеличением количества точек. Данная функция строит какую то хитрую матрицу в комментариях сказано только(The 2D version is more complicated, but is more accurate since it does not make the simplification of assuming independent X and Y values.)

В WM7 калибровку вынесли в отдельную DLL, так что заменить алгоритм можно независимо от драйвера. Но количество точек калибровки по прежнему определяется драйвером, то есть OEM.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2009-03-23 19:26 (ссылка)
Вот же ж как оно оказывается. Правильная функция калибровки реализована, но не используется по дефолту (проблема, как мне видится из экспериментов, именно в assuming independent X and Y values, добавление члена X·Y всё решило бы), и пользователь с этим ничего сделать не может (до WM7, но у меня WM6). Причём ведь и пяти калибровочных точек с избытком достаточно для хорошой калибровки, и функция-то уже реализована...

...нет бы какой-нибудь ключик в реестре сделали, чтобы включать желающим правильную калибровку, вместо чтобы отдать всё на откуп ОЕМ-ам :-)

(Ответить) (Уровень выше)