Ошибки и их исправление в эргономике API и GUI

Судя по периодическим сообщениям по телевидению и в Интернете, в настоящий момент речь об информационной безопасности страны вообще не идет - на ноутбуки чиновников через их Windows можно ходить как к себе домой. Эта же ОС используется и в правоохранительных органах, вспомните комментарии по делу Поносова. Linux проблемы не решает как потому, что является некачественно, хоть и бесплатно, переписанным Windows, так и потому, что не угрожает Microsoft в мире настольных приложений, как верно отмечено в просочившихся Хэллоуинских документах. Ведь переход на иной API потребует столько сил, что цена будет огромна. Все мы надеемся, что Microsoft скорее исправит недостатки, чем заставит нас уйти.

С другой стороны, и уходить некуда. Ведь что мы видим? Каждая попытка прикладных специалистов - биолога, физика или специалиста по библиотечному делу - сделать шаг вперед сопровождается новым видением данных и новым алгоритмом их обработки. Ликбез в школе проведен, все знают, что такое компьютер, и в состоянии изложить свои задумки на алгоритмическом языке. Дальше начинается поиск финансирования - чиновники, фонды, выдающие гранты. Не так уж редко до демонстрации крупного результата начинаниями движет только энтузиазм авторов, причем и в нашей, и в других странах. В таких случаях мы наблюдаем, что население не в состоянии перелить с алгоритмического языка на язык программирования и получить работающее ПО... на любой платформе. Неспособны получить визуализацию. Системно решив их проблему, мы не только поможем энтузиастам, но и сэкономим деньги на казенных проектах. За рубежом вся катастрофа в совокупности уже обозначена как необходимость создания нового поколения масштабируемого и простого в написании ПО (см., например, "Report to the president. Computational Science: Ensuring America's Competitiveness. President's Information Technology Advisory Committee. June 2005"). В этой связи Китай поступил крайне недальновидно, клонировав западную индустрию в национальной ОС Kylin. Чтобы это не повторилось, автор хотел бы указать на совершенные ошибки и предложить пути их исправления.

Тайна, скрытая от общественного сознания, состоит в том, что Запад спроектировал написание интерфейса с расчетом на когнитивные способности, которыми средний человек не обладает. Чтобы доказать это, разумеется, нужно предъявить другие средства, несовпадающие с уже известными индустрии. И проследить, чьи интересы это затрагивает. Автор имел возможность глубоко изучить вопрос в рамках обсуждения в международной организации по стандартизации HTML (см., например, w3.org/Search/Mail/Public/search?keywords=Dmitry+Turin), а также в закулисной переписке, которой это обсуждение сопровождалось. Разумеется, нет никакой государственной программы США, которая запрещала бы усовершенствования, но каждая фирма стремится создать препоны, чтобы пользователь не вздумал скопировать ПО и уйти, не заплатив. Основные деньги корпорации получают, не продавая программы, а обучая пользоваться ими. Правда, что касается W3-консорциума, есть у него в хартии пункт, запрещающий улучшения в явном виде, а именно - применение дублирующих технологий. Периодически вспыхивает агитация за отмену этого пункта, но протесты, перегорев, плавно сходят на нет. Все мы бессознательно воспринимаем международные организации как созданные пользователями и для пользователей, на самом деле скинулись мужчины, у которых деньги есть. Да и скинулись, в основном, чтобы перекрыть ветер в паруса конкурентов. Кроме W3C, автор имел возможность убедиться в этом и в ISO JTC1 SC32 WG3, где ключевые посты заняты представителями Oracle, Microsoft и IBM. Отсюда и расходы на программиста, например, под Oracle превышают стоимость дистрибутива Oracle. Отсюда и бoльшая цена программ по сравнению со стоимостью схемотехники (стоимостью материального производства!). Но мало кто задумывался, что это создано искусственно и сакрализировано (автор устал читать о сакральном в книгах серии "PHILOSOPHY").

Чем вообще отличается нормальная работа пользователя от ненормальной, из каких частей она состоит? Берусь утверждать, что это - доступ к данным, отображение данных и наблюдение данных. Рассмотрим эти три составляющие подробно.


Доступ по третьей парадигме

За всю историю существования компьютера было три парадигмы хранения данных. Их отличительными особенностями являются:

  • для 1-й - команда 'move file', сдвигавшая весь файл целиком и расширявшая свободное пространство между файлами для записи нового файла;
  • для 2-й - разделение файлов на кусочки одинакового размера, помещение кусочков в свободные места винчестера и перечисление этих мест в специальном файле-невидимке (FAT);
  • для 3-й - хранение структур и отказ от концепции файлов (структуры используются всегда, за исключением редких по сравнению с бизнесом научных вычислений с массивами).

