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

Комментарии

Страницы

Аватар пользователя Savely
Да я не путаю... Это я типа пошутил. Основная мысль была про мотивацию. Про как минимум один из мотивов.
Аватар пользователя Инкогнито
Linux - коммунистический франкенштейн.

FreeBSD - более разумный выбор. Кстати, MacOSX - это FreeBSD.

Аватар пользователя Инкогнито
FreeBSD - The Power To Serve

http://www.freebsd.org

About FreeBSD's Technological Advances

FreeBSD offers many advanced features.

No matter what the application, you want your system's resources performing at their full potential. FreeBSD's focus on performance, networking, and storage combine with easy system administration and excellent documentation to allow you to do just that.

A complete operating system based on 4.4BSD.

FreeBSD's distinguished roots derive from the BSD software releases from the Computer Systems Research Group at the University of California, Berkeley. Over ten years of work have been put into enhancing BSD, adding industry-leading SMP, multithreading, and network performance, as well as new management tools, file systems, and security features. As a result, FreeBSD may be found across the Internet, in the operating system of core router products, running root name servers, hosting major web sites, and as the foundation for widely used desktop operating systems. This is only possible because of the diverse and world-wide membership of the volunteer FreeBSD Project.

FreeBSD provides advanced operating system features, making it ideal across a range of systems, from embedded environments to high-end multiprocessor servers.

FreeBSD 7.0, released February 2008, brings many new features and performance enhancements. With a special focus on storage and multiprocessing performance, FreeBSD 7.0 shipped with support for Sun's ZFS file system and highly scalable multiprocessing performance. Benchmarks have shown that FreeBSD provides twice the MySQL and PostgreSQL performance as current Linux systems on 8-core servers.

* SMPng: After seven years of development on advanced SMP support, FreeBSD 7.0 realizes the goals of a fine-grained kernel allowing linear scalability to over 8 CPU cores for many workloads. FreeBSD 7.0 sees an almost complete elimination of the Giant Lock, removing it from the CAM storage layer and NFS client, and moving towards more fine-grained locking in the network subsystem. Significant work has also been performed to optimize kernel scheduling and locking primitives, and the optional ULE scheduler allows thread CPU affinity and per-CPU run queues to reduce overhead and increase cache-friendliness. The libthr threading package, providing 1:1 threading, is now the default. Benchmarks reveal a dramatic performance advantage over other UNIX® operating systems on identical multicore hardware, and reflect a long investment in SMP technology for the FreeBSD kernel.

* ZFS filesystem: Sun's ZFS is a state-of-the-art file system offering simple administration, transactional semantics, end-to-end data integrity, and immense scalability. From self-healing to built-in compression, RAID, snapshots, and volume management, ZFS will allow FreeBSD system administrators to easily manage large storage arrays.

* 10Gbps network optimization: With optimized device drivers from all major 10gbps network vendors, FreeBSD 7.0 has seen extensive optimization of the network stack for high performance workloads, including auto-scaling socket buffers, TCP Segment Offload (TSO), Large Receive Offload (LRO), direct network stack dispatch, and load balancing of TCP/IP workloads over multiple CPUs on supporting 10gbps cards or when multiple network interfaces are in use simultaneously. Full vendor support is available from Chelsio, Intel, Myricom, and Neterion.

* SCTP: FreeBSD 7.0 is the reference implementation for the new IETF Stream Control Transmission Protocol (SCTP) protocol, intended to support VoIP, telecommunications, and other applications with strong reliability and variable quality transmission through features such as multi-path delivery, fail-over, and multi-streaming.

* Wireless: FreeBSD 7.0 ships with significantly enhanced wireless support, including high-power Atheros-based cards, new drivers for Ralink, Intel, and ZyDAS cards, WPA, background scanning and roaming, and 802.11n.

* New hardware architectures: FreeBSD 7.0 includes significantly improved support for the embedded ARM architecture, as well as preliminary support for the Sun Ultrasparc T1 platform.

FreeBSD has a long history of advanced operating system feature development; you can read about some of these features below:

