Показаны сообщения с ярлыком ТРИЗ в программировании. Показать все сообщения
Показаны сообщения с ярлыком ТРИЗ в программировании. Показать все сообщения

воскресенье, 19 мая 2024 г.

Карточка №994 «Электронный плен»

ИСТОЧНИК:
*Виктор Кротов, «Сны… про электронный плен», рассказ

СИТУАЦИЯ:
Сюжет фантастической зарисовки таков: герой рассказа завершает работу по созданию искусственного интеллекта. Почти готова модель внутреннего мира человека, в которую включены практически все потоки его чувств и повседневных ощущений. Главной продукцией модели должна стать искусственная мысль, которую будет невозможно отличить от естественной.

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

«…Я вскочил, потрясенный. Боже мой, да есть ли вообще способ распознать природу собственного сознания? Ведь какой бы аргумент я ни придумал, он точно так же может оказаться результатом действия специального блока, созданного достаточно квалифицированным программистом!.. Есть ли выход из этой ловушки, кроме сумасшествия (означающего в свою очередь всего лишь сбой программы)? Даже если все это сон, если я ущипну себя и проснусь, что мне делать наяву с этой навязчивой идеей?»

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

СИСТЕМНОЕ ПРОТИВОРЕЧИЕ:
Признак, указывающий на искусственный характер сознания, должен быть, чтобы отличить его от естественного сознания, и такого признака быть не должно, чтобы искусственное сознание воспринималось как реальное.

РЕШЕНИЕ:
«И тут я вспомнил... Я выключил компьютер, сбросил средневековый халат, накрыл им клавиатуру, снова сел в кресло и закрыл глаза. Были в моей жизни мгновения, которые невозможно закодировать. И в них, прежде всего в них, таилась расшифровка всех остальных иероглифов сознания... Теперь я готов был проснуться». 

ИСПОЛЬЗОВАННЫЙ ПРИЕМ:
*Мобилизация ресурсов

КОММЕНТАРИЙ:
Автор рассказа не дает однозначного и прямого ответа на поставленный им же вопрос. Здесь есть о чем подумать. А задача эта далеко не праздная – над ней ломают голову создатели систем искусственного интеллекта и виртуальных реальностей.

КАТЕГОРИЯ:
Задача на обнаружение
Развитие творческого воображения




воскресенье, 2 января 2022 г.

Карточка №869 «Непослушный курсор»

ИСТОЧНИК:
*Личная картотека автора блога
 
СИТУАЦИЯ:
Microsoft Word 2003 до сих пор остается востребованным среди пользователей. Связано это с тем, что именно эта версия идеально работает даже на самых слабых устройствах, но при этом обладает удобным интерфейсом и широкими возможностями. Word 2003 позволяет работать с форматами *.doc, *.dot, *.xml, *.rtf и *.xps. Эти форматы полностью поддерживаются и новыми версиями Word.
 
Однако время от времени по неясным причинам возникает неприятная вещь: курсор становится по размеру гораздо меньше обычного. Иной раз его просто не видно. Как быть? Увеличивать размер шрифта?..
 
СИСТЕМНОЕ ПРОТИВОРЕЧИЕ:
Размер шрифта должен быть увеличен, чтобы курсор стал хорошо видимым, и размер шрифта не должен быть увеличен, потому что работать с таким шрифтом неудобно.
 
РЕШЕНИЕ:
Опытные пользователи предлагают в такой ситуации увеличить масштаб документа до 500%, а потом сразу же вернуть его к 100%. После этого курсор обретает нормальный размер.
 
ИСПОЛЬЗОВАННЫЙ ПРИЕМ:
*Принцип «наоборот»:
а) вместо действия, диктуемого условиями задачи, осуществить обратное действие (увеличить не размер шрифта, а масштаб документа)
 
КОММЕНТАРИЙ:
Проверено – метод работает. А вот как и почему работает – это вопрос к разработчикам программного обеспечения.
 
КАТЕГОРИЯ:
ТРИЗ в программировании



воскресенье, 3 января 2021 г.

Карточка №816 «Программный код»

ИСТОЧНИК:
*Личная картотека автора блога

