vitus_wagner: My photo 2005 (Default)

Большая часть проблем современного Open Source GUI вызвана тем что разработчики его пытаются копировать решения Apple и Microsoft.

Получается паровоз с ногами.

Решения Apple хороши в рамках экосистемы Apple, где от пользователя даже двумя пальцами не требуют работать, на мыше одна кнопка.

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

vitus_wagner: My photo 2005 (Default)
Еще когда я впервые в жизни увидел Windows 3.1 меня несказанно удивило, что там редактор иконок считается частью средств разработки а не end-user-ской программой. Для меня как-то казалось очевидным что иконка файла в GUI должна изображать нечто, напоминающее пользователю о содержимом файла, а не о программе, умеющей с ним работать.

Windows с тех пор несколько исправилась и научилась по крайней мере для фотографий вместо иконки показывать превьюшку.

Но тут я что-то задумался над тем, как бы могли выглядить графические интерфейсы в культуре, где нарисовать тушью летящего журавля умеет примерно такой же процент школьников, как у нас - без ошибки написать слово "журавль". А число школьников, умеющих нарисовать узнаваемый и едкий шарж на любимого учителя сравнимо с числом умеющих в уме разделить 47400 на 79.

Наверное, там бы резистивные тачскрины не вымерли, и стилусы остались бы непременной принадлежностью смартфонов и планшетов. А к текстовым файлам рисовали бы иконки, подобные тем картинкам, которые Пушкин рисовал на полях рукописей. Не исключено, что куда более распространены были бы черно-белые интерфейсы. Ведь черно-белым рисунком можно выразить так много, а цвета и оттенки серого только зашумляют мысль.
vitus_wagner: My photo 2005 (Default)
Подумавши некоторое время над концепцией семантической локальности я пришел к в некотором смысле противоположной концепции "общего контекста коммуникации".

То есть меня в общем довольно давно волновал вопрос, почему за 40 лет не появилось языка программирования, который был бы shell лучше чем unix shell. То есть более высокоуровневый, с меньшим порогом вхождения. позволяющий легко формулировать сложные концепции.

Почему-то все попытки "улучшить" shell вели в строго противоположном направлении "давайте напихаем туда более низкоуровневых конструкций, массивов, объектов с методами, типизации". Да, эти конструкции, которые вполне себе высокоуровневы если смотреть с уровня ассемблера, даже портабельного, на уровне шелла - глубокие потроха, которые не надо выворачивать наружу.

Подумав, я пришел к выводу что

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

2. Должна быть некая система умолчаний. Сейчас в шелле контекст выполнения состоит пожалуй, из имени текущей директории (и. соответственно относительных путей). Ну с некоторой натяжкой - еще и списка фоновых задач из него запущенных - %1 меняет свое значение по ходу выполнения.

В более низкоуровневых языках программирования, которые являются аналогом письменной речи, система контекстов куда более развита. Начиная с let в Lisp-е и with в Pascal, и кончая развесистыми системами алиасов при импорте модулей в Python и Go. Где-то в промежутке namespaces в C++ и присваивание glob references в Perl. В общем придумано много способов сказать "сегодня это слово у нас значит то-то". Но это именно способы, характерные для письменной речи, причем даже скорее для научных и юридических текстов, а не для художественных и не для частной переписки.

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

(три дня эту мысль думал, а все равно непричесанная какая-то. Или я поторопился и надо было еще сутки подумать?)
vitus_wagner: My photo 2005 (Default)
http://esr.ibiblio.org/?p=7421

Раймонд умный пост написал по поводу концепций, которые лежат под Unix way. Я эту мысль про семантическую локальность три дня думать буду.
vitus_wagner: My photo 2005 (Default)
Наткнулся на ЛОРе на забавный проект:
http://unde.sourceforge.net/ru/

Чем-то это перекликается с некоторыми моими идеями изложенными под тэгом UNG. Ну то есть Раскина человек прочитал, понял, и местами (как и я) не согласился. Например, я полностью с ним согласен в том, что борьба с режимами должна иметь границы.

У него есть вполне разделяемая мной идея, что интерфейс должен быть самообучающим. В том смысле что активно подсказывать более эффективные способы работы с ним. Заткнуть gap между пользованием GUI и командной строкой - это очень важно. Потому что между командной строкой и скриптингом барьер уже отсутствует.

