- Ну чё уставился, как Windows на новое устройство? Неизвестный гопник.
![](http://www.hardwarezone.com/img/data/articles/2007/2281/asus_a696.jpg)
Мой новый наладонник (кликабельно).
Купил я себе новый наладонник - Asus A696 под управлением Windows Mobile 6. И горько разочаровался, но речь сейчас не об этом.
Первое, что надо сделать после покупки нового наладонника - установить программу синхронизации, чтобы перебрасывать на него игры, проги, тексты и музыку. В наладонниках Palm, таких, как мой предыдущий Palm Zire 72s, синхронизация выполняется с помощью программы Palm Desktop. В Windows Mobile для того же самого используется программа Microsoft ActiveSync. На диске с софтом для наладонника идёт версия 4.5, её же можно скачать и с
официального сайта.
На основном домашнем компьютере установка прошла без проблем. На основном рабочем - была мелкая проблема, но я её обошёл. А вот с рабочим ноутбуком пришлось попотеть.
Та самая мелкая проблема, с которой я столкнулся, заключалась в следующем: программа установки содержимого с компакт-диска требует Macromedia Flash palyer 8 и выше. У меня стоит Adobe Flash player 9.0.124.0. Тем не менее, программа установки его не нашла, и продолжала требовать установить подходящий Flash player.
Хорошо, что не запустился только ярлычок ко всем остальным программам с диска, каждую из которых можно было запустить через её собственную программу установки. А если бы это была одна общая программа инсталляции, как у Microsoft Office, у которого нет отдельных инсталляторов для Word, Excel, PowerPoint и Access? Я бы вообще ничего установить не смог. Так и остался бы без программ (диск забит под завязку, но я же не знаю, что из всего этого добра необходимо, что - желательно, а что можно и не трогать).
Я не понимаю, почему для программы-инсталлятора нужна ещё какая-то предустановленная программа, пусть даже такая замечательная, как Adobe Flash player. Я специально посмотрел на системные требования - нигде не сказано, что для того, чтобы установить программу синхронизации, нужен Adobe Flash player. Он, на самом деле, и не нужен: ActiveSync можно скачать с Интернета и установить без проблем вне всякой связи с наличием или отсутствием Flash player`а. То есть единственное, для чего Flash player всё-таки нужен - это чтобы показать мне менюшку с опциями «ткни сюда - установишь ActiveSync, ткни сюда - будет тебе Adobe Acrobat Reader». Не чересчур ли?
![](http://linux-wizard.net/screenshots/rpmdrake_cooker.jpg)
Окно инсталлятора rpmdrake в Mandriva Linux (тоже кликабельно).Я не понимаю, зачем нужна красивая заставка, проигрываемая пол-минуты, если всё, что я хочу сделать - это поставить одну несчастную программу для синхронизации. ИМХО, если есть диск с десятком программ на нём, то, конечно, должна быть заставка, но она должна быть сделана, как rpmdrake (это установщик программ в Mandriva Linux) или как инсталлятор в Zeta: есть список категорий, открываешь нужную категорию - вываливается список программ из этой категории, щёлкаешь на интересующей программе - появляется её краткое описание и скриншот. Можно отметить программы галочками; как только отмечено больше одной галочки, становится активной кнопка «Установить». Если программ мало, то можно просто сразу дать список программ. Имеют право на существование кнопки «Установить всё» и «Параметры установки», где можно выбрать, куда устанавливать каждую программу. Если подобный функционализм претит эстетическому чувству выпускающих проект, то можно добавить начальную презентацию со звуком, слайд-шоу и анимацией. Но в таком случае обязательно надо делать хорошо заметные кнопки «Пропустить заставку» и «Убрать звук».
Но даже эту начальную презентацию вполне можно сделать стандартными средствами Винды. Блин, у виндузятников есть столько всякой ненужной фигни всевозможных средств в арсенале - и Win32 API, и MFC, и ещё штук пять наборов классов! Всё это вместе позволяет создать заставку любой сложности, с каким угодно звуком. И эта заставка будет гарантированно проигрываться на любом компьютере, вне зависимости от установленных программ! Да, Win32 API - не самое простое средство разработки анимаций. Flash проще. Но зато сделанная в Win32 API заставка будет требовать меньше ресурсов и не будет зависеть больше ни от чего!
Но это проблема Asus`а, и, как я уже сказал, я сумел её обойти. Просто прошёлся по папкам на диске, прикинул по названиям, что к чему относится, и установил программы вручную. До сих пор не знаю, поставил ли я всё, что надо; но главное - Asus A696 синхронизируется.
Основные проблемы начались на рабочем ноутбуке.
Во-первых, он тоже страдал от той же проблемы, что и рабочий комп: запускаемый автоматически инсталлятор не находил Macromedia Flash player 8. Но я уже знал, как это обойти.
Во-вторых, после установки ActiveSync и подключения наладонника, Винда начала готовиться к работе с устройством. Во время проверки и переконфигурации драйверов она обнаружила, что нескольких файлов ей не хватает, и, соответственно, драйвер устанавливать отказалась. Разумеется, наладонник с компом не поладили, и синхронизация не заработала.
В это надо вчитаться. ActiveSync закончил установку и дал Винде свои драйвера: для всех устройств, поддерживающих ActiveSync, используй то-то и то-то. Но при первом подключении понадобилось устанавливать или конфигурировать ещё что-то. Что именно - я не знаю, и знать не хочу. Вопрос: зачем выполнять установку чего-либо при первом подключении устройства? Неужели нельзя было все нужные файлы распихать по нужным папкам, отконфигурировать и слинковать во время установки драйвера для этого же устройства (или, в случае Asus A696, универсального драйвера для всех устройств, поддерживающих ActiveSync)?
Как это сделано в ВиндеКак это должно быть сделаноТо, что называется «установкой нового оборудования», на самом деле таковой не является. Программа-установщик не устанавливает новые драйверы в операционную систему, она копирует их туда, откуда операционная система сможет взять их в случае необходимости. Как только к USB подключается новое устройство, Windows начинает спешно рыться в своём загашнике драйверов и спрашивать: «Ты вот с этим драйвером работать будешь? Нет?! А вот с этим?» Если устройство соглашается работать с одним из драйверов, то Винда выполняет какие-то операции конфигурации, загружает драйвер и, если всё прошло нормально, рапортует об успешно подключенном устройстве. Если же ни один драйвер не подошёл, то Винда с сожалением сообщает, что обнаружено новое Хрен-знает-что (Unknown device), и просит вытащить и воткнуть устройство снова. После перевтыкания поиск драйверов начинается по новой.На самом деле, в абсолютном большинстве современных операционных систем это сделано примерно так же. Есть куча готовых драйверов, большинство из которых в данный момент неактивно (а зачем держать в памяти программу для работы с устройством, которого в сию секунду не существует?) При подключении нового устройства устройство сообщает, к какому классу оно относится, и операционка перебирает все драйверы по одному, пока не найдётся подходящий. Отличие в том, что при первом подключении нет никакого конфигурирования драйвера: драйвер либо работает сразу, либо (если он не от этого устройства, или если он разработан в Microsoft) не работает вообще. Так и должно быть. Так правильно.
Итак, я подключаю Asus A696; Винда радостно определяет, что это фигнь-совместимая фиговина, и, пища от восторга, начинает перетасовывать файлы драйверов, пути доступа и протоколы. Во время перетасовки она осознаёт, что двух файлов ей не хватает, и начинает настойчиво их требовать. Файлы, которые ей нужны, - rndismpx.sys и rndismp.sys.
Что делает нормальный человек в такой ситуации? Недостающие файлы обнаружились в момент подключения устройства; значит, видимо, они как-то связаны с устройством. Я достал диски, которые шли с наладонником, в надежде, что нужный файл окажется там. Поскольку я верю в автоматизацию, я разрешил Винде установить драйвер автоматически, и даже разрешил подключиться к Интернету, чтобы проверить наличие новых драйверов. Ничего из этого не помогло: файлов по-прежнему не хватало.
Удаление и установка ActiveSync, чистка реестра (на рабочем-то ноуте!) и исполнение «Травиаты» на бубне не помогли. Простой поиск помог убедиться, что файлов с таким названием на диске просто нет. Я вздохнул и полез в Сеть.
Ну да, эти файлы как-то связаны с удалённым минипортом
NDIS. Что это на самом деле - сейчас неважно. Протокол NDIS был разработан Microsoft совместно с 3com, и поддерживался ещё в MS-DOS. Значит, это Microsoft`овские файлы. Быстрая проверка показала, что файлы эти в самом деле находятся в папке C:\Windows\system32\drivers. Я дал путь к этим файлам в окне запроса, и установка наконец-то завершилась успешно: наладонник сумел связаться с компом и синхронизировался.
(Тут кроется ещё одна проблема: ActiveSync поддерживает синхронизацию не более чем с двумя компьютерами. Видимо, предполагается, что у человека один компьютер дома и один - на работе, и больше никаких компьютеров в его распоряжении нет. Для сравнения: Palm умеет синхронизироваться с неограниченным числом компьютеров. Из какого органа пальца Microsoft высосали это странное ограничение на два компьютера - мне непонятно. Но речь сейчас не об этом).
То есть вся проблема заключалась в том, что ActiveSync при установке не подключил два виндузятских же драйвера в Винду.
И тут уже возникает множество вопросов:
- А почему Винда не подозревает о своих собственных файлах, которые были установлены с ней же, и являются частью её собственных драйверов?
- Что было бы, если бы я не додумался посмотреть, что это за файлы? Кстати, rn выглядит точно как m; мне пришлось ещё покопаться, чтобы понять, что это за файл такой, науке неизвестный.
- Что должен делать обычный, простой человек, который с компьютером на «вы», в ситуации, когда операционная система просит дать ей что-то совершенно непонятное, которое к тому же неизвестно, где искать?
- Если этот драйвер так уж необходим, то почему производители наладонника не включили его в софт, поставляющийся на их собственном диске?
- А почему ActiveSync не сказал Винде, что у неё есть эти файлы?
- Должен ли конечный пользователь, желающий установить соединение между наладонником и компьютером, вникать в технические детали и на уровне файлов объяснять Винде, что у неё есть, а чего у неё нет?
В общем, выше я описал несколько проблем. А теперь поговорим о том, как это должно быть сделано:
- Об автоматически запускающейся заставке диска с софтом я уже говорил выше. И повторю ещё раз:
- С самого начала проигрывания должна быть доступна опция пропустить анимированную презентацию-вступление.
- Если эта презентация сопровождается звуком - должна быть возможность его отключить или управлять его громкостью.
- По окончании анимации пользователь должен попасть в список категорий программ или сразу в список программ.
- У пользователя должна быть опция выбрать нужные программы из списка и установить их все разом, или устанавливать программы по одной.
- Каждая программа должна сопровождаться:
- описанием
Эта софтина предназначена для чтения файлов помощи в формате ZPA - «Ну и зачем оно мне, если я вообще помощь не открываю?»
- скриншотом
«Вася купил себе такой же наладонник. Я, конечно, не помню, как называлась прога, которую он поставил, но экран у него выглядел точно так же. Значит, эту прогу и надо ставить!»
- оценкой необходимости установки программы
Это - набор кодеков, классная фича, маст хэв, без неё твой наладонник фильмы показывать не будет!
А это - трёхмерная математическая модель ядерного взрыва, так себе фигнь, можно и не ставить, она для узкоспециализированного круга пользователей.
- Эта заставка не должна требовать наличия других программ или плагинов.
- Успешное окончание установки драйвера должно означать, что при первом же подключении устройство опознается и заработает корректно.
Никаких дополнительных конфигураций, переписывания файлов с места на место, перелинковки и тому подобного при первом подключении быть не должно. Первое подключение устройства ничем не отличается (и не должно отличаться) от второго, пятнадцатого и тысяча восьмого. Соответственно, и вести себя система должна одинаково.
- Операционка должна знать, где находятся её собственные системные файлы, и где брать драйвера.
Конечно, в Винде это частично проблема файловой системы - даже файловая система NTFS, которая, вроде бы, индексирована, на самом деле не обладает и сотой долей возможностей настоящей индексированной файловой системы - к примеру, ReiserFS. Но когда-то все файловые системы были неиндексированными, что не мешало разработчикам изобретать всевозможные способы знать, что где находится.
В Винде есть свой способ знать, что где лежит: реестр (registry). Конечно, он предназначен совсем не для этого, а для хранения конфигурации, но основная идея ясна: существует база данных по настройкам. Так вот, надо было сделать похожую базу данных для всех-всех драйверов, всего поддерживаемого оборудования, и создать соответствующую матрицу «драйверы - поддерживаемое оборудование». В таком случае Винде не пришлось бы искать интересующие её файлы при подключении устройства, ни при первом, ни при любом другом.
![](http://www.bezpeka.ru/104.jpg)
Техническая реализация
На самом деле, техническая реализация такой базы данных была бы не чересчур сложной. У большинства производителей компьютерного железа есть свой номер производителя (четырёхзначное шестнадцатеричное число, к примеру, для чипсетов nVidia - 0×10de), у каждого товара есть свой номер (такое же число, к примеру, у видеокарточки GeForce 7600GT - 0×02e0). Поиск ячейки, соответствующей этому продукту, осуществляется за пару десятков операций. Оттуда есть прямой пойнтер на список драйверов, поддерживающих это устройство, рассортированный в порядке качества поддержки по убывающей (специальный драйвер для iRiver E100 будет стоять раньше в списке, чем просто драйвер флеш-памяти, который тоже работает с плеерами iRiver). Операционка начинает перебирать эти драйверы, пока не найдёт тот, с которым устройство согласится работать. Поскольку не имеет смысла включать устройство до того, как установлен его драйвер, можно предположить, что все драйвера, работающие с этим устройством, уже находятся в списке; в том числе драйвера, подгруженные с диска, и драйвера, скачанные с Сети автоматически.
Фишка в том, что к драйверу прикреплён список файлов, нужных для его работы, с указанием их местоположения. Если драйвер подходит для этого устройства, нужные файлы перебрасываются в системные папки (если они ещё не там), и драйвер грузится в память.
У всех драйверов список необходимых им файлов (с указанием их версий) встроен внутрь самого драйвера, равно как и список всех поддерживаемых этим драйвером устройств с указанием степени поддержки. Поэтому при подключении нового устройства надо просто найти все файлы драйверов, в том числе на подключаемых носителях (CD-ROM`ы и флешки) - для того я и говорил об индексируемых файловых системах. Но и без индексированных файловых систем можно обойтись.
Процесс начала работы с устройством выглядит так:
- Устройство подключено.
- Запускается обновление списка драйверов.
Это занимает считанные секунды, потому что файлы драйверов на жёстком диске отслеживаются операционной системой в фоновом режиме; значит, остаётся проверить только онлайновый репозиторий и подключаемые диски.
- Все найденные драйвера вносятся в матрицу драйверов.
- Операционка проходит по матрице драйверов в поисках производителя устройства, затем - в поисках самого устройства, и находит все драйвера, работающие с этим устройством.
- Драйверы из полученного списка проверяются последовательно.
- Если найден рабочий драйвер, он загружается в память; иначе ОС сообщает об ошибке.
Особо отмечу, что загрузка компа состоит из последовательно подгружаемых драйверов устройств, что может быть реализовано точно так же.
Система строится на том, что у каждого устройства есть свой уникальный номер, позволяющий его идентифицировать. Но это предположение не лишено здравого смысла.Идёт проверка патентабельности этой идеи.
То есть способ решить эту проблему есть, просто надо взять и сделать это.
- Никогда, никогда нельзя пользоваться шрифтом с варьирующейся шириной букв для того, чтобы печатать названия файлов.
Названия файлов, папок и все пути должны быть прописаны исключительно шрифтами с постоянной шириной символов (fixed-width fonts). Равно как и логины, пароли, идентификаторы и вообще все данные, где разница между rn и m критична. Ну-ка, попробуйте быстро прочитать логин lIil|l1rnIil и сравните с lIil|l1rnIil. А если вы опечатались в одной из l? А у вас разрешение экрана 1600×1200 на 17" мониторе. Как вы будете искать ошибку?
- Каждый драйвер должен быть самодостаточен.
Если вместе с устройством идёт диск с драйвером, то на этом диске должно находиться всё необходимое, чтобы этот драйвер заработал. Все программы, все файлы, все драйвера, в общем - абсолютно всё. Если на диске будут куски операционной системы - ничего страшного, это даже необходимо, если есть шанс, что у пользователя эти куски почему-то не установлены, а устройство без них работать не будет. При использовании предложенной мною выше технической реализации не будет даже проблем с разными версиями одних и тех же файлов: операционная система просто положит их в разные места (пусть каждый драйвер хранится в отдельной папке) и будет знать, когда использовать один файл, а когда - другой.
Вот как это должно быть сделано.
Блин, я могу сделать этот мир лучше, дайте мне только капельку удачи, немного свободного времени и неограниченную власть!