СИТУАЦИЯ:
Самый ценный ресурс разработчика компьютерных программ – время. Технология создания программы выстраивается таким образом, чтобы при необходимости можно было быстро и без труда разобраться в особенностях программного кода и внести в него изменения. При этом программисты исходят из здравого смысла. Например, принято, чтобы каждая строка содержала не более одной команды или управляющей конструкции (кроме тесно связанных по смыслу команд). А можно ли предложить способ для быстрого визуального различения команд, выполняемых в программе одна за другой?

СИСТЕМНОЕ ПРОТИВОРЕЧИЕ:
Знак, позволяющий отличить команды, должен быть, чтобы разнопорядковые части программы выделялись в тексте, и такого знака быть не должно, чтобы сохранить простоту написания кода.

РЕШЕНИЕ:
Внутренний код управляющей конструкции опытные программисты пишут с добавлением нескольких пробелов в начале строки. Если в одну конструкцию вкладывается другая, этот отступ удваивается. В результате все команды одного уровня, выполняемые одна за другой, идут с одинаковым отступом; их первые символы находятся один под другим:

for i:1 to n do begin
        read(a);
        if a=0 then begin
                inc(m);
                b[m]:=a;
        end;
for i:1 to m do
                write (b[i]);

Такое простейшее графическое решение (структурированное программирование «лесенкой») учитывает особенности зрительного восприятия.

ИСПОЛЬЗОВАННЫЙ ПРИЕМ:
*Принцип вынесения:
а) отделить от объекта «мешающую» часть («мешающее» свойство) или, наоборот, выделить единственно нужную часть (нужное свойство)
*Принцип местного качества:
а) перейти от однородной структуры объекта (или внешней среды, внешнего воздействия) к неоднородной
в) каждая часть объекта должна находиться в условиях, наиболее соответствующих ее работе

КОММЕНТАРИЙ:
Рекомендуемый размер отступа – 8 знаков. Если при таком отступе текст начинает вылезать за правую границу окна редактора, то у вас велика так называемая «вложенность» блоков (оптимальное их число – не более трех). В таком случае следует тщательнее продумать алгоритм и структуру программы.

КАТЕГОРИЯ:
ТРИЗ в программировании


четверг, 3 марта 2011 г.

Карточка №244 «Тайное имя файла»

ИСТОЧНИК:
Очков В.Ф., Пухначев Ю.В. 128 советов начинающему программисту. – М., 1991.

СИТУАЦИЯ:
Требуется защитить файл от несанкционированного считывания или изменения. Допустим, что использовать сложные программные методы нельзя – решение должно быть легко осуществимым и простым. Как быть?

СИСТЕМНОЕ ПРОТИВОРЕЧИЕ:
Особый код доступа к файлу должен быть, чтобы защитить файл от несанкционированного изменения, и его быть не должно, чтобы не усложнять систему.

РЕШЕНИЕ:
«…Записать на диск файл так, чтобы никто другой, кроме тебя, не смог считать его или без твоего согласия что-то в нем изменить, можно, дав ему секретное имя, например «ОOОOОOОO». Секрет здесь в том, что часть букв О в имени файла – латинские, а часть – русские, и об этом знаешь только ты.

Мы специально в секретном имени использовали буквы О, а не другие, имеющие сходное написание и в латинском, и в русском алфавите. Дело в том, что буквы A, B, C, E, H, K, P и другие ЭВМ часто выписывает на экране дисплея или на бумаге принтера несколько по-разному в различных алфавитах. Глаз опытного программиста эту разницу всегда уловит…»

ИСПОЛЬЗОВАННЫЙ ПРИЕМ:
Принцип вынесения (отделить от объекта «мешающую» часть или свойство или, наоборот, выделить единственно нужную часть (свойство))

КОММЕНТАРИЙ:
«…Как это всегда бывает в жизни, появление мер тут же вызывает появление контрмер – есть специальные программы-отмычки, позволяющие открыть закрытый файл. Всем известно, что замки предназначены для честных людей. Жуликам они не помеха. Честный человек подойдет к незнакомой двери, подергает ее и отойдет. Такую манеру поведения следует перенести и на работу с компьютером…»

