Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 18, 2007 12:36:15

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Создание системы автоматизации движения документов

>>> Значительно расширилась сервисная часть web'а. А вместе с ней и инструменты, эти сервисы предоставляющие. Думаю, сейчас javascript'овые библиотеки умеют значительно больше, чем они же в 1999ом. Поправите?

дело не в том, что на вебе принципиально нельзя сделать.
Но, мне кажется, проще и быстрее создать толстый клиент. И, кажется, легче сделать его действительно удобным. По целому ряду причин, главная из которых - GUI API гораздо обширней и удобней. javascript'овые библиотеки умеют многое, но все еще меньше, чем wxWindows, например.

Теперь о сетевом протоколе. Ничего военного.

message ::= dict
dict ::= { dict_item (, dict_item) *} #(обычный Python dict)
dict_item ::= identifier : dict | list | simple_type
list ::= #(Python list)
list_item ::= simple_type | dict
simple_item ::= int | float | str | datetime.datetime #(можно добвить что-то еще)
identifier ::= int

т.о. в сообщении можно закодировать все примерно так же, как и в xmrpc.

Главное, чтобы на обоих концах соединения были одинаковые идентификаторы и они одинаково понимались :)

Программист видит экземпляры классов сообщений, у каждого из которых есть pack и parse - чтобы в message упаковать и из него развернуть.

Собственно бинарный формат может быть разным. Например, pickle или pickle+zip+crc32 - тяжеловато немного, но вполне уже ничего. Можно паковать как в bittorrent или twisted.spread.banana. Можно совсем по своему - как бинарные данные с простым тегом типа записи.
При этом для коротких словарей и списков стоит вводить отдельные теги и длину указывать в байте, а не в двойном слове.
В конце, как правило, стоит таки зипануть или применить любой другой архиватор - еще немного подожмем. Но это уже детали.
А главное. Если ввести перед сообщением байт формата - то способ записи можно легко менять, не затрагивая остальной код. И затачивать размер сообщений отдельно от всего остального. У нас так возник пяток форматов (пользуемся, конечно, последней реинкарнацией) и будет еще. Дальше - ваша фантазия.
В http все прекрасно пропихивается через PUT, и забирается из ответа (как и XMLRPC).

Я ответил на вопрос?



Офлайн

#2 Июнь 18, 2007 12:38:55

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание системы автоматизации движения документов

Андрей Светлов
Теперь о сетевом протоколе. Ничего военного.
тогда уж лучше json или я ошибаюсь?



Офлайн

#3 Июнь 18, 2007 12:46:02

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Создание системы автоматизации движения документов

если python-javascript - то лучше, конечно. AJAX и все такое…
Если python-python - бинарные протоколы кушают меньше трафика



Офлайн

#4 Июнь 18, 2007 12:53:24

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание системы автоматизации движения документов

а если шифровать и сжимать?



Офлайн

#5 Июнь 18, 2007 13:23:45

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Создание системы автоматизации движения документов

Особенно если сжимать.
Шифрование округляет до блока. До 64 байт в случае RSA 512, например.
А еще можно записывать совсем короткие инты в 2 байта (маркер+байт данных), и таких много. Более толстые - в 3 байта. И т.д.
И, главная прелесть - эту оптимизацию можно наращивать постепенно, по мере надобности.



Офлайн

#6 Июнь 18, 2007 15:02:57

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание системы автоматизации движения документов

pythonwin
а если шифровать и сжимать?
И все время этим заниматься?



Офлайн

#7 Сен. 17, 2007 12:49:38

Dyadya Zed
От:
Зарегистрирован: 2007-09-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание системы автоматизации движения документов

Андрей, какое IDE вы использовали для wxPython? Почему не взяли, например pyQt ?

Как я понял из объяснений по поводу вашего протокола, то вы просто передаете данные. Как вы обновляете приложение на клиентах, если в форму добавилось несколько полей?

Спасибо



Офлайн

#8 Сен. 17, 2007 14:41:14

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Создание системы автоматизации движения документов

Dyadya Zed
IDE. Вопрос интересный. Дизайнеры интерфейсов перебирались здесь. IDE - здесь. Мне когда-то очень нравился pydev под eclipse. Сейчас вот уже три года пользуюсь исключительно текстовым редактором, встроенным в Far с некоторыми плагинами (я клиенты под Windows пишу).

wxPython - просто потому, что я его хорошо знаю. На Qt писал когда-то, в свое время нравился. С pyQt не знаком почти, но скоро, похоже, освою и его (в Maya 2008 появилась возможность делать интерфейс и на pyQt).

По поводу обновлений: есть два способа.
1. Мощный и трудоемкий - передавать еще и метадату и уметь работать с ней на клиенте. В общем случае рассказать сложно, нужно смотреть на конкретику.
2. Довольно элементарный, и он почти всегда себя оправдывает. Первым запросом после запуска клиента идет опрос версии, с которой желает работать сервер. Если она не совпадает с клиентской - открыть браузер, который позволит закачать инсталляцию нового клиента (урл возвращается тем же запросом). Работать не давать. Дальше - стандартное обновление через инсталлятор. Схема может быть расширена (важные и неважные оюновления и проч).



Офлайн

#9 Май 28, 2009 19:03:43

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание системы автоматизации движения документов

Андрей Светлов
Мы уже давно научились делать хорошие инсталляторы для наших питон проектов. Которые нужно всего лишь запустить, и все заработает.
Есть скажите а Ваши приложения на питоне запускаются виде исполняемого файла (например созданного с помошью py2exe) ? Или на всех рабочих местах установлен интерпретатор питона с библиотеками?
Cкажите, а инсталяторы в формата msi тоже умеете делать?
Если да то подскажите как?
Большое спасибо!



Офлайн

#10 Май 28, 2009 22:05:56

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Создание системы автоматизации движения документов

py2exe хорош. Для больших проектов его не хватает, и приходится изобретать что-то свое. Методика проста: качаем py2exe в исходниках, изучаем и делаем по подобию. На самом деле совсем немного работы (но нужно знать C и Python C API).
Выбор инсталлятора - на усмотрение.
Можно и msi. В стандартном питоне есть msilib. Страшненькая, но рабочая. Главное назначение - собирать msi package самого питона - но можно использовать и для своих целей. Вероятно, проще будет заиспользовать стороннюю тулзу типа installshield (таких море, платных и нет, с визардами и прочими побрякушками) - а затем запускать ее как отдельный процесс. Ведь все равно, что в msi паковать - python или C++.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version