Archive for Апрель, 2010

Бессмертие и госпрограммы на примере космонавтики

Понедельник, Апрель 12th, 2010

Достижение биологического бессмертия – гигантский по требуемым ресурсам проект. Его можно сравнить разве что с космическим проектом. История показывает, что все подобные по масштабам проекты – космический, освоения ядерной энергии, создания Интернет – создавались исключительно государствами. Даже в США. Затраты на подобные проекты не может потянуть ни одна транснациональная корпорация. Долгосрочность таких проектов делает частные инвестиции практически невозможными. Ни один банк не даст кредит на такой сомнительный по срокам и достижимости проект, как «бессмертие». Максимум, что могут частники – это участие в рамках подпроектов, которые могут дать более скромную, но более быстро достижимую цель с ясными перспективами коммерциализации – например, улучшить массовые микропроцессоры. Те частные организации, которые будут выделять значительные средства на сверхдолгосрочные теоретические исследования, на ближних и средних дистанциях вероятнее проиграют конкурентам – так как конкуренты смогут больше инвестировать в конкурентную борьбу.

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

Компьютер будущего

Суббота, Апрель 10th, 2010

Идея: перенести отдельные вычислительные ядра в планки памяти. Далее такие комбинированные планки будут называться просто «планки».
Обоснование возможности: современные серверные микросхемы памяти достигают объема в 32 Гб. Такой большой объем часто нелишне обслуживать как минимум отдельным вычислительным ядром.
Преимущества:
1) Повышение процента выхода годных чипов. С увеличением размеров и количества ядер (до сотен и выше) все сложнее становится получать работающие монолитные процессоры. Распределение вычислительных ядер по различным планкам памяти устраняет необходимость в производстве больших монолитных процессоров.
2) Повышение скорости доступа локального вычислительного ядра к памяти. Современные многопроцессорные и многоядерные системы итак в большинстве своем с NUMA (с неравномерной скоростью доступа к памяти различных процессоров), поэтому тут принципиальных изменений нету. Скорость повышает физическая близость процессора и памяти. Упрощается локальный контроллер памяти – кроме того, что данные нужно передавать на меньшее расстояние, заранее известно, на какой частоте и с каким объемом памяти он будет работать, известен и сам процессор. Процессор, контроллер памяти и саму память можно сбалансировать и подогнать друг к другу для получения максимальной производительности.
3) Колоссальная масштабируемость – от одной вычислительной планки в бюджетных серверах до сотен в высокопроизводительных. Идеальное решение для облачных вычислений, поисковых систем и любых других алгоритмов наподобие MapReduce, например, моделирование человеческих нейросетей.
4) Снижение энергопотребления. Физическая близость процессора и памяти снижают энергопотери при передаче данных. Простаивающие планки можно отключать. Можно отключать и лишь частично – одну только память или один лишь процессор. Более равномерное выделение тепла – вычислительные ядра не концентрируются в одном месте, площадь рассеивания распределяется по хорошо вентилируемым планкам.
5) Легкость расширения ассортимента. Имея небольшое количество микропроцессоров с различной производительностью (можно даже всего один микропроцессор), комбинировать их с различными объемами памяти на одной планке. Можно повышать и количество вычислительных ядер на отдельной планке. По сути, покупателю нужно выбрать лишь два параметра: соотношение производительности к объему памяти и один из параметров – производительность или объем памяти. Типичные соотношения сравнительно стандартны – например, веб-сервер или научные высокопроизводительные вычисления. Это хорошо видно на примере видеокарт, где выбор объема памяти ограничивается обычно двумя вариантами в пределах одного поколения устройств, да и на обычных компьютерах тоже.
6) Простота оптимизации производительности аппаратно-программных комплексов: зная для некоторой программы оптимальное соотношение производительности к объему памяти, в дальнейшем можно покупать оборудование с аналогичным соотношением. Легкость апгрейда – достаточно добавить новые или заменить старые планки на более производительные – возможно, даже частичная замена в пределах той же системы.
7) Повышение общей производительности. Главная шина, которая ранее связывала память с процессором, освобождается от многих локальных пересылок, и может более эффективно обслуживать обмен данными между различными блоками памяти.
8) Возможность создания гетерогенных систем: различные планки могут иметь различное соотношение производительности к объему памяти и различные объемы. Это может лучше согласовываться с задачами. Например, недаром существуют комбинированные компьютеры для научных вычислений, где активно используются и видеокарты, и обычные процессоры.
9) Легкость создания специализированных суперкомпьютеров. Дело остается за разработкой специализированной топологии связей между процессорными элементами и написанием специализированного ПО.
На мысли навело: http://ko.com.ua/node/48869 http://ko.com.ua/node/48914

