Жанр: Учеба

Дизайн пользовательского интерфейса

сторінка №3

ть максимально

собранным, когда горит "красная лампочка". С некоторыми оговорками,

этот метод может быть использован (и используется) на атомной станции,

но совершенно непонятно, как его можно применить, например, в элек

тронной таблице, в которой всего два действия пользователя способны

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

возможность последующей отмены деструктивных действий (Undo) сама

по себе не служит уменьшению количества человеческих ошибок, но

помогает только уменьшить урон от них.

В действительности надо стремиться минимизировать количество

ошибок, поскольку только это позволяет сберечь время (т. е. повысить

производительность) и сделать пользователей более счастливыми за счет

отсутствия дискомфорта.

Суммируя, при борьбе с ошибками нужно направлять усилия на:

плавное обучение пользователей в процессе работы

снижение требований к бдительности

повышение разборчивости и заметности индикаторов.

Дополнительно к этим трём направлениям, есть и четвертое: снижение

чувствительности системы к ошибкам. Для этого есть три основных

способа, а именно:

блокировка потенциально опасных действий пользователя до

получения подтверждения правильности действия

проверка системой всех действий пользователя перед их принятием

самостоятельный выбор системой необходимых команд или парамет

ров, при котором от пользователя требуется только проверка.

При этом самым эффективным является третий способ. К сожалению,

этот способ наиболее труден в реализации. Разберем эти три способа

подробнее.

Блокировка

потенциально

опасных действий

до получения

подтверждения

Команда удаления файла в любой операционной системе снабжена требова

нием подтвердить удаление. Эта блокировка приносит пользу только начи

нающим пользователям, которые проверяют каждый свой шаг. Проиллюс

трирую эту проблему на примере.

Некто Виктор Х. хочет удалить файл День рождения. Он выделяет этот

файл и отдает системе команду Удалить. Появляется диалоговое окно с

требованием подтвердить удаление файла. Начинается самое интересное.

Виктор Х., не глядя на диалог, знает, зачем он нужен. Он видел его не раз

и не два. Он даже дословно помнит, о чём именно его спрашивают. "Да,

хочу" говорит Виктор Х. и нажимает кнопку ОК. После чего рвет и мечет,

поскольку вместо файла День рождения он стер файл Пароль от сейфа.

Проблема появилась в самом начале, потому что он выбрал не тот файл.

Так с Виктором Х. было не всегда. Когда он только учился пользоваться

компьютером, каждое открывшееся диалоговое окно наполняло его сердце

ужасом. От этого ужаса он читал тексты на всех диалоговых окнах и

благодаря этому мог вовремя остановиться и не стереть нужный ему файл.



WWW.UIBOOK.RU | ВЛАД В. ГОЛОВАЧ | ДИЗАЙН ПИ: ЧЕЛОВЕЧЕСКИЕ ОШИБКИ

Что всё это значит - для опытных пользователей это диалоговое окно с

требованием подтверждения не работает. Во первых, оно не защищает

нужные файлы. Во вторых, оно без пользы отвлекает пользователя и тратит

его время.

В то же время некоторую пользу от этого метода получить можно. Для

этого только надо требовать подтверждения не после команды пользова

теля, а до неё.

Предположим, чтобы удалить файл, нужно сначала в контекстном меню

выбрать команду Разблокировать, после чего выбрать этот же файл и запус

тить процесс его удаления (неважно, с клавиатуры или из меню). В этом

случае от пользователя действительно требуется подтвердить удаление,

поскольку эти два действия напрямую не связаны друг с другом - если в

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

К сожалению, этот принцип применять довольно тяжело. Дело в том,

что ситуации, подобные описанной, встречаются довольно редко. Гораздо

чаще приходится защищать не отдельные объекты (файлы, окна и т.п.), но

отдельные фрагменты данных (например, текст и числа в полях ввода).

Проблема состоит в том, что понятного и удобного элемента управления

для этой цели нет. Единственным выходом служит скрытие потенциально

опасных данных от пользователя до тех пор, пока он сам не скомандует

системе их показать. Выход же этот отнюдь не идеальный, поскольку

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