В последнем случае структуры ссылаются друг на друга по физическому адресу, доступному только для сравнения и для перехода к структуре, связанной с данной. К несчастью, изобретатель третьей парадигмы (Кодд) не имел доступа к ядру какой-либо ОС и не мог ее туда вмонтировать. И что еще более печально, он слил систему хранения с одной из многих возможных машин вывода и сделал физический адрес недоступным из-за ненадобности для этой машины - и этими двумя поступками смутил все последущие поколения разработчиков. Результат называется СУБД и состоит из части ОС и из машины вывода для оператора 'join' - и ни разработчики ОС, ни разработчики машин вывода не могут разделить эти два факта в своем уме.

Автор настоящей статьи столкнулся с этим, когда задумал машину вывода, делающую перспективную проекцию 3D-фигур в окно программы с помощью единственной функции 'printg ("SELECT * FROM GroupsTable.FiguresTable.TrianglesTable.PointsTable WHERE ...")', аналогичной функции 'printf' языка С для вывода текста (подробности ниже). Безотносительно к тому, правильное решение принял автор для 3D-фигур, неправильное - он вынужден прикрепить свою машину к СУБД, а не к ОС, потому что в ОС третья парадигма не реализована. Сбросьте пелену с глаз, повседневная реальность вообще комична - бизнес-приложения используют машину вывода 'join' для извлечения по одной структуре без всякого вывода.

Сегодня в нашей индустрии наблюдается помутнение умов - что-то похожее на танцевальную лихорадку или тюльпанную лихорадку в средневековой Европе. Кто-то на этом делает деньги. Произошел откат от структурного мировозрения к файловому: юниксовая концепция "всё есть файл" снова стала повсеместной, скатились даже до хранения XML. Не будем описывать здесь это в деталях, благо разоблачение XML-СУБД, представленное на сайте debank.com, вы можете без труда экстраполировать на всю юниксовую концепцию. Мы же отметим, что буфера при отказе от неё заменяются на транзакции. Стандартный поток вывода stdout - на небуферизированную доставку из одного хранилища в другое, запуск которой сам по себе начинает новую транзакцию ("сегмент отката" - в терминах Oracle - все-таки буфером не является). Стандартный поток ввода stdin заменяется на условие для триггеров AFTER OUTSIDE, действительное только в случае, если структура была добавлена, изменена, удалена или прочитана другим триггером, не состоящим с данным триггером в одной программе. Вложенные директории заменяются на вложенные схемы.

О другом далеко идущем следствии нужно сказать особо. Триггера становятся общим инструментом обработки данных; это означает, что программы состоят из тел триггеров (один специальный триггер висит не на какой-либо структуре, а на событии "старт программы"), их запуск поддерживается ОС, отсутствует понятие демон. Но нереализованность третьей парадигмы блокировала переход к асинхронному программированию. Которое предполагает, что условие срабатывания триггера не заставляет, а именно разрешает выполнение его тела. Если нет свободного процессора, тело может и подождать. Триггеры можно не только удалять и создавать, заново определяя их тела, но и дезактивизировать и активизировать их. Создавать вложенные триггеры, вкладывать и извлекать один триггер в другой. И работать по новой методологии: сначала разрабатывать набор независимых модулей, а затем добавлять связывающие ограничения.

Необходимость этого уже вылезла в аппаратуре под названием "стена памяти". В то время, как за один такт процессор в состоянии выполнить несколько команд, на единичный доступ к межпроцессорной памяти уходит около сотни тактов. И все из-за того, что ядра и АЛУ ждут окончания выполнения команды, и изменения порядка выполнения команд оказывается недостаточно. Соответственно, все задачи делятся на CF (cash friendly) с частыми обращениями по последовательным адресам или непоследовательно, но к одним и тем же ячейкам, - и на DIS/DIC (data intensive system/computing) с обращениями по слабо предсказуемым, практически случайным адресам. Но почти все современные задачи - управление социально-экономическими системами и войсками, криптоанализ, создание генных лекарств и оружия, предсказание погоды, климата, распространение загрязнений, проектирование крупногабаритных самолетов и кораблей - относятся ко второму классу. На них техника показывает производительность на три порядка ниже (osp.ru/os/2008/01/4836914), и повышают ее, отказавшись ожидать память и предоставив ей самой прислать запрошенные данные. Аналогичную асинхронность вводят в общении между ядрами и между процессорами. Естественным отображением на языки высокого уровня является асинхронное программирование и третья парадигма, которые уперлись в намеренно созданный файловый контроль доступа.


Масштабируемый доступ