* A merged virtual memory and filesystem buffer cache continuously tunes the amount of memory used for programs and the disk cache. As a result, programs receive both excellent memory management and high performance disk access, and the system administrator is freed from the task of tuning cache sizes.

* Compatibility modules enable programs for other operating systems to run on FreeBSD, including programs for Linux, SCO UNIX, and System V Release 4.

* Soft Updates allows improved filesystem performance without sacrificing safety and reliability. It analyzes meta-data filesystem operations to avoid having to perform all of those operations synchronously. Instead, it maintains internal state about pending meta-data operations and uses this information to cache meta-data, rewrite meta-data operations to combine subsequent operations on the same files, and reorder meta-data operations so that they may be processed more efficiently. Features such as background filesystem checking and file system snapshots are built on the consistency and performance foundations of soft updates.

* File system snapshots, permitting administrators to take atomic file system snapshots for backup purposes using the free space in the file system, as well as facilitating background fsck, which allows the system to reach multiuser mode without waiting on file system cleanup operations following power outages.

* Support for IP Security (IPsec) allows improved security in networks, and support for the next-generation Internet Protocol, IPv6. The FreeBSD IPsec implementation includes support for a broad range of accelerated crypto hardware.

* Out of the box support for IPv6 via the KAME IPv6 stack allows FreeBSD to be seamlessly integrated into next generation networking environments. FreeBSD even ships with many applications extended to support IPv6!

* Multi-threaded SMP architecture capable of executing the kernel in parallel on multiple processors, and with kernel preemption, allowing high priority kernel tasks to preempt other kernel activity, reducing latency. This includes a multi-threaded network stack and a multi-threaded virtual memory subsystem. Beginning with FreeBSD 6.x, support for a fully parallel VFS allows the UFS file system to run on multiple processors simultaneously, permitting load sharing of CPU-intensive I/O optimization.

* M:N application threading via pthreads permitting threads to execute on multiple CPUs in a scalable manner, mapping many user threads onto a small number of Kernel Schedulable Entities. By adopting the Scheduler Activation model, the threading approach can be adapted to the specific requirements of a broad range of applications.

* Netgraph pluggable network stack allows developers to dynamically and easily extend the network stack through clean layered network abstractions. Netgraph nodes can implement a broad range of new network services, including encapsulation, tunneling, encryption, and performance adaptation. As a result, rapid prototyping and production deployment of enhanced network services can be performed far more easily and with fewer bugs.

* TrustedBSD MAC Framework extensible kernel security, which allows developers to customize the operating system security model for specific environments, from creating hardening policies to deploying mandatory labeled confidentiality of integrity policies. Sample security policies include Multi-Level Security (MLS), and Biba Integrity Protection. Third party modules include SEBSD, a FLASK-based implementation of Type Enforcement.

* TrustedBSD Audit is a security event logging service, providing fine-grained, secure, reliable logging of system events via the audit service. Administrators can configure the nature and granularity of logging by user, tracking file accesses, commands executed, network activity, system logins, and a range of other system behavior. Audit pipes allow IDS tools to attach to the kernel audit service and subscribe to events they require for security monitoring. FreeBSD supports the industry-standard BSM audit trail file format and API, allowing existing BSM tools to run with little or no modification. This file format is used on Solaris and Mac OS X, allowing instant interoperability and unified analysis.

* GEOM pluggable storage layer, which permits new storage services to be quickly developed and cleanly integrated into the FreeBSD storage subsystem. GEOM provides a consistent and coherent model for discovering and layering storage services, making it possible to layer services such as RAID and volume management easily.

* FreeBSD's GEOM-Based Disk Encryption (GBDE), provides strong cryptographic protection using the GEOM Framework, and can protect file systems, swap devices, and other use of storage media.

* Kernel Queues allow programs to respond more efficiently to a variety of asynchronous events including file and socket IO, improving application and system performance.

* Accept Filters allow connection-intensive applications, such as web servers, to cleanly push part of their functionality into the operating system kernel, improving performance.

FreeBSD provides many security features to protect networks and servers.