мых, есть еще и невидимые данные.

Не делайте опасные для пользователя кнопки кнопками по умолчанию

Также к этому типу блокировки относится снятие фокуса ввода с терми

национных кнопок (см. "Структура окна" на стр. 93), чтобы пользователь

не мог, не разобравшись, нажать на Enter и тем самым начать потенциально

опасное действие. Действительно, если пользователям приходится прила

гать какие либо усилия, чтобы запустить действие, есть надежда, что во

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

проще всего в опасных случаях не делать главную кнопку кнопкой по умол

чанию1.

Проверка

действий

пользователя

перед

их принятием

Этот метод гораздо лучше блокировки, но он тоже не без недостатка: труд

но проверять команды. Я знаю только два универсальных и работающих

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

выбирает команду из списка, система может без труда делать так, чтобы в

этот список попадали только корректные команды (это вообще достоин

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

непосредственным манипулированием объектами, можно индицировать

возможные действия изменением поведения этих объектов. Например,

если бы форматирование диска запускалось не нажатием кнопки, а пере

несением пиктограммы диска в область форматирования, можно было бы

показывать пользователю, как с выбранного диска исчезают все файлы и

папки. При этом не только снизилась бы вероятность ошибочного форма

тирования диска, поскольку перенести объект в другую область труднее,

чем просто нажать на кнопку, но при этом исчезла бы необходимость пре

дупреждать пользователя о грядущей потере данных с помощью дурацкого

сообщения (подробнее об этом см. "Вон отсюда, идиот!" на стр. 40).

Проверкой всех действий пользователя перед их принятием можно

также успешно защищать вводимые пользователем данные, в особенности

данные численные. Дело в том, что большинство численных данных имеют

. Важно только не делать кнопку кнопкой по умолчанию и кнопку Отмена (как

часто случается). Если это сделать, пользователи будут ошибочно закрывать окно,

т. е. одна ошибка заменит другую.



WWW.UIBOOK.RU | ВЛАД В. ГОЛОВАЧ | ДИЗАЙН ПИ: ЧЕЛОВЕЧЕСКИЕ ОШИБКИ

некий диапазон возможных значений, так что даже в ситуациях, когда

невозможно проверить корректность данных, можно, по крайней мере,

убедиться, что они попадают в нужный диапазон1.

В большинстве ОС есть специальный элемент управления, именуемый

крутилкой (spinner, см. стр. 74). Фактически это обычное поле ввода,

снабженное двумя кнопками для модификации его содержимого (в сторону

уменьшения и увеличения). Интересен он тем, что пользователь может не

пользоваться клавиатурой для ввода нужного значения, взамен клавиатуры

установив нужное значение мышью. Этот элемент имеет то существенное

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

всегда находится в нужном диапазоне и обладает нужным форматом.

Всегда показывайте границы диапазона во всплывающей подсказке

Но что делать, если пользователь ввёл некорректное число с клави

атуры? Ответ прост. Надо индицировать возможную ошибку заменой цвета

фона этого элемента на розовый.

Рис. 3. Ползунок.

В тех же случаях, когда количество возможных значений невелико, луч

ше использовать другой элемент управления - ползунок (см. стр. 75). Мало

того, что он позволяет устанавливать только определенные значения

(с этим справился бы и раскрывающийся список или комплект переключа

телей), но он позволяет пользователю видеть взаимосвязь возможных

значений и при этом использование этого элемента понятно даже новичку.

Самостоятельный

выбор команд

И, наконец, самый эффективный способ. Системе, как никак, лучше знать,

какие именно команды или параметры для неё пригодны. Соответственно,

чем меньше действий требуется совершить пользователю, тем меньше

вероятность ошибки (при этом пользователь, которого избавили от

рутинной работы, уже радуется). Вопрос состоит в том, как системе узнать,

что именно нужно пользователю.

Проиллюстрировать сферу применения данного метода удобно на при

мере печати. MS Windows User Experience заставляет использовать только

один способ что либо напечатать. Существует две команды меню Файл, а

именно Печать и Параметры печати. Обе команды вызывают одноименные

диалоговые окна. Проблема заключается в том, что обилие элементов

управления замедляет2 восприятие этих окон и увеличивает вероятность

ошибки.

. Никто не мешает также не позволять пользователю вводить текст в поля ввода,

предназначенные для чисел и обратно.

. Т. н. закон Хика: среднее время выбора равновероятных возможностей есть

логарифм количества этих возможностей.



WWW.UIBOOK.RU | ВЛАД В. ГОЛОВАЧ | ДИЗАЙН ПИ: ЧЕЛОВЕЧЕСКИЕ ОШИБКИ

Рис. 4. Диалоговое окно печати в MS Word. Microsoft.

Разберём это подробнее. Итак, чем меньше элементов управления, тем

меньше вероятность ошибки. Система может уменьшить число элементов,

если она знает сама, какими именно параметрами она должна руковод

ствоваться.

Главной причиной появления этих диалоговых окон является печать

нескольких копий. Причем есть простая зависимость - "количество копий

обратно пропорционально частоте печати такого количества", т. е. сто

копий печатают примерно в сто раз реже, чем печатают одну копию. Стан

дартное диалоговое окно печати содержит также область выбора принтера

из числа установленных в системе. Большинство же пользователей имеет

только один принтер. Так зачем заставлять это большинство каждый раз

вдумчиво воспринимать совершенно не нужные им элементы интерфейса?

И так далее.

Интересно, что всё это прекрасно понимают в Microsoft. В каждой

включенной в комплект MS Office программе на панели инструментов есть

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

щими настройками. Это, впрочем, тоже нехорошо. Во первых, кнопка

называется Печать, каковое название конфликтует с такой же командой в

меню (называть кнопку Печать одного экземпляра с текущими настройками

неприлично). Сама же по себе идея иметь в программе две кнопки с одина

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

программа должна иметь меню, содержащее полную функциональность, и

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

получается, что в панели инструментов есть команда, которую нельзя

вызвать никаким иным способом.

А теперь представьте себе другой вариант. В меню есть те же две

команды - Печать и Параметры печати. Выбор первой команды вызывает

немедленную печать документа с текущими настройками. Выбор второй

вызывает диалог со всеми доступными параметрами печати, т. е. в системе

с одним принтером никогда не появится ненужная группа элементов.

Если же пользователь начинает проявлять буйную активность и печатать

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

пользователь меняет число копий в окне настроек печати, программа

запоминает его действие и при следующем выборе команды Печать выводит

диалоговое окно со всего двумя элементами управления - полем ввода, в

котором уже стоит число копий (которое было запомнено в предыдущий



WWW.UIBOOK.RU | ВЛАД В. ГОЛОВАЧ | ДИЗАЙН ПИ: ЧЕЛОВЕЧЕСКИЕ ОШИБКИ

раз) и кнопкой ОК. Поскольку программа не может быть уверена в пра

вильности числа копий, цифру лучше всего выводить нестандартным

цветом, чтобы привлечь внимание пользователя.

И так до тех пор, пока пользователь два раза подряд не введет единицу в

поле ввода (что переводит его в разряд представителей большинства) или

не введет новое число копий (каковое и будет запомнено). Причём такая ме

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

числу копий. Таким образом, большинство пользователей становится

счастливо, а количество ошибок сокращается, что хорошо.

Суммируя, можно сказать, что система сама может узнать большинство

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

никами этих сведений являются:

здравый смысл разработчика системы

предыдущие установленные параметры

наиболее часто устанавливаемые параметры.

С другой стороны, применяя этот метод, надо всегда помнить о том, что

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

по программе, оберегая его от всего, что может его испугать, но в том,

чтобы сделать пользователя более счастливым. Счастье же достигается

вовсе не в покое, но в борьбе с невзгодами. Многим людям будет комфорта

бельней работать со сложной системой, нежели со слишком упрощенной.

Единственная проблема этого метода заключается в том, что для его

использования к проектированию системы нужно подходить значительно

более творчески и тщательно, нежели обычно практикуется.

Два уровня

ошибок

и обратная связь

Помимо классификации человеческих ошибок, приведенной в начале

главы, существует ещё одна классификация. В этой классификации ошибки

расставлены по уровням их негативного эффекта:

Каждый хороший программист, умеющий мыслить системно, знает, что

ошибок из четвертого пункта нужно всеми силами избегать, не считаясь с

потерями, поскольку каждая такая ошибка обходится гораздо дороже, чем

любая ошибка из пункта третьего. Но не каждый хороший дизайнер интер

фейса, умеющий мыслить системно, знает, что ошибок из второго пункта

нужно всеми силами избегать, поскольку каждая такая ошибка обходится

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

просто: дизайн интерфейса гораздо моложе программирования.

С ошибками из четвертого пункта всё ясно. Всякий раз, когда мы теряем

возможность, по крайней мере, проверить валидность данных или самой

системы, мы вступаем на слишком уж скользкий путь. Межпланетные

зонды, из за ошибок в ПО улетающие не туда, коммерческие договоры,

в которых обнаруживаются ошибки, ошибочные номера телефонов в

записной книжке - всё это примеры неисправляемых ошибок. Разумеется,

такие ошибки всегда обнаруживаются, проблема в том, что к моменту их

1. Ошибки, исправляемые во вре

мя совершения действия, напри

мер пользователь перетаскивает

файл в корзину и во время перетас

кивания замечает, что он пытается

стереть не тот файл.

3. Ошибки, которые исправить мож

но, но с трудом, например реальное

стирание файла, при котором

никаких его копий не остается.

2. Ошибки, исправляемые после

выполнения действия, например,

после ошибочного уничтожения

файла его копия переносится из

корзины.

4. Ошибки, которые на практике

невозможно исправить, т. е. ошибки,

которые невозможно обнаружить

формальной проверкой (т. е. невоз

можно обнаружить их не случайно).

Пример: смысловая ошибка в тексте,

удовлетворяющая правилам языка.



WWW.UIBOOK.RU | ВЛАД В. ГОЛОВАЧ | ДИЗАЙН ПИ: ЧЕЛОВЕЧЕСКИЕ ОШИБКИ

обнаружения становится поздно их исправлять. Именно поэтому такие

ошибки гораздо хуже ошибок, которые исправить трудно, но которые, по

крайней мере, сразу видны. Единственной индустрией, научившейся

извлекать пользу от необнаруженных ошибок, является производство

почтовых марок - марки с опечатками стоят у филателистов многократно

дороже марок без оных.

Это было знание программистов. Теперь пора перейти к интерфейсу и

определить, почему ошибки первого типа ("исправляемые во время")

гораздо лучше ошибок второго типа ("исправляемых после").

Вообще говоря, объяснение этого факта двояко. Объяснение есть как

субъективное, так и объективное, при этом сказать, какое сильнее, затруд

нительно. При этом объяснения еще и складываются. Но, по порядку.

Объективное объяснение просто: ошибки, исправляемые после, снижа

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

любое действие пользователя состоит из семи шагов (см. "Длительность

интеллектуальной работы" на стр. 5). Всякий раз, когда пользователь

обнаруживает, что он совершает ошибку, ему приходится возвращаться

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

ошибку, от пользователя требуется:

понять, что ошибка совершена

понять, как её исправить

потратить время на исправление ошибки.

В результате значительный процент времени уходит не на действие (т. е.

на продуктивную работу), а на исправление ошибок.

Субъективное объяснение ещё проще: ошибки, исправляемые после,

воспринимаются пользователем как ошибки. Ошибки же, исправляемые во

время, как ошибки не воспринимаются, просто потому, что для пользо

вателей это не ошибки вообще: все человеческие действия до конца не

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

и так не получилось, а вот так получилось). Ошибка же, не воспринимаемая

как таковая, пользователей не раздражает, что весьма положительно

действует на их субъективное удовлетворение от системы.

Наличие человеческих ошибок, которые нельзя обнаружить и исправить

до окончательного совершения действия, всегда свидетельствует

о недостаточно хорошем дизайне

Теперь пора сказать, как избавиться от ошибок, исправляемых после.

Понятно, что исправить что либо "во время" можно только тогда, когда во

время совершения действия видно, что происходит и как это действие

повлияет на изменяемый объект. Соответственно, чтобы дать пользова

телям исправлять их действия на ходу, этим пользователям надо дать

обратную связь.


К сожалению, это простое соображение имеет существенный недоста

ток: вводить в систему обратную связь получается не всегда. Дело в том, что

её ненавидят программисты. Мотивируют они своё отношение тем, что она

плохо влияет на производительность системы. Обычно они врут. На самом

деле им просто лень её реализовывать. Иногда, впрочем, соображения о

производительности системы и вправду имеют место. Так что если вы

чувствуете, что программисты правы, когда кричат о том, что система

"будет безбожно тормозить", вспомните, что производительность связки

"система пользователь" всегда важнее производительности системы

просто. Если же и это не помогает, попробуйте спроектировать обратную

связь иначе, более скромно. Иногда так получается даже лучше. Например,

с помощью ползунков на линейке в MS Word можно менять абзацные

отступы, при этом обратная связь есть, но не полная: вместо перманент

ного переформатирования документа по экрану двигается полоска,

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

экране особенно не перерисовывается, что хорошо, поскольку такое

"дрыганье" раздражает.



WWW.UIBOOK.RU | ВЛАД В. ГОЛОВАЧ | ДИЗАЙН ПИ: ОБУЧЕНИЕ РАБОТЕ С СИСТЕМОЙ

Обучение работе с системой

В традиционной науке о человеко машинном взаимодействии роль обуче

ния операторов чрезвычайно велика. Мало того, что в дополнение к самой

системе разрабатывается методология обучения её будущих пользователей,

так еще и создаются нормативы на пользователей, и если человек будет

сочтен неподходящим, к системе его просто не допустят. Напротив, с ПО и

сайтами ситуация принципиально иная: как цель ставится возможность

работы с системой для любого человека, независимо от его свойств и

навыков, при этом целенаправленное обучение пользователей, как прави

ло, не производится.

Всё это делает проблему обучения пользователей работе с компьютерной

системой чрезвычайно важной. Начиная с определенного объема функцио

нальности системы, количество пользователей, знающих всю функциональ

ность, неуклонно снижается. Чем объемней система, тем больше шансов на

то, что среднестатистический пользователь знает о ней очень немного

(относительно общего объема функциональности). Так, я уверен, что на

свете нет ни единого человека, который бы полностью знал MS Word,

предполагаю, что средний пользователь умеет пользоваться не более чем

пятью процентами его возможностей.

Плохо это по многим причинам: во первых, пользователи работают с

системой не слишком эффективно, поскольку вместо методов адекватных

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

что пользователи, не зная, что имеющийся продукт делает то, что им

нужно, ищут (и находят) продукт конкурента. В третьих, при таком положе

нии вещей затруднительно продавать новые версии продукта: если пользо

ватель не умеет пользоваться и тем, что есть, убеждать его совершить

покупку ради новой функциональности придется на довольно шатком

фундаменте.

Почему

пользователи

учатся

Есть непреложный закон природы: люди делают что либо только при нали

чии стимула, при этом тяжесть действия пропорциональна силе стимула.

Популярно говоря, пользователя можно научить становиться на задние

лапки за кусочек сахара (который есть стимул), но научить его перетас

кивать тяжеленные камни за тот же кусочек сахара нельзя, потому что

награда не стоит усилий.

Применительно к компьютерным системам этот закон действует без

каких либо исключений. Обучение есть действие: если обучаться легко,

пользователям будет достаточно слабого стимула, если тяжело, стимул

придется увеличивать. Но если стимул для пилота самолета получают

преимущественно командными методами (если он не научится определен

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

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

значит, что пользователь обучится пользоваться программой или сайтом

только в том случае, если он будет уверен, что это сделает его жизнь легче и

приятней. На профессиональном жаргоне это называется возвращением

инвестиций (return of investments, ROI): ни один инвестор не вложит

деньги (действие) без уверенности, что эти деньги принесут ему доход



WWW.UIBOOK.RU | ВЛАД В. ГОЛОВАЧ | ДИЗАЙН ПИ: ОБУЧЕНИЕ РАБОТЕ С СИСТЕМОЙ

(стимул), если же полной уверенности в этом нет, ожидаемая прибыль

должна быть огромна. Это правило в полной мере касается и пользо

вателей.

Есть ещё одно правило: пользователь будет учиться какой либо функции,

только если он знает о её существовании, поскольку, не обладая этим

знанием, он не способен узнать, что за её использование жизнь даст ему

награду. Т. е. одного стимула недостаточно, если пользователь не знает, за

что этот стимул дается.

Рассчитывайте на средних пользователей, а не новичков или на

профессионалов: средних пользователей, как никак, абсолютное

большинство

Таким образом, чтобы пользователь начал учиться, ему нужно рассказать

о функциональности системы, причем не только безучастно сообщать о

наличии той или иной функции, но и расхваливать кусочки сахара, которые

пользователь получит, этой функции обучившись. А дальше пользователь

сам будет учиться, если, конечно, стимул достаточен.

Без этого любая система не вызовет никакого желания учиться, даже

если это обучение принесло бы пользователю множество пользы. Простота

же обучения системе есть всего лишь метод уменьшить "необходимый и

достаточный" стимул; при достаточно сильном стимуле люди охотно учатся

и без всякой простоты (другой разговор, что получение достаточно весо

мого стимула часто более сложно для дизайнера, чем облегчение обучения).

Средства обучения

Обычно считается, что в случае ПО есть два способа повысить эффек

тивность обучения (помимо метода "обучения плаванию посредством

выбрасывания из лодки"), а именно бумажная документация и "опера

тивная справка". Это категорически неправильно. Во первых, способов

много, и самые главные способы в эту систему не попали. Во вторых, одно

из понятий, входящих в эту таксономию, просто некорректно: оператив

ность справки зачастую бывает отрицательной (т. е. поиск в ней занимает

больше времени, чем поиск того же в бумажной документации). Поэтому

разумно привести более совершенный список средств обучения:

общая "понятность" системы

обучающие материалы.

А теперь можно разобрать эти составляющие по отдельности.



WWW.UIBOOK.RU | ВЛАД В. ГОЛОВАЧ | ДИЗАЙН ПИ: ОБУЧЕНИЕ РАБОТЕ С СИСТЕМОЙ

Понятность

системы

Термин "понятность", будучи крайне приятным и во многих случаях

удобным, на самом деле нехорош, поскольку очень уж размыт1. Однако кое

что выделить можно, а именно ментальную модель, метафору, аффорданс и

стандарт (да и то окажется, что они сильно смыкаются). Обратите

внимание, что хотя в этой главе говорится о понятности, изложенные

свойства, будучи хорошо реализованы, также существенно снижают

количество человеческих ошибок.

Ментальная модель

Зачастую, или, точнее, почти всегда, чтобы успешно пользоваться какой

либо системой, человеку необходимо однозначно понимать, как система

работает. При этом необязательно точно понимать сущность происхо

дящих в системе процессов, более того, необязательно понимать их

правильно. Это понимание сущности системы называется ментальной

моделью. Разберем её на примере утюга.

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

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

человек может пользоваться утюгом, не зная, сколько энергии утюг

потребляет (отсутствие точности), равно как сохраняя искреннюю

уверенность, что по проводам, как вода, течёт электричество (отсутствие

правильности). Беда приходит тогда, когда представления человека о

системе концептуально не совпадают с реальным устройством системы.

Так, например, человек, привезенный на машине времени из прошлого и

никогда не встречавшийся с электричеством, поставит утюг на плиту2,

отчего прибор непременно сгорит.

Другой пример, на этот раз из предметной области: файловая система.

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

трудно объяснить пользу от записи файла после его редактирования. Дел

Список сторінок

Поділитися у соцмережах

☏ Замовлення реклами: +3805044-68-872

© Асоціація електронних бібліотек України

☝ Усі матеріали сайту (зокрема статті, зображення, рекламні оголошення тощо) призначені лише для попереднього ознайомлення. Усі права на публікації, представлені на сайті, належать їхнім законним власникам. Просимо Вас не зберігати копії інформації.