Язык запросов более гибок и удобен для сбора данных из нескольких хранилищ и распределение их в несколько хранилищ, чем частные программы. Но нет необходимого синтаксиса - попробуем его создать. Рассмотрим на примере SQL. Первое, пусть каждое хранилище получит прозвище. Прозвище будет в запросе перед именем таблицы через двоеточие - как в sql50.euro.ru/sql5.19.2.pdf на с.121. Второе, группу хранилищ назовем обществом. Общество также указывается перед именем таблицы через двоеточие и означает прозвища всех хранилищ, входящих в группу (с.123). Таким образом одно sql-выражение с обществом означает множество sql-выражений с прозвищами. Кроме того, чтобы несколько обществ или несколько упоминаний одного общества никогда не указали на одно и то же хранилище одновременно, поместим перед ними символ %; а чтобы несколько упоминаний одного общества наоборот всегда синхронно указывали на одно и то же хранилище, поместим любое слово (одинаковое) и символ % перед этими упоминаниями (с.122-123, 126-128). И третье, введем понятие хранилище по умолчанию - в нем хранятся все прозвища и все общества. Без специальных указаний это - первое хранилище, к которому клиент приконнектился; потом его можно поменять. В целях безопасности распределенные запросы должны удовлетворять некоторым требованиям. Предлагаю концепцию полного недоверия одного хранилища другому (первые три пункта) и концепцию крайней простоты клиента (последний пункт):

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

Таким образом одно хранилище не может ввести sql-команду в другое хранилище ни прямо, ни косвенно (прося клиента перенаправить команду). От клиента не требуется создавать новую sql-команду путем парсинга ситуации, но предполается умение запомнить отправленные команды в стеке и при необходимости совершить элементарные текстовые замены в них и повторные отправки. Т.е. при взаимодействии клиента сразу с двумя хранилищами команда отправляется сначала в одно, затем посылает клиенту специальное уведомление, прося сделать подстановку в только что отправленной команде и выслать результат преобразования второму хранилищу. Специальные уведомления должны быть настолько ограниченными, чтобы не допускать порождения sql-команды, вредной для второго хранилища. Теперь нам удобно делать репликацию, аггрегировать данные со множества серверов. Содержимое бинарных протоколов нам нужно как-то зарисовывать в чертежах и документах, предлагаю sql-команды записывать просто текстом, данные - в xml-виде, а уведомления как <?command/?> (с.133, 149, 171).

Чтобы несколько раз включить и выключить ноутбук в течение одной длинной транзакции, длящейся дни или даже недели, достаточно ввести оператор FREEZE, подобный DISCONNECT, который сохранит транзакцию в текущем состоянии; и оператор UNFREEZE, подобный CONNECT, который продолжит транзакцию с замороженного состояния, т.е. не начнет новую, как CONNECT. FREEZE возвращает идентификатор замороженной транзакции, который должен быть указан в UNFREEZE. На случай падения одного хранилища во время распределенной транзакции предлагаем оператор POSTPONE для заморозки на второй стадии двухстадийных и трехстадийных COMMIT, называемых на жаргоне 2PC и 3PC, и оператор ADJOURN для заморозки на третьей стадии трехстадийных COMMIT.

(Продолжение следует)

Дмитрий ТЮРИН,
dmitryturin.narod.ru

Версия для печатиВерсия для печати

Номер: 

25 за 2010 год

Рубрика: 

Размышлизмы
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Страницы

Аватар пользователя mike
Linux ... является некачественно, хоть и бесплатно, переписанным Windows.

Вам что -- нечего печатать?

Аватар пользователя Фидошник
> "Чтобы это не повторилось, автор хотел бы указать на совершенные ошибки и предложить пути их исправления.

Тайна, скрытая от общественного сознания, состоит в том, что..."

У автора мания величия, однозначно!

Аватар пользователя Инкогнито
>>Linux ... является некачественно, хоть и бесплатно, переписанным Windows.

В башорг :)

Аватар пользователя Логик
Статья жесть!

>Автор настоящей статьи... вынужден прикрепить свою машину к СУБД, а не к ОС, потому что в ОС третья парадигма не реализована.

"Концепция транзакций, используемая в NTFS для защиты целостности файловой системы, заимствована из систем управления базами данных (СУБД)...

Решить задачу более гибкой организации информации взялась и Microsoft в своей новой файловой системе (если вообще в данном случае уместен этот термин) WinFS...

И финиш:

"...Проект RFS так и не был внедрен, но был трансформирован в WinFS, которую планировалось включить в Windows Vista в 2003 году. Этого также не произошло ввиду плохой производительности системы WinFS. Решено было сделать WinFS отдельным продуктом, но поддержку его в конце концов прекратили. WinFS прекратила свое существование..."

