X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=articles%2Ftrue_unix_gui_2_0.html;h=f6bbb212dba1968b5a22885cae49dfae5d319790;hb=84fff0e3348620beeda8773bac6ba725c377d842;hp=8cbd88e246935e72e7afbad4c052b62e7c0053b6;hpb=20c9f32f93f784ba4d49c2aec5e404ed24f87657;p=sites%2Fhome_page.git diff --git a/articles/true_unix_gui_2_0.html b/articles/true_unix_gui_2_0.html index 8cbd88e..f6bbb21 100644 --- a/articles/true_unix_gui_2_0.html +++ b/articles/true_unix_gui_2_0.html @@ -1,220 +1,220 @@ - + True Unix GUI 2.0 - +

True Unix GUI 2.0

-

ëÏÇÄÁ-ÔÏ ÄÁ×ÎÏ Ñ ÎÁÐÉÓÁÌ ÓÔÁÔØÀ True Unix -GUI ÐÏ ÐÏ×ÏÄÕ ÔÏÇÏ, ËÁË ÖÅ ÄÏÌÖÅÎ ÂÙÔØ ÕÓÔÒÏÅÎ ÉÎÔÅÒÆÅÊÓ -ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÓÏÈÒÁÎÉÔØ ×ÓÅ ÄÏÓÔÏÉÎÓÔ×Á ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ -Unix, ÎÏ ÐÒÉ ÜÔÏÍ ÍÁËÓÉÍÁÌØÎÏ ÐÏÄÄÅÒÖÁÔØ ÒÅÛÅÎÉÅ ÔÅÈ ÚÁÄÁÞ, ËÏÔÏÒÙÅ -ÓÔÏÑÔ ÐÅÒÅÄ ÓÏ×ÒÅÍÅÎÎÙÍ ÐÏÌØÚÏ×ÁÔÅÌÅÍ.

-

éÄÅÉ, ÉÚÌÏÖÅÎÎÙÅ ÔÁÍ, ÐÏËÁ ÏÓÔÁÀÔÓÑ ÎÁ ÕÒÏ×ÎÅ ÂÌÁÇÉÈ ÐÏÖÅÌÁÎÉÊ.

-

óÅÊÞÁÓ ÐÏÐÒÏÂÕÀ ÒÅÛÉÔØ ÂÏÌÅÅ ÐÒÏÓÔÕÀ ÚÁÄÁÞÕ - ÏÐÉÓÁÔØ, ËÁË ÍÏÖÅÔ ÂÙÔØ -ÕÓÔÒÏÅÎÁ ËÏÎÓÉÓÔÅÎÔÎÁÑ ÐÏ ÉÎÔÅÒÆÅÊÓÕ ÓÉÓÔÅÍÁ ÐÒÉÌÏÖÅÎÉÊ ÄÌÑ unix, -ÌÉÛÅÎÎÁÑ ÏÓÎÏ×ÎÙÈ ÎÅÄÏÓÔÁÔËÏ× ÓÕÝÅÓÔ×ÕÀÝÉÈ desktop environments - -ÎÅÓÔÁÂÉÌØÎÏÓÔÉ, ÓÌÏÖÎÏÓÔÉ × ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÉ etc. -

âÜËÇÒÁÕÎÄ

+

Когда-то давно я написал статью True Unix +GUI по поводу того, как же должен быть устроен интерфейс +пользователя для того, чтобы сохранить все достоинства командной строки +Unix, но при этом максимально поддержать решение тех задач, которые +стоят перед современным пользователем.

+

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

+

Сейчас попробую решить более простую задачу - описать, как может быть +устроена консистентная по интерфейсу система приложений для unix, +лишенная основных недостатков существующих desktop environments - +нестабильности, сложности в программировании etc. +

Бэкграунд

-þÅÇÏ ÈÏÞÅÔ ÏÔ ÉÎÔÅÒÆÅÊÓÁ ËÏÍÐØÀÔÅÒÎÏÊ ÓÉÓÔÅÍÙ ÐÏÌØÚÏ×ÁÔÅÌØ? îÁÓËÏÌØËÏ Ñ -ÐÏÎÉÍÁÀ, ÐÒÅÖÄÅ ×ÓÅÇÏ ÏÎ ÈÏÞÅÔ, ÞÔÏÂÙ ÅÇÏ ÎÅ ÚÁÓÔÁ×ÌÑÌÉ ÄÕÍÁÔØ. åÓÌÉ -ËÁËÉÅ-ÔÏ ÄÅÊÓÔ×ÉÑ ÐÏ×ÔÏÒÑÀÔÓÑ ÄÏÓÔÁÔÏÞÎÏ ÞÁÓÔÏ, ÞÔÏÂÙ ÏÎÉ ÐÒÅ×ÒÁÔÉÌÉÓØ × -ÐÁÌØÃÅ×ÙÅ ÐÒÉ×ÙÞËÉ, ÎÁÐÒÉÍÅÒ, ÏÔËÒÙÔÉÅ ÆÁÊÌÁ ÞÅÒÅÚ ÓÔÁÎÄÁÒÔÎÙÊ ÄÉÁÌÏÇ, -ÉÌÉ ËÌÉË ÐÒÁ×ÏÊ ËÎÏÐËÏÊ, ÏÎÉ ÄÏÌÖÎÙ ÒÁÂÏÔÁÔØ ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, Ó ËÁËÉÍ -ÐÒÉÌÏÖÅÎÉÅÍ ÐÏÌØÚÏ×ÁÔÅÌØ ÓÅÊÞÁÓ ÒÁÂÏÔÁÅÔ. ôÏ ÅÓÔØ ÉÎÔÅÒÆÅÊÓ ÄÏÌÖÅÎ ÂÙÔØ -ËÏÎÓÉÓÔÅÎÔÎÙÍ. é ÈÏÔÉÍ ÍÙ ÜÔÏÇÏ ÉÌÉ ÎÅÔ, ÜÔÉ ÐÒÉ×ÙÞËÉ ÓÆÏÒÍÉÒÏ×ÁÎÙ × -ÒÁÍËÁÈ CUA-ÐÁÒÁÄÉÇÍÙ ÉÎÔÅÒÆÅÊÓÁ +Чего хочет от интерфейса компьютерной системы пользователь? Насколько я +понимаю, прежде всего он хочет, чтобы его не заставляли думать. Если +какие-то действия повторяются достаточно часто, чтобы они превратились в +пальцевые привычки, например, открытие файла через стандартный диалог, +или клик правой кнопкой, они должны работать независимо от того, с каким +приложением пользователь сейчас работает. То есть интерфейс должен быть +консистентным. И хотим мы этого или нет, эти привычки сформированы в +рамках CUA-парадигмы интерфейса

-

óÅÊÞÁÓ ÜÔÏ × ÏÓÎÏ×ÎÏÍ ÄÏÓÔÉÇÁÅÔÓÑ ÐÕÔÅÍ ÕÂÉÒÁÎÉÑ ÜÔÉÈ -ÆÕÎËÃÉÊ × ÒÁÚ×ÅÓÉÓÔÙÅ ÂÉÂÌÉÏÔÅËÉ ÉÎÔÅÒÆÅÊÓÎÙÈ ÔÕÌËÉÔÏ×. +

Сейчас это в основном достигается путем убирания этих +функций в развесистые библиотеки интерфейсных тулкитов.

