Ошибки и их исправление в эргономике 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!
 

Комментарии

Страницы

Аватар пользователя Инкогнито
Про FreeBSD забыли! Очень толковая ОС.
Аватар пользователя mike
>Узким взглядом!?

Именно!

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

Чё, винмодем в буке? Нет, парни, Вендой в Инет ни ногой! :) Такая вот ПОЛЬЗОВАТЕЛЬСКАЯ сторона.

Аватар пользователя mike
Статей Тюрина больше не читаю: ничего толкового.
Аватар пользователя Alex
2 Кристофер

> Честно сказать, лично я большой скептик как в области развития ядра Linux (за исключением Chrome OS и Android, кои объединены, и думаю, что у них все получится)

Hrome OS и Android построены на ядре Linux и одно от другого не отделимы.

> Торвальдс сделал себе прекрасное "портфолио". Вообще, opensource-сообщество — это всегда наработка портфолио, такая мотивация.

"Портфо́лио — собрание образцов работ, фотографий, дающих представление о предлагаемых услугах организации (фирмы) или специалиста"

Ну это больше к проприетарщикам относится т.е к Вам уважаемый Кристофер и если Вы считаете портфолио это мотивация проекта GNU/Linux, то извините Вы не достаточно разобрались в самой философии проекта GNU. Да, Линус очень известный в мире человек, но думаю вряд ли им двигала подобная мотивация, когда он послал своё знаменитое объявление в новостную группу «Миникса»

То что нет хороших разработок для мультимедийных профессионалов ( я кстати тоже проф. видеоинженер), то извините, а при чём здесь Linux? Для компаний и проприетарщиков всегда на первом месте была и остаётся прибыль и беситесь вы только потому, что Linux может вырвать у вас кусок хлеба из горла вот и вся мотивация.

Кстати компания Adobe Systems явлется официальным партнёром Canonical Ltd.,так что может быть скоро увидим Adobe Premiere для Linux.

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

А автор windows видимо в шалаше живёт...

Вот в университете правда не преподаёт :)

Аватар пользователя Просто юзер
К сожалению в КВ все больше стало разных "размышлизмов" и прочих измов. Все меньше стоящей технической информации как для обычных пользователей так и для специалистов.

Можно писать очень много заумного или развлекаться вариациями на тему кто более свободен в этой жизни "окноиды" или "пингвиноиды", только практической пользы для читателя никакой. Нужно также помнить, что многие читатели КВ отнюдь не компьютерные гуру, а обычные юзеры (в этом нет ничего плохого). Им нужны рубрики типа "Советы и секреты" добротная и качественная повседневная информация. Что слишком мелко? Но людям это нужно.

Аватар пользователя Alex
Я вот удивляюсь, как вы при таких взглядах

ещё не передрались в kv

Аватар пользователя Alex
> Нужно также помнить, что многие читатели КВ отнюдь не компьютерные гуру, а обычные юзеры (в этом нет ничего плохого). Им нужны рубрики типа "Советы и секреты" добротная и качественная повседневная информация. Что слишком мелко? Но людям это нужно.

Мне обсуждаемая статья тоже показалась запиской из сумасшедшего дома.

Аватар пользователя Savely
>Вы считаете портфолио это мотивация проекта GNU/Linux, то извините Вы не достаточно разобрались в самой философии проекта GNU

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

>Им нужны рубрики типа "Советы и секреты" добротная и качественная повседневная информация.

Угу, подаваемая Ваней aka VanoID...

Аватар пользователя Логик
Кристофер > Вообще, вы немного путаетесь в технологиях, а я написал в форуме о том, что под ядро Linux со всеми его ОС'ами, нет ни одного нормального ПО для работы профессионалов...

Кристофер, Yurikus, хочет сказать, типа того, что "половина...контента... (в вебе) приходит народу с Linux серверов"

То есть ДЛЯ МНОГИХ понятия "сервер" и особенно "веб-сервер" есть СИНОНИМ понятия "Linux".

И если кто-то желает, например, заняться распараллеливанием чего-то на сервере(!), то он выбирает Linux как ОС для этого сервера(!) и начинает работать с ним (с Linux) - и даже и краем глаза не смотрит на остальные ОС.

Да и ФИНИШНЫЕ операции ( где надо МНОГО СЧИТАТЬ, а не мышой двигать) по обработке ВИДЕО (мультимедия), также происходят, бают, на СЕРВЕРЕ ПОД Linux!

Бают, что Linux удобно ЗАТАЧИВАТЬ (дотачивать) под ОДНУ конкретную задачу(операцию), то есть собрать и заточить сервер(под Linux) на обработку чего-то(!) такого алгоритмически-трудоемкого, что он потянет лучше чем что-то иное.

Кроме того, Linux "засунут" почти во ВСЕ мультимедия приставки (те что просто крутят(декодируют) видео, с выходом на телек).

Кроме того, Linux "засунут" почти во ВСЕ веб-сервера, на одной микрухе - мульти-веб-сервер, колторые можно расмещать где угодно - хоть на каждом датчике чего-то (датчике температуры, газа, давления и прочеее) и потом по сети опрашивать и управлять!

Аватар пользователя Alex
> Или известны официально безработные программисты, пишущие исключительно под Линукс и не получающие денег ниоткуда?

Не путай открытое ПО с бесплатным, хотя зачастую это и совпадает.

Страницы