Аватар пользователя Black Cat
Читал сию статью, как хороший юмористический рассказ. По-другому ее воспринимать попросту невозможно. Автор, к сожалению, практически не имеет понятия о том, о чем пишет.

До меня уже отписали по поводу Linux. То, что эта ОС не имеет ни малейшего отношения к Win, особенно в том качестве, как указывает автор.

Это я как бы "скушал" и решил читать дальше, но вот эта цитата:

"В то время, как за один такт процессор в состоянии выполнить несколько команд, на единичный доступ к межпроцессорной памяти уходит около сотни тактов."

повергла меня в шок и ступор. Автор, не видел никогда в жизни ассемблера, но так категорично при этом выставляет свою необразованность в данном случае, что это уже просто перестает умилять и начинает вызывать явное отвращение.

P.S. Очень жаль, что хорошая, в общем-то, газета, начала печатать такие глупости.

Аватар пользователя Ал Тор
Стaтья нaписaнa мeтодом copy-paste в состоянии aлкогольного опьянeния???
Аватар пользователя Savely
Не, товарищи - не соpy-paste. Это абсолютно аутентичный текст. И это третья или четвертая статья автора в КВ.

Уже обсужалось...

Сайты автора

sql50.euro.ru

html50.euro.ru

html60.euro.ru

Может, еще есть что-то типа OS10.euro.ru, не искал...

Аватар пользователя Кристофер
Честно сказать, лично я большой скептик как в области развития ядра Linux (за исключением Chrome OS и Android, кои объединены, и думаю, что у них все получится), так и других начинаний. Хотя тот же Торвальдс сделал себе прекрасное "портфолио". Вообще, opensource-сообщество — это всегда наработка портфолио, такая мотивация.

Есть Windows и есть MacOS.

Во всех остальных случаях для тех же мультимедийных профессионалов (3D графика/анимация, видео, звук, визуализация процессов) в новых разработках на ядре Linux ничего нормального фактически нет. Много гнут пальцы, а хороших разработок

не сделано. На Linux нет ни одной профессиональной программы хотя бы для работы со звуком. То, что я видел -- детский сад со спартанским интерфейсом.

Насчет статей автора, ИМХО, начинаю скучать на втором абзаце, и пусть он представляет супер-идею, объяснить понятным языком он не может.

Статья называется "Ошибки и их исправление в эргономике API и GUI", интересно кажется. Вчитываешься -- не очень понятный поток сознания:)). Это ИМХО.

Аватар пользователя Yurikus
to Christopher:

ну ненадо на все узким взглядом мультимедийщика смотреть. Не надо забывать что половина HTML, Flash и прочего контента который Вы смотрите, скачиваете или создаёте приходит народу с Linux серверов. И единсвенный в этом ему конкурент это Windows. ChromeOS или MacOS X (по крайней мере массово) на сервер никто пока не ставит. У всего своя специфика и Linux будет существовать т.к. даже в областях где он не силен пока мало других алтернатив чтобы быть альтернативой.

Не будет Linux'a - Вас (и всех) Microsoft так за "§$% возьмет, что ктонить быстренько новый Linux напишет.

P.S. сам никогда с Linux на прямую дела не имел, сам фотографлю и слегка дезайню и пока что все под Окнами сижу. Только знаю что без Linux все было бы подругому...

to Author:

шота я статью так и не дочитал, как и статьи Станкевича пропускаю - "много букв - мало смысла"

но все можно исправить при желании - может в след. раз получше выйдет ;)

Аватар пользователя Кристофер
2 Yurikus

> ну ненадо на все узким взглядом мультимедийщика смотреть.

Узким взглядом!? Не смотря на то, что... ну, да, ладно.

Вообще, вы немного путаетесь в технологиях, а я написал в форуме о том, что под ядро Linux со всеми его ОС'ами, нет ни одного нормального ПО для работы профессионалов, за исключением ряда игровых конструкторов стоимостью более $1000, которые лучше работают под Windows, но адаптируемы под новые платформы.

До умопомрачения вы можете рассказывать о прелестях OpenOffice (причем это типовые задания для программеров в MSVS), но дальше планка и не поднялась.

Это с пользовательской стороны, и она -- главная.

>Не будет Linux'a - Вас (и всех) Microsoft так за "§$% возьмет, что ктонить быстренько новый Linux напишет.

Согласен. А потом этот автор нового "Linux" купит хороший особняк и будет преподавать в престижном университете. В психологии есть такое понятие как "мотивация". Не дурите голову.

Страницы

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