The FreeBSD developers are as concerned about security as they are about performance and stability. FreeBSD includes kernel support for stateful IP firewalling, as well as other services, such as IP proxy gateways, access control lists, mandatory access control, jail-based virtual hosting, and cryptographically protected storage. These features can be used to support highly secure hosting of mutually untrusting customers or consumers, the strong partitioning of network segments, and the construction of secure pipelines for information scrubbing and information flow control.

FreeBSD also includes support for encryption software, secure shells, Kerberos authentication, "virtual servers" created using jails, chroot-ing services to restrict application access to the file system, Secure RPC facilities, and access lists for services that support TCP wrappers.

Аватар пользователя Инкогнито
FreeBSD по-русски: http://www.freebsd.org/ru/
Аватар пользователя Логик
Инкогнито >Кстати, MacOSX - это FreeBSD.

А Windows - это UNIX.

А хто тады Linux?

Аватар пользователя Инкогнито
Нет. Windows никогда не был юниксом.

А вот MacOSX действительно базируется на Unix FreeBSD:

http://en.wikipedia.org/wiki/Mac_OS_X

Mac OS X is a series of Unix based operating systems and graphical user interfaces developed, marketed, and sold by Apple Inc.

Mac OS X is based upon the Mach kernel. Certain parts from FreeBSD's and NetBSD's implementation of Unix were incorporated in Nextstep, the core of Mac OS X.

Аватар пользователя Логик
>Нет. Windows никогда не был юниксом.

Хм, - "Windows NT поддерживает стандарт UNIX - POSIX и формально могла бы быть отнесена в разряд многочисленных клонов UNIX..."

"Сервисы Microsoft Windows для UNIX (англ. Microsoft Windows Services for UNIX, SFU) — программный пакет, разработанный компанией Microsoft, обеспечивающий подсистему UNIX на системах класса Windows NT (в том числе и более поздних). Данная подсистема называется Interix...

Как и подсистема Microsoft POSIX в Windows NT, Interix не эмулирует работу ядра Unix, это лишь реализация на уровне пользователя, запущенная поверх ядра Windows NT...

Cygwin (свободная альтернатива Interix) ..."

P.S.

SFU - Текущая версия включает:

* Более 350 утилит Unix, таких как vi, ksh, csh, ls, cat, awk, grep, kill, и т. п.

* компилятор GCC 3.3, в том числе заголовочные файлы и библиотеки (через Microsoft libc)

* cc-подобный упаковщик для C/C++ компилятора командной строки Microsoft Visual Studio

* отладчик GDB

* сервер и клиент NFS

* Демоны pcnfsd

* Утилиты и библиотеки X11

* Утилиты для монтирования ресурсов NFS как разделяемые каталоги Windows и наоборот (гейтвеи)

* Сервер Network Information Service, сопряжённый с Active Directory

* Некоторые утилиты синхронизации токенов аутентификации Windows и Unix

SFU не включает в себя (однако, возможно установить отдельно):

* bash, OpenSSH, sudo, CVS, ClamAV, bzip2, gmake, curl, emacs, Apache, XView, Ruby, Tcl, Python.

SFU не содержит встроенного X-сервера (только утилиты и библиотеки, как упоминалось выше), но может быть использован практически любой из имеющихся, например, Cygwin/X, Xming, WeirdMind или WeirdX..."

Аватар пользователя ТЮРИН (автор)
Фраза

'(один специальный триггер висит не на какой-либо структуре, а на событии "старт программы")'

Внесена в статью ошибочно, т.Е. При прочтении её игнорировать

Аватар пользователя Кристофер
Так вот, ТЮРИН (автор), даже на форуме не знают точно, о чем беседовать. У вас очень плохое и не понятное изложение предмета вопроса.

Вообще, для КВ это со времени Толи Ализара нормально, то есть не столько важен не сам предмет вопроса, сколько нужно сыпать терминами и показывать себя умным. Если честно, хоть и занимаюсь программированием, ни одной статьи Станкевича (извини, Вадим) до конца не дочитал.

Аватар пользователя mike
>При прочтении её игнорировать

Хороший совет. Применительно к статье.

Страницы