Обновление: не мытьем, так катаньем: серверные системы на Intel Atom с 2 Гб ОП на каждый процессор можно рассматривать как аналог описанной системы, только со слабой степенью интеграции.

Оптимизация проверки активации по bool

Среда, Апрель 7th, 2010

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

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

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

Новый сценарий Мировой Войны

Вторник, Апрель 6th, 2010

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

И вот, в один черный день, парни из одного села в заброшенной провинции подрались с парнями из другого села. Они были далеко от центра, и не были в курсе современной политической обстановки. Власти вызвали силы правопорядка для срочного прекращения конфликта, который мог запросто перерости в обвинения в геноциде внутреннего населения. Спутники наблюдения многих государств засекли наращивание военных сил без видимой причины. Так началась БББ – Большая Брутальная Бойня. Через пол часа уже взрывались первые ядерные боезаряды. Сразу четыре страны взорвали ядерные бомбы на своей территории ради получения обоснованного права на вступление в войну. Возникли предпосылки к образованию первого альянса – объединения обиженных стран, попавших под удар неведомой силы. Несколько других стран узнали о возможном альянсе, и срочно стали торговаться о вступлении. Одна такая страна взорвала на своей территории сразу два боезаряда, так как надо было учитывать запоздание в два часа от передовых пострадавших стран. Ведь нужны были весомые доказательства своей искренности. Но у большинства других стран ядерного оружия не было. Выкручивались, кто как мог. В одной стране взорвали плотину гидроэлектростанции. В другой – устроили аварию на атомной электростанции с радиационным заражением местности. Но не все были такими прозорливыми. Многие страны с недостаточной разведкой и наивными правительствами решили, что те страны действительно кто-то атакует. Они забоялись аналогичных атак на свои территории и начали проводить мобилизацию, перевод на военное положение, введение комендантского часа и т. п. Этим они лишь ухудшили свое положение. Страны, пострадавшие первыми, обвинили во всем эти непострадавшие страны, начавшие проводить мобилизацию. Ярость населения в пострадавших странах была неописуема. Сообщество химиков-милитаристов выступило к нескольким пострадавшим правительствам с предложением усилить благородную ярость химическими веществами. Повсеместно открылись пункты раздачи димоносправедливина – так было названо это стимулирующее вещество. Часть населения не выдерживала обрушившихся волн ненависти, и кончала жизнь самоубийством. Более благоразумные требовали от властей немедленного реагирования и геноцида обидчиков. Требовала в активной форме – устраивая напоминающие теракты с политическими требованиями. Объединенная группа экологов и зеленых требовала от правительства уничтожения врагов ради сохранения экологии. Религиозные группы реагировали по разному. Многочисленные христианские секты требовали: конца света, прихода Иисуса Христа, появления Антихриста в зримых очертаниях для осознанного противодействия, требовали запуска государственных программ по отпусканию грехов. Некоторые секты, требовавшие смирения, навсегда усмирялись государством и гражданами с активной гражданской позицией. Мусульмане требовали вырезания всех неверных. Иудеи – всемирного обрезания. Индусы, ради сохранения кармы, требовали срочного перезапуска реинкарнационной цепочки путем обрывания текущей. Ушлые дельцы, почуяв желания толпы, ввели новый вид тотализаторов. Разыгрывались планы нападений, направления атак, длительность войн, соотношение потерь, количество убийств. Открылись шоу наподобие «обругай супостата», «покажи зверскую сущность врага», «наши потери в реальном времени». Следует заметить, что это все происходило с очень большой скоростью – в будущем, с развитием систем связи, для открытия нового шоу, программы и даже для регистрации нового бизнеса требовалось всего несколько минут. Страны взорвались. Но время шло. Приближались минуты, когда тотализаторы должны были увидеть результат. Власть сняла с себя ответственность, проводя голосования по поводу начала войны. На голосования выставлялись удобные формулировки. Например, «Хотите ли вы, чтобы наша страна напала на южное, или западно-южное направление?». Ввели прогрессивный налог – он увеличивался на один процент за каждый установленный период времени. Это и другие экономические трудности правительства официально сваливали на врагов. Население пришло в неописуемую ярость. Дети, напуганные правительственными роликами, распространяемыми по интернету в государственных порносетях, требовали от родителей раздать им свободно продаваемые скафандры, чтобы они не превратились в зомби за ночь, если враги вдруг применят биологическое оружие. Увидев накал страстей, правительство предложило добровольцам долговременный контракт – то есть, продажу в рабство с целью применения против врагов. Для этого было достаточно установить постоянное подключение к интернету – то есть, установить нейроимплантант, контролируемый правительством. И после этого началась БББ – Большая Брутальная Бойня. Ученые-ботаники, подключенные к интернету и принимающие димоносправедливин, делали боевую крапиву, убивающие коня с одного прикосновения. Ученые этномологи в содействии с религиозными общинами разрабатывали ритуальные боевые виды насекомого оружия – такие, как Божья Коровка «Геноцид», Богомол «Беспощадный» или муравьи «террористические». Механики создавали Большие Чмырящие Корабли. И так далее – ведь все были при деле. Страна, доведшая постоянное подключение до 90%, перешла в состояние wargasm, и начала ебошить всех вокруг. Пидарасов превращали в боевых пидарасов. Даже сумасшедшие (а их было много, учитывая димоносправедливин) использовались в военных атаках в качестве террористов-смертников. Страны начали изрыгать радиацию, смертников, ракеты, танки, божьи насекомые, смертельные одуванчики. Все животные превращались в одухотворенное оружие. В войне против Индии особо пригодились боевые коровы. Над Китаем распрыскивались вещества, провоцирующие каннибализм, вместе с листовками, объясняющими тесную связь коммунистической общины с коллективным ритуальным поеданием человечены, и с лозунгами «только человечина делает нас человечными». В США вещала подпольная вражеская радиостанция «университет свободы, мародерства и демократии». Вот в таких насыщенных условиях проходила БББ.
Скачать Cannibal Corpse – They deserved to die
Cannibal Corpse – Living Dissection:

Направления самосовершенствования ИИ

Воскресенье, Апрель 4th, 2010

Самосовершенствование ИИ, или совершенствование при помощи человеческого разработчика, рационально применять в нескольких случаях:
* когда ИИ работает в данной области совершенствования лучше человека – быстрее, качественнее, дешевле, меньший занимаемый объем, меньшая вероятность уничтожения и т. д.
* когда ИИ работает хуже человека, но желательно сократить количество людей, работающих над ИИ – например, в целях секретности и лучшей управляемости. Вариация – когда ИИ работает хуже человека, но возможностей привлечь новых людей нету. Например, не хватает денег, нет единомышленников или надежных людей.
Направления самосовершенствования ИИ:
Улучшение реализации заданных нейроалгоритмов:
* лучший выбор структур данных и алгоритмов в целях повышения быстродействия, лучшего использования памяти
* то же самое, но при распарралеливании – так как задача на порядок сложнее предыдущей в однопоточном варианте
* то же самое, но при портировании на другие платформы – например, на видеокарты, или сервера с другими соотношениями производительности процессора и шины памяти, их цены и доступных объемов
* то же самое, но при спуске на уровень глубже, чем обычно – на уровень ассемблера, чтобы задействовать способы оптимизации, недоступные обычному компилятору из-за ограниченных знаниях об свойствах алгоритмов
Повышение качества существующих и разработка новых нейроалгоритмов:
* повышение скорости обучения по заданным данным
* минимизация количества необходимых обучающих примеров
* повышение устойчивости к неоптимальным начальным входным данным и ускорение переобучения
* перенос некоторых высокоуровневых способов мышления в раздел базовых системных алгоритмов
Адаптация под новые среды и новые типы данных:
* написание программных интерфейсов к нейроинтерфейсу – например, для анализа звуков, изображений, температурных датчиков
* выбор способа отображения сигналов на нейроны, анализ базовых преобразований (например, представление звуков аналогично человеческому уху)
* создание первичных сенсорных зон, работающих в особых условиях – например, несколько слоев сетчатки с преобразованием сигналов, на которые не распространяются традиционные способы обучения, связи жестко заданы, а частота работы этой подсети увеличена в сравнении с остальной ИНС
Адаптация существующих программ (см. «Нейроинтерфейс к GUI» ( http://neurocod.net/blog/2010/2010/04/нейроинтерфейс-к-gui )):
* перехват или замена классов отображения (view) на свои
* смена сигналов, подаваемых в нейросеть, на более оптимальные, смена частоты и полноты отображаемой информации
Совершенствование взаимодействия многих ИИ:
* создание и оптимизация интерфейсов общения между ИИ
* создание форматов знаний, извлечения и быстрого обмена новыми знаниями
* создание универсальных баз знаний, аналог справочников, более высокоэффективных, чем та же википедия
* выбор эволюционных схем и вычислительных экспериментов: при каких параметрах тот или иной ИИ лучше всего работает (скорость забывания, переобучения, степень доверия к данным, предпочтение поиска в глубину или в ширину и т. д.)
* выбор распределения различных параметров среди ИИ для повышения надежности работы всего коллектива ИИ, всеохватности знаний коллектива, и т. д.
Усовершенствования аппаратного обеспечения:
* разработка схем для производства под заказ на существующих предприятиях
* создание новых аппаратных сред (например, на основе нанотехнологий)

Самолетный запуск в Космос

Четверг, Апрель 1st, 2010

Были и есть (по крайней мере один остался) проекты по выводу грузов в космос, где в качестве первой ступени выступает самолет. Например, Ан-124 «Руслан». По этому проекты, с высоты в 12 км выпускается ракета, которая выходит через задний люк. По расчетам, стоимость вывода грузов на орбиту снижается в 10-12 раз. Потому что первая ступень – самая массивная и дорогая, и обычно одноразовая, а тут она используется многократно, кроме того, не нужно с собой возить окислитель.

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

Что можно усовершенствовать в узкоспециализированном самолете? Для примера, возьмем Ан-225 «Мрия», у которого максимальная полезная нагрузка – 200 тонн. Убираем отдельный этаж для дополнительных пассажиров. Убираем кабину с экипажем вообще – самолет если и не беспилотный, то управляется с Земли. Самолет не должен летать с грузом далеко. Или перелет на новое место базирования – и тогда вместо ракеты у него дополнительный топливный бак, или взлет, набор высоты, безпромедлительный запуск ракеты и тут же разворот с заходом на посадку. Поэтому ему не нужно взлетать с 200 тонн топлива, не нужно иметь и соответствующие тяжелые топливные баки. Не нужно иметь объемную грузовую кабину (вообще никакую), раскрывающиеся грузовые люки и т. д. Все это в сумме может привести к возможности взлетать с ракетой весом в 300 тонн на самолете примерно того же класса. Можно также изменить некоторые другие показатели – например, увеличить мощность двигателей в обмен на снижение массы топлива, которое берется на борт.

Мне интуитивно нравится вариант компоновки, в котором ракета прикреплена снизу. В отличие от варианта с «Русланом», не нужно терять секунды на разворот ракеты в воздухе после отцепления. (А каждая секунда – это необходимость в дальнейшем компенсировать полученную скорость по направлению к Земле). Она может стартовать сразу же после отцепления, вначале разгоняясь по прямому курсу, а на некотором расстоянии от самолета, чтобы не обжечь его – начинать набор высоты. Для такой схемы можно сделать два небольших фюзеляжа, ракета висит между ними.

Используя «Автоматизация проектирования серий» ( http://neurocod.net/blog/2010/2010/03/автоматизация-проектирования-серий ), можно создать несколько вариантов таких самолетов. Например, с весом ракеты в 100, 200 и 300 тонн.

Использование.
Кроме традиционных запусков пилотируемой и непилотируемой космонавтики, практической монополизации рынка запусков из-за дешевизны, нужно упомянуть военный аспект. Сейчас, запуск очередного мощного военного спутника (связи/наблюдения) – неординарное событие, которое освещается на специализированных сайтах. По запуску нескольких спутников, иногда можно судить по планам страны – например, в последний год США запустили несколько спутников, которые летают над Ираном, с целью иметь возможность просматривать его поверхность практически все время. Резкое удешевление запуска даст возможность обеспечить круглосуточное наблюдение за каждой страной на сравнительно низкой высоте. Дешевизна запуска даст возможность брать на борт спутников больше топлива для маневрирования, набора высоты и скорости, для компенсации аэродинамического торможения из-за полетов на сравнительно низких высотах. Координация военных действий может выйти на новый уровень. Может появиться возможность в краткие сроки выводить в космос много оружия нападения и защиты, в том числе неядерного – например, для поражения высокотехнологичного оружия противника. Как бонус ко всему – возможность более дешевого освоения Луны, возможность космического производства – например, сверхчистых чипов сверхбольших размеров с трехмерной компоновкой для сверхбыстрых ИИ.

Быстрый этикет

Четверг, Апрель 1st, 2010

Некоторые сообщения в ЖЖ не продублированы тут, надо исправлять.
Старый этикет в некоторых своих проявлениях уже не отвечает вызовам современности. Рассмотрим это на некоторых примерах.

Проявление некоторых правил этикета – все делать не спеша. Например, медленно кушать, медленно разговаривать или потягивать сигарету, что показывается как особый шик во многих фильмах. Это должно показывать, что у человека достаточно ресурсов – например, он достаточно сыт, чтобы не спешить кушать, или все сделал, чтобы уже никуда не спешить. Но сейчас в цивилизованном обществе (с широкополосным интернетом) уже редко кто умирает от голода, замерзает от холода и т. п. Главный ресурс, которого всем не хватает, один – время. Если у человека «много времени», это может означать две ситуации.

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

Второй вариант – человек «все сделал». Какой-нибудь миллиардер, у которого все есть. А что значит «все есть»? Люди живут ради денег? Если да, то у него все есть. А те, кто живет ради развития – себя, своей семьи, организации, страны, науки, техники, всего человечества, всей разумной жизни – те всегда знают, что времени никогда не хватает.
Например, миллиардер обеспечил себе бессмертие? Построил сферу Дайсона? Уже летит в другую галактику? Если это все не является его целью, то он по текущим оценкам – малоперспективный организм, так как широкая перспектива его пока не интересует.

Медленное поведение может быть приемлемым только во время сложных и ответственных переговоров, так как дает больше времени на размышления. Но интенсивные размышления – это уже активность, и упрекать тут не в чем, а этике быстрого развития это не противоречит. С этой точки зрения, если взять русские народные сказки, то лежебоке Ивану-дураку можно простить трату времени лишь в том случае, если он в голове конструировал новую модель саней, которые катятся сами, или напряженно решал проблемы философии.
Полный список:
http://community.livejournal.com/ru_transhuman/162493.html «Факторы сопротивления фазового барьера»
http://community.livejournal.com/ru_transhuman/161925.html «Фазовые барьеры, остановка развития цивилизации»
http://community.livejournal.com/ru_transhuman/159404.html «На рынок выведены суперкомпьютерные вычисления как услуга»
http://community.livejournal.com/ru_transhuman/155554.html «Быстрый этикет»
http://community.livejournal.com/ru_transhuman/154392.html «Аналогии ИИ и ЯО-2″
http://community.livejournal.com/ru_transhuman/151424.html «Солярис откладывается!»
http://community.livejournal.com/ru_transhuman/150990.html «Брутальная загрузка»
http://community.livejournal.com/ru_transhuman/149970.html «О пропаганде загрузки личности»

Нейроинтерфейс к GUI

Четверг, Апрель 1st, 2010

Введение

В случае развития человеческих нейроимплантантов, нейроинтерфейс к GUI может пригодиться и человеку, а на более ближнюю перспективу – ИИ.

Обоснование

Пусть ИНС требуется определить количество строк в окне с таблицей. Визуально определить границы полосы прокрутки, сравнить с размером окна и средним вертикальным размером одной строки – затратно. Эти ресурсы лучше отдать ИНС для более интеллектуальной работы. Получить одно число «количество строк» напрямую от объекта таблицы минимум в тысячу раз эффективнее (особенно, если анализ пикселей будет производить сама ИНС). А если такое повышение эффективности умножается на количество тысяч просматриваемых ячеек (а иначе – распознавание различных шрифтов и текста в каждой ячейке)… Ясно, что прямой нейроинтерфейс к существующему и будущему ПО крайне желателен.

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

Win32 API

В операционной системе Windows, можно перебирать все окна в системе, вместе с дочерними окнами, используя функции наподобие FindWindowEx/FindNextWindow. Они возвращают HWND – «держатель окна». Используя HWND, можно получать заголовки окон, текст внутри кнопок, надписей, списков и выпадающих списков и т. д. Для исследования иерархической структуры окон с этой позиции можно использовать программу Microsoft Spy++, которая поставляется вместе с различными версиями Microsoft Visual Studio. Эта программа также позволяет отлавливать все оконные сообщения, с возможностью фильтровать их по типу, что может пригодиться для анализа того, как окна работают и как на них можно влиять. Используя функции Win32 API, окнам можно слать любые сообщения и получать имена оконных классов. Например, в случае, если внутреннее окно – внедренное окно Internet Explorer (что определяется по классу с именем «Internet Explorer_Server»), то можно задействовать специальный код, чтобы получить объект браузера и начать работать с ним через COM – в том числе, иметь прямой доступ ко всему html-содержимому в виде DOM, произвольно его изучать и менять (примеры подобного кода можно найти в Интернете). Внедрение окон Internet Explorer встречается довольно часто, в чем можно убедиться, используя все тот же Spy++. Например, его можно встретить внутри таких приложений:
* официальный клиент ICQ отображает сообщения в окне Internet Explorer, в том числе – в окне истории сообщений
* справка Windows
* окно с карточкой форм слова (но не перевода) в Abbyy Lingvo
* просмотрщик chm-файлов
* некоторые диалоговые окна в Microsoft Visual Studio, например, мастер создания нового класса
* Нейролаборатория когда-то использовала этот браузер очень широко – от таблиц нейронов до диалоговых окон редактирования точек останова (в VC++ есть специальный класс CDhtmlDialog для создания подобных окон)
* весь интерфейс старых версий Windows Media Player
* окно отображения фотографий в Google Earth
* встроенные браузеры, типа того, что находится в окне winamp

Внедрение в чужой процесс

Перебирать окна одного процесса можно и другого процесса (внешнего). Но если работать через COM-интерфейс с объектами во внешнем процессе, то придется использовать так называемый marshalling, для передачи интерфейса во внешнее приложение. Это утомительно по многим причинам – например, внешнему приложению нельзя передавать обычные двухбайтовые строки, их обязательно нужно передавать по всем правилам, через SysAllocString/SysFreeString. Кроме того, межпроцессное взаимодействие осуществляется медленнее, чем внутрипроцессное. Поэтому во многих случаях желательно, чтобы код нейроинтерфейса работал внутри исследуюемого приложения (хотя обработанные данные потом могут передаваться во внешний процесс с нейросетью). Особенно, внутрипроцессное взаимодействие пригодится для первичного анализа и сжатия изображений перед отправкой внешнему приложению – так как во многих случаях от анализа непосредственно изображений окон отказаться полностью не выйдет. Для внедрения своего кода в чужие приложения используется техника, известная как dll injecting. Обычно она используется всякими вирусами, но, если вы контролируете свой антивирус, то можете разрешить своему приложению выполнять такие подозрительные действия. Способов dll injecting довольно много, я применял загрузку по вызову CreateRemoteThread.

Сторонние библиотеки

Все чаще современное ПО строится на основе сторонних библиотек, которые эмулируют внутренние окна самостоятельно. В таких приложениях создается только одно окно верхнего уровня на основе HWND (иначе операционная система не позволяет), а все внутренние дочерние окна прорисовываются самой библиотекой. Например, программы, написанные на Java или Qt, используют именно такой подход, в то время как программы, написанные на Delphi, используют традиционный подход окон Windows (классы Delphi в приложениях легко определять по имени, которое начинается с префикса из большой буквы T).
Кстати, мысль перевести Нейролабораторию на Qt появилась после очередного запуска Spy++, когда стало видно, что Google Earth написана на Qt (я часто запускаю Spy++ для незнакомых программ чтобы увидеть, на чем они написаны).

Если научиться работать с фреймворками типа Java/Qt, то дополнительно возникнет возможность работать и с окнами в операционных системах, отличных от Windows. К счастью, и Java, и Qt содержат довольно много метаинформации о внутренних объектах. При условии получения доступа к главному оконному объекту внутри приложения, можно перебирать все окна и многие другие объекты, подписываться на любые события и т. п. Как получить доступ к такому объекту? Наверное, можно такой доступ получить и «силой», вмешиваясь извне, наподобие dll injecting. Я такие способы в контексте qt/java пока не исследовал. В случае Qt, может потребоваться учитывать бинарную несовместимость различных компиляторов и изменение реализации системы метаинформации Qt в разных версиях Qt. В то время как байт-код java стандартизирован.

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

Java и не только

Чтобы обходить защиту модулей java, на подконтрольной системе можно поставить свою, измененную реализацию виртуальной машины – благо, их исходники доступны. Тогда появляется возможность вмешиваться в работу любых java-приложений без их персональной модификации. Это тем более перспективно, что в последнее время наметилась тенденция к переводу многих виртуальных машин других языков программирования на использование байт-кода java (http://ko.com.ua/node/47487 «Планетная система Java»).
Но на java и qt написано очень много ПО с открытым исходным кодом. Для начала, в большинстве случаев, будет достаточно умения работать только с открытым ПО.

Qt

Для Qt есть библиотека с графическим интерфейсом «Conan for Qt» ( http://sourceforge.net/projects/conanforqt/ ). Она позволяет получить представление о широчайших возможностях системы метаинформации Qt (хотя и меньших, чем в java). Сценарий работы для Qt следующий. Берутся исходники некоторой программы, к ним подключается своя библиотека с нейроинтерфейсом, и как правило модифицируется только одна строка – добавляется регистрация главного окна у нейроинтерфейса. Нейроинтерфейс перебирает окна, просматривает иерархию наследования. Например, некоторый класс наследуется от класса окна таблицы, а нейроинтерфейс умеет работать с такими окнами. Тогда он производит приведение типа указателя к известному типу, и получает широчайшие возможности. Например, получить объект «модель данных таблицы», и работать с ней напрямую – без перерисовки экрана. К любой такой таблице можно сразу присоединять систему поиска, аналогичную поиску текста в браузере, даже если исходная программа поиск не поддерживает – нейроинтерфейс будет перебирать по очереди все клетки с поиском нужного текста.

Про работу с файловой системой

Имея нейроинтерфейс к файловой системе на основе Qt или Java, автоматически обеспечивается кроссплатформенная работа с ФС.

Про работу с Html

Если требуется работа с реальными сайтами, то желательно применять насотящие браузеры, а не анализаторы html типа библиотеки libxml2, так как браузеры позволяют исполнять javascript и т. п. Для ускорения работы можно поступить, как поступили в google при автоматическом тестировании google chrome на правильность отображения веб-страниц: браузер отображал страницы не на экран, а в память.