С идеей "все есть директория" вместо "все есть файл" я игрался году в 93-94, когда еще не знал что на свете существуют не то что Mind Maps, но и файловые системы со множественными hard и sym-линками.

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

Очень интересной показалась идея двумерного расположения объектов в контейнере. В смысле "ты всегда найдешь файл там, куда ты его положил". Помнится в Communiware мы тоже были вынуждены вводить "человеческий" порядок сортировки. Поскольку критерии сортировки, которыми пользователю удобно пользоваться. неформализуемы.А использование двумерного порядка вместо одномерного существенно расширяет возможности удобозапоминаемого хранения.
vitus_wagner: My photo 2005 (Default)
Собственно, этот проект я начал тихой сапой год назад, когда начал писать vws. Вчерашний пост про OpenVPN явно является продолжением того же тренда. Кстати для openvpn-менеджера я уже репозиторий завел.

Вообще надо еще wpa_gui переписать. И bluez-applet. К этому снаряду я уже, правда, пытался подойти, но без большого успеха. Впрочем, теперь у меня больше блютусных девайсов - есть и наушники, и мыши.

В общем, проект по устранению из linux-овой рабочей станции/ноутбука лишних демонов. Благо демоны нелишние wpa-supplicant, openvpn, qemu-system прекрасно умеют выполнять ту работу, ради которой пытаются завести лишний набор демонов, которые ими управляют. Поэтому вместо демонов надо сделать апплеты в трее или командно-строчные утилиты, которые все необходимые операции умеют выполнять.

От libvirtd я уже больше года как избавился, хотя для того чтобы довести vws до состояния, пригодного для многопользовательских систем и сборочных серверов под управлением jenkins и pgfarm потребовалось довольно много времени.

Теперь вот собираюсь на NM с wicd ополчиться.