КАТЕГОРИЯ:
ТРИЗ в программировании


воскресенье, 23 января 2011 г.

Карточка №205 «Как посчитать амперы?»

ИСТОЧНИК:

СИТУАЦИЯ:
«Возникла тут одна программистская задача, вкратце выглядит так. Есть 16-разрядное микропроцессорное устройство без плавающей арифметики. Есть необходимость масштабирования сигналов. То есть измеренное (в дискретах) 16-разрядное целое надо умножить на масштабный коэффициент (конечно, вещественный в общем случае), чтобы получить значение в нужном диапазоне и в нужных величинах (скажем, в амперах).

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

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

Результат обескураживает - на дисплее отображается полный бред. Проверяем, откуда руки у испытателей растут и как они задали исходные параметры. Убеждаемся, что задали неправильно. Задаем правильно и снова получаем бред… При отладке обнаруживается, что делитель d был равен 500, но после того, как его вместе с множителем m поделили на 1000, чтобы избежать переполнения, вместо одной проблемы имеем другую - в знаменателе получился ноль!..

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

Как быть?

СИСТЕМНОЕ ПРОТИВОРЕЧИЕ:
Сигнал должен быть выражен в абсолютных величинах и не должен быть выражен в абсолютных величинах (должен быть выражен в величинах относительных)

РЕШЕНИЕ:
«Тут один товарищ (назовем его "представителем заказчика", хотя это не то, что подразумевалось в советское время; просто подчеркнем, что к процессу программирования устройства в этой его части он имеет весьма косвенное отношение) говорит - а у нас там что? Амперы? И в 1000 раз меньше показывает? Ну так давайте напишем, что это КИЛОамперы, и все будет как надо!..»

ИСПОЛЬЗОВАННЫЙ ПРИЕМ:
Прием «обратить вред в пользу»

КОММЕНТАРИЙ:
«Я обрадовался, он обрадовался, а начальник почесал репу и сказал, что не верит в такие простые решения... Не бывает так, чтобы приходили с глобально фатальной проблемой, а уходили с тем, что и делать ничего не надо вовсе! Тут я сразу про ТРИЗ и вспомнил. ИКР это называется, то бишь Идеальный Конечный Результат. Совершенно классический пример - и делать ничего не надо, и проблема решена!»

КАТЕГОРИЯ:
ТРИЗ в программировании


среда, 8 декабря 2010 г.

Карточка №173 «Русское сафари на FOREX: геометрическое прогрессорство»

ИСТОЧНИК:
Марков С., «Русское сафари на FOREX: облава на маленьких зеленых человечков»

СИТУАЦИЯ:
Рассмотрим ситуацию, возникающую при торговле на валютном рынке FOREX. В ходе успешной торговли (что, к глубокому сожалению сообщества трейдеров, случается не так часто, как хотелось бы) депозит, то есть средства на торговом счете, увеличивается. Идеально было бы по мере увеличения средств тут же выставлять на торги большую сумму (увеличить размер лота), что повышает норму прибыли. Делать это вручную – трудоемкая и времязатратная вспомогательная операция.

Другая вероятная, хоть и нежеланная ситуация: при не слишком успешной торговле или же при выводе части средств с депозита необходимо, наоборот, пропорционально уменьшить лот, т.е. сумму, выводимую на торги. Эту операцию также желательно было бы автоматизировать, исключив «ручные» подсчеты и управление размером лота. Возможно ли реализовать указанные операции виде программы?

ИДЕАЛЬНЫЙ КОНЕЧНЫЙ РЕЗУЛЬТАТ:
Программа САМА подстраивается под изменение торгового баланса.

СИСТЕМНОЕ ПРОТИВОРЕЧИЕ:
Депозит должен сам управлять размером лота… и не должен сам управлять.

РЕШЕНИЕ:        
Ниже приведен фрагмент программного кода, позволяющий автоматически и гибко управлять размером лота (частью депозита, выводимой на торги).

………………………………………………………….
Lots=MathFloor (AccountEquity()*XL/BALANCE_INIT)/10;

/*Размер лота выполнен динамичным, гибко меняющимся соответственно изменению капитала. */
………………………………………………………..