-ôÕÌËÉÔÙ ÐÏÌÕÞÁÀÔÓÑ ÂÏÌØÛÉÍÉ, API ÒÁÚ×ÅÓÉÓÔÙÍÉ, ÒÁÚ×ÉÔÉÅ ÐÒÉ×ÏÄÉÔ Ë -ÎÁÒÕÛÅÎÉÀ ÏÂÒÁÔÎÏÊ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ É Ô.Ä. âÏÌÅÅ-ÍÅÎÅÅ ÐÒÉÌÉÞÎÙÈ -ÒÅÚÕÌØÔÁÔÏ× ÎÁ ÜÔÏÍ ÐÕÔÉ ÕÄÁÅÔÓÑ ÄÏÂÉÔØÓÑ ÔÏÌØËÏ ÂÏÌØÛÉÍ ËÏÍÍÅÒÞÅÓËÉÍ -ÆÉÒÍÁÍ ×ÒÏÄÅ Apple É Microsoft, ËÏÔÏÒÙÅ ÍÏÇÕÔ ÓÅÂÅ ÐÏÚ×ÏÌÉÔØ ÚÁÔÒÁÔÙ ÎÁ -Q&A, ÐÒÅ×ÙÛÁÀÝÉÅ ÚÁÔÒÁÔÙ ÎÁ ÒÁÚÒÁÂÏÔËÕ, ÍÏÇÕÔ ×ÙÓÔÁ×ÌÑÔØ ÖÅÓÔËÉÅ -ÔÒÅÂÏ×ÁÎÉÑ Ë 3-rd party ÒÁÚÒÁÂÏÔÞÉËÁÍ É Ô.Ä. é ×ÓÅ ÒÁ×ÎÏ ÐÏÌÕÞÁÅÔÓÑ -ÐÌÏÈÏ. -

÷ ÍÉÒÅ OpenSource ×ÓÅ ÅÝÅ ÈÕÖÅ. îÅÌØÚÑ ÚÁÓÔÁ×ÉÔØ ÎÅÚÁ×ÉÓÉÍÏÇÏ -ÒÁÚÒÁÂÏÔÞÉËÁ ÓÏÂÌÀÄÁÔØ HIG, ÅÓÌÉ ÜÔÏÔ HIG ÅÍÕ ÎÅ ÎÒÁ×ÉÔÓÑ.

-

îÅÚÁ×ÉÓÉÍÙÅ ÒÁÚÒÁÂÏÔÞÉËÉ, ÜÔÏ ËÁË ÐÒÁ×ÉÌÏ, ÌÀÄÉ Ó ÂÏÌÅÅ ÓÌÏÖÎÙÍÉ -ÐÒÉ×ÙÞËÁÍÉ, ÞÅÍ ÐÒÏÓÔÙÅ ÐÏÌØÚÏ×ÁÔÅÌÉ. óÅÒØÅÚÎÏÇÏ ÒÁÚÒÁÂÏÔÞÉËÁ ÎÅ ÕÓÔÒÏÉÔ -× ËÁÞÅÓÔ×Å ÒÅÄÁËÔÏÒÁ pico ÉÌÉ mcedit - ÅÍÕ ÐÏÄÁ×ÁÊ vim ÉÌÉ emacs Ó -ÓÏ×ÅÒÛÅÎÎÏ ÕÖÁÓÎÙÍÉ ÄÌÑ ÐÒÏÓÔÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ ËÌÁ×ÉÛÎÙÍÉ ËÏÍÁÎÄÁÍÉ. úÁÔÏ -ÍÏÝÎÙÊ É ÕÄÏÂÎÙÊ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÐÒÉ×ÙÞÎÏÇÏ.

-

åÝÅ ÈÏÒÏÛÅÍÕ ÒÁÚÒÁÂÏÔÞÉËÕ ÎÕÖÎÏ ÐÏÎÉÍÁÔØ, ÞÔÏ ÄÅÌÁÅÔ ÔÏÔ ËÕÓÏË ÓÏÆÔÁ, -ËÏÔÏÒÙÊ ÏÎ ÒÁÚÒÁÂÁÔÙ×ÁÅÔ. á ËÏÇÄÁ ÜÔÏÔ ËÕÓÏË ÓÏÆÔÁ ÚÁ×ÉÓÉÔ ÏÔ ËÕÞÉ -ÂÉÂÌÉÏÔÅË, ÄÁ ÜÔÉ ÂÉÂÌÉÏÔÅËÉ ÐÏ ÓÏÂÓÔ×ÅÎÎÏÊ ÉÎÉÃÉÁÔÉ×Å ÐÌÏÄÑÔ ÐÏÔÏËÉ -×ÙÐÏÌÎÅÎÉÑ, ÄÁ ×ÚÁÉÍÏÄÅÊÓÔ×ÕÀÔ ÎÅ ÓÌÉÛËÏÍ ÄÏËÕÍÅÎÔÉÒÏ×ÁÎÎÙÍ ÏÂÒÁÚÏÍ Ó -ÐÒÏÞÉÍÉ ËÏÍÐÏÎÅÎÔÁÍÉ ÓÉÓÔÅÍÙ, ËÁÒÔÉÎÕ ÍÉÒÁ ÐÒÉÈÏÄÉÔÓÑ ÏÇÒÁÎÉÞÉ×ÁÔØ -ÉÓËÕÓÓÔ×ÅÎÎÏ. ÷ ÒÅÚÕÌØÔÁÔÅ ×ÏÚÎÉËÁÀÔ ÔÁËÉÅ ×ÅÝÉ ËÁË "Ñ ÔÕÔ ÎÁÛÅÌ -ÚÁÍÅÞÁÔÅÌØÎÙÊ framework, Ñ ÐÒÁ×ÄÁ × ÎÅÍ ÎÉÆÉÇÁ ÎÅ ÒÁÚÏÂÒÁÌÓÑ, ÎÏ -ÓÍÏÔÒÉÔÅ ËÁË ÚÄÏÒÏ×Ï ÐÏÌÕÞÉÌÏÓØ". äÌÑ ÍÅÎÑ ÐÏÄÏÂÎÏÅ ÚÁÑ×ÌÅÎÉÅ -ÒÁÚÒÁÂÏÔÞÉËÁ - ÏÄÎÏÚÎÁÞÎÙÊ show-stopper. éÓÐÏÌØÚÏ×ÁÔØ ÔÁËÕÀ ÐÒÏÇÒÁÍÍÕ -ÎÅÌØÚÑ. îÏ ÄÒÕÇÉÈ-ÔÏ ÎÅÔ. ðÉÓÁÔØ ÎÁÄÅÖÎÙÅ ÐÒÏÇÒÁÍÍÙ ÐÏÞÔÉ ÞÔÏ -ÒÁÚÕÞÉÌÉÓØ. á ÐÏÌØÚÏ×ÁÔÅÌØ ÈÏÞÅÔ ÆÉÞ.

-

ðÏ-ÍÏÅÍÕ, × ËÏÎÃÅ ÐÅÒ×ÏÇÏ ÄÅÓÑÔÉÌÅÔÉÑ XXI ×ÅËÁ ÓÔÒÅÍÌÅÎÉÅ ËÏ -ÍÎÏÖÅÓÔ×Õ ÆÉÞ - ÁÔÁ×ÉÚÍ, ÐÏÄÂÎÙÊ ÎÅËÏÎÔÒÏÌÉÒÕÅÍÏÊ ÌÀÂ×É ÎÅËÏÔÏÒÙÈ -ÐÒÉÍÁÔÏ× Ë ÓÏÌÉ. ðÒÏÛÌÉ ÄÁ×ÎÏ ÔÅ ×ÒÅÍÅÎÁ, ËÏÇÄÁ × ÔÉÐÉÞÎÏÍ ÍÅÓÔÏÏÂÉÔÁÎÉÉ -ÐÒÉÍÁÔÏ× ÓÏÌÉ ÂÙÌ ÄÅÆÉÃÉÔ. å£ ÄÁ×ÎÏ ÕÖÅ ÎÁÕÞÉÌÉÓØ ÄÏÂÙ×ÁÔØ É ÉÚ ÍÏÒÑ, É -ÉÚ ÚÅÍÌÉ × ÌÀÂÙÈ ÔÒÅÂÕÅÍÙÈ ËÏÌÉÞÅÓÔ×ÁÈ. îÏ ×ÏÔ ÏÔ×ÙËÎÕÔØ ÓÏÌÉÔØ ×ÓÅ -ÐÏÄÒÑÄ ÍÙ ÎÅ ÍÏÖÅÍ. âÉÏÌÏÇÉÑ ÔÁË ÂÙÓÔÒÏ ÎÅ ÐÅÒÅÓÔÒÁÉ×ÁÅÔÓÑ

-

ôÁË ÖÅ É Ó ÆÉÞÁÍÉ. ëÁË ÐÒÁ×ÉÌÏ, ÔÉÐÉÞÎÙÊ ÐÏÌØÚÏ×ÁÔÅÌØ ÎÅ ÚÎÁÅÔ ×ÓÅÈ -×ÏÚÍÏÖÎÏÓÔÅÊ ÔÅÈ ÐÒÏÇÒÁÍÍ, ËÏÔÏÒÙÍÉ ÏÎ ÐÏÌØÚÕÅÔÓÑ. ÷ÏÚÎÉËÁÅÔ ÎÏ×ÁÑ -ÚÁÄÁÞÁ, ÓÔÁ×ÉÔÓÑ ×ÏÐÒÏÓ ÎÅ «ëÁË ÒÅÛÉÔØ ÜÔÕ ÚÁÄÁÞÕ ÕÖÅ ÚÎÁËÏÍÙÍÉ -ÉÎÓÔÒÕÍÅÎÔÁÍÉ» (× ÂÏÌØÛÉÎÓÔ×Å ÓÌÕÞÁÅ× ÎÁ ÜÔÏÔ ×ÏÐÒÏÓ ÅÓÔØ -ÏÓÍÙÓÌÅÎÎÙÊ ÏÔ×ÅÔ), Á «çÄÅ ÂÙ ÎÁÒÙÔØ ÔÁËÕÀ ÐÒÏÇÒÁÍÍÕ, ËÏÔÏÒÁÑ -ÄÅÌÁÅÔ ×ÓÅ ÞÔÏ ÍÎÅ ÎÁÄÏ É ÅÝÅ ÎÅÍÎÏÖËÏ». ðÒÏÇÒÁÍÍÙ ÒÁÓÓÍÁÔÒÉ×ÁÀÔÓÑ -ÎÅ ËÁË ÉÎÓÔÒÕÍÅÎÔÙ, Á ËÁË ÜÔÁËÉÅ ÍÁÇÉÞÅÓËÉÅ ÄÁÖÅ ÎÅ ÚÁËÌÉÎÁÎÉÑ, Á -ÁÒÔÅÆÁËÔÙ, ×ÒÏÄÅ ÓËÁÔÅÒÔÉ-ÓÁÍÏÂÒÁÎËÉ. +Тулкиты получаются большими, API развесистыми, развитие приводит к +нарушению обратной совместимости и т.д. Более-менее приличных +результатов на этом пути удается добиться только большим коммерческим +фирмам вроде Apple и Microsoft, которые могут себе позволить затраты на +Q&A, превышающие затраты на разработку, могут выставлять жесткие +требования к 3-rd party разработчикам и т.д. И все равно получается +плохо. +

В мире OpenSource все еще хуже. Нельзя заставить независимого +разработчика соблюдать HIG, если этот HIG ему не нравится.

+

Независимые разработчики, это как правило, люди с более сложными +привычками, чем простые пользователи. Серьезного разработчика не устроит +в качестве редактора pico или mcedit - ему подавай vim или emacs с +совершенно ужасными для простого пользователя клавишными командами. Зато +мощный и удобный для пользователя привычного.

+

Еще хорошему разработчику нужно понимать, что делает тот кусок софта, +который он разрабатывает. А когда этот кусок софта зависит от кучи +библиотек, да эти библиотеки по собственной инициативе плодят потоки +выполнения, да взаимодействуют не слишком документированным образом с +прочими компонентами системы, картину мира приходится ограничивать +искусственно. В результате возникают такие вещи как "я тут нашел +замечательный framework, я правда в нем нифига не разобрался, но +смотрите как здорово получилось". Для меня подобное заявление +разработчика - однозначный show-stopper. Использовать такую программу +нельзя. Но других-то нет. Писать надежные программы почти что +разучились. А пользователь хочет фич.

+

По-моему, в конце первого десятилетия XXI века стремление ко +множеству фич - атавизм, подбный неконтролируемой любви некоторых +приматов к соли. Прошли давно те времена, когда в типичном местообитании +приматов соли был дефицит. Её давно уже научились добывать и из моря, и +из земли в любых требуемых количествах. Но вот отвыкнуть солить все +подряд мы не можем. Биология так быстро не перестраивается

+

Так же и с фичами. Как правило, типичный пользователь не знает всех +возможностей тех программ, которыми он пользуется. Возникает новая +задача, ставится вопрос не «ÐšÐ°Ðº решить эту задачу уже знакомыми +инструментами» (в большинстве случаев на этот вопрос есть +осмысленный ответ), а «Ð“Ð´Ðµ бы нарыть такую программу, которая +делает все что мне надо и еще немножко». Программы рассматриваются +не как инструменты, а как этакие магические даже не заклинания, а +артефакты, вроде скатерти-самобранки.

-

á ×ÓÅ ÐÏÔÏÍÕ, ÞÔÏ ÎÁÐÉÓÁÔØ ÐÒÏÇÒÁÍÍÕ Ó ÂÏÌÅÅ-ÍÅÎÅÅ ÓÔÁÎÄÁÒÔÎÙÍ GUI - -ÓÌÏÖÎÏ. üÔÏ ×ÁÍ ÎÅ Ä×ÕÈÓÔÒÏÞÎÙÊ shell-ÓËÒÉÐÔ. ÷ ÔÉÐÉÞÎÏÍ ÉÎÔÅÒÆÅÊÓÎÏÍ -ÔÕÌËÉÔÅ ÄÁÖÅ ÔÒÉ×ÉÁÌØÎÏÅ ÏËÏÛËÏ Ó ÍÅÎÀÛËÏÊ ÉÚ ÐÑÔÉ ÐÏÚÉÃÉÊ É ÐÁÒÏÊ -ÓÔÁÎÄÁÒÔÎÙÈ ÄÉÁÌÏÇÏ× ÓÄÅÌÁÔØ - ÎÁ ÜËÒÁÎ ÎÅ ×ÌÅÚÅÔ. +

А все потому, что написать программу с более-менее стандартным GUI - +сложно. Это вам не двухстрочный shell-скрипт. В типичном интерфейсном +тулките даже тривиальное окошко с менюшкой из пяти позиций и парой +стандартных диалогов сделать - на экран не влезет.

-

îÁÄÏ ËÁË-ÔÏ ÜÔÕ ÓÉÔÕÁÃÉÀ ÍÅÎÑÔØ

-

ôÒÅÂÏ×ÁÎÉÑ

+

Надо как-то эту ситуацию менять

+

Требования

    -
  1. íÁËÓÉÍÁÌØÎÁÑ ÎÅÚÁ×ÉÓÉÍÏÓÔØ ×ÓÅÈ ËÏÍÐÏÎÅÎÔ. ó ÏÄÎÏÊ -ÓÔÏÒÏÎÙ ÄÏÌÖÎÁ ÂÙÔØ ×ÏÚÍÏÖÎÏÓÔØ ÏÂÒÁÂÏÔÁÔØ ÐÒÁËÔÉÞÅÓËÉ ÌÀÂÕÀ ÏÛÉÂËÕ É ÎÅ -ÐÏÔÅÒÑÔØ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ÄÁÎÎÙÈ, Ó ÄÒÕÇÏÊ - ÅÓÌÉ ÍÎÅ ÎÅ ÎÒÁ×ÉÔÓÑ ÄÉÁÌÏÇ -ÏÔËÒÙÔÉÑ ÆÁÊÌÏ×, Ñ ÄÏÌÖÅÎ ÉÍÅÔØ ×ÏÚÍÏÖÎÏÓÔØ ÚÁÍÅÎÉÔØ ÅÇÏ ÎÁ ÂÏÌÅÅ ÄÒÕÇÏÊ -(ÂÌÁÇÏ × ÄÉÓÔÒÉÂÕÔÉ×Å ÉÈ ÐÏÌÎÏ ÒÁÚÎÙÈ) ÂÅÚ ÐÅÒÅËÏÍÐÉÌÑÃÉÉ (É ÔÅÍ ÂÏÌÅÅ, -ÐÅÒÅÐÉÓÙ×ÁÎÉÑ) ×ÓÅÈ ÐÒÏÇÒÁÍÍ, ËÏÔÏÒÙÍÉ Ñ ÐÏÌØÚÕÀÓØ. -
  2. îÁÌÉÞÉÅ ÏÄÎÏÇÏ ÒÅÛÅÎÉÑ ÄÌÑ ËÁÖÄÏÊ ÚÁÄÁÞÉ. åÓÌÉ ÐÏÓÍÏÔÒÅÔØ ÓËÏÌØËÏ -ÒÅÁÌÉÚÁÃÉÊ ÐÒÏÔÏËÏÌÁ HTTP ÅÓÔØ × ÔÉÐÉÞÎÏÊ ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÊ ÓÉÓÔÅÍÅ - -ÍÏÖÎÏ ÐÒÉÊÔÉ × ÕÖÁÓ. îÅÔ, Ñ ÎÅ ÐÒÏÔÉ× ÔÏÇÏ, ÞÔÏÂÙ × ÄÉÓÔÒÉÂÕÔÉ×Å ÂÙÌÉ -ÎÅÓËÏÌØËÏ ÒÅÁÌÉÚÁÃÉÊ, ÞÔÏÂÙ Ñ ÍÏÇ ×ÙÂÒÁÔØ ÎÁÉÂÏÌÅÅ ÍÅÎÑ ÕÓÔÒÁÉ×ÁÀÝÕÀ, -ÉÌÉ ÄÁÖÅ ÕÓÔÁÎÏ×ÌÅÎÎÙÈ ÏÄÎÏ×ÒÅÍÅÎÎÏ, ÞÔÏÂÙ ×ÙÂÉÒÁÔØ ÍÏÖÎÏ ÂÙÌÏ × ÍÏÍÅÎÔ -ÉÓÐÏÌØÚÏ×ÁÎÉÑ. îÏ ×ÏÔ ÎÅÔ - ÔÁ ÉÌÉ ÉÎÁÑ ÒÅÁÌÉÚÁÃÉÑ ÎÁÍÅÒÔ×Ï ×ÓÔÒÏÅÎÁ × -ËÁÖÄÕÀ ÐÒÏÇÒÁÍÍÕ ÉÌÉ ÂÉÂÌÉÏÔÅËÕ ÑÚÙËÁ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ. -
  3. ÷ÏÚÍÏÖÎÏÓÔØ ÐÉÓÁÔØ ÎÁ ÌÀÂÏÍ ÑÚÙËÅ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ. óÏ×ÒÅÍÅÎÎÙÊ -ÐÏÄÈÏÄ ÐÒÉ×ÏÄÉÔ Ë ÔÏÍÕ, ÞÔÏ ÂÏÌØÛÁÑ ÞÁÓÔØ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔÉ ÒÅÁÌÉÚÏ×ÁÎÁ × -×ÉÄÅ ÓÔÁÎÄÁÒÔÎÙÈ ÂÉÂÌÉÏÔÅË Ó ÉÎÔÅÒÆÅÊÓÏÍ ÑÚÙËÁ C ÉÌÉ C++. ÷ÓÔÒÏÉÔØ ÜÔÉ -ÂÉÂÌÉÏÔÅËÉ × ÂÏÌÅÅ ×ÙÓÏËÏÕÒÏ×ÎÅ×ÙÊ ÑÚÙË ÎÅ ×ÓÅÇÄÁ ÔÒÉ×ÉÁÌØÎÏ, ÏÓÏÂÅÎÎÏ -ÅÓÌÉ ÒÅÞØ ÉÄÅÔ Ï ÑÚÙËÅ, ÕÖÅ ÉÍÅÀÝÅÍ Ó×ÏÉ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ Ï ÃÉËÌÅ ÏÂÒÁÂÏÔËÉ -ÓÏÂÙÔÉÊ É ÍÅÎÅÄÖÍÅÔÅ ÐÁÍÑÔÉ. -
  4. óÅÔÅ×ÁÑ ÐÒÏÚÒÁÞÎÏÓÔØ. ëÁË ÐÒÁ×ÉÌÏ, × Unix ÉÓÐÏÌØÚÕÅÔÓÑ ËÁËÏÊ-ÎÉÂÕÄØ -ÐÒÏÔÏËÏÌ ÕÄÁÌÅÎÎÏÇÏ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄ, ÎÁÐÒÉÍÅÒ ssh, ËÏÔÏÒÙÊ ÐÏÚ×ÏÌÑÅÔ -×ÐÏÌÎÅ ÅÓÔÅÓÔ×ÅÎÎÙÍ ÏÂÒÁÚÏÍ ×ÙÐÏÌÎÑÔØ ÐÒÏÇÒÁÍÍÕ (× ÔÏÍ ÞÉÓÌÅ É ÉÍÅÀÝÕÀ -GUI) ÎÁ ÕÄÁÌÅÎÎÏÊ ÍÁÛÉÎÅ, ÐÏÌÕÞÁÑ Å£ ÒÅÚÕÌØÔÁÔÙ ÎÁ ÌÏËÁÌØÎÙÊ ÄÉÓÐÌÅÊ. -ëÁË ÐÒÁ×ÉÌÏ, ÜÔÏÔ ÐÒÏÔÏËÏÌ ÉÍÅÅÔ ÅÝÅ É ÕÄÏÂÎÙÅ ×ÓÔÒÏÅÎÎÙÅ ÓÒÅÄÓÔ×Á -Á×ÔÏÒÉÚÁÃÉÉ. ôÅÍ ÎÅ ÍÅÎÅÅ, ÐÏÞÔÉ ÎÉËÏÇÄÁ, ËÒÏÍÅ ÎÅËÏÔÏÒÙÈ ÐÒÏÄ×ÉÎÕÔÙÈ -imap-ËÌÉÅÎÔÏ×, ÜÔÁ ×ÏÚÍÏÖÎÏÓÔØ ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÄÏÓÔÕÐÁ Ë ÄÁÎÎÙÍ -ÈÒÁÎÑÝÉÍÓÑ ÎÁ ÕÄÁÌÅÎÎÏÊ ÍÁÛÉÎÅ - ÉÓÐÏÌØÚÕÅÔÓÑ ÐÒÑÍÏÅ TCP-ÓÏÅÄÉÎÅÎÉÅ, Õ -ËÏÔÏÒÏÇÏ ÍÏÇÕÔ ÂÙÔØ ÐÒÏÂÌÅÍÙ Ó ÆÁÊÒ×ÏÌÌÁÍÉ, ÔÒÅÂÕÅÔÓÑ ÏÔÄÅÌØÎÁÑ -Á×ÔÏÒÉÚÁÃÉÑ (Á ÐÒÏ ident-ÐÒÏÔÏËÏÌ × ÎÁÛÅ ×ÒÅÍÑ ÍÏÖÎÏ ÓÍÅÌÏ ÚÁÂÙÔØ). -
  5. ÷ÉÒÔÕÁÌØÎÁÑ ÆÁÊÌÏ×ÁÑ ÓÉÓÔÅÍÁ. ôÏ ÞÔÏ ÆÁÊÌÙ ÍÏÇÕÔ ÌÅÖÁÔØ ÎÅ ÔÏÌØËÏ × -ÌÏËÁÌØÎÏÊ ÆÁÊÌÏ×ÏÊ ÓÉÓÔÅÍÅ, ÎÏ É × ÕÄÁÌÅÎÎÏÊ, ÄÏÓÔÕÐÎÏÊ ÌÉÂÏ ÐÏ -ÐÒÏÔÏËÏÌÕ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄ, ÌÉÂÏ ÐÏ ÐÒÏÔÏËÏÌÕ ÓÅÔÅ×ÏÊ ÆÁÊÌÏ×ÏÊ ÓÉÓÔÅÍÙ, -ÎÁ ËÁËÏÍ-ÎÉÂÕÄØ ÍÏÂÉÌØÎÏÍ ÕÓÔÒÏÊÓÔ×Å, × ÁÒÈÉ×Å, ÎÁ ÓßÅÍÎÏÍ ÎÏÓÉÔÅÌÅ etc, -ÚÎÁÀÔ ×ÓÅ. îÏ ÓÉÔÕÁÃÉÑ Ó VFS ÏÓÔÁ×ÌÑÅÔ ÖÅÌÁÔØ ÌÕÞÛÅÇÏ. -
  6. ðÏÎÑÔÉÅ ÌÏÇÉÞÅÓËÏÊ ËÏÎÓÏÌÉ. ëÏÇÄÁ-ÔÏ ÄÁ×ÎÏ, ×ÓÅ ÞÅÍ ÒÁÓÐÏÌÁÇÁÌ -ÐÏÌØÚÏ×ÁÔÅÌØ ÄÌÑ ÏÂÍÅÎÁ ÉÎÆÏÒÍÁÃÉÅÊ Ó ËÏÍÐØÀÔÅÒÏÍ, ÂÙÌÏ ÄÉÓÐÌÅÊ, -ËÌÁ×ÉÁÔÕÒÁ ÄÁ ÍÙÛØ. éÍÅÎÎÏ ÜÔÏÔ ÎÁÂÏÒ ÕÓÔÒÏÊÓÔ× ÐÏÄÄÅÒÖÉ×ÁÅÔ × ÎÏÒÍÅ -ÐÒÏÔÏËÏÌ X11 (ÈÏÔÑ ÔÁÍ ÐÏÎÑÔÉÅ ÐÏÚÉÃÉÏÎÉÒÕÀÝÅÇÏ ÕÓÔÒÏÊÓÔ×Á -ÎÅÓËÏÌØËÏ ÛÉÒÅ, ÞÅÍ «ÍÙÛØ»). ÷ ÓÏ×ÒÅÍÅÎÎÙÈ ÕÓÌÏ×ÉÑÈ ÜÔÏ -ÄÁ×ÎÏ ÎÅ ÔÁË. ÷Ï-ÐÅÒ×ÙÈ, ÅÓÔØ ÍÉËÒÏÆÏÎ É ËÏÌÏÎËÉ. é ÇÄÅ ÂÙ ÐÏÌØÚÏ×ÁÔÅÌØ -ÎÅ ÚÁÐÕÓÔÉÌ ÐÒÏÇÒÁÍÍÕ, ÒÁÂÏÔÁÔØ ÏÎÁ ÄÏÌÖÎÁ ÒÏ×ÎÏ Ó ÔÅÍÉ ËÏÌÏÎËÁÍÉ, -ËÏÔÏÒÙÅ ÒÁÓÐÏÌÏÖÅÎÙ ÒÑÄÏÍ (ÉÌÉ ×ÏÏÂÝÅ ×ÍÏÎÔÉÒÏ×ÁÎÙ ×) ÄÉÓÐÌÅÅÍ ÜÔÏÇÏ -ÐÏÌØÚÏ×ÁÔÅÌÑ. ÷Ï-×ÔÏÒÙÈ, ÅÓÔØ ÓËÁÎÅÒÙ, ÃÉÆÒÏ×ÙÅ ÆÏÔÏÁÐÐÁÒÁÔÙ, -×ÅÂ-ËÁÍÅÒÙ, É ÐÒÏÞÉÅ ÉÓÔÏÞÎÉËÉ ÄÁÎÎÙÈ, ËÏÔÏÒÙÅ ËÁË-ÔÏ Ó×ÑÚÁÎÙ Ó -ÆÉÚÉÞÅÓËÉÍ ÒÁÓÐÏÌÏÖÅÎÉÅÍ ÐÏÌØÚÏ×ÁÔÅÌÑ. åÓÔØ ÅÝÅ É ÓßÅÍÎÙÅ ÎÏÓÉÔÅÌÉ, -ËÏÔÏÒÙÅ ÎÅ ÔÏÌØËÏ ÉÓÔÏÞÎÉË ÄÁÎÎÙÈ, É ÉÈ ÐÏÌÕÞÁÔÅÌØ. é ÔÏÖÅ ÎÁÈÏÄÑÔÓÑ ÔÁÍ -ÖÅ, ÇÄÅ É ÐÏÌØÚÏ×ÁÔÅÌØ. ÷ÐÒÏÞÅÍ, ÓßÅÍÎÙÊ ÎÏÓÉÔÅÌØ - ÞÁÓÔÎÙÊ ÓÌÕÞÁÊ -×ÉÒÔÕÁÌØÎÏÊ ÆÁÊÌÏ×ÏÊ ÓÉÓÔÅÍÙ +
  7. Максимальная независимость всех компонент. С одной +стороны должна быть возможность обработать практически любую ошибку и не +потерять пользовательских данных, с другой - если мне не нравится диалог +открытия файлов, я должен иметь возможность заменить его на более другой +(благо в дистрибутиве их полно разных) без перекомпиляции (и тем более, +переписывания) всех программ, которыми я пользуюсь. +
  8. Наличие одного решения для каждой задачи. Если посмотреть сколько +реализаций протокола HTTP есть в типичной пользовательской системе - +можно прийти в ужас. Нет, я не против того, чтобы в дистрибутиве были +несколько реализаций, чтобы я мог выбрать наиболее меня устраивающую, +или даже установленных одновременно, чтобы выбирать можно было в момент +использования. Но вот нет - та или иная реализация намертво встроена в +каждую программу или библиотеку языка программирования. +
  9. Возможность писать на любом языке программирования. Современный +подход приводит к тому, что большая часть функциональности реализована в +виде стандартных библиотек с интерфейсом языка C или C++. Встроить эти +библиотеки в более высокоуровневый язык не всегда тривиально, особенно +если речь идет о языке, уже имеющем свои представления о цикле обработки +событий и менеджмете памяти. +
  10. Сетевая прозрачность. Как правило, в Unix используется какой-нибудь +протокол удаленного выполнения команд, например ssh, который позволяет +вполне естественным образом выполнять программу (в том числе и имеющую +GUI) на удаленной машине, получая её результаты на локальный дисплей. +Как правило, этот протокол имеет еще и удобные встроенные средства +авторизации. Тем не менее, почти никогда, кроме некоторых продвинутых +imap-клиентов, эта возможность не используется для доступа к данным +хранящимся на удаленной машине - используется прямое TCP-соединение, у +которого могут быть проблемы с файрволлами, требуется отдельная +авторизация (а про ident-протокол в наше время можно смело забыть). +
  11. Виртуальная файловая система. То что файлы могут лежать не только в +локальной файловой системе, но и в удаленной, доступной либо по +протоколу выполнения команд, либо по протоколу сетевой файловой системы, +на каком-нибудь мобильном устройстве, в архиве, на съемном носителе etc, +знают все. Но ситуация с VFS оставляет желать лучшего. +
  12. Понятие логической консоли. Когда-то давно, все чем располагал +пользователь для обмена информацией с компьютером, было дисплей, +клавиатура да мышь. Именно этот набор устройств поддерживает в норме +протокол X11 (хотя там понятие позиционирующего устройства +несколько шире, чем «Ð¼Ñ‹ÑˆÑŒ»). В современных условиях это +давно не так. Во-первых, есть микрофон и колонки. И где бы пользователь +не запустил программу, работать она должна ровно с теми колонками, +которые расположены рядом (или вообще вмонтированы в) дисплеем этого +пользователя. Во-вторых, есть сканеры, цифровые фотоаппараты, +веб-камеры, и прочие источники данных, которые как-то связаны с +физическим расположением пользователя. Есть еще и съемные носители, +которые не только источник данных, и их получатель. И тоже находятся там +же, где и пользователь. Впрочем, съемный носитель - частный случай +виртуальной файловой системы
  13. -

    áÒÈÉÔÅËÔÕÒÁ

    +

    Архитектура

    -ðÏÓËÏÌØËÕ ×ÎÉÚÕ Õ ÎÁÓ ÔÁËÉ Unix, ÁÒÈÉÔÅËÔÕÒÕ ÓÌÅÄÕÅÔ ÏÓÎÏ×Ù×ÁÔØ ÎÁ ÔÏÍ, -ÞÔÏ Unix ÕÍÅÅÔ ÈÏÒÏÛÏ, ÎÁ ÔÏÍ ÞÔÏ ÏÐÉÓÁÎÏ ×Ï ×ÓÅÈ ËÎÉÖËÁÈ ÐÏ -ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÀ. üÔÏ - ËÏÍÁÎÄÎÁÑ ÓÔÒÏËÁ É ÐÁÊÐÙ. +Поскольку внизу у нас таки Unix, архитектуру следует основывать на том, +что Unix умеет хорошо, на том что описано во всех книжках по +программированию. Это - командная строка и пайпы.

    -

    íÏÝÎÏÓÔØ ÓÏ×ÒÅÍÅÎÎÙÈ ËÏÍÐØÀÔÅÒÏ× ×ÅÓØÍÁ ×ÅÌÉËÁ. é ÚÁÞÁÓÔÕÀ ÚÁÐÕÓË -ÏÔÄÅÌØÎÏÇÏ ÐÒÏÃÅÓÓÁ Ñ×ÌÑÅÔÓÑ ÄÏÐÕÓÔÉÍÙÍ Ï×ÅÒÈÅÄÏÍ ÄÌÑ ÌÀÂÏÊ -ÉÎÔÅÒÁËÔÉ×ÎÏÊ ÏÐÅÒÁÃÉÉ. ÷ ËÏÎÃÅ ËÏÎÃÏ×, ÜÔÏ ÂÙÌÏ ÄÏÐÕÓÔÉÍÙÍ Ï×ÅÒÈÅÄÏÍ ×Ï -×ÒÅÍÅÎÁ ëÅÒÎÉÇÁÎÁ É ðÁÊËÁ, ËÏÇÄÁ ËÏÍÐØÀÔÅÒÙ ÂÙÌÉ ÇÏÒÁÚÄÏ ÓÌÁÂÅÅ. -ëÏÎÅÞÎÏ, ÚÁÐÕÓË ÓÏ×ÒÅÍÅÎÎÏÊ ÐÒÏÇÒÁÍÍÙ Ó ËÕÞÅÊ ÂÉÂÌÉÏÔÅË, ×ÓÔÒÏÅÎÎÙÍÉ -ÉÎÔÅÒÐÒÅÔÁÔÏÒÁÍÉ et cetera, et cetera ÏÂÈÏÄÉÔÓÑ ÇÏÒÁÚÄÏ ÄÏÒÏÖÅ, ÞÅÍ -ÚÁÐÕÓË ÕÔÉÌÉÔÙ cat, ÎÏ ËÔÏ ÓËÁÚÁÌ, ÞÔÏ ËÏÍÐÏÎÅÎÔÙ ×ÙÐÏÌÎÑÀÝÉÅ -ÓÔÁÎÄÁÒÔÎÙÅ ÆÕÎÃÉÉ ÄÏÌÖÎÙ ÂÙÔØ «ÓÏ×ÒÅÍÅÎÎÙÍÉ ÐÒÏÇÒÁÍÍÁÍÉ» × -ÜÔÏÍ ÓÍÙÓÌÅ ÓÌÏ×Á? +

    Мощность современных компьютеров весьма велика. И зачастую запуск +отдельного процесса является допустимым оверхедом для любой +интерактивной операции. В конце концов, это было допустимым оверхедом во +времена Кернигана и Пайка, когда компьютеры были гораздо слабее. +Конечно, запуск современной программы с кучей библиотек, встроенными +интерпретаторами et cetera, et cetera обходится гораздо дороже, чем +запуск утилиты cat, но кто сказал, что компоненты выполняющие +стандартные фунции должны быть «ÑÐ¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¼Ð¸ программами» в +этом смысле слова?

    -åÓÌÉ ÐÒÅÄÐÏÌÏÖÉÔØ, ÞÔÏ ÎÁÍ ÎÅ ÖÁÌËÏ ÐÏÒÏÄÉÔØ ÏÔÄÅÌØÎÙÊ GUI-ÐÒÏÃÅÓÓ ÄÌÑ -ÏÐÅÒÁÃÉÉ ×ÙÂÏÒÁ ÏÔËÒÙ×ÁÅÍÏÇÏ ÆÁÊÌÁ, ÔÏ × ÐÒÏÇÒÁÍÍÅ ×ÙÚÏ× ÜÔÏÇÏ ÄÉÁÌÏÇÁ -ÂÕÄÅÔ ×ÙÇÌÑÄÅÔØ ËÁË +Если предположить, что нам не жалко породить отдельный GUI-процесс для +операции выбора открываемого файла, то в программе вызов этого диалога +будет выглядеть как

     f=popen("filedialog","r");
     fgets(f,filename,sizeof(filename);
     pclose(f);
     
    -éÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ filedialog ÍÏÖÅÔ ÂÙÔØ ÌÉÂÏ +Исполняемый файл filedialog может быть либо
     #!/bin/sh
     exec zenity --file-dialog
     
    -ÌÉÂÏ +либо
     #!/usr/bin/wish
     puts [tkGetOpenFile]
     
    -ÜÔÏ ÕÖ ËÁË ×ÁÍ ÂÏÌØÛÅ ÎÒÁ×ÉÔÓÑ. õÐÒÁ×ÌÑÔØ ÎÁÂÏÒÏÍ ÐÏÄÏÂÎÙÈ ÕÔÉÌÉÔ ÍÏÖÎÏ -ÌÉÂÏ Ó ÐÏÍÏÝØÀ ÍÅÈÁÎÉÚÍÁ ÁÎÁÌÏÇÉÞÎÏÇÏ ÄÅÂÉÁÎÏ×ÓËÉÍ alternatives, ÌÉÂÏ -Ó ÐÏÍÏÝØÀ ÓÐÅÃÉÁÌØÎÏÇÏ ËÁÔÁÌÏÇÁ × ${HOME}, ÎÁÐÒÉÍÅÒ ~/components, ÇÄÅ -ÌÅÖÁÔ ÓÉÍÌÉÎËÉ ÉÌÉ ÓËÒÉÐÔÙ, ÄÅÌÁÀÝÉÅ ÔÏ, ÞÔÏ ÎÒÁ×ÉÔÓÑ ÔÅËÕÝÅÍÕ -ÐÏÌØÚÏ×ÁÔÅÌÀ. +это уж как вам больше нравится. Управлять набором подобных утилит можно +либо с помощью механизма аналогичного дебиановским alternatives, либо +с помощью специального каталога в ${HOME}, например ~/components, где +лежат симлинки или скрипты, делающие то, что нравится текущему +пользователю.

    -÷ÏÔ ÐÏÍÅÎÑÌÉ ÏÄÎÕ ÓÉÍÌÉÎËÕ, É ÓÒÁÚÕ ÷ï ÷óåè ÐÒÏÇÒÁÍÍÁÈ ÉÚÍÅÎÉÌÓÑ ÄÉÁÌÏÇ -ÏÔËÒÙÔÉÑ ÆÁÊÌÏ×. îÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, ËÁËÕÀ GUI-ÂÉÂÌÉÏÔÅËÕ ÉÓÐÏÌØÚÕÅÔ -ÓÁÍÁ ÐÒÏÇÒÁÍÍÁ. +Вот поменяли одну симлинку, и сразу ВО ВСЕХ программах изменился диалог +открытия файлов. Независимо от того, какую GUI-библиотеку использует +сама программа.

    -á ÅÓÌÉ ×Ù ÐÏÌØÚÕÅÔÅÓØ ËÁËÉÍ-ÎÉÂÕÄØ ÐÒÏÄ×ÉÎÕÔÙÍ ÆÁÊÌ-ÍÅÎÅÄÖÅÒÏÍ, ËÏÔÏÒÙÊ -ÍÎÏÇÏ ÞÅÇÏ ÕÍÅÅÔ, ×ÁÛ ÓËÒÉÐÔ filedialog ÍÏÖÅÔ ÐÏÏÂÝÁÔØÓÑ Ó ÜÔÉÍ -ÆÁÊÌÍÅÎÅÄÖÅÒÏÍ (ÞÅÒÅÚ unix-domain socket, ÞÅÒÅÚ X-Ï×ÙÊ ICCCM, ËÁË -ÕÇÏÄÎÏ) É ÏÔËÒÙÔØ ÅÇÏ ÐÁÎÅÌØ ÓÏ ×ÓÅÍÉ ÅÇÏ ×ÏÚÍÏÖÎÏÓÔÑÍÉ. +А если вы пользуетесь каким-нибудь продвинутым файл-менеджером, который +много чего умеет, ваш скрипт filedialog может пообщаться с этим +файлменеджером (через unix-domain socket, через X-овый ICCCM, как +угодно) и открыть его панель со всеми его возможностями.

    -

    ëÁË ÒÅÁÌÉÚÏ×ÁÔØ ÔÁËÉÍ ÖÅ ÏÂÒÁÚÏÍ progress-bar ÓÍ × ÔÏÊ ÖÅ zenity. +

    Как реализовать таким же образом progress-bar см в той же zenity.

    -

    á ×ÅÄØ ÍÏÖÎÏ ×ÙÎÅÓÔÉ × ÐÏÄÏÂÎÏÇÏ ÒÏÄÁ ËÏÍÐÏÎÅÎÔÙ É ÂÏÌÅÅ ÓÌÏÖÎÙÅ -ÏÐÅÒÁÃÉÉ. ðÏÉÓË ÐÏ ÔÅËÓÔÕ, ÎÁÐÒÉÍÅÒ. ïÓÎÏ×ÎÁÑ ÐÒÏÇÒÁÍÍÁ ×ÙÄÉÒÁÅÔ ÉÚ -Ó×ÏÅÇÏ ÆÏÒÍÁÔÁ ÄÁÎÎÙÈ ÉÓËÁÂÅÌØÎÙÊ ÔÅËÓÔ, É ÓËÁÒÍÌÉ×ÁÅÔ ËÏÍÐÏÎÅÎÔÕ, -ËÏÔÏÒÙÊ ×ÏÚ×ÒÁÝÁÅÔ "ÎÁÊÄÅÎÏ/ÎÅ ÎÁÊÄÅÎÏ" (Á ÅÓÌÉ ÎÁÊÄÅÎÏ, ÔÏ ÓÍÅÝÅÎÉÅ ÏÔ -ÐÏÓÌÅÄÎÅÇÏ ÂÌÏËÁ ÔÅËÓÔÁ). ÷ ÒÅÚÕÌØÔÁÔÅ, Ó ËÁËÉÍ ÂÙ ÆÏÒÍÁÔÏÍ ÄÁÎÎÙÈ ÍÙ ÎÅ -ÒÁÂÏÔÁÌÉ, ÈÏÔØ Ó html, ÈÏÔØ postscript, ÄÉÁÌÏÇÏ×ÏÅ ÏËÎÏ ÐÏÉÓËÁ ÉÍÅÅÔ -ÏÄÉÎÁËÏ×ÙÅ ÏÐÃÉÉ, ÐÏÄÄÅÒÖÉ×ÁÅÔ ÏÄÉÎÁËÏ×ÙÊ ÓÉÎÔÁËÓÉÓ ÒÅÇÕÌÑÒÎÙÈ ×ÙÒÁÖÅÎÉÊ +

    А ведь можно вынести в подобного рода компоненты и более сложные +операции. Поиск по тексту, например. Основная программа выдирает из +своего формата данных искабельный текст, и скармливает компоненту, +который возвращает "найдено/не найдено" (а если найдено, то смещение от +последнего блока текста). В результате, с каким бы форматом данных мы не +работали, хоть с html, хоть postscript, диалоговое окно поиска имеет +одинаковые опции, поддерживает одинаковый синтаксис регулярных выражений etc.

    -åÝÅ ÍÏÖÎÏ ÏÔÏÒ×ÁÔØ ÏÔ ÐÒÉÌÏÖÅÎÉÊ ÓÉÓÔÅÍÕ ÇÌÁ×ÎÏÇÏ ÍÅÎÀ, ×ÙÎÅÓÑ Å£ × -ÏÔÄÅÌØÎÕÀ ÐÒÏÇÒÁÍÍÕ. úÄÅÓØ, ÐÏÖÁÌÕÊ, ÐÁÊÐÙ ÂÕÄÕÔ ÎÅ ÓÁÍÙÍ ÕÄÏÂÎÙÍ -ÍÅÈÁÎÉÚÍÏÍ ÍÅÖÐÒÏÃÅÓÓÎÏÊ ËÏÍÍÕÎÉËÁÃÉÉ, ÌÕÞÛÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÅÒÅÄÁÞÕ -ÓÏÂÙÔÉÊ X11, ÎÏ ÚÁÔÏ ÜÔÁ ËÏÎÓÔÒÕËÃÉÑ ÐÏÚ×ÏÌÑÅÔ ÐÏÌÎÏÃÅÎÎÏ ÒÅÁÌÉÚÏ×ÁÔØ -ÉÎÔÅÒÆÅÊÓÎÕÀ ÐÁÒÁÄÉÇÍÕ íÁËïó, ÇÄÅ ÍÅÎÀ ÎÅ ××ÅÒÈÕ ÏËÎÁ, Á × ×ÅÒÈÕ ÜËÒÁÎÁ. -üÔÏ ÏÞÅÎØ ÕÄÏÂÎÏ, ÐÏÔÏÍÕ ÞÔÏ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÐÏÐÁÓÔØ ÍÙÛØÀ × ×ÅÒÈÎÀÀ -ÓÔÒÏÞËÕ ÜËÒÁÎ, ÎÅ ÎÁÄÏ ÐÒÉÃÅÌÉ×ÁÔØÓÑ. ðÒÏÓÔÏ ÒÅÚËÏ ÄÅÒÇÁÅÛØ ÒÕËÕ ××ÅÒÈ, -ÍÉÍÏ ÇÒÁÎÉÃÙ ÜËÒÁÎÁ ÎÅ ÐÒÏÍÁÈÎÅÛØÓÑ. á ÍÏÖÎÏ ÎÅ ÒÅÁÌÉÚÏ×Ù×ÁÔØ. ÷ ÔÁËÏÊ -ËÏÎÃÅÐÃÉÉ ÓÏÚÄÁÎÉÅ ÍÅÎÀ ÐÒÉÌÏÖÅÎÉÊ - ÆÕÎËÃÉÑ window manager-Á, Á ÔÏÔ ÕÖ -ÍÏÖÅÔ ×ÙÂÉÒÁÔØ, ÒÉÓÏ×ÁÔØ ÍÅÎÀ × ×ÅÒÈÎÅÊ ÓÔÒÏËÅ ÉÌÉ × ÒÁÍËÅ ÔÅËÕÝÅÇÏ -ÏËÎÁ. åÍÕ ÄÏÓÔÕÐÎÏ É ÔÏ, É ÄÒÕÇÏÅ. +Еще можно оторвать от приложений систему главного меню, вынеся её в +отдельную программу. Здесь, пожалуй, пайпы будут не самым удобным +механизмом межпроцессной коммуникации, лучше использовать передачу +событий X11, но зато эта конструкция позволяет полноценно реализовать +интерфейсную парадигму МакОС, где меню не вверху окна, а в верху экрана. +Это очень удобно, потому что для того, чтобы попасть мышью в верхнюю +строчку экран, не надо прицеливаться. Просто резко дергаешь руку вверх, +мимо границы экрана не промахнешься. А можно не реализовывать. В такой +концепции создание меню приложений - функция window manager-а, а тот уж +может выбирать, рисовать меню в верхней строке или в рамке текущего +окна. Ему доступно и то, и другое.

    -

    ÷ ÒÅÚÕÌØÔÁÔÅ ÐÏÌÕÞÁÅÔÓÑ, ÞÔÏ ÐÒÉÌÏÖÅÎÉÅ ÓÏÂÓÔ×ÅÎÎÏ, ÔÏÖÅ ÐÒÅ×ÒÁÝÁÅÔÓÑ -× ËÏÍÐÏÎÅÎÔ. ïÎÏ ÒÁÓÐÏÒÑÖÁÅÔÓÑ ÔÏÌØËÏ ÏÓÎÏ×ÎÙÍ ÐÏÌÅÍ Ó×ÏÅÇÏ ÏËÎÁ, -ÏÂÒÁÂÁÔÙ×ÁÅÔ ËÏÍÁÎÄÙ, ÐÒÉÈÏÄÑÝÉÅ × ×ÉÄÅ ÇÏÒÑÞÉÈ ËÌÁ×ÉÛ É ÓÏÂÙÔÉÊ, -ÓÇÅÎÅÒÉÒÏ×ÁÎÎÙÈ ÍÅÎÅÄÖÅÒÏÍ ÍÅÎÀ. á ÔÁËÉÅ ÐÒÉÌÏÖÅÎÉÑ ÍÏÖÎÏ, ÉÓÐÏÌØÚÕÑ -X-Ï×ÙÊ ÍÅÈÁÎÉÚÍ reparenting ×ÓÑÞÅÓËÉ ËÏÍÂÉÎÉÒÏ×ÁÔØ ÍÅÖÄÕ ÓÏÂÏÊ. +

    В результате получается, что приложение собственно, тоже превращается +в компонент. Оно распоряжается только основным полем своего окна, +обрабатывает команды, приходящие в виде горячих клавиш и событий, +сгенерированных менеджером меню. А такие приложения можно, используя +X-овый механизм reparenting всячески комбинировать между собой.

    -

    äÁÂÙ ÎÅ ÉÚÏÂÒÅÔØ ×ÅÌÏÓÉÐÅÄÏ×, ×ÓÐÏÍÎÉÍ, ÞÔÏ Õ Xt-ÐÒÉÌÏÖÅÎÉÊ ÅÓÔØ -ÚÁÍÅÞÁÔÅÌØÎÙÊ ÒÅÓÕÒÓ translations, ËÏÔÏÒÙÊ ÐÏÚ×ÏÌÑÅÔ Ó×ÑÚÙ×ÁÔØ -ÐÒÉËÌÁÄÎÙÅ ÆÕÎËÃÉÉ Ó ËÌÁ×ÉÁÔÕÒÎÙÍÉ ÓÏÂÙÔÉÑÍÉ. îÁ ÕÒÏ×ÎÅ -ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÊ, per-display, per-site ÉÌÉ per-application -ËÏÎÆÉÇÕÒÁÃÉÉ. áÎÁÌÏÇÉÞÎÙÍ ÏÂÒÁÚÏÍ ÄÏÌÖÎÙ ÏÂÒÁÂÁÔÙ×ÁÔØÓÑ É ÓÏÂÙÔÉÑ ÏÔ -ÍÅÎÅÄÖÅÒÁ ÍÅÎÀ. +

    Дабы не изобреть велосипедов, вспомним, что у Xt-приложений есть +замечательный ресурс translations, который позволяет связывать +прикладные функции с клавиатурными событиями. На уровне +пользовательской, per-display, per-site или per-application +конфигурации. Аналогичным образом должны обрабатываться и события от +менеджера меню.