На самом деле в основном потому что есть нетбук, на который LXDE попросту не лезет (5-й libreoffice их бэкпортов лезет, а на lxde уже места не остается. Эксперимент с awesome признан несколько неудачным. Сам я еще как-то пользоваться им могу, но вот научить ребенка не получается. Он уже привык к традиционным wm с перекрывающимися окнами, поэтому оказалось проще поставить jwm, чем объяснять ему за одни выходные (большую часть которых мы оба провели в огороде), кучу концепций, которые я еще и сам до конца не усвоил.

На самом деле lxde для меня потеряла смысл уже давно, когда я перешел с pcmanfm на spacefm. Все остальное, что я использую от lxde jwm умеет не хуже.
Разве что lx-logout'у еще надо приискать десктопонезависимую замену. Впрочем, lx-logout безбожно глючит с light-locker-ом. В смысле, систему в которой вместо xscreensaver используется lightlocker не умеет корректно уложить в hybernate, чтобы она потом нормально взлетела. А если нет hybernate, то функциональность lx-logout сводится к той, которую обеспечивают совместно менюшка quit в jwm и аппаратная кнопка питания.
vitus_wagner: My photo 2005 (Default)
Тут [livejournal.com profile] slobin выдал интересную мысль (в виде сердитого комментария)

Если бы, гуляя по городу, я каждый раз должен был говорить себе "посмотри направо", чтобы что-нибудь там заметить, я бы так до сих пор почти ничего и не видел. Говорю же, юникс вей состоит из двух частей, которые у меня в голове друг другу глубоко враждебны: возможности сказать словами плюс текстовые форматы всего, что можно -- это, безусловно, хорошо. Но что мне толку с этих текстовых форматов, если мне их не показывают? Бинарные логи плохи не тем, что по ним плохо искать по явному запросу (по явному запросу в них искать хорошо), а тем, что я не увижу в них краем глаза чего-то, чего мне не приходило в голову специально искать. Аналогично с пустыми ответами на запросы: если я спрашиваю что-нибудь сложное, вижу пустой ответ, и подозреваю, что ответ действительно может быть пустым, я всегда слегка ослабляю запрос, чтобы убедиться, что ответ был пустым не из-за моей опечатки. Ну вот банально в обсуждаемом файле номеров паспортов я искал не свой номер, а свой номер без последней цифры.

(подумав) Блин, если уж вы так любите командовать компьютером (словами), то почему бы не учесть опыт тех, кто людьми веками словами командовал! Военных, то бишь! Даже в уставе от исполнителя требуется повторить приказ, чтобы командир убедился, что исполнитель его хотя бы услышал. Далее обобщается.

Ну то есть я понимаю, откуда взялась эта идея молчать, если сказать нечего: оттого, что слушать программу, возможно, будет следующая программа в конвейере. Но, во-первых, кроме stdout у нас есть stderr (возможно, тут просто название подкачало: должно было быть stdinfo или даже stdbtw), а во-вторых, я то не программа! Моя человеческая задача -- увидеть в результатах то, о чём я не знал, пока их не увидел.

Поэтому, кстати, вим мне и нравится: говорить ему можно словами (часто даже в ex), а вот результат виден сразу на экране. В том числе неожиданный результат. Но вот других программ с этой парадигмой что-то мало.

... Товарищ на вкус и цвет ...


Ну в общем что-то подобное у меня в голове мелькало. Человек эволюционно - лесной и саванновый охотник. У него есть достаточно развитый механизм "бокового зрения", умение отслеживать появление чего-то не того вне основного локуса внимания. И правильный пользовательский интерфейс должен бы эту возможность использовать.

Помнится, я еще в XX веке писал утилиту, отображающую состояние батарейки ноутбука в верхнем левом углу линуксовой текстовой консоли (ну вот такой ноутбук был, что X-ы на нем запускать обычно было overkill-ом).

Впрочем, сейчас развелись всякие треи и system notification area, которые где-то как-то пытаются эксплуатировать эту особенность человеческих когнитивных механизмов.

Впрочем, то, о чем пишет Кир, это несколько другое, это не объекты за пределами основного локуса внимания (которые ближе, чем кажутся), а объекты на переферии основного локуса - строка соседняя с найденной например.

Вот, кстати еще одна идея как использовать в интерфейсах боковое зрение.
vitus_wagner: My photo 2005 (Default)
В традиционной парадигме 70-х годов у данных, которые лежат на диске владельца (не в смысле пользователя в многопользовательской системе, а в смысле какого-то куска программного кода) нет.
Приходи кто хочешь, бери файл, копируй, перемещай, меняй в нем байтики.

И у этого подхода есть масса преимуществ. Во-первых, прекраснореализуется toolbox phylosophy. Во-вторых, авторам приложений не нужно думать о поддержке таких операций как бэкап, или о способах передачи данных по сети - это можно поручить отдельным программам - сетевым FS, ftp-клиентам и т.д, и они прекрасно справятся с любыми данными.

Но чего-то в этой парадигме не хватает, и ее постоянно пытаются поломать. Из тех примеров, с которыми приходилось сталкиваться лично мне, первым была MacOS classic, с атрибутами creator и owner у файла. Концепция была, конечно. сильно кривая и мешала, когда нужно обрабатывать некие данные несколькими программами.

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

Вот в Андроиде, например, появился механизм Intents, который позволяет опять же работать в парадигме тулбокса, но уже над набором приложений-обработчиков данных, а не файлов. Ему, правда не хватает стандартизованных механизмов для бэкапа и обмена данными с другими устройствами, но это задумка такая - привязать пользователей к чужим облачным сервисам, чтобы нельзя было список покупок с компьютера на телефон скопировать, не пропусти в его через индексатор фирмы, торгующей контекстной рекламой.

Или для обмена данными по шнурку вместо избыточно низкоуровневого для этой цели USB Storage используют не протокол уровня файловой системы (SMB, например), а какой-нибудь PTP или MTP.

Если вдуматься, то вообще-то клиент-серверные базы данных и всякие веб-сервисы это примерно то же самое. Вместо того, чтобы хранить данные в файловом хранилище, к ним приделывают процесс, который реализует свою собственную политику доступа, и реализуют какой-то протокол взаимодействия с этим процессом. Иногда не один - вот у ЖЖ, например. есть один протокол для доступа из браузера, а второй - API для всяких программ-клиентов.

Я регулярно сталкиваюсь с описаниями OpenSource проектов, которые норовят использовать D-Bus в качестве аналога андридных интентов и передавать по ней данные от процесса-владельца данных к процессу-потребителю данных. Получается, естественно, плохо. Но упорство таких попыток о чём-то свидетельтсвует.

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

1. Нужен стандартизированный протокол бэкапа. То есть любое приложение, которое хоть что-то хоть где-то хранит (ну кроме очень специальных случаев вроде HSM, должно поддерживать операцию "скачать всё" и, по возможности - "скачать изменения со времен такого-то бэкапа", а также "восстановить вот это".
В принципе, даже HSM-ы можно бэкапить, если предусмотреть защиту бэкапа секретом, который хранится где-то отдельно от бэкапа.

2. Нужен стандартизованный object sharing протокол. Что-то вроде того же PTP или MTP - посмотреть какие объекты есть в библиотеке у данной программы, вытащить указанный объект в виде, пригодным для того, чтобы скормить аналогичному приложению на другом устройстве, положить объект.

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

Ну и нужен качественный набор паттернов разделения менеджера данных и приложения с пользовательским интерфейсом. Хотя все равно хрен соблюдать будут. В мире где наиболее распространенным языком является php, созданный для того, чтобы смешивать логику и представление, идея разделения этих двух сущностей будет оставаться благим пожеланием.

Upd А придумает ли кто-нибудь третий случай операции кроме "забэкапить все" и "поделиться избранным", применимый к ЛЮБОЙ информации хранящейся на устройстве? (понятно что варианты "открыть в соответствующем приложении" и "стереть нафиг" не в счет).
vitus_wagner: My photo 2005 (Default)
Похоже, что желание создать нормальное Free Software, в смысле, такое, которое пользователь действительно свободен модифицировать, потому что способен понять, таки начинает у народа возникать.

Вот, например, Tomb, юзер-френдли инструмент для создания криптованных дисков, написанный на shell. Под лозунгом complexity hides insecurity.

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

Но в общем и целом подход вполне заслуживает внимания.
vitus_wagner: My photo 2005 (Default)
Вот смотрю я на развитие проекта Devuan и думаю, что форк без systemd это, конечно, благая идея. Но если не отказаться от GTK и Qt, создать систему в которой от использования GUI будет легко перейти к его модификации, не получится.
vitus_wagner: My photo 2005 (Default)
Тут в процессе дискуссии вылезла странная мысль.

Что в общем-то плох не init как таковой, а соглашения по написанию скриптов для него.
Ну и не хватает нескольких инструментов для того, чтобы реализовать некоторую полезную функциональность. Например, иниттабовский respawn в соврешменных условиях почти бессмысленен.

В связи с этим возникла мысль, придумать в качестве замены нынешнему sysvinit

1. Протокол взаимодействия init-скриптов с окрущением (в которое кроме собственно запускалки всех скриптов требуемых по данному событию входит еще и утилита update-rc.d как минимум). Именно протокол. Сам скрипт может быть чем угодно, начиная от makefile, и кончая вообще бинарником. Внутрь вообще никто глядеть не должен, никакхи manchine-readable comments. Поэтому рассказывать о том, от чего скрипт зависит он должен при ВЫЗОВе с параметром depends, а про то, на каких ранлевелах он предполагает запускать и стартовать свой сервис - при вызове с параметром runlevels

Протокол, естественно, делается таким, чтобы существующие шелловские init-скрипты требовали минимальной доработки. В идеале - только замены lsb-style комментариев на то, что будет реализовывать соответсвующую часть протокола.

2. Специальный инструмент для запуска демонов, скриптами для которого должны быть 80% инит-скриптов. В качестве основы для такой запускалки берется start-stop-daemon. Слегка дорабатывается, чтобы мог работать как интерпретатор скриптов, состоящих из тех же команд, которые он сейчас из командной строки понимает. Получается такая чисто декларативная описаловка.
Туда же можно прикрутить функциональность watchdog в качестве одного из сценариев работы.


3. Во всех прочих случаях по возможности использовать не специальные, а какие-нибудь general purpose инструменты. Например, make(1) вместо startpar(8).

4. Видимо, все же на уровне самого init-а - обеспечить чтобы выдача шла не на консоль, или не только на консоль. Как меня это всю жизнь раздражало - то, что в общем не слишком интересные сообщения от ядра сохраняются в boot.log а гораздо более важные сообщения от стартующих демонов теряются безвозвратно. Возможно, на консоль если нет специального параметра переданного при загрузки ядра вообще ничего писать не надо - все равно в наше время все там bootsplash норовят повесить. А у многих не i386 архитектур консоль вообще на какой-нибудь нераспаянный jtag заведена. а на экране до старта X-сервера вообще ничего хорошего.
vitus_wagner: My photo 2005 (Default)
Тут вот вчера выяснил, что для того, чтобы отключить блокрировку экрана при закрытии (вернее открытии) крышки ноутбука, нужно редактировать конфигурационный файл в /etc.

Непонятно зачем вообще столько лет в Linux проталкивали D-Bus. Казалось бы системная шина ровно для этого нужна - передать программам, которые могут быть в этом заинтересованы сообщения об общесистемных событиях (ну например, смене роутинга или открытия/закрытия крышки) и пусть они на это реагируют, если хотят.

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

(А все потому что никто не додумался включить в комплект dbus скриптуемый тул для реакции на события).

В общем выяснилось что в концепцию пользователя в системе следующего поколения надо закладывать еще одну сторону - "правила хорошего тона", список вещей, которые система не должна себе позволять в отношении пользователя. Непосредственное управление программами, входящими в пользовательскую сессию, видимо одна из таких вещей.
vitus_wagner: My photo 2005 (Default)
Тут почти одновременно [livejournal.com profile] arkanoid и [personal profile] dinozavr пишут ругательные посты про usabilty Android.

Причем приводят такие аргументы, что у меня волосы дыбом встают и хочется покрутить пальцем у виска.

Ну вот, напримет расскахываю про то, сколько много кликов нужно, чтобы позвонить по телефону.

По-моему, что в Maemo. что в андроиде это одинаково, Одно нажатие на кнопку и один жест на разблокировку экрана, один клик на запуск телефонного приложения и один клик на выбор из появляющегося на экране лога последних вызовов, 90% моих потребностей в телефонных звонках это удовлетворяет. Другие случаи, когда приходится рыться в списке контактов или набирать номер (создавать новый контакт) достаточно редки, чтобы их надо было так уж оптимизировать.

Короче, если бы мне нужен был телефон, чтобы звонить, я бы не покупал андроидного устройства, а носил старый-добрый Nokia 5000. Благо в столе лежит. А если мне нужен компьютер, читалка, навигатор и иногда позвонить - андроид или maemo - самое оно.

Или вот [livejournal.com profile] arkanoid ругает альфабанковское приложение. А по-моему, оно удобнее, чем использование альфабанковского же веб-сайта. Поскольку при работе с сайтом придется переключаться между сайтом и приемом SMS. вводить одноразовые пароли и т,д. А наиболее часто производимая операция - платеж по готовому шаблону в альфа-мобайле делается в очень небольшое число кликов. При условии, конечно, что мы работаем с того устройства, в которое воткнута SIM-карта, привязанная к счету.

То есть здесь наоборот - приложение для телефона. вернее терминала сотовой сети. (кстати есть J2ME аналог). И попытка его использования на планшете привела к закономерному фейлу.

Возможно, эти конкретные случае лечились был наличием Concepts manual
размером примерно с man Tcl. Но по-моему, основное - не это.

Основное - то, что разные люди имеют разный тип информационного
метаболизма. И считают удобными и неудобными разные вещи.

Соответственно, хочется представить себе такую классификацию, когда один раз типируешься, а потом при настройке своего аккаунта на новом устройстве либо просто выбираешь из менюшки тип, либо оно вообще его из какого-нибудь гугля само достает, и сразу 80% настроек приложений, в том числе и тех, которых ты ещё никогда в жизни не открывал, ставятся в удобное тебе положение.

Создавать такую настоящую классификацию я пока не готов. Но описать в
«Детях пространства» - хочется.

Как вы полагаете, будет ли в какчестве классификации стиля
взаимодействия с интерфейсами правдоподобно смотреться две оси из
соционики - логика-этика и сенсорика-интуиция в сочетание с осью
визуал-аудиал-кинестетик.

«Логико-интуитивный визуал», «Этико-сенсорный кинестетик».
vitus_wagner: My photo 2005 (Default)
Пришла тут мысль, что в операционной системе, кроме понятия "сессия" дожно существовать понятие "закулиса".
В смысле, контекст, в котором выполняются действия от имени пользователя, независимо от того, есть в данный момент этот пользователь рядом с компьютером или нет.

В классическом unix фактически единственным представителем закулисы являются кроновские задания.
Несколько позже появились всякие procmail-ы и sieve.

Но по мере того, как компьютеры становятся мобильными и обрастают сенсорами, а также развиваются сети, количество событий на которые может потребоваться отреагировать, возрастает.

Достижение определенной географической точки/соты/wi-fi сети. Появление в радиусе действия какого-то локального протокола (wifi, bluetooth, подключение USB-шнурком) принадлежащего пользователю гаджета, завершение закачки файла (я считаю что это событие следует рассматривать отдельно от "завершение очередного этапа в пакетном задании", так как закачка файла может производиться каким-нибудь mldonkey, который закачав этот файл продолжает работать с десятью другими закачками трех других пользователей, или вообще речь идет о том что кто-то зааплоадил файл на анонимный ftp)

По всем этим событиям может потребоваться реакция, которая должна осуществляться именно с правами пользователя.
vitus_wagner: My photo 2005 (Default)
1. Идея per project конфигурационных файлов (где project - просто некоторое поддерево) в дополнение к per system, per user и per display как это сделано в git. - это хорошое и правильно. Надо применять возможно более широко, в частности в текстовых редакторах. Кстати, per display надо бы развить в per connection method.

2. Для того чтобы эффективно сливать конфигурационную информацию из такой кучи разных мест, нужна единая общесистемная высокоуровневая абстракция конфигурационных данных. X ресурсы не пошли именно из-за того, что они со своими wildcards и cpp-шным препроцессированием были мало к этому приспособлены. Микрософтовский или гномовский реестр в этом плане получше, но всё равно крив.

3. К системе разрешений вида андроидной должна прилагаться система фейковых разрешений. Вот мы говорим что мы эту программу пускаем в сеть, а на самом деле нифига не пускаем, или пускаем на один конкретный IP. Вот этой даем доступ к контактам, но не к настоящим, а к специальной пустой записной книжке.

4. Доверие пользователя программе должно иметь больше градаций - вот этой программе мы доверяем всё что угодно, вот этой - только работать в полностью эмулированной среде с квотами на CPU и RAM, вот этой - работать в chroot.
vitus_wagner: My photo 2005 (Default)
Вообще обсуждение уже принесло немало интересного, хотя постоянно норовит свалиься куда-то на низкий уровень - в обсуждение шин сообщений и прочих API. А мы вообще-то еще требования к UI не сформулирвали.

Но вот [livejournal.com profile] rainbow_beast просветил меня по поводу разницы между mind maps и concept maps.

Хотя я не уверен, что термин mind mapping не подходит, но все же в названии "Концептуальный интерфейс" что-то есть. Постмодерном попахивает.

На самом деле интерфейс должен быть в первую очередь самообучающим. Не самообучающимся хотя это тоже не повредит, а именно обучающим - self-tutoring или self-сouching. Причем обучать он должен в первую очередь именно конецпциям, лежащим в основе той или иной деятельности за компьютером.

Потому что компьютер это инструмент для множества очень разных задач, все из которых и не упомнишь. Постоянно приходится сталкиваться с вещами, которые несколько лет не делал и все забыл. Вот интерфейс и должен всячески помогать их вспомнить, если забыл, и узнать, если никогда не знал. Mind mapping с фокусом в примерно том же месте где и клавиатурный фокус оконной системы этому может очень неплохо помочь.

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

Есть еще контекст текущей активности. Который тоже может выходить за пределы текущей сессии. Например активность "диалог в чате с другим человеком" явно захватывает кусочек сессии второго собеседника.

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

Вот с определением границ компьютера, сессии и клиент-серверных действий (например web-приложений) сложнее. Иногда даже и программисты не могут сразу сказать что у них выполняется сервер-сайд, а что - клиент-сайд. Хотя это крайне полезно понимать и пользователю хотя бы из соображений безопасности.

Кстати о безопасности, Систему следует планировать исходя из того, что любая из компонент может содержать если не злонамеренный код, то опасные ошибки. И везде где возможно использовать разграничения доступа к памяти, ограничения доступа к файловой системе и т.д. В качестве образца мы имеем по крайней мере две модели - классическую модель Unix и неклассическую Android с контрактами приложений. Там, правда, очень плохо сделано разграничение доступа к файловой системе. Можно еще посмотреть на остерхутовскую модель из SafeTcl.

В общем, получается такая картина - имеются tiled окна. Их немного. Даже на современном экране много tiled окон не расположешь. У окон может иметься довольно широкая рамка, куда выводятся тем или иным способом связанные с основным содержимым окна штуковины. Например, меню - это частный случай набора ассоциирующихся с содержимым окна объектов - команд, которые к этому окну можно применить.

Вокруг области tiled окон имеется рамка экрана. Где показываются какие-то объекты, связанные с сессией в целом или компьютером в целом.

У окна четыре стороны и можно их закрепить за разными типами связей.

Возможно, стоит позаимствовать из Ashton Tate Framework концепцию "изнанки фрейма". Там на изнанке фрейма можно было писать скрипт, генерирующий содержимое фрейма. Здесь более логичным является наличие на изнанке пояснительного (гипер)текста про то что можно с этим фреймом делать. Скрипт там тоже может быть, на то еcть literate programming.

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

Идеями Раскина насчет полностью modeless интерфейса злоупотреблять не стоит. Смена взгляда на один и тот же информационный объект иногда вполне оправдана. Но только надо оформить смену режима как переход по ссылке в concepts map. Вот до сих пор это у нас был текст, который мы набирали, и ассоциировался он с набором инструментов для работы с содержимым, а сейчас это стал верстаемый документ, и набор инструментов стал совсем другой.
vitus_wagner: My photo 2005 (Default)
Итоги предыдущей дискуссии показали что наиболее близок к желаемому идеалу Emacs, умеющий работать не только с текстом и самостоятельно пишущий себе конфиги, адаптируясь под конкретного пользователя.

Вообще-то программу которая сама пишет ну не то чтобы конфиги, но скрипты, быстро и без лишних движений воспроизводящие результат, к которому пользователь долго шёд методом проб и ошибок, я писал еще в 1994 году.

А фактически современником Emacs, но умеющим работать и с форматированным текстом, и с графикой - была Oberon-среда Вирта. Интересно почему крокодил-Emacs, родственник динозавров-лисп-машин - выжил, а Оберон - нет.

Возможно, дело в том, что Вирт недооценил небходимость высокоуровневого языка, уровня юниксового шелла. Лисп-то может использоваться и как низкоуровневый, и как высокоуровневый, а Оберон-2 это дальнейшее развитие Паскаля, то есть примерно уровень С. Даже не современного С++.

Хотя, может быть, просто у Оберона не нашлось своего Столлмана или Филлипа Кана. Энтузиаста, который бы довел академический proof of concept до уровня продукта, как сделал Кан с турбо-паскалем.
vitus_wagner: My photo 2005 (Default)
Тут чего-то в мире пользовательских интерфейсов, который казалось на десятилетия застыл в парадигме CUA, в связи с появлением планшетов наметилось какое-то шевеление.

В связи с этим возникают мысли про то, как в принципе может пойти развитие интерфейсов на более традиционных устройств. Некоторое время назад я описал в "Детях пространства" как Карл Кроппкэ обучается работе со спейсианским ноутбуком.

Принципиальны там следующие вещи

1. Интерфейс неинтуитивный, он требует обучения. И несмотря на то что Лада прекрасно знает что Карл - образованный и весьма квалифицированный программист, она заставляет его пройти интерактивный обучающий курс.
Что курс там оказывается весьма хорошо написан - отдельный вопрос. Вот чего-чего а concept manual-ов современным интерфейсным нововведениями вроде мультитача явно не хватает.

2. В качестве отцов основателей чьи идеи были использованы в этом интерфейсе упоминаются Раскин, Вирт и Бузен.
При этом кнопка Jump на клавиатуре есть. Но испольузется не как у Раскина, а скорее как Meta в Unix или Command в MacOs. То есть не сама по себе а в сочетании с чем-то ещё. (это по поводу Раскина). У Вирта из Оберона по-моему можно позаимствовать ровно две вещи - tiled window management (который сейчас весьма популятен среди профессионалов) и выполнение команды, написанной в любом месте на экране одним кликом. Вот притащить в интерфейсы идеи Бузена, то есть Mind Mapping - штука нетривиальная.

В принципе, гипертекст со ссылками весьма близок к mind mapping, так что возможно, развитие html5-based интерфейсов туда и приведет. Но mind mapping это в первую очередь система быстрого и удобного редактирования связей между объектами.

Идеи Раскина о сплошном поиске в интернете более-менее реализованы усилиями гугля. Впрочем, идея reinventing the command line с возможностью указания поискового запроса вместок команды есть по-моему в Unity.

Кстати была еще идея экрана как бесконечного параболоида, автора которой я, к сожалению не вспомнил. Но можно считать что мой персонаж её тоже не вспомнил. То есть когда окно удаляется из фокуса внимания, оно уменьшается. И чем ближе к краю экрана, тем сильнее. Это в общем-то естественно стыкуется с mind map-ом. Окна, находящиеся на расстоянии одной ассоциации от текущего показываются уменьшенными, но так, что даже текст при желании читаем, на расстоянии двух - уже почти иконки и так далее.

И я совершенно зря не упоминул Негропонте с "активностями". Потому что далеко не все окна на экране являются именно "объектами", "документами" - статичными сущностями, которые могут измениться только по инициативе пользователя. Есть логи, чаты и тому подобные вещи, которые меняются "самопроизвольно" с точки зрения данного пользователя.

Еще интересно, что в современном мире уже приходится учитывать физическое положение устройства. То есть текущий контекст пользователя может включать не только то, что в компьютере, но и то, что вокруг него. Кстати я давно говорил, что концепция пользовательской сессии должна включать в себя не только клавиатуру, мышь и экран, но и устройства ввода-вывода звука, видеокамеру, и всякие разные гаджеты, которые пользователю может захотеться достать из кармана. Причем очевидно что в нашем мире "съемный носитель данных" уже не обязательно основная функция такого гаджета.

В общем мне кажется что идея пообсуждать каким может быть пользовательский интерфейс, если его оптимизировать не на привлекательность для покупателя, а на удобство и эффективность для человека, не поленившегося потратить довольно небольшое время на обучение, и оптимизировать более менее системно - довольно интересна.
vitus_wagner: My photo 2005 (Default)
В связи с проблемой readline, которую хрен к чему прилинкуешь,
возникла мысль попробовать описать протокол, который должен поддерживаться программой, интерпретирующей некоторый входной язык программирования, для того,
чтобы этой программой можно было удобно пользоваться при посредстве внешней программы-редактора командной строки (вроде rlwrap).

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

1. Должен поддерживаться ключик, переводящий stdin/stdout в line-buffered (или unuffered) режим несмотря на то что условие isatty(fileno(stdin)) не выполняется. Это позволит не расходовать ценный ресурс PTY (которым вынужден пользоваться rlwrap)

2. Должна поддерживаться команда, которая позволяет узнать, является ли данная строка завершенным высказыванием входного языка, которое можно отдавать на выполнение (аналог tcl-евского info complete)
3. Должна поддерживаться команда которая по паре "строка, позиция в строке" позволяет узнать как называется объект, который может стоять на этом месте в строке
(переменная, опция, таблица, поле etc).
Можно ограничиться передачей только строки, в предположении что имя должно начинаться там, где кончается строка.

4. По названию типа объекта и префиксу имени вернуть список всех имен подходящих объектов.

По-моему, поддержки такого протокола вполне хватить для того, чтобы реализовать полноценный completion в стиле лучших реализаций программ, испольузющих readline.
Да, естественно, что при выполнении условия 2, требование "команды 2, 3 и 4 можно подавать только тогда, когда интерпретатор ожидает выполнения команды" не является чрезмерным.
vitus_wagner: My photo 2005 (Default)
В связи с проблемой readline, которую хрен к чему прилинкуешь,
возникла мысль попробовать описать протокол, который должен поддерживаться программой, интерпретирующей некоторый входной язык программирования, для того,
чтобы этой программой можно было удобно пользоваться при посредстве внешней программы-редактора командной строки (вроде rlwrap).

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

1. Должен поддерживаться ключик, переводящий stdin/stdout в line-buffered (или unuffered) режим несмотря на то что условие isatty(fileno(stdin)) не выполняется. Это позволит не расходовать ценный ресурс PTY (которым вынужден пользоваться rlwrap)

2. Должна поддерживаться команда, которая позволяет узнать, является ли данная строка завершенным высказыванием входного языка, которое можно отдавать на выполнение (аналог tcl-евского info complete)
3. Должна поддерживаться команда которая по паре "строка, позиция в строке" позволяет узнать как называется объект, который может стоять на этом месте в строке
(переменная, опция, таблица, поле etc).
Можно ограничиться передачей только строки, в предположении что имя должно начинаться там, где кончается строка.

4. По названию типа объекта и префиксу имени вернуть список всех имен подходящих объектов.

По-моему, поддержки такого протокола вполне хватить для того, чтобы реализовать полноценный completion в стиле лучших реализаций программ, испольузющих readline.
Да, естественно, что при выполнении условия 2, требование "команды 2, 3 и 4 можно подавать только тогда, когда интерпретатор ожидает выполнения команды" не является чрезмерным.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

May 2025

S M T W T F S
    1 2 3
4 56 7 8 9 10
11 12 131415 1617
1819202122 2324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 24th, 2025 09:03 am
Powered by Dreamwidth Studios