где
Lots – размер контракта в базовой валюте инструмента (для примера: минимально допустимый размер лота  Lots = 0.1)

AccountEquitydouble AccountEquity( )
Возвращает сумму собственных средств для текущего счета. Расчет equity зависит от настроек торгового сервера.

BALANCE_INIT – размер начального депозита; для примера: 10000 «убитых енотов» ( у.е., валюта депозита :))

MathFloor double MathFloor (double x)
Функция возвращает числовое значение, представляющее наибольшее целое число, которое меньше или равно x. (В совокупности с операцией деления на 10 используется для округления данных с точностью до одного знака после запятой).

XL - коэффициент экспоненциальности, эмпирически выведенный параметр (для примера: XL = 0.87)
…………….

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

Реализованный в программе-советнике для автоматической торговли, данный алгоритм позволяет без непосредственного участия пользователя-трейдера управлять параметрами торговых операций и нормой прибыли в виде, приблизительно описываемом геометрической прогрессией (всё зависит от размера коэффициента XL, позволяющего управлять «экспоненциальным ростом» прибыли).

ИСПОЛЬЗОВАНЫЙ ПРИЕМ:
Закон повышения идеальности системы
Закон динамизации систем
Функционально-идеальное моделирование (свертывание)
Прием «посредник»

КОММЕНТАРИЙ:
Для тех, кто пока не имеет представления о валютном трейдинге, торговой платформе MetaTrader  и об MQL-программировании, данный пример будет совершенно не интересен. Привожу его лишь в качестве одной из немногих известных мне иллюстраций применения элементов ТРИЗ в таких «невещественных», «нежелезных» технических областях как программирование.

Некоторые интересные соображения о возможностях применения ТРИЗ в программировании заинтересованный читатель сможет найти в книге: 
Уразаев В. ТРИЗ в электронике. – М.:ТЕХНОСФЕРА, 2006. – С.221-224

КАТЕГОРИЯ:
ТРИЗ в программировании

четверг, 2 сентября 2010 г.

Карточка №2 «Наш ответ "ботанику"»

ИСТОЧНИК:
Личная картотека автора блога
Очков В.Ф., Пухначев Ю.В. 128 советов начинающему программисту. – М., 1991.

СИТУАЦИЯ:
Общеизвестный факт: в операционной системе Windows нельзя создать папку или файл с именем CON (или con, Con). Существует легенда, будто Билл Гейтс в юные годы имел прозвище «con», что примерно соответствует нашему «ботаник» на современном молодежном сленге. И якобы компьютерный гуру, обиженный таким неуважением к своей персоне, технически исключил саму возможность напоминания об этом компрометирующем его факте из своей биографии.

Впрочем, это не более чем легенда. Специалисты знают, что имя CON относится к так называемым «зарезервированым DOS-овским именам» и к Гейтсу ни малейшего отношения не имеет. И все-таки, давайте поставим «шутейную», учебно-тренировочную задачу. Как обойти запрет и создать папку или файл с именем CON, утерев нос Биллу Гейтсу? Ну, хотя бы для того, чтобы показать: «У советских собственная гордость, на буржуев смотрим свысока!» Дополнительные ограничения: нельзя использовать сложные программные методы; время на выполнение задачи – 1 минута.

СИСТЕМНОЕ ПРОТИВОРЕЧИЕ:
Файл с именем con должен быть, чтобы показать Гейтсу «козью морду», и файла с таким именем быть не должно, поскольку операционная система этого не позволяет.

РЕШЕНИЕ:
Не будем лишать Читателя возможности попробовать самостоятельно решить эту задачку. Чтобы продемонстрировать, что такое решение возможно, автор специально создал пустую папку с именем CON, заархивировал её и выложил на «Яндекс.Народ»; скачать или просто взглянуть можно вот здесь: CОN.rar. Вопрос: как это стало возможным?

ИСПОЛЬЗОВАННЫЙ ПРИЕМ:

КОММЕНТАРИЙ:
Практического интереса решение нашей шуточной задачи вроде бы и не представляет. Однако использованный прием можно с успехом применить в системах защиты информации от несанкционированного доступа.

КАТЕГОРИЯ:
ТРИЗ в программировании