Оптимизация модели поддержки Юникода

optimizaciya modeli podderzhki junikoda Почтовый клиент PyMailGUI Python

Как уже коротко обсуждалось в начале этой главы и подробно — в главе 13, в PyMailGUI поддержка кодировок Юникода текста сообщений и компонентов заголовков является достаточно широкой, но не настолько общей и универсальной, как могла бы быть. Некоторые ограничения, имеющиеся здесь, обусловлены ограничениями пакета email в Python 3.1, от которого сильно зависит программа PyMail- GUI. Довольно сложно в почтовых клиентах на языке Python реализовать поддержку некоторых особенностей лучше, чем позволяют используемые библиотеки.

Кроме того, поддержка Юникода, присутствующая в этой программе, не подвергалась сколько-нибудь широкому или строгому тестированию. Так же, как и текстовый редактор PyEdit, представленный в главе 11, PyMailGUI в настоящее время является системой с единственным пользователем, разрабатывавшейся с целью служить книжным примером, а не проектом с открытыми исходными текстами. Вследствие этого некоторые текущие алгоритмы использования Юникода возникли отчасти из соображений здравого смысла и могут быть улучшены со временем и по мере накопления опыта.

Например, в конечном итоге при отправке может оказаться лучше повсеместно использовать кодировку UTF-8 (или вообще не использовать никакой кодировки) вместо поддержки некоторого набора пользовательских настроек, который включен в книгу для иллюстрации. Поскольку кодировку UTF-8 можно использовать для представления большинства кодовых пунктов Юникода, она является наиболее широко применимой.

Еще одна тонкая особенность: мы могли бы также предусмотреть передачу кодировки основной текстовой части компоненту PyEdit, встроенному в окна просмотра и редактирования, чтобы она могла использоваться операцией сохранения в PyEdit. В данной реализации пользователи могут открыть основную текстовую часть сообщения в окне просмотра и сохранить ее в кодировке, которая становится известной автоматически, но при сохранении черновиков редактируемых писем происходит откат к использованию политики поддержки Юникода в PyEdit и диалогах графического интерфейса. Однако невозможность однозначного задания кодировки, используемой при сохранении черновиков, может быть неизбежной — пользователи могут вводить символы из любого набора как при создании новых сообщений, так и при редактировании ответов или пересылаемых писем (как и в случае с заголовками в ответах и пересылаемых письмах, первоначальная кодировка оригинального сообщения может оказаться неприменимой после редактирования текста).

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

Иными словами, если эта программа когда-нибудь достигнет уровня коммерческого или широко используемого продукта, реализованную в ней поддержку Юникода наверняка придется пересмотреть. Кроме того, как уже отмечалось в главе 13, будущая версия пакета email, возможно, будет автоматически решать некоторые проблемы, связанные с Юникодом, однако при этом может потребоваться обновить реализацию программы PyMailGUI и исправить проблемы несовместимости, которые могут возникнуть вследствие этого. А пока она остается полезным наглядным примером: плохо ли, хорошо ли, но такие изменения всегда будут непреложным фактом в постоянно развивающемся мире разработки программного обеспечения.

И так далее — поскольку это программное обеспечение является открытым, продолжительность работы над ним не ограничивается какими-то временными рамками. В конечном счете, создание законченного клиента электронной почты является серьезным предприятием, и мы развили этот пример, насколько это возможно в данной книге. Чтобы продолжить дальнейшее развитие PyMailGUI, нам, вероятно, следует принять во внимание пригодность для этих целей как пакета email в версии Python 3.1, так и библиотеки tkinter создания графического интерфейса. Этих инструментов вполне достаточно для создания утилиты, которую мы реализовали здесь, но они могут тормозить дальнейшее ее развитие. Например, отсутствие виджета просмотра HTML в базовом наборе инструментов tkinter препятствует реализации в графическом интерфейсе возможности просмотра и составления сообщений в формате HTML. Кроме того, несмотря на широкую поддержку интернационализации в PyMailGUI, приходится полагаться на обходные решения, чтобы обеспечить возможность работы с электронной почтой. Справедливости ради следует заметить, что некоторые проблемы в пакете email, описанные в этой книге, наверняка будут решены к тому времени, когда вы будете читать о них, и сейчас программа электронной почты, вероятно, представлена к своем худшем виде — из-за проблем интернационализации, возникающих вследствие особого отношения к Юникоду в Python 3.X. Подобные ограничения инструмента могут препятствовать дальнейшему развитию системы.

С другой стороны, несмотря на все ограничения в используемых инструментах, программа PyMailGUI успешно решает поставленные задачи. Этот в общем-то полнофункциональный и быстрый клиент электронной почты на удивление хорошо справляется с моей почтой, с моими настройками и прекрасно зарекомендовал себя в большинстве случаев, с которыми я сталкивался до настоящего времени. Возможно, он не совсем соответствует вашим вкусам и вашим условиям, но он полностью открыт для настройки и доработки. Предложенные упражнения и идеи по дальнейшему улучшению я официально передаю в ведение вашего воображения — в конце концов это Python.

На этом мы завершаем наш тур по работе с сетевыми протоколами на стороне клиента. В следующей главе мы перемахнем по ту сторону Интернета и рассмотрим сценарии, выполняющиеся на серверах. Такие программы лежат в основе важного понятия приложений, целиком живущих в Веб и запускаемых веб-броузерами. Мы делаем этот скачок в структуре, но следует понимать, что средств, с которыми мы ознакомились в этой и предыдущей главах, часто достаточно для полной реализации распределенной обработки, требуемой во многих приложениях, и работать они могут в согласии со сценариями, выполняемыми на сервере. Однако для полного понимания картины мира Веб необходимо также исследовать и царство серверов.


15

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

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий