Page 1


ПРО

граммист

СОДЕРЖАНИЕ

№15 (июнь) 2011

Издается с марта 2010. Выходит ежемесячно №15, июнь 2011 г.

Редакция: Выпускающий редактор Сергей Бадло Литературный редактор Utkin Редакторы Василий Мединцев, Алексей Шишкин, Natali-Ka, Алексей Шульга, Егор Горохов, Виталий Желтяков

СЛОВО РЕДАКТОРА

Новости по проекту ............................................. с.3 НЕВЕРОЯТНО, НО ФАКТ

Любопытные факты ............................................... с.4

VIP ПЕРСОНА

Интервью с Александром Анатольевичем Фином ..................... с.9

ШКОЛА ПРОГРАММИРОВАНИЯ

Редактор-корректор Ян Липлавский

Как и зачем писать хороший код? Часть 1 ........................ с.16

Дизайн и верстка:

НОВОСТИ ПО

Авторский состав:

ОБЩИЕ ВОПРОСЫ

Алексей Шишкин, Виталий Желтяков, Сергей Бадло

Utkin, Алексей Шишкин, Виталий Крячко, Петр Высочанский, Олег Александров, Юрий Швецов, Александр Никитин, Дмитрий Ляпин, Кирилл Черников, Сергей Бадло

Официальный сайт журнала:

www.procoder.info

Контакты:

Русский язык и программирование ................................ с.19 Почему нет искусственного интеллекта? .......................... с.25

Моделирование процесса эмоционального воспитания роботов ....... с.29 WEB ТЕХНОЛОГИИ

Сколотим виджет для семерки .................................... с.40 ЛАБОРАТОРИЯ

Авторские статьи направляйте на maindatacentr@gmail.com Вопросы и предложения для редакции reddatacentr@gmail.com Вопросы и предложения администратору info@procoder.info

3D технологии. Осваиваем дома .................................. с.44

Информационная поддержка:

Чего только не бывает .......................................... с.66

Международная Академия Информатизации (МАИН) РК www.academy.kz Журнал «Радиолюбитель» www.radioliga.com Журнал «VR-ONLINE» www.vr-online.ru V.K. сайт... www.kotoff.info Free Legal Soft Group alexcones@gmail.com Некоммерческая сеть AirNet-Berdyansk www.airnet.sytes.net Электронная электротехническая библиотека www.electrolibrary.info

Создаем самораспаковывающийся ZIP архив ........................ с.53

Пылесос или... тайная жизнь функции SetParent() ................ с.62 ЮМОР

Примечание:

Издание некоммерческое. Все материалы, товарные знаки, торговые марки и логотипы, упомянутые в журнале, принадлежат их владельцам. Статьи, поступающие в редакцию, рецензируются. Мнение авторов не всегда совпадает с мнением редакции. Перепечатка материалов журнала и использование их в любой форме, в том числе в электронных СМИ, возможны только с разрешения редакции, при обязательном указании ссылки на сайт журнала http://procoder.info. Формат A4, 68 стр.

Идея создания журнала:

Алексей Шульга

Обложка номера: Дизайн Utkin-а

Архив номеров журнала!


ПРО

№15 (июнь) 2011

граммист

Сергей Бадло

http://procoder.info

СЛОВО РЕДАКТОРА

НОВОСТИ ПО ПРОЕКТУ*...

Доброго времени суток, уважаемые читатели журнала «ПРОграммист». Благодаря активистам издания, количество присланных материалов за последние месяцы выросло и мы в редакции задались вопросом: повышать-ли объем выпусков? Считаем, что да. Мы добавим новые рубрики и языки. Охватим роботостроение и искусственный интеллект. Главное – поддерживать набранный темп и не забывать, что креативные материалы не берутся прямо из воздуха, они развиваются из обсуждений с читателем и вашего личного уникального опыта. Также хотим выразить особую благодарность редакторам Алексею Шишкину и Виталию Желтякову за помощь в верстке материалов выпуска.

Хотите собственный виджет на рабочий стол?

В этом выпуске... Рубрика

«VIP

персона».

журнала

«Юный

У

нас

в

гостях

Нет

ничего

проще.

Ведь

сегодня

Олег

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

генеральный директор и главный редактор

таких гаджетов в рубрике «WEB технологии».

Анатольевич. Читаем интервью.

Однако,

техник»,

Фин

Александр

на

этом

наши

вкусности

не

заканчиваются... Часто-ли вы сталкиваетесь с

Обратите внимание, с текущего номера в

такими

программирования».

зависимости от разрешения экрана? Правда

журнале

стартует

новая

рубрика

Занятия

с

«Школа

читателем

багами,

масштабирования

как

формы

отсутствие

приложения

в

будут вести выпускники МГТУ им. Баумана и

ведь раздражает? Вот и дефолтные настройки

Дмитрий Ляпин. Прошу любить и жаловать, и

удивление. Нет, конечно решение нашлось:

можете

если

основатели

курса,

Александр

Никитин

и

не забывать задавать вопросы. Прислать их вы как

на

reddatacentr@gmail.com,

венно авторам курса.

адрес

так

и

редакции

непосредст-

эмулятора Android под Eclipse тоже вызывают

эта фича была спрятана от сторонних глаз. А разработчик

этого

не

предусмотрел

вообще? Из этого обсуждения на форуме нашего журнала и родилась статья Алексея

Шишкина

«Пылесос

или...

тайная

жизнь

Русский язык в программировании? Как бы вы

функции SetParent()».

тем не менее она есть и довольно успешно

Также в рубрике «Лаборатория» дебютируют

скептически не относились к данной области,

развивается. Читаем статью Юрия Швецова в рубрике «Новости ПО».

В рубрике «Общие вопросы» мы побеседуем с Utkin-ым

о

причинах,

препятствующих

развитию искусственного интеллекта (ИИ). А Кирилл Черников расскажет о моделировании процесса эмоционального воспитания роботов и его программной реализации.

* Лучшим авторам и победителям конкурсов, а также желающим оставить себе памятный подарок о проекте, будет предоставлена возможность получить и/или заказать кружки, коврики и футболки с символикой журнала. Подробности см. на форуме журнала http://forum.procoder.info.

два

новых

пример

средствами читателей

разработчика.

создания

Высочанский

PureBasic, Виталий

научит

Практический

стереоизображения,

представит Крячко,

а

создавать

распаковывающиеся ZIP-архивы.

на

суд

Петр

само-

С уважением,

выпускающий редактор, член-корреспондент МАИН

3


ПРО

№15 (июнь) 2011

граммист

Сергей Бадло

http://procoder.info

НЕВЕРОЯТНО, НО ФАКТ

ЛЮБОПЫТНЫЕ ФАКТЫ

Совсем недавно NXP Semiconductors анонсировала лампочки с управлением на частоте 2.4 ГГц по стандарту IEEE 802.15.4, защитой 128битным AES и IPv6-адресом. Казалось-бы, наконец-то появилась возможность с легкостью пощелкать освещением, скажем, со смартфона или через Интернет (см. рисунок ниже). Однако, «хороша ложка к обеду». Cледует отметить, что управлять лампочками вы сможете только через дополнительный маршрутизатор со стеком JenNet-IP http://www.jennic.com/products/protocol_stacks/jennetip, ибо весь обмен от лампочки с маршрутизатором идет по собственному радиоканалу. А раз все будет идти через отдельный девайс, контролирующий и распределяющий, то зачем радиоканал? Разве X10 изжил себя? Ведь так или иначе, запитка ламп идет по сети общего энергопотребления 220 вольт, да и помехоустойчивость, а в случае с железобетонными перекрытиями, и дальность у X10 будет повыше, в пределах фазы трансформатора.

программных

проектов»

с

командами

из

других стран. Ею стала команда студентов из

Одессы,

которая

комплекс,

который

DashPoint.

разработала

Это

проект

программно-аппаратный позволяет

слепоглухим

людям обучаться, читать книги, общаться в

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

подключается

обеспечение

(ПО),

контроллер,

на

к

нему

который

с

помощью вибрации передается информация

Вы конечно-же знаете, что Google Docs

умеет распознавать текст? А вот с недавнего

времени, появилась поддержка и русского

азбукой Брайля. Любая информация, которая

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

руку

в

вибросигналы

на

человек,

Так

можно

контроллере,

языка. А значит, можно сфотографировать в Google Docs и получить распознанный текст.

через службу обмена сообщениями. Решение

Решение

требует

для

обучения

слепоглухих

представит Украину на финале Imagine Cup в Нью-Йорке.

Жюри

национального

финала

конкурса Microsoft для студентов Imagine Cup

назвало

команду,

которая

поедет

на

всемирный финал конкурса в Нью-Йорк и

будет соревноваться в номинации «Разработка

и

слова.

может

распознавать

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

буквы

и

читать тексты, обучаться и даже общаться

также может работать на смартфонах и не дополнительного

контроллера.

Проект не имеет аналогов в мире, а другие существующие

решения,

в

частности,

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

дорогие.

производства

ПО

При

условии

вместе

может стоить порядка $40.

с

серийного

контроллером

4


ПРО

№15 (июнь) 2011

граммист

НЕВЕРОЯТНО, НО ФАКТ Гугл закрыл Google Translate API. Из-за

существенных

экономических

затрат

и

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

года будет полное отключение API. Android-приложения смогут исполняться в

Windows благодаря технологии BlueStacks http://www.bluestacks.com. BlueStacks

для

Разработчики

реализовали

Windows.

исполняющих

из

Android-окружение

Большинство

приложения

программ,

Android

на

Windows*, исторически используют эмуляцию,

что сильно ухудшает производительность. В BlueStacks эмуляцию

же

и

решили

преодолели

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

не

полагаться

проблему

реализовав

родное

исполнение программ Android на x86. Сенсорный

экран

без

на

низкой

физической

Ученые

разработали

систему

для

получения воды из тумана. Около трети

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

воздухе.

Почему

бы

не

взять

ее

оттуда,

особенно если других источников рядом нет? Представитель

Массачусетского

технологического

института

(Кембридж,

США) поделился с читателями сайта TG Daily информацией

о

новейшей

разработке

-

устройстве для выделения воды из тумана. Основой

этого

устройства

является

сетка,

которая улавливает влагу, и позволяет ей в

виде капель стекать в коллектор. Устройство

поверхности «Zerotouch» продемонстрировали

в Ванкувере студенты Texas A&M. Специаль-

ная

рамка,

снабженная

инфракрасными

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

к примеру, на экране монитора, и фиксирует

местоположение пальца или других предме-

тов, которые проникли в рабочую область внутри

рамки.

Местоположение

объекта

компьютер определяет по тому, какие лучи перекрыты

им

в

данный

момент.

Если

расположить несколько рамок одну на дру-

гую, то компьютер будет также контроли-

ровать и расстояние. С подробностями (см.

видео в ресурсах к журналу) можно ознако-

миться

на

сайте

Ecologylab

http://ecology-

lab.cse.tamu.edu/research/zerotouch.

превосходит по эффективности существующие на сегодняшний день аналоги. В полевых испытаниях

«выжать»

из

квадратный

с

его

воздуха

метр

помощью до

литра

улавливающей

удавалось воды

сетки

на в

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

могло

бы

значительно

облегчить

жизнь

населению засушливых территорий (особенно бедным слоям), и решить проблему доставки воды для орошения. Ученые MIT трудятся над

повышением разработки,

эффективности

чтобы

достичь

данной

коммерческой

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

* Дождемся-ли мы эмулятора андро-приложений быстрее (по скорости запуска) эклипсового, для тестов созданных приложений, при отсутствии андрофона под рукой? Вот в чем вопрос / Редакция.

5


ПРО

№15 (июнь) 2011

граммист

НЕВЕРОЯТНО, НО ФАКТ

Энергию из электростатических свойств

водорода

предлагают

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

в

Пекинском научном центре. Эффект основан на

свойстве

молекул

водорода

консолиди-

ровать в себе статическую энергию, которую

можно

выделить

воздействием

частотно

модулированных волн. Как заявляют ученые:

никаких

разрушительных

замены

устаревшим

Власти

Калифорнии

по

инициативе законодателя Майк Гатто (Mike

Ghatto) представили проект, предлагающий

извлечь

выгоду

калифорнийских

из

многокилометровых

хайвэев.

Одна

миля

двухсторонней магистрали может круглый год снабжать

электричеством

500

домов,

давать энергию для ежедневной заправки

источникам

освещения самой магистрали и подсветки

энергии. Эта разработка не будет служить

120-ти

электромобилей,

и

это

помимо

никаким военным целям и планам. Сама идея быстро

решить

восполняемой

множество

энергии

вопросов

недостатком энергообеспечения.

поможет

связанных

с

Дороги могут стать источником электроэнергии

за

счет

или

их

последствий

изобретение не несет, и создается лишь в целях

пьезоэлементов.

преобразования

механи-

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

.

6


ПРО

№15 (июнь) 2011

граммист

НЕВЕРОЯТНО, НО ФАКТ знаков

дорожного

движения.

Кроме

того,

взглядом мышь, моргая или задерживая на

никто не собирается разрушать имеющееся

какое-то время взгляд – кликаете на кнопки.

закладываться под асфальт магистралей в

регистрации

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

рамках запланированного ремонта полотна. Технологию

управ-

ления компьютером

при помощи... взгля-

Tobii

CEye

использует

движений

производитель

Ubiquitous

Corporation*

http://www.ubiquitous.co.jp/news/?p=3330. В комплекте с прибором

идет WiFi-передатчик, который подключается в локальную сеть.

да представила ком-

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

демонстрации такого

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

пания

Tobii.

Для

управления на видео (см.

ресурсы

журналу)

пример

к

показан

работы

технологией.

с

Тесто-

вой машиной служит

ноутбук

от

однако,

Lenovo,

по

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

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

уведомления по электронной почте или через твиттер, например,

при

превышении

сообщается,

после

месячного

начала

лимита

массового

электричества.

производства,

Как

стоимость

прибора составит «несколько тысяч йен» (3000 йен = 37 долларов

США по текущему курсу). Судя по всему, это стоимость каждого

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

альное оборудование,

сервис

и

службу

поддержки.

вычайно

Чрез-

важно

идеально слаженное

взаимодействие всех

этих элементов. Ученые

из

Кали-

форнийской

ратории

Лабо-

реактивных

двигателей,

Универ-

ситета Пенсильвании

и

Технологического

разработали

это

ком-

пактного робота, спо-

ничего не значит –

здесь может исполь-

собного

пьютерная система.

мещаясь по нему.

Можно только пред-

Разработка

последствия

программы

схему

зоваться любая ком-

ставить быть,

логия

себе,

если

будет

могут

тем

дора-

Наверняка,

работать

и

играть

особенно станет

еще

интересно.

альтернатива

Цель

мыши

робота

частью

Компакт-

технологий,

спонсирует-

программы

разработка

миниа-

тюрных, умещающих-

(да,

Управление

пере-

ся армией США.

ся на ладони, машин,

играть) более

и

которая

ботана до идеального дом.

здания,

ных автономных сис-

техно-

взгля-

составлять

является

какие

управления

и

института Джорджии

словам

разработчиков,

которая

включает программное обеспечение, специ-

iRemo Tap: управление розетками через Интернет предлагает японский

глаз,

технологию

взглядом и

это

клавиатуре,

дополнительный способ ввода информации.

Вы смотрите на экран монитора, «двигаете» ** Да-да, тот самый Ubiquitous, точки доступа которого мы представляли в одном из прошлых выпусков / Редакция.

способных проникать

в здания и собирать различную информацию. Текущий

прототип

передвигается

на

резиновых гусеницах и с помощью бортового

7


ПРО

№15 (июнь) 2011

граммист

НЕВЕРОЯТНО, НО ФАКТ

оснащения

составляет

котором находится.

схему

здания,

в

RS-232 to... LCD. Любопытные преобразова-

Расширитель

портов

MCP23008

от

компании Microchip. 8-Bit I/O Expander with Serial

Interface

служит

для

увеличения

числа I/O ног микроконтроллера, если их

тели EDE700/701/702*** выпускает фирма E-

вдруг стало не хватать.

Конверторы

преобразовывать

При рабочем питании от 1.8 до 5.5 вольт,

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

(до 1.7 МГц) и миниатюрном 18-ти выводном

LAB Digital Engineering Inc http://elabinc.com. позволяют

сигналы стандарта RS-232 в параллельный

LCD-дисплей к МК, используя один из UART.

*** Спецификация на упомянутый конвертор включена в ресурсы журнала / Редакция.

поддержке интерфейса SPI (до 10 МГц), I2C корпусе даст фору многим шинникам.

8


ПРО

№15 (июнь) 2011

граммист

редакция журнала

http://procoder.info

VIP ПЕРСОНА

ИНТЕРВЬЮ С АЛЕКСАНДРОМ АНАТОЛЬЕВИЧЕМ ФИНОМ

Пожалуй, почти в каждой семье можно встретить коллекцию из таких журналов как: «Квант», «Моделист-конструктор», «Наука и Жизнь» и... «ЮТ». Услышишь «ЮТ» и сразу «пробивает» ностальгия. Слово «ЮТ» знает не понаслышке каждый мальчишка и взрослый в нашей стране. Ведь несколько поколений молодежи выросло на увлекательных и образовательных материалах этого журнала. Не знаю как у вас, дорогие читатели, но у меня на книжной полке имеется подшивка «ЮТ» еще от отца и до 93-го года. Потом, по ряду причин, журнал мы перестали выписывать. Но те детские впечатления и конструкции от «ЮТ» и «Левши» оставили неизгладимый след в моей памяти. Итак, как вы уже наверняка догадались, сегодня у нас в гостях – генеральный директор и главный редактор журнала «Юный техник» http://utechnik.ru, Фин Александр Анатольевич. Интервью по-прежнему проведем в режиме вопрос-ответ... Редакция:

Александр

Доброго

Анатольевич.

времени Добро

суток,

пожало-

вать в нашу рубрику «VIP-персона». Для начала расскажите немного о себе?

Александр: Здравствуйте. Я родился до выхода

были в 80-е годы, тираж упал до 40 тысяч. Получается, в 50 раз. Думаю, это напрямую

связано с политикой государства в области

образования: система детского технического

творчества в стране разрушена дотла и интерес

«Юного техника» в свет. Но, когда научился

к науке и технике сменился чем-то другим.

«ЮТ»,

Редакция:

читать, ходил в библиотеку, где был не только но

еще

множество

других

перио-

дических изданий. Это, к слову, была самая-

пресамая

библиотека.

обычная

районная

московская

Редакция: Когда был образован проект

«ЮТ»? Состав редакции с тех пор сильно

Какое

ПО

используется

для

верстки? Этим занимается один человек?

Александр: Мы верстаем на традиционных PC.

Программа – Indesign, три издания – «ЮТ» и

ежемесячные

приложения

«Левша»

(это

бывший «ЮТ» для умелых рук») и «А почему?»

изменился?

верстают 2 человека.

Александр: Первый номер «Юного техника»

Редакция: Как часто в верстку вносятся

вышел в 1956 году, скоро мы отметим 55-летие

издания. Конечно, никого из тех, кто начинал, в редакции уже не осталось. Редакция: журнала?

Каков

нынешний

тираж

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

изменения?

Александр: Подготовка журнала традиционно

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

вносятся коррективы.

Редакция: Журнал печатается всегда в

одном издательстве?

9


ПРО

№15 (июнь) 2011

граммист

VIP ПЕРСОНА Александр: журнала

Издательство

«Юного

техник».

это

редакция

Печатает

наши

издания типография в подмосковном городе

Дмитрове.

Редакция: Какова периодичность выхода

журнала? Приложений?

Александр: Журнал и приложения выходят ежемесячно,

как

годы.

Редакция:

все

Кто

Александр:

курирует

Работу

«патентованный»

его

технического творчества, Марина Анатольевна Степанчикова.

Редакция: Нынешнее молодое поколение

больше или меньше творчески мыслит? Это

отражается

объеме

и

на

качестве

присылаемых

пред-

ложений в патентное

под-

бюро?

Александр:

Во

времена,

Проект,

так,

патентный

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

настоящего момента? назовем

бюро»

поверенный Анатолий Павлович Ефимочкин. И

держивает проект до Александр:

«Патентного

наряду

все

с

толковыми идеями, нам

по-

современному, – поддер-

присылали такие пред-

редакции

то в троллейбусе, и мне

ложения: «Ехал я как-

живают подписчики. У нет

допол-

пришла

нительного бизнеса, который

печатать меловке.

помог

журналы

идея.

сделать

бы

так,

Надо

чтобы

космонавт только поду-

на

мал – и сразу оказался в

нужном

месте

Рекламы у нас тоже нет,

корабля».

детских

счи-

Сейчас объем писем в

день-

50 раз, как тираж, а

как

у

большинства

изданий:

ПБ упал, причем, не в

тается, что ребята не

распоряжаются

намного сильнее. Это,

гами. Должен при этом

опять

отметить, что мы очень признательны

ральному

делам

массовых

ций,

агенству

печати

по и

коммуника-

гранты

связано

Феде-

Журнал «Юный Техник» → Интервью с

которого

главным редактором

же, с

думаю,

политикой

образования, молодежной

политикой,

частности,

а

в

также

резким падением прес-

помогают сохранить наши издания.

тижа инженеров и ученых в стране.

Редакция: «Патентное бюро» в журнале

Редакция: Понятно, что самостоятельно не

ственно курирует его работу?

свою идею до патента.

уже более тридцати лет. Кто непосред-

каждый

ребенок

способен

продвинуть

10


ПРО

№15 (июнь) 2011

граммист

VIP ПЕРСОНА Какова дальнейшая их судьба?

Каков период возвращения к истокам?

Александр: У нас есть возможности оказать им

Александр:

помощь в оформлении настоящего «взрослого»

патента.

Редакция: Куда пропала рубрика «Между нами

девочками»?

Соотношение

щего контингента изменилось? Александр:

Традиционно

мальчишки,

рубрика

журнал

пришла

с

«Заочная

Некоторые

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

«Мне очень нравится электроника, но я не

понимаю,

что

означают

на

схемах

эти

Редакция:

одним

школа

принято

читали

из

определенный смысл. Эх,

как

прямоугольнички и треугольники». Приходится

вместе с ним. Хотя, наверное, в ней был

Редакция:

читателя,

читаю-

главных редакторов в «лихие 90–е» и ушла

электроники».

Смена

радио-

конструкции

начинать объяснения заново. С

журналами

«Радиолюбитель» сотрудничаете?

«Радио»,

Александр: Да, мы дружим по-человечески, но

интересы наших читателей практически не

пересекаются. «Радио» уходит все дальше в приемо–передатчики журнал

на

«Радиолюбитель»

микропроцессорах, много

говорит

о

можно сказать стали бетселлерами. Как

готовых наборах.

заработал

Редакция: Как и при каких обстоятель-

сейчас

помню:

как

УКВ

радовался,

когда

сверхрегенеративный

приемник с катушкой на куске стекло-

ствах в журнале слились «Объединенная

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

«Молодая гвардия»?

текстолита

и

удалось

поймать

как

ни

количеством витков. А уж радиомикрофон

с

планарной

подбирает

источников?

катушкой...

материалы?

Кто

сейчас

Из

каких

Александр: Нам есть чем гордиться: рубрику

«ЗШР» в «Юном технике» ведет Владимир

Тимофеевич авторитет

в

Поляков*.

области

преобразования,

Это

крупнейший

приемников

схемы

которого

прямого стали

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

том числе для меня. Удивительно современный и богатый идееями человек.

Редакция:

Периодически

можно

наблюдать в журнале повторение цикла

для начинающих. Причины этого понятны. Ведь

появляется

более

молодое

поко-

ление, увлекающихся радиоэлектроникой.

редакция журнала Юный техник» и ОАО

Александр: Трудно сказать, что мы слились. Журнал

был

в

свое

время

образован

ЦК

ВЛКСМ, печатала его типография издательства ЦК ВЛКСМ – «Молодая гвардия». Когда партия

и комсомол перестали играть былую роль, все

журналы оказались предоставлены сами себе. «Молодая

гвардия»

казалась

тогда

некоей

опорой. Со временем отношения стали чисто

деловыми: мы арендуем у «Молодой гвардии»

помещения для работы, а печатаемся, как сказано, в Дмитрове. Редакция: журнала

и

Источники

приложений?

конкурсов в журнале?

финансирования Кто

спонсоры

Александр: Про источники и поддержку уже

сказано. Со спонсорами у нас не очень хорошо,

* Владимир Тимофеевич Поляков – доцент кафедры физики Московского ордена Ленина института инженеров геодезии, аэрофотосъемки и картографии, кандидат технических наук, родился в 1940 году. Уже в девять лет собрал свою первую радиоконструкцию – детекторный приемник, а в двенадцать – ламповый усилитель. Его позывной RA3AAE сегодня известен радиоспортсменам всех континентов. Автор 10-ти изобретений, 100 публикаций, в том числе нескольких книг / Редакция.

11


ПРО

№15 (июнь) 2011

граммист

VIP ПЕРСОНА точнее,

очень

спонсорство,

определенную

нехорошо.

как

и

реклама,

аудиторию,

что

Александр: Уже не помню. Думаю, что сам.

обладающую

миллиона. При этом журнал читал не только

Потому

нацелены

на

кошельками. Это не наши читатели. Редакция:

Возможность

сверстниками

непередаваемое

ребенка

и,

родителей.

поделиться

своими

идеями

это

гордость

для

ощущение

разумеется,

Не

каждый

со

для

журнал

высказаться

маленьким

Александр:

Вот

письмо,

которое

своим творчеством с такой аудиторией.

может

курирует издания-приложения?

пришло

«Левша»,

«А

смастерил

Александр:

моей

заметки

для

за публикацию моей заметки для журнала!!! Мы с

Мы

с

дедом

были

очень

рады

дедом были очень рады увидеть наше изобретение!!!

увидеть наше изобретение!!! Теперь я еще Теперь я еще больше стал увлекаться техникой и

больше

стал

увлекаться

техникой

конструированием! Моя мечта – стать конструктором.

конструированием!

Моя

мечта

и

стать

Желаю вам творческих успехов и процветание Вашему

конструктором. Желаю вам творческих успехов журналу!

и процветание Вашему журналу!

С уважением, Глеб Грибачев»

С уважением, Глеб Грибачев»

Левшу,

не

направленность

конструктор».

журнала!!!

публикацию

Читая

заметить

ление?

за

сейчас

сходится ко мне.

«Добрый день, дорогая редакция!!! Большое «Добрый день, дорогая редакция!!! Большое спасибо

спасибо

Кто

ответственный редактор. В конечном итоге все

публикаций

дедушкой

почему?».

Александр: У каждого из приложений есть

минитрактор:

с

два

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

Редакция:

вместе

превышал

ребенок, но и вся семья. Трудно представить

сегодня по электронной почте от мальчишки, который

журнала

Редакция: «ЮТ» для умелых рук», а ныне

авторам.

Часто они присылают материалы?

тираж

самого

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

Напомню:

журнала

Или

Можно

это

в

мог

плоскости

«Моделист-

ложное

сказать

и

«Моделиста-конструктора»**

не

впечат-

иначе:

то

У

же

направление, что и у «Левши». Я давно не

видел журнал «Моделист-конструктор», хотя

мы сидим в одном здании. Но, думаю, они, как и мы, ориентируются на то, что интересно

ребятам – самолеты, корабли, танки и т.п. Редакция:

читателей

меньше Глеба. Станет он конструктором или

одной из публикаций «ЮТ»). Сейчас у них

нет

не

знаю,

но

получать такие письма. Редакция:

удивительно

Помнится,

кроме

приятно других

корифеев фантастики, в журнале был цикл статей Кира Булычева.

Как судьба свела с ним? Он сам предложил свои

рассказы

для

«ЮТ»

или

инициатива со стороны редакции?

это

** Любопытно, что еще есть журнал «Моделист» http://www.modelist.mksat.net, издаваемый на Украине (главный редактор – Виктор Ходеев). Журнал посвящен людям, увлекающихся техническим творчеством: RC вертолетам, моделям копий самолетов, технологиям изготовления и т.п.

молодые

среди

были

оценить радость Глеба. Я, если честно, рад не

и

Помнится,

По количеству восклицательных знаков можно

высокопоставленные

особы королевской крови (упоминание в

сохранился

«выросли»?

интерес

Александр:

Сейчас

интересах

говорить

мы

к

журналу

редко

или

общаемся

с

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

От

обычных

читателей из за рубежа письма получаем.

Редакция:

Тематика

или она меняется?

издания

постоянна

12


ПРО

№15 (июнь) 2011

граммист

VIP ПЕРСОНА Александр:

Тематика

постоянна

наука

и

техника. Другое дело, что и то, и другое идут вперед.

Редакция:

Кто

«ЮТ»?

Александр:

может

Автором

стать

может

разумный человек.

автором стать

в

любой

Редакция: Что из литературы порекомен-

дуете нынешней молодежи? Александр:

подряд.

Ничего

Сейчас

особенного,

существует

читать

все

чудовищная

Александр: Как ни удивительно, все журналы того времени существуют и сейчас***. Дружим.

Редакция:

Какими

заняты?

серия

g=1.

работу

Эту

как

и

в

любом

привлекает?

Александр: Они уже не авторы даже, а старые

друзья. Что их привлекает, сказать трудно, но

объединяет

интерес.

Может

показаться

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

«Радио

Россия»,

может

часами

рассказывать про самолет, который показали на пресс–конференции, или про плазменные

кристаллы.

Редакция:

Как

вы

производите

поступающих материалов?

отбор

с

любовью»

трудно

назвать

научно-

популярной, но мне кажется, что она полезна. Редакция:

Александр

Анатольевич,

и

традиционные наши вопросы. Какие из Вас?

Наверняка,

«Отцу

http://readoz.com/publication/read?i=1004214&p

бы «Незнайку» возьмут в руки. Редакция:

вы

техник», «Левша» и «А почему?». Есть еще

книжная

электронных

журнале, есть постоянные авторы. Что их

проектами

Александр: Лично у меня 3 проекта – «Юный

статистика – в 30% домов нет НИ ОДНОЙ книги. Какие уж тут рекомендации. Пусть хотя

еще

и

бумажных

журналов

вы

читаете? Какие являются ориентиром для Александр: Я ежедневно просматриваю около

десятка

различных

уловить

что-то

конечно,

новостных

изданий

электронных).

оптимистическое.

основном,

Пытаюсь

Иногда

удается. Так, например, президент Медведев

недавно заявил, что слово «инженер» должно

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

Редакция:

увлечениях?

Расскажите

о

ваших

Александр: Не могу ничем удивить читателя.

Вина и охотничьи ружья не коллекционирую,

замков в Лондоне не покупаю, яхты не строю.

Года три назад ходил за грибами. Кто-то укусил

Александр: Легко и просто: уже опубликовали –

в ногу, грибов не нашел.

Редакция: В то время (90-е годы) было

гаджетами пользуетесь?

научной

Александр: Я живу в 15-ти минутах ходьбы от

или еще не успели. Интересно – не интересно.

много хороших журналов для творческой и молодежи.

Была

конкуренция

между ними или сотрудничество?

*** Кроме разве научно-популярного физико-математического журнала для школьников и студентов «Квант», литературно-музыкального журнала с пластинками «Кругозор» и его детского приложения «Колобок» (тоже с пластинками) / Редакция.

Редакция: Читаете ли вы в дороге? Какими

работы, так что читать на ходу не приходится.

Очень люблю телефоны Blackberry. Сейчас у

13


ПРО

№15 (июнь) 2011

граммист

VIP ПЕРСОНА меня их три штуки, время от времени обновляю

Редакция:

Каковы

ваши

планы

на

в них прошивку и протираю мягкой тряпочкой.

будущее?

Редакция: Пятерка ежедневных просмот-

Александр: Такие же, как сейчас. Но хочется

ров Интернет–ресурсов?

публикации?

У

изданиях?

Александр:

вас,

Если

Когда-то

как

не

автора,

секрет,

писал

в

есть

каких

фантастические

рассказы, недавно нашел один из них в Сети.

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

Редакция: Изобретения имеются? В какой

области?

Александр: Два изобретения были сделаны до

прихода в «Юный техник» (я работаю в нем с 1982

года).

Поскольку

я

работал

тогда

в

институте им. Карпова, изобретения имели отношение к физико-химическим исследованиям.

Редакция: За границей довелось побывать? Александр: Был в нескольких странах Европы, в

традиционных «туристических» странах, но к сожалению,

не

был

ни

в

что

жизнь

в

стране

станет

благополучнее и чище в моральном плане.

Александр: В основном, новостные. Редакция:

верить,

США,

ни

в

Редакция:

Отслеживаете

ли

вы

судьбу

ваших авторов? Может сейчас у вас кто–то

из них работает?

Александр: Ответственный редактор журнала «А почему?» Владимир Малов впервые пришел

в

«Юный

техник»

16-летним

автором

фантастического рассказа. Потом работал в «Комсомолке», сейчас работаем вместе.

Редакция: Получаете ли вы благодарности

от бывших авторов, встречали ли вы их в

реальной жизни? Александр:

Для

многих

авторов

«Юный

техник» становился стартовой площадкой в жизнь. народ

Публикации

запоминал

складывались

имена...

Галина

в

книги,

Волевич,

например, которая вела рубрику «Ателье», сейчас

преуспевает

как

дизайнер.

Многие

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

издания.

Редакция:

Какое

у

вас

отношение

к

интернету в целом и к социальным сетям в

экзотических странах, где обезьяны хватают

частности?

Редакция: Как ваши близкие относятся к

человечества. Что касается социальных сетей,

Александр: С уважением. Хотя уборщица в

успешный бизнес–проект.

Ухожу не рано, возвращаюсь не поздно. Как

Редакция: Как вы относитесь к пиратству?

уверенно.

Александр:

туристов на улицах за одежду. вашей работе? нефтяной говорят

компании

врачи:

в

зарабатывает

позе

больше.

Ромберга****

стою

Александр: Интернет это великое изобретение лично я ими не увлекаюсь, но, раз народ

голосует

за

них

Вообще

рублем,

ясно,

осуждаю.

**** Поза Ромберга – положение стоя со сдвинутыми ногами, с закрытыми глазами и вытянутыми вперед руками. Выявляет неспособность сохранить равновесие (пошатывание или падение). Преимущественное направление пошатывания в позе Ромберга в ряде случаев имеет диагностическое значение. Например, при поражении мозжечка больной отклоняется в сторону его пораженного полушария http://ru.wikipedia.org/wiki/Поза_Ромберга.

что

На

это

работе

14


ПРО

№15 (июнь) 2011

граммист

VIP ПЕРСОНА программы

либо

лицензионные,

либо

бесплатные (OpenOffice, например). Дома на ноутбуке тоже. Но – понимаю. Мне кажется, в пиратство

народ

загоняют

непродуманной

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

Редакция: Может у вас были какие либо

ценовой политикой. Вот в супермаркете лежит

интересные ляпы/опечатки в журнале?

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

Александр: Неделю назад в названии фирмы

диск с фильмом. Цена – 530 рублей. Фильм,

всего на «троечку». Покупать диск или скачать

вместо какой-то там «Груп» написали «Труп».

сам, но, если бы фильм стоил 100 рублей,

Просто разгильдяйство.

для общего развития 700 Mb? Каждый решает вопрос о пиратстве отпал бы сам собой.

Редакция: Если увидите последний номер

журнала на трекере – улыбнетесь? Александр:

улыбаюсь

и

Вижу не

время

рыдаю.

от

В

времени.

конце

Не

концов,

довольно большая часть населения в регионах

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

пойдет на пользу. С другой стороны, если мы

На фото выше гость номера: генеральный директор и главный редактор журнала «ЮТ», Фин Александр Анатольевич.

Не знаю, можно ли назвать это интересным.

Редакция: спасибо

интервью.

Вам

дальнейшего

Александр за

столь

Желаем

Анатольевич,

увлекательное

журналу

процветания,

а

«ЮТ»

читателям

новых интересных статей. И пару слов

нашим читателям?

Александр: Думаю, ваши материалы читают

люди близкие к науке и технике. Я желаю им

здоровья, успехов и права гордиться своей

профессией.

15


ПРО

№15 (июнь) 2011

граммист

Александр Никитин,

Дмитрий Ляпин

http://prog-school.ru

УЧЕБНЫЙ ЦЕНТР «ШКОЛА ПРОГРАММИРОВАНИЯ»

КАК И ЗАЧЕМ ПИСАТЬ ХОРОШИЙ КОД. ЧАСТЬ 1

Поговорим о культуре кода. Дело в том, что, к сожалению, 40% программистов даже не понимает значения этого словосочетания. Поэтому попробуем в ряде статей осветить основные моменты, касающиеся культуры написания программного кода. А зачем все это нужно? Приведем

правил

неожиданный

пример.

Если

вы

служили в армии, или были на сборах, то,

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

идеально

должен

военной

быть

заправлена,

белоснежным,

части

солдаты

подворотничок

по

территории

передвигаются

написания

программы,

то

можете

забыть о разработке чего-то большего, чем

сайт-визитка. Конечно, можно и Интернет-

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

но это обрекает вас на вечные глюки, потерю

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

колоннами и идут в ногу. И вообще солдат, а уж

Я сам это прекрасно прочувствовал на себе

себя

Когда опыта было мало, попытки написать что-

тем более офицер, должен представлять из образец

аккуратности

дисциплинированности.

А

зачем

и

все

эти

сложности? Неужели если кровать не будет

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

то

более-менее

серьезное

приводили

к

постоянной головной боли. Я путался в своем

коде, своих названиях, забывал, какие классы

объявил, что они делают, что уже реализовано,

а что – нет. Эта неразбериха приводит к тому,

пояснить.

том,

часть

уже

написанном,

времени

вы

не

таким огромным объемом живой силы, как

начинает загибаться. Более того, это еще и

эффективного

что

большую

разрабатываете что-то новое, а разбираетесь в

и

в

что

для

оперативного

Дело

управления

и

проект

потихоньку

личный состав военной части, который решает,

морально очень тяжело.

строжайшая, железная дисциплина! И как не

Сначала вы охвачены энтузиазмом, вы рветесь

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

кода (что уже неверно). А через какое-то время

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

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

между

прочим,

боевые

задачи,

необходима

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

А

цена

такой

высока, как вы понимаете.

работы

слишком

Вернемся к программированию Кстати, и от нашей работы иногда напрямую

зависят жизни людей. По аналогии с военной

тематикой можно сказать, что если у вас и вашей

команды

нет

строго

выработанных

в бой, хотите сразу же приступить к написанию

вы уже готовы проклясть всю эту разработку,

времени и внимания, а конца и края так и не

видно. Эти

«грабли»

в

программировании

многим

очень хорошо известны. Не наступить на них

невозможно, но совершенно не обязательно

попадать на них каждый раз. Важно только

понимать, какие-то

что

недостаточно

правила,

просто

необходимо

знать

именно

16


ПРО

№15 (июнь) 2011

граммист

УЧЕБНЫЙ ЦЕНТР «ШКОЛА ПРОГРАММИРОВАНИЯ»

следовать им: то есть использовать всегда.

задавал

Теперь перейдем к конкретным правилам, пока что самым простым. Здесь мы опишем правила, не

связанные

нотацией

данная

или

тема

с

какой-либо

языком.

не

сильно ошибаетесь.

очень

Если

конкретной

думаете,

принципиальна,

что то

Именно визуальная ясность позволяет проще

нам

неопределенный

вопрос

«Сколько?», и мы как стадо баранов ему «во-оо-семьдесят». Да, эту цифру мы знали хорошо.

С нас требовали, чтобы строчки не превышали

этой длинны, то есть чтобы помещались на экране

монитора.

Обычно

приходится

переносить либо вызовы функций с большим

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

сложные условия в конструкциях типа if. Но

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

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

тельно серьезного продукта.

горизонтали.

На что следует обращать внимание?

Используйте

Длина строки не должна превышать 80-

табом,

принципиально важно при разработке относи-

символов. Помню еще на первом курсе наш

первый преподаватель по программированию

код был виден без прокручивания экрана по

табуляцию

вместо

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

пробелов.

Это

и

быстрее

(табуляция обычно соответствует нескольким

пробелам),

и

удобней

для

редактирования,

17


ПРО

№15 (июнь) 2011

граммист

УЧЕБНЫЙ ЦЕНТР «ШКОЛА ПРОГРАММИРОВАНИЯ» когда нужно, например, сдвинуть код влево. Во

переменными kkk, mrstb, g, _g. Программа на

есть кнопки для сдвига влево или вправо

во всей своей писанине для меня до сих пор

многих средах программирования в тулбаре

блоков

кода.

Достаточно

кусок кода и нажать на

выделить

соответствующий

значок.

Следите

отступов

за

правильным

внутри

нужный

количеством

всех

конструкций.

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

Не используйте в качестве имен функций

русские слова, написанные транслитом.

Я убежден, что названия типа risuemKrug()

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

некрасивы,

среды

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

соответствовать

его

вложенности.

программирования

Многие

сейчас

автома-

тически выравнивают код, но не все, так что

следить

нужно

самому.

Функция

должна

например.

любым

в

отличие

Названия

с

программистом,

от

drawCircle(),

использованием

в

отличие

от

использования «русиш нэйминг». Даже если вы

помещаться на экран. Это конечно в идеале, но

не предполагаете, что кто-либо еще будет

составляет более двух экранов – это явный

правилу.

несколько

Постскриптум

очень

желательно.

Если

размер

функции

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

программировать

Когда

какую-то

начинаешь

задачу,

часто

бывает, что нет желания отвлекаться на всякие

мелочи,

например,

вынести

в

смотреть ваш код, все равно следуйте этому

Нарушение любого из описанных выше правил

отдельную

– это лишь вершина айсберга и сразу бросается

функция исходного кода помимо решения своих

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

левой функциональности, которой просто здесь

Но важно не мнение окружающих, а ваша

функцию запись логов и т.п. В итоге каждая

основных задач, содержит еще кучу строк не место*.

Используйте

функций

и

переменных

gdfui(),

«говорящие»

переменных.

типа

лучше

kkk,

введите

названия

Откажитесь

или

формирует негативное мнение об авторе кода? собственная

программ.

эффективность

при

разработке

от

Для каждого конкретного языка программи-

название

которые содержат много всего полезного, что

функций

длинное

в глаза при просмотре чужого кода. Надо ли

вроде

рования

существуют

отдельные

нотации,

getDoubleFromUnsignedInt(), зато сразу будет

можно взять на вооружение, но это – тема

размере

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

ясно,

что

говорящих

происходит.

программы функций

и

При

определенном

использование

переменных

не

вообще

сделает невозможным какую-либо дальнейшую

разработку. Один

парень,

программу

на

абитуриент,

ассемблере,

показывал

нам

изобилующую

отдельной

статьи.

Пока

же

предлагаю

и везде.

Ресурсы • Школа Программирования http://www.prog-school.ru

* Стоит отметить, что бывают исключения. Например, если в функции есть оператор switch, то она может быть достаточно громоздкой / Автор. ** Учебный центр «Школа Программирования» был образован выпускниками МГТУ им. Баумана на базе образовательного интернет-проекта «Школа Программирования» http://prog-school.ru. За время существования интернет-школы программирования ее учебными программами воспользовались более 10 000 человек в России, странах СНГ и дальнем зарубежье http://proglive.ru/about / Редакция.

18


ПРО

№15 (июнь) 2011

граммист

НОВОСТИ ПО Юрий Швецов

yomayo@pisem.net

РУССКИЙ ЯЗЫК И... ПРОГРАММИРОВАНИЕ

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

нужен

ли

вообще

русский

программировании? «...Существует

тесная

язык

связь

в

между

способностью ясно выражать свои мысли и способностью составлять программы для ЭВМ. Характерно в связи с этим заявление руко-

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

ровании

реализация

можно по школьному давать однобуквенные

идентификаторы

http://ru.wikipedia.org/wiki/JCL

http://ru.wikipedia.org/wiki/PL/I,

не

JCL

или

а

PL/1

японский

язык». (Р.Лингер, Х.Миллс, Б. Уитт. «Теория и практика

структурного

программирования»,

стр. 28. Пер. с англ.- М.:Мир,1982.-406с.,ил.).

иденти-

тысячи: так, сервис Jadeite обеспечивает поиск среди 35 000 методов и 4 100 классов, которые

затеряться

является

знать

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

(а так же классов и их членов) может иметься

программисту,

необходимо

(или

фикаторы типа «src» и «dst»). Но этих функций

сейчас

который

функций

тоже весьма проста, локальным переменным

на одной из конференций: «Наиболее важным

языком,

большинства

рованных

входят

в

библиотеку

интерфейсов в

таком

Javadoc.

лесу,

документиЧтобы

надо

не

давать

идентификаторам такие имена, которые бы исчерпывающе

описывали

сущность

именуемого объекта. Чем длиннее становится программа, тем больше становится иденти-

фикаторов,

тем

тщательнее

их

необходимо

Что японцу хорошо, то и русскому не смерть».

именовать во избежание путаницы.

Почему,

вопрос?

Т.к. родной язык априори лучше передает

математикой. Так почему в школе на уроках

сущности программы желательно на родном

собственно

Программирование

возник

имеет

такой

много

общего

с

нам хватало «x,y,z», а в программировании нет?

Да

потому

что

школьные

задачи

были

достаточно просты: в задачах имелось лишь несколько переменных. Для решения таких задач

хватало

45-ти

минут.

В

программи-

смысловые оттенки речи, то именовать все

языке. «На родном ли?» – возразят многие и

будут по-своему правы. Английский язык в

программировании – своего рода эсперанто

http://ru.wikipedia.org/wiki/Эсперанто,

который

дает ощутить себя членом многомиллионного

19


ПРО

№15 (июнь) 2011

граммист

НОВОСТИ ПО сообщества

программистов.

достаточно

иметь

употребленных

знаний.

Для

понимания

идентификаторов весьма

часто

средний

уровень

Русский язык в программировании: «за» и

«против»

Преимущества программирования на русском

очевидны:

думаешь

только

над

решаемой

торгового баланса» – это «balance of trade

balance»? Чувствуете, какое масло масляное? Но

это

не

программу

вся

проблема.

потом

сделать

надо

обратный

предложение

читать,

перевод.

«сквозь

оголенный

Написанную

будет

Русское

трамвай

провод»,

т.е.

проходил

будучи

правильно

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

переведено обратно, может потом звучать так:

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

«Через трамвай шествовал голый кондуктор».

меньше, ибо идентификаторы и так много о

«Гамлета» и понимаете юмор фразы «Two beer

обратно.

себе

Комментариев

говорят.

выражаться

выражаться

четко

на

нужно

Родной и

значительно

язык

глубоко.

неродном,

позволит

Чтобы

необходимо

так его

Конечно,

если

вы

читаете

испугают эти трудности. Но неплохо помнить, что

за

программирование

мышление)

общения с носителями английского языка?

полушария головного мозга.

постоянно программирующих словарный запас

Ложка дегтя

этих строк однажды довелось услышать от

Все

в

нашей

стране

похвастать

опытом

Наверное, доли процента населения. Даже у

английских слов достаточно ограничен. Автору

своих коллег http://www.eme.ru такие слова:

подлиннике

or not two beer? That is the question», то вас не

глубоко знать, а это все-таки редкость. Кто

может

в

(образное

и

знание

мышление)

аргументы

программирования»

в

(абстрактное

иностранных отвечают

пользу

языков

разные

«русского

многочисленны

и

«пуршасе» и «инвоице». Это было произнесено

обоснованы, но все они хороши «в теории». На

называл

Поддержку

в ситуации, когда один русский программист другому

идентификаторы

в

русскому

русской

программисту

же

программе,

практике имеют

же

сплошное

идентификаторов

очень

малое

разочарование. на

число

кириллице

языков/сред

написанной для русского рынка. Но поскольку

разработки (сразу оговорюсь: здесь не имеется

каком языке, а с программой были проблемы,

типа языка «Глагол» http://progopedia.ru/langu-

программа

была

написана

на

сами

знаете

опытный программист диктовал своему коллеге

побуквенно

как

иначе?

ведь

можно

перепутать) на что надо обратить внимание.

Нередко именуемому объекту программы легко

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

или фразу. Но не всегда. Как перевести на английский слова «сторно», «ИНН», «ОКПО»

или обросшее легендами слово «крыжить»?

Если «сальдо» – это «balance», а «торговый

баланс» – это «trade balance», то «сальдо

в виду 1С и разработки энтузиастов-одиночек age/glagol,

«Валентина»

soft.nx0.ru/proekt_valentina,

http://alminПРОФТ

http://proft5.ru и т.п.). Даже если такие иденти-

фикаторы возможны, то все равно придется

постоянно переключаться с русского регистра

на латинский: имена функций, классов – на

латинице. При всем том, что в Visual Studio

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

отменяет

необходимости

переключаться

с

одного регистра на другой. Есть такое мнение,

что «язык – ничто, а библиотеки – это все». Это

20


ПРО

№15 (июнь) 2011

граммист

НОВОСТИ ПО «наше все» – это сплошная латиница. Рискнув-

шего писать по-русски ожидают постоянные

книгу

Питер

Нортон

с

в

соавторстве

с

Василием Пупкиным. Но, самое главное, он не

нажатия «Alt+Shift». Не получается отделить

обрастет той инфраструктурой, которая есть

коктейлей.

Инфраструктурой, которая включает в себя не

зерна от плевел, агнцев от козлищ, мух от

Язык

программирования

международным.

В

должен

идеале,

быть

программисты

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

удобен: на русском, английском, китайском,

вокруг всех мировых языков типа С или Java.

только компилятор с IDE и библиотеками, но и

миллионы людей, готовых этот язык учить и

использовать, популяризировать и развивать. Какой

язык

программирования

самый

французском, хинди. И должны существовать

популярный?

автоматический

C, C++, Java, C#, Python, Ruby? Ошибаетесь.

мультиязычные

словари,

перевод

обеспечивающие

идентификаторов,

которые по своей сути – слова и фразы, с одного

языка

на

другой.

Программу,

написанную

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

Самый популярный язык в программировании – это английский. Какая разница, за какими

названиями он прячется, Pascal или С, все

равно

все

типы,

функции,

классы

это

отдельных слов и фраз решается значительно

английские фразы, слова или сокращения.

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

Конечно, знать английский язык нисколько не

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

Отмечу только, что «в центр» такой системы

логично

поместить

«ортогональность»

неоднозначностей.

язык,

обеспечивающий

семантики В

теории,

и

лишенный

наилучший

кандидат на эру роль – эсперанто. На практике

этим языком опять окажется английский с его

омонимами и неоднозначностями. Возможно, отечественное

ИТ-сообщество

дозреет

до

вредно,

даже

полезно.

Для

многих

это

престижно, а для особо впечатлительных – еще

и

круто.

Но,

желая

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

русским

языком в своей профессии, я не отстаиваю

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

Между тем, по оценкам экспертов производи-

тельность

труда

программистов

в

России

создания «русского языка программирования».

примерно на 30% ниже такого же показателя

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

написанного кода). Одна из возможных причин

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

на русскоязычную аудиторию. Искусственное

ограничение ареала обитания снизит шансы на популярность «языка светлого завтра». Ведь

программистов в США (не в деньгах, в строках

в

том,

что

американские

работают только с родным языком. Нам же

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

английский

в

программа

должны

ему будут закрыты многие двери: он не заменит

невысокой

проводиться

комментариев).

Javascript

в

браузерах,

на

международные

нем

не

будут

олимпиады

по

программированию. На нем не напишут Linux, Windows или MacOS. Его не будут изучать в

Гарварде и Кембридже, о нем не напишет

программисты

остальном

роли

при

относительно

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

Конечно,

(хорошая

понятна

для

умного

без и

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

язык – задача посильная. Но он все равно будет не родной язык.

21


ПРО

№15 (июнь) 2011

граммист

НОВОСТИ ПО Эргономика

русского и латинского алфавитов могут при

Использование

русского

языка

в

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

смешанном

заблуждение.

использовании Это

злоумышленникам.

решено,

Причин две:

подменой букв одного алфавита на похожие по

переводить на русский: "fopen" или "printf" все

начертанию

буквы

2) половина служебных символов отсутствует в

// a - латинская

{ int а;

// а - русская

] { } | \ ' « ».

}

русской раскладке клавиатуры: ` ~ @ # $ ^ & [

много.

Кто

виноват?

С

одной

стороны, наш алфавит, в котором на 7 букв

больше, чем в латинице. С другой, западные

вендоры даже не подозревают, что у нас из-за

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

Что делать? IDE для потенциального «русского

языка

программирования»

должна

быть

в

другого

может

быть

использован и в программировании, например: int a;

очень

алфавитов

доменных именах быть не должно. Фокус с

равно надо писать латиницей;

Это

разных

что

смешения

1) имена функций, классов никто не собирался

из

Было

в

лазейки

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

букв

вводить

открывает

а = 0;

// какой переменной присвоен 0?

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

образом можно замаскировать свои замыслы и

в

каких

целях

это

использовать.

Между

прочим, латиница тоже не защищена от такого

рода проблем, буквы «O» и «l» и цифры «0» и

«1»

весьма

похожи.

Просто

с

началом

использования кириллицы в программировании

таких

вариантов

становится

значительно

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

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

применялись

переключателя «рус/лат». «Alt-Shift» или «Ctrl-

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

В

клавиатуре,

которую

мы

имеем,

нет

Shift» неуклюжи. Для переключения должна

использоваться одна клавиша, допустим, это

будет

«Ctrl».

возможность

При

этом

временного

надо

оставить

переключения

на

латиницу. Например, печатаем по-русски, но

необходимо набрать «[]», которых нет в русской раскладке.

Нажимаем

«Ctrl»

и

«хъ»

и

получаем «[]». Отпускаем «Ctrl» и продолжаем

печатать по-русски. Безопасность

В преддверии запуска доменной зоны «.рф» при

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

мнению, что одинаковые по начертанию буквы

мошенниками

http://www.open-

net.ru/opennews/art.shtml?num=28998. По крайНо

ведь

были

попытки

http://www.open-

net.ru/opennews/art.shtml?num=3052 внедрения

«лазеек», хотя и не таким способом. И где

гарантии, что все они стали известны? О

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

Что делать? Первый путь: запретить, как в домене

«.рф»,

идентификаторе

латиницы.

употребление

как

Однако

в

кириллицы,

в

одном

так

и

вышеприведенном

примере и это не поможет. Второй путь: ничего

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

показываться

в

IDE

одним

цветом

или

шрифтом, а русские – другим. Третий путь:

22


ПРО

№15 (июнь) 2011

граммист

НОВОСТИ ПО компилятор

должен

начертание

одинаковое,

идентификаторов,

у

выдавать

которых а

список

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

символов

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

графическое

коды

разные. А лучше всего, наверное, объединить второй и третий подходы. И баба с возу, и волки сыты.

Попытки

приблизиться

языку

к

естественному

так и не станет похож на наш родной, однако

будет

отличать

излишняя

сложность. Например,

в

языке

синтаксическая

«Кумир»

pedia.org/wiki/КуМир

частица

http://ru.wiki-

«не»

может

вставляться вовнутрь идентификатора. Если

объект

«дверь

открыта»

что совсем скоро будут программировать если

лучше,

программирования,

авторы языка учли двойные отрицания? Никак:

не

на

естественном

Создатели

языков

языке,

к

то

нему

старались

на

языке

близкому.

сделать

свои

детища похожими на естественную речь. Вот пример

age/cobol

из

Кобола

«ПЕРЕМЕННОЙ

http://progopedia.ru/langu-

переводе X

на

русский):

ПРИСВОИТЬ

Y».

Пресловутые «BEGIN» и «END» возникли в

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

попытки

приблизить

искусственные

языки,

можно

чем

«НЕ

записать

значение

«ложь»,

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

то

имеет

На заре компьютерной эры, при появлении

«дверь

НЕ

открыта», и это будет читаться значительно

последнее

более

дверь

открыта»,

«математично».

Но

хотя

как

если из объекта «никто НЕ закрыл дверь»

удалить частицу «НЕ», то получится «никто

закрыл

дверь».

Вывод:

нужно.

Фраза

«!

учесть

все

нюансы

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

открыта»

будет

выглядеть как исковерканная речь. Но ведь англичане

привыкли

к

«copy

file»,

хотя

правильнее было бы «to copy the file». И мы

изобретенные для программирования, к языкам

привыкнем и не будем в обычной речи сыпать

человеческие языки, а русский в особенности.

если».

естественным провалились. Слишком сложны Уместно

вспомнить

анекдот

про

разами «если истинно затем учтем это конец

суперкомпьютер, который сломался на диалоге:

В

нет, наверное».

«далее», «затем», которые не генерируют кода

Простота языка может быть – самостоятельной

прочим

«– Ты будешь встречать старый Новый год? – Да

ценностью.

Это

soft.nx0.ru/proekt_valentina

есть

http://almin-

слова-связки

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

Такое

подражание

обычной речи тоже не принесет пользы. Когда

программирования», так и для любого другого.

всегда ясно, где начало, а где бывает «далее» и

Попытки

же

«русского

привнести

как

«Валентина»

для

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

справедливо

языке

в

языка язык

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

наш

язык

просто

соткан

из

противоречий, зачем они нужны еще и в

программировании? Во-вторых, результат будет

текст течет слева направо и сверху вниз, то

«затем».

Зачем нам русский Кобол? Чем лаконичнее

язык, чем ближе к математической записи, тем

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

23


ПРО

№15 (июнь) 2011

граммист

НОВОСТИ ПО идентификаторах (в «Кумире» pedia.org/wiki/КуМир

и

русификаторе

http://rus.24bb.ru/viewtopic.php?id=55) приветствовать.

Традиция

ДОСЬЕ ЖУРНАЛА

http://ru.wiki-

разделять

С++

следует

слова

пробелами существует почти во всех языках,

это делает текст удобочитаемым. Согласитесь,

что идентификатор «длина входной строки»

выглядит

предпочтительнее,

чем

«ДлинаВходнойСтроки» или «длина_входной_

строки». Одиночные пробелы внутри иденти-

фикаторов сделали бы идентификаторы более

естественными. Но в таком случае мы теряем

право

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

одиночный

пробел

в

качестве разделителя лексем (теоретически это

все-таки

приведет

возможно,

к

усложнению

но

на

Швецов Юрий Константинович

практике

синтаксиса

и

компилятора). Можно использовать обходной

маневр: использовать не пробел с кодом 32, а

пробел с кодом 160. Но второго пробела нет на клавиатуре. На помощь могла бы прийти IDE.

Например, при нажатии «Ctrl» + «пробел»

формировать символ с кодом 160. Но лучше не

После

выпуска

служил

в

Белоомуте

Московской области на центре спутниковой

связи

в

отделе

вычислительной

техники. Дослужился до майора. Занимался

обслуживанием

вычислительной

техники, потом программировал. В конце

стоит этого делать. По своему опыту скажу, что

1995 года уволился по состоянию здо-

одного – дело привычки. А IDE могла бы

ском

воспринято в качестве идентификатора. При

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

делать два пробела там, где раньше хватало

графическим

образом

подсказать,

что

наличии синтаксической раскраски, особенно

хорошей

и

конкретного проблема

заточенной

языка

вообще

появляется плюсов...

под

синтаксис

программирования,

уходит.

Зато

эта

сколько

Постскриптум

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

мы когда-нибудь доживем до того дня, когда при

программировании

не

надо

будет

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

статей российского экспорта будет экспорт программного обеспечения.

ровья. Работал программистом в Московнаучно-исследовательском

радио-

техническом институте, делал программу

С 1997 года и по настоящее время работал

системным администратором в различных

организациях. Сейчас – системный адми-

нистратор сети ресторанов «Грабли».

Статья на сайте журнала «Компьютерра»:

«Исповедь правового нигилиста» http://old.

computerra.ru/online/influence/14455.

Два сына, 24 и 17 лет, дочери 5 лет.

E-mail: yomayo@pisem.net.

24


ПРО

№14 (май) 2011

граммист

utkin295@yandex.ru

Utkin

ОБЩИЕ ВОПРОСЫ

ПОЧЕМУ НЕТ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА?

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

общем, ко всему тому, что, так или иначе,

годах примерно в 80-х прошлого столетия в

исходить из определения интеллекта – «это

впервые во всеуслышание заявили японцы в связи

с

их

компьютеров

программой

5-го

поколения.

по

С

созданию тех

пор

знакомо

программистам.

способность,

познавательные

которая

Итак,

мы

будем

объединяет

способности

все

индивида:

сомнительного рода СМИ и ученые из разряда

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

или иная лаборатория находится на пороге

Соответственно искусственный интеллект это

«британских» неоднократно заявляли, что та научной революции в области искусственного

мышление,

воображение»

интеллект

индивида

Википедия.

созданного

человеком

интеллекта, однако воз и ныне там.

искусственно, не естественным путем.

Кстати, уж если универсального рецепта и нет,

Причины? Вот часть из них

видно и невооруженным глазом. В данной

1. Отсутствие рационального определения

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

попытаемся

искусственного рассмотреть

предыдущих исследователей.

интеллекта

причины

неудач

известный

и

ее

решения.

вместе

с

Факт

тем

давно

упорно

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

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

интеллект». Да такое бывает – термин есть, а значения

нет.

В

сделай то, не знаю что». Потому что при искусственного

интеллекта

в

качестве эталона обычно выбирают интеллект

Правильное формулирование условия задачи половина

Задача из разряда «пойди туда, не знаю куда, создании

Загадочное слово «интеллект»

это

условия задачи

результате

многие

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

термина

интеллект,

возможно,

изучить же все устройства интеллекта еще не

удалось

никому.

Как

работает

память

человека? Неизвестно. Как человек представ-

ляет объекты реального мира внутри себя?

Неизвестно. Как осуществляется мышление?

Неизвестно.

И

так

можно

продолжать

каждому пункту. При этом совершенно забыто

разработчики вкладывают в данное понятие

такое явление – как самообучение человека.

разнонаправлены. Это ведет в свою очередь к

Конечно,

совершенно различные значения и усилия их

сферическим коням, велосипедам и граблям. В * «Интеллект – способность системы создавать в ходе самообучения программы (в первую очередь эвристические) для решения задач определенного класса сложности и решать эти задачи» / Википедия.

по

есть

направленные

многочисленные

изучение

работы,

вышеупомянутых

25


ПРО

№14 (май) 2011

граммист

ОБЩИЕ ВОПРОСЫ способностей, однако общей картины они не

дают, даже в рамках своих дисциплин. Сюда же

можно отнести и разум. Нет ответов на ряд

вопросов

инстинкты, частями

системы?

как

работает

подсознание?

интеллекта Также

не

или

саморегуляция,

Являются это

известны

ли

они

независимые многие

функций вместилища интеллекта – мозга.

из

2. Гордыня Самая обычная. Ноги тянутся от религии и

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

человека и остальной живой мир, совершенно

не

беря

в

расчет

функциональные

узлы,

выполняющие одинаковые функции, да и еще

на одной элементной базе. Сюда же вносится рассуждения вида: «Какие мы умные!

сделал

человека.

из

обезьяны

Люди

ленивую

догадались

Труд

обезьяну

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

окружающие их предметы» и пр. А на биологию

нам

«перпендикулярно»

работают

используют

побольше

переваривания

камни

занимательного.

абсурдного

пищи

что

человека,

муравьи

(инструменты)

и

Иногда

в

много

чего

доходит

качестве

птицы

и

для

еще

до

достоинства

«человеков» (см. фото 1) рассматриваются и

вовсе синтетические вещи вроде торговли или

натурального обмена (в биологии аналог –

Фото 1. Homo sapiens, вершина эволюции себя

тем,

непременно

что

на

будет

следующем

обладать

уровне

оно

возможностью

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

и пр.

3. Отсутствие единой системы мер и весов Прямое следствие пункта 1. В чем измеряется искусственный

интеллект?

коэффициент

интеллекта.

попугаев?

Есть

коэффициент

такой

каждого

Сколько

в

показатель, Но

британского

нем

как

каждый

ученого

симбиоз, до 80% организмов, так или иначе,

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

искусство!

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

являются

Ага,

симбионтами).

доказано,

что

Люди

дельфинам

придумали

нравится

большая часть отвечающих получала средние

оценки. При этом всем как-то все равно, что

рисовать. Вот, например, образец того, как это

такое

Сюда же примешивается еще и антинаучные

оценивать интеллект?) смогли выразить всего-

происходит http://rutube.ru/tracks/3302579.html. или недоказанные феномены – душа, аура,

экстрасенсорика и прочее. Человечество тешит

сложное

психологи

кто

явление же

еще

как

интеллект

догадается

так

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

** «Если человек ответил так же, как и Айзенк, то он тем самым всего лишь демонстрирует стандартность своего мышления, быструю и предсказуемую реакцию на несложный раздражитель. Чуть менее плоский человек сто раз задумается, прежде чем ответить... Существует несметное множество возможных решений каждой подобной задачи. Чем вы умнее, тем вероятнее, что ваше решение не совпадет с авторским. Практический смысл здесь только в одном: тому, кто дает «правильный» ответ по тесту, будет легче вписаться в усредненную систему образования и общаться с людьми, которые мыслят так же, как он. В общем, Айзенк тестирует идеальную усредненность» / Автор.

26


ПРО

№14 (май) 2011

граммист

ОБЩИЕ ВОПРОСЫ Это реакция на самый распространенный тест

то самые умные из животных на планете – это

IQ – тест Айзенка***. Автор этих строк доктор

птицы. А это далеко не люди, так то.

В.А. Васильев. Иными словами – данный тест

4. Интеллект вне зависимости от биоло-

физико-математических наук, академик РАН тестирует

«сферический

интеллект

сферического коня в сферическом вакууме».

По такому же принципу составлены тесты к

гической составляющей

Человек – существо биосоциальное. Причем

«био» на первом месте не просто, потому что

ЕГЭ, так вот большинство детей одаренных или

так слово звучит лучше. Значительную часть

«дебилов») тесты обычно сдают ниже среднего.

инстинкты и разного рода гормоны. Причем на

нестандартно

мыслящих

не

просто

Также замечена прямая зависимость между

результатами

теста

и

числом

тестов

пройденных испытуемым до этого. Чем больше

человеческого

поведения

определяют

протяжении всей его жизни – начиная от

первого крика (прочистить дыхательные пути)

и

заканчивая

предсмертным

завещанием

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

(забота о последующих поколениях).

фото 2):

Аналогичные модели поведения можно найти и

результатам данных тестов) он становится (см.

у прочих социальных животных – львы, собаки,

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

Мода (способ ухаживания через посторонние

вещи, привлечение внимание потенциального

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

конкуренция), игры (способ обучения), все это

и еще много чего объясняется элементарным

поведением. Причем большая часть поведения направлено на выявлении статусов человека в

обществе, а также перераспределение его в

общей иерархии. В общем, все это можно найти

Фото 2. Представитель

интеллектуального большинства

в каком-нибудь научно-популярном фильме о

жизни гиен или сурикатов, см. фото 3. Есть

еще

одна

неприятная

история,

уже

Если же речь идет о межвидовом сравнении

касательно наших достижений. Современная

являющийся отношением массы мозга к массе

артефактов, указывающих, что до нас на Земле

интеллекта, то обычно берется коэффициент,

тела. Чем меньше мозга требуется на тело, тем

соответственно организм умней.

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

археология

нашла

довольно-таки

много

кто уже вовсю жил (в разные временные

эпохи). Поэтому вполне вероятно, что многое

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

обменено)…

*** Айзенк (Eysenck) Ханс Юрген, (4.03.1916, Берлин, Германия - 4.09.1997) - английский психолог (во время его деятельности явления «британские ученые» не существовало), один из лидеров биологического направления в психологии, создатель факторной теории личности. Автор ряда работ, Основатель и редактор журналов «Personality and Individual Differences» и «Behaviour Research and Therapy». С 1939. по 1945 г. работал в качестве психолога-экспериментатора в госпитале Mill Hill Emergency, с 1946 г. по 1955 г. — заведующий основанного им отделения психологии при Институте психиатрии госпиталей Маудсли и Бетлем, с 1955 г. по 1983 г. — профессор Института психологии при Лондонском университете, а с 1983г. — почетный профессор психологии / Википедия.

27


ПРО

№14 (май) 2011

граммист

ОБЩИЕ ВОПРОСЫ докладывают и к 18-ти годам жизни), а хочется

много и сразу. Поэтому нейронные сети быстро

скатились к сферическим абсолютно черным и

естественно

призваны

находящимся

решать

сугубо

в

вакууме

и

специфические

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

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

нейросетью

большинстве

ученые

случаев

в

подавляющем

рассматривают

персептроны, всего лишь небольшой процент от всех возможных типов нейронных сетей.

Фото 3. Семейное фото на юбилее дедушки

Кроме того, персептроны не умеют решать ряд

Задуматься над этим вопросом можно здесь:

http://interest-planet.ru/blog/456.html

и

http://happylife.org.ua/blog/

здесь

ru/1217.htm.

задач

(доказано

еще

в

70-х

годах).

Пока

нечто

более

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

за

50

лет

работ

ожидалось

грандиозное. В общем, нейронные сети имеют самое отдаленное отношение к интеллекту и

5. Использование моделей с неизученными

пытаются решать только узкие задачи.

свойствами

Итого

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

Указанное здесь, далеко не полный перечень

их

финансирования

также большие и неоправданные надежды на использование.

примерно

лет

50

Нейросети

(даже

наш

известны

журнал

причин

(например,

современная

научных

система

исследований,

породившая такое явление, как британские

«Программист» таки не удержался – тиснул

ученые

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

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

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

срисуем

мозг

человека

как

множество

нейронов и будем нам счастье. Тут кто-то

вспомнил про пункт 1 – мозг (также как и интеллект)

не

изучен,

однако.

Энтузиазм

это

большая

отдельная

тема).

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

комплексно. Сейчас же наблюдается другой

подход – попытка разложить интеллект по тем

проявлениям функций, которые нам известны на данный момент.

немного поутих, когда еще и пришло осознание

Ресурсы

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

• Википедия. Искусственный интеллект

факта того, что имеющиеся на тот момент аналог мозга в короткие сроки. Следующий

гвоздь в крышку гроба данной идеи был тот

http://ru.wikipedia.org/wiki/Искусственный_

интеллект

факт, что человеку на получение полноценного

• Википедия. Интеллект

мнение,

• Википедия. Симбиоз

интеллекта требуется не 10 минут, а годы (есть что

представителям

некоторым

все-таки

отдельным

интеллекта

не

http://ru.wikipedia.org/wiki/Интеллект http://ru.wikipedia.org/wiki/Симбиоз

28


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ Кирилл Черников

Kirillperm@yandex.ru

МОДЕЛИРОВАНИЕ ПРОЦЕССА ЭМОЦИОНАЛЬНОГО ВОСПИТАНИЯ РОБОТОВ

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

Введение

свойствами:

В

настоящее

время

в

Пермском

по

разработке

математической

государственном университете ведутся работы эмоциональных

программных

роботов,

систем,

1. Область определения

теории

2.

моделирующих

4.

созданию

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

,

для любого

3.

При

произвольная

рассмотрены

взаимодействия оказывающих частности,

в

различные

роботов

воздействия работе

[2]

и

моделей

ситуации

субъектов,

на

роботов.

В

рассматривается

простейшая ситуация взаимодействия одного

субъекта

и

одного

робота

могут

эмоционального

робота.

Кроме этого, была рассмотрена ситуация, когда на

оказывать

воздействие

несколько субъектов, с учетом того, что данное

воздействие не является одновременным [4]. Прежде

чем

программной

описывать

системы,

вкратце

реализацию напомним

основные понятия, приведенные в работе [1]. Сюжеты, эмоции и воспитание Пусть

– время. Функцию

сюжетом,

если

она

будем называть

обладает

следующими

;

– ограниченная функция.

Функцию

реализации

;

– однозначная функция;

реагирующих на звуковые раздражители [1-4]. программной

:

, удовлетворяющую соотношению ,

где

функция,

назовем

функцией

внутренних переживаний робота. Будем

говорить,

что

сюжет

порождает

внутренние переживания робота.

Функцию внутренних переживаний робота назовем

условиям:

эмоцией,

если

1. Область определения 2.

(условие

она :

эквивалентно

удовлетворяет ;

завершению

эмоций при прекращении действия сюжета или

до его прекращения);

3.

однозначная функция;

4.

;

5.

6.

;

7.

В

8.

В

– знакопостоянная функция; области

определения

существует

области

определения

существует

производная

;

29


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ единственная точка

, такая, что

;

9.

эмоциональных роботов

назовем функцию вида (1):

на

сюжетах

Воспитанием

функцию вида (2):

на сюжетах

видно

время

-

удовлетворяет текущее

на

эмоций,

действия

субъектом за время

всех

воспитание, .

из

рисунка,

несколько

обладающих

характеристик

соотношению действия

настоящей эмоции от начала ее проявления, время

роботов,

воздействие может

и

на

быть

в

рассматриваемой

звукового сигнала воздействует одновременно

.

время

оказывающих

роботов

ситуации, один субъект посредством подачи

(2),

, где

субъектов,

взаимодействие

проиллюстрировано как на рисунке 1. Как

назовем

– текущее время,

Рассматриваемое

эмоциональных

(1)

общее

памяти прошлых событий или коэффициентами

Ситуация взаимодействия 1 субъект – N

при

Текущее

назовем коэффициентами

эмоции.

;

Элементарным воспитанием

где

Коэффициенты

памяти. Тактом назовем время действия одной

при

10.

и

предыдущих

полученное

испытываемые

эмоциональных

различными

(характеристики

роботом

эмоции).

роботов,

наборами

влияют

Роботы

на в

ответ на полученное раздражение формируют независимо

друг

от

друга

свою

ответную

реакцию, то есть эмоцию [1, 5]. Эмоции же в свою

очередь

формируют

эмоциональное

воспитания роботов на данном сюжете, которое

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

сюжету,

раздражителю Определим

[1].

качест-

венную сторону воздействия

на

субъекта

эмоциональных

роботов,

то

есть,

конкретную цию

функ-

сюжета

применительно нашей

качестве будем

задаче.

к

В

сюжета

предполагать

такую характеристи-

ку звукового сигнаРис. 1. Взаимодействие 1 субъект - N эмоциональных роботов

ла, как громкость. В

работе [3] было по-

30


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ казано,

что

функция

изменения

громкости

определяющая

величину

верхнего

порога

жет быть взята в качестве сюжета (то есть

показывающая

величину

нижнего

порога

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

определению

мо-

сюжета,

введенному в работе [1]). Кроме этого, в работе

[3]

отсутствия эмоций робота,

– константа,

отсутствия эмоций робота. Таким образом (5):

дополнительно введены еще два сюжета,

основанные на функции какая

из

является

предложенных

наиболее

моделирования

,

и

функций

подходящей

эмоциональных

(5)

показано,

для

сюжетов

задачи

роботов,

реагирующих на такой тип раздражителя, как

Введение

позволяет

модели

двух

и

порогов

повысить в

вместо

гибкость

большой

предлагаемой

мере

учитывать

громкость звукового сигнала. Таким образом, в

особенности

нами ситуации была взята функция (3):

ных роботов, реагирующих на данный тип

качестве функции сюжета в рассматриваемой

(3) где

промежутки

,

,

,

времени,

через

равные

которые

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

,

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

.

Согласно работе [3] функция эмоции в случаи действия

сюжета

следующим образом (4):

может

выглядеть

,

,

,

– заранее

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

набор характеристик каждого эмоционального

робота. Этот набор включает:

1. Коэффициент памяти эмоционального робота (будем

придерживаться

коэффициент константой

памяти

на

2.

3.

, при которой робот не будет

ситуации

положительных,

эмоций.

функция

Применительно

эмоций

не

к

два:

и

,

где

является

действия,

как

– нижний порог отсутствия эмоций.

Особенности построения функции сюжета

при

работе

со

звуковым

всего,

коротко

сигналом

напомним,

в

что

представляют собой аналоговый и цифровой

звуковые

сигналы.

представляет

собой

Аналоговый

сигнал

электромагнитные

немного мо-

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

, вводятся

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

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

что

– верхний порог отсутствия эмоций.

Прежде

ни

робота

протяжении

робота на протяжении всего времени действия испытывать

ограничения,

минимум, одной эмоции).

цифровом формате

отрицательных

звука

раздражителя.

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

воздействия громкости звукового сигнала на сюжета

громкости

человеком [3] при моделировании эмоциональ-

4. Такт испытываемой роботом эмоции.

, (4) где

восприятия

одного

константа,

информация о звуке. При этом от амплитуды определяет

частоту

колебаний

звукового

31


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ давления. Для цифрового представления звука

порогов

период времени (частота дискретизации) изме-

Алгоритм, реализующий процесс эмоци-

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

и

при расчете функции

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

онального

ные

щими на звуковые раздражители

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

последовательность

которых

образует данные о звуке [6, 7].

Таким

образом,

и

учитывая

вышесказанное

построения функции сюжета

при работе со

можно

выделить

следующие

особенности

звуком в цифровом формате, применительно к

воспитания

различными

взаимодействии оказывающего

воспитания

с

ними

любой

звуковой

сигнал,

с

при

одного

воздействие

субъекта,

посредством

алгоритм

в

виде

Представим

что

роботов

характеристиками

1.

тем,

с

Предложим алгоритм, реализующий процесс

эмоционального

подачи звукового сигнала.

(является дискретной). Это обуславливается

роботов

различными характеристиками, реагирую-

нашей задаче:

– не является непрерывной функцией

.

последовательности

необходимо выполнить:

шагов,

которые

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

1. Создание нового эмоционального робота:

Следовательно,

робота в системе моделирования.

свою

собственную

частоту

дискретизации.

• Задание

идентификатора

эмоционального

на

каждую

секунду

определенное

количество

измерений

эмоционального робота.

получить информацию о величине звукового

систему моделирования.

сигнала)

Шаг 1 выполняется в цикле, пока в системе

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

величины

звукового

давления

и

поэтому

давления (то есть и о громкости звукового в

произвольный

момент

времени

невозможно. Таким образом, при построении функции

стоит учитывать, что значение

величины

должно

являться

делителем

значения частоты дискретизации. Кроме этого, так как функция функция

2. Функции

дискретная

является дискретной.

ограниченного

параметров

то

и

принимает значения из строго промежутка,

зависящего

от

аналого-цифрового

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

отсчет звукового давления выделяется 8 бит и работа

происходит

с

моносигналом

то

диапазон значений, которые может принимать функция

будет

[0;

255].

Также

стоит

учитывать то, что от диапазона значений по

большей

части

зависит

и

выбор

значений

• Определение • Добавление

характеристик

эмоционального

моделирования

количество

значений

не

окажется

эмоциональных

робота

в

необходимое

роботов.

После

формирования группы эмоциональных роботов переходим к следующему шагу:

2. Формирование воздействующего звукового

сигнала и подача его в систему моделирования. Особенности:

• Исходный воздействующий звуковой сигнал

может

быть

процесса

сформирован

моделирования,

непосредственно

моделирования. • В

как

систему

в

до

процессе

моделирования

запуска

так

подаваться сигнал в цифровом формате.

и

самого

должен

Шаги 1 и 2 являются подготовительными и не

32


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ затрагивают

сам

Последующие

моделирования.

3.

шаги

Формирование

громкостью

процесс –

моделирования.

это

шаги

сюжета

звукового

сигнала

процесса

воздействия на

основе

сформированного контента цифровой информации, поступившей в систему моделирования: • Выбор

необходимого

для

формирования

сюжета количества поступившей в систему

моделирования цифровой информации. • Определения

опорных

точек

расчета

функции сюжета (эквивалентно определению

промежутков

происходит

сигнала).

времени,

замер

через

громкости

которые

звукового

• Расчет значения функции сюжета в момент

окончания действия сюжета. 4.

Формирование

ответной

онального

робота

• Расчет

значений

на

реакции

эмоци-

воздействующий

раздражитель (формирование эмоции робота): функций

сюжета

выбранных опорных точках. • Расчет

эмоции точках

в

на

значений

значений

выбранных основе

функции

данных точках.

функции

в

достижении

индивидуального

очередного

сюжета.

робота

времени

окончания То

для

есть,

каждого

воздействия шаги

действуют для всех роботов каждый раз, когда

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

сюжета.

Таким образом, шаги 3-6 моделируют процесс

эмоционального воспитания роботов относи-

тельно одного субъекта, при воздействии на них

звукового

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

ManySoundBots

сигнала

сформированного

программной

системы

Рассмотрим архитектуру программной системы

ManySoundBots,

эмоционального обладающих

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

различными

процесс

роботов,

характеристиками.

Так как программная система работает со

звуковыми сигналами в цифровом формате, то

логично рассмотреть архитектуру программной

системы

при

непосредственном

действии со звуковым адаптером.

взаимо-

опорных

полученных сюжета

в

5. Расчет элементарного воспитания

на

значений

основе

функции

полученных

эмоции

(численное интегрирование).

6.

Расчет

текущей

эмоционального робота. Шаги

3-6

величины

воспитания

выполняются

для

моделирования,

при

каждого эмоционального робота в системе

3-6

Рис. 2. Взаимодействие программной системы ManySoundBots и звукового адаптера

33


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ Как

показано

система

на

рисунке

программная

формате и хранящимися в аудио файлах (в

первых, осуществляет управление, то есть дает

ManySoundBots работает только с файлами в

адаптером

взаимодействует

сигналами, находящимися уже в цифровом

со

звуковым

ManySoundBots

2,

двумя

способами.

Во-

команды к действию. Управление реализуется

при помощи драйвера звукового адаптера. Во-

вторых, программная система ManySoundBots осуществляет

прием

необходимых

для

моделирования данных о звуковом сигнале.

Здесь, важным моментом является то, что

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

звуковыми систему

сигналами,

через

поступающими

микрофон,

то

есть

в

с

аналоговыми сигналами, так и со звуковыми

нашем

случаи

программная

система

формате .wav).

На рисунке 3 представлена архитектура самой

программной системы ManySoundBot. Таким

образом,

к

основным

элементам

программной системы ManySoundBots можно

отнести следующие программные модули:

1. Модуль работы со звуком, который отвечает за

взаимодействие

программной

системы со звуковым адаптером и

снабжает систему моделирования необходимыми

данными

о

воздействующем звуковом сигнале. 2.

Модуль

используется численных

расчетов, для

расчетов

математической заложенной

в

в

основу

моделирования

системы

который

проведения рамках

модели,

системы

программной

ManySoundBots.

Модуль

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

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

возвращает результаты. 3.

Модуль

отвечает

отображения.

за

Он

отображение

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

моделирования,

получая соответствующие запросы

от системы моделирования. 4.

Система

отвечает

моделирования

ситуации Рис. 3. Архитектура программной системы ManySoundBots

эмоциональных

оказывающим

моделирования за

процесс

рассматриваемой взаимодействия роботов

с

воздействие

34


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ

Рис. 4. Объектная модель системы моделирования программной системы ManySoundBots

субъектом. Система моделирования является

Коротко

ManySoundBots и координирует работу всех

ManySoundBots (см. рис. 4).

состоит из двух основных частей:

Как мы видим, объектная модель содержит три

центральным элементом программной системы

остальных модулей. Система моделирования

• Буфер

данных

(является

хранилищем

данных, необходимых для проведения процесса

рассмотрим

объектную

модель

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

основных класса:

1. Класс CModelingSystem. Является основным

моделирования).

классом системы моделирования. Содержит

элементом программной системы и содержит

а также буфер с данными, необходимыми для

• Объектная модель (не является как таковым

набор взаимосвязанных классов, отвечающих за

реализацию

алгоритма).

представленного

ранее

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

Важным

моментом

при

разработке

любой

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

основных

понятий,

предметную

область

терминов, задачи,

входящих

на

в

решение

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

список всех роботов в системе моделирования, моделирования.

2. Класс CRobot. Описывает эмоциональных роботов,

находящихся

в

системе

рования. Содержит идентификатор робота в

системе моделирования, информацию о наборе

характеристик робота, а также список объектов CEducation.

3. Класс CEducation. Описывает воспитание

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

конкретным

значение

субъекта,

субъектом.

воспитание а

также

Содержит

робота

относительно данного субъекта.

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

Основные

Особенно

полезным

объектно-ориентированном

стиле.

это

При

может этом

часто разрабатывают набор взаимосвязанных

классов, которые называют объектной моделью

программной системы.

для

коэффициент

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

модели-

возможности

системы ManySoundBots

текущее

данного памяти

программной

Система ManySoundBots реализована на языке

С++ в среде Visual Studio 2008, функционирует

35


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ на персональном компьютере класса IBM/PC

рования.

Windows XP SP2 и выше. Также для работы

визуализируемой

Framework 2.0. Объем программы 115 Кб (exe-

6. Программа ManySoundBots визуализирует:

под

управлением

программной

операционной

системы

системы

необходим

.NET

файл).

К основным функциям системы ManySoundBots

• Интервалы

отображения/обновления для

информации.

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

• Звуковую волну, оказывающую воздействие

на моделируемых эмоциональных роботов. • Эмоции,

испытываемые

моделируемыми

относятся следующие функции:

эмоциональными роботами.

1. Программа ManySoundBots позволяет моде-

роботов, относительно субъекта, оказывающего

• Полученные

воспитания

эмоциональных

лировать процесс эмоционального воспитания

воздействие.

2. Программа ManySoundBots позволяет оказы-

Особенности функционирования программ-

роботов с различными характеристиками.

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

ной системы ManySoundBots

• При помощи готовых звуковых файлов в

К основным особенностям функционирования

• В интерактивном режиме, через подклю-

отнести следующие:

формате .wav.

ченный микрофон. Существует возможность сохранения

звука,

полученного

в

интерактивном режиме в звуковых файлах в

формате .wav. 3.

Программа

ManySoundBots

позволяет

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

программной системы ManySoundBots стоит

1. Функционирование модуля работы со звуком.

2. Параллельная работа системы моделирова-

ния и модуля работы со звуком.

Функционирование модуля работы со звуком

модели, лежащей в ее основе, а именно:

основано

из системы моделирования.

ной системой Windows. Выбор данного средства

• Добавлять и удалять эмоциональных роботов • Изменять

введенного

значения в

параметров

систему

эмоционального робота.

каждого

моделирования

4. Программа ManySoundBots позволяет зада-

вать параметры записи звуковых файлов в формате .wav, а именно: • Длину записи.

• Частоту дискретизации.

вать параметры вычисления и отображения, а • Способ

шагов

в

вычисления

интегралов

и

расчетов

численного

интегри-

промежутке

проведении

использовании

интерфейса

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

Интерфейс полностью

низкого

уровня

контролировать

весь

позволяет

процесс

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

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

или записываемом звуковом сигнале во время

5. Программа ManySoundBots позволяет задаименно:

на

интегрирования

число при

воспроизведения

или

записи.

Такая

возможность необходима программной системе

ManySoundBots для того, чтобы в реальном

режиме времени (во время воспроизведения

или записи звукового сигнала) производить процесс моделирования [2, 8, 9].

36


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ Параллельная работа системы моделирования

В нижней части формы располагается поле,

целью

на

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

интерактивности.

звуком

получает

процессу

Пока

моделирования

модуль

очередные

работы

данные

со от

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

полученных

моделирование

отображения

данных

выдает

пользователю. Таким

образом,

и

на

уже

посредством

текущие

можно

сказать,

ранее

модуля

результаты

что

все

особенности функционирования программной системы

направлены

ManySoundBots на

создание

процесса моделирования.

непосредственно интерактивного

Визуальный интерфейс программной систе-

мы ManySoundBots Главная

форма

программной

системы

ManySoundBots выглядит следующим образом

(см. рисунок 5):

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

роботов,

введенных

в

систему моделирования. Там же отображаются

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

В правом верхнем углу формы отображаются

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

ными в систему моделирования эмоциональными роботами.

В левом верхнем углу располагается элементы

управления, позволяющие запускать процесс

моделирования как на готовых .wav файлах, так и в интерактивном режиме.

Главная

форма

ManySoundBots

программной

также

содержит

системы

меню,

в

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

функционирования всей программной системы

(см. рисунок 6).

Рис. 5. Главная форма программной системы ManySoundBots

37


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ

Рис. 6. Параметры программной системы ManySoundBots

Здесь можно произвести настройку параметров

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

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

в

формате

интерактивном

.wav

режиме

(используется

моделирования),

в

а

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

задания

параметров

математической

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

Рис. 8. Добавить/Изменить

используется форма, показанная на рисунке 7.

Здесь

можно

записываемого

задать

длину

звукового

сигнала (в секундах), а также

частоту

дискретизации

герцах). Программная система ManySoundBots

производит

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

дискретностью 8 бит.

Рис. 7. Параметры модели Здесь

можно

добавить,

удалить,

изменить

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

в

сбросить

роботов в «0».

системе все

моделирования,

текущие

а

вычисления

и

Для

задания

отображения

параметров

используется

форма, отображенная на рисунке 10.

воспитания

Формы для добавления и изменения показана на рисунке 8. Для

задания

параметров

записи

файлов в формате .wav используется форма, показанная на рисунке 9.

Рис. 9. Параметры записи

звуковых

Здесь

можно

задать

способ

численного

38


ПРО

№15 (июнь) 2011

граммист

ОБЩИЕ ВОПРОСЫ математической

модели

поведения

Вестник

Пермского

простейшего эмоционального робота / К.В. Черников

университета.

//

Информатика.

Математика.

№3(3)

Перм.ун-та, 2010 – с.69 - 75.

3. Черников

К.В.

Механика.

Пермь:

Электронный

Изд-во

журнал

«Исследовано в России», 83, 968-974, 2010. http://zhurnal.ape.relarn.ru/articles/2010/

Рис. 10. Параметры вычисления и отображения интегрирования, включая выбор числа шагов в промежутке

задать

ровании

интегрирования.

интервал на

отображения

готовых

.wav

Также при

можно

модели-

файлах

интерактивном режиме (в миллисекундах).

и

в

взаимодействия

одного

воздействие

субъекта,

посредством

оказываю-

подачи

звукового сигнала на нескольких эмоциональ-

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

последовательности

алгоритм,

шагов)

виде

реализующий

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

рассмотрена системы

К.В.

различными

характеристиками;

архитектура

ManySoundBots,

программной

объектная

модель

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

ManySoundBots,

а

также

ManySoundBots в целом.

сама

Правила

система

эмоционального

поведения роботов. Обобщение на случай

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

роботом

людей

/

Электронный

К.В.

научный

Черников

«Университетские исследования»:

http://www.uresearch.psu.ru 5. Дружинин

В предлагаемой статье рассмотрена ситуация

собой;

4. Черников

63_75761.doc – c.1-4.

Заключение

щего

083.pdf

В.Н.

журнал

2010,

Экспериментальная

психология / В.Н. Дружинин. – СПб.: Питер, 2004. – 320 с.

6. Цифровой звук и частота дискретизации. http://www.musicsystem.ru/info/1_0.htm

(доступно 27.01.2011)

7. Это звучит! Аудиосистема. http://www.webprojekt.ru/articles/index.php-id_page=14.htm (доступно 27.01.2011)

8. Фролов

А.В.

Мультимедиа

для

Windows.

Библиотека системного программиста, т. 15

/ А.В. Фролов, Г.В. Фролов, – М.: ДиалогМИФИ,

1994

lib.ru/books).

284с

(http://www.frolov-

9. Секунов Н. Ю. Обработка звука на PC. – Спб.: БХВ-Петербург, 2001 - 1248 с.: ил.

Список литературы 1. Пенский теории

О.Г.

Основы

эмоциональных

математической

роботов

/

О.Г.

Пенский, К.В. Черников - Перм. гос. ун-т. – Пермь, 2010. – 256 с. Текст парал. рус., англ.

2. Черников

К.В.

Программная

//

реализация

39


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ Олег Александров

smith5989@yandex.ru

СКОЛОТИМ ВИДЖЕТ ДЛЯ СЕМЕРКИ?

Сегодня хотелось бы рассмотреть такой момент как создание виджетов двумя наиболее распространенными способами. В пределах этой статьи я не планирую рассматривать разработку виджетов на Google Gadgets Editor (GDE), «гуглеры» создали прекрасный мануал на это тему, который мне не переплюнуть...

Введение Как говорит нам Википедия: виджет – набор

вспомогательных

мини-программ,

графических модулей, которые размещаются в

рабочем

родительской

пространстве

программы.

соответствующей Они

позволяют

сделать работу с компьютером более удобной,

информативной и менее рутинной благодаря вынесению

в

поле

зрения

игр,

картинок,

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

или

представляет

курса

собой

валюты. окошко

Визуально

с

неким

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

перемещать

по

рабочему

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

независимости от сайта. В интернете можно

найти

тысячи

бесполезных

виджетов,

а

нужный

довольно

сложно

найти.

проще-ли создать виджет самому?

Так

не

Hello world... Каждый

раз,

программирования,

изучая

первая

новый

язык

созданная

программа выдает надпись Hello world! Что ж,

не будем отступать от традиции. В текстовом редакторе создадим файл <gadget.xml>.

Рис. 1. Соответствие строк кода и функций

Запишем следующий код:

.

40


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ <body> <?xml

<p>Hello World!</p>

version="1.0" encoding="utf-8" ?>

</body>

<gadget>

</html>

<name>Hello world</name> <version>1.0</version> <author name="Имя автора"> <info url="designformasters.info" /> </author> <copyright>2011</copyright> <description>виджет</description> <icons> <!-- Иконка виджета --> <icon width="128" height="128" src="icon.png" /> </icons> <hosts> <host name="sidebar"> <!-- имя и тип стартового файла виджета --> <base type="HTML" apiVersion="1.0.0" src="main.html" /> <permissions>full</permissions> <platform minPlatformVersion="0.3" /> <!-- Изображение видимое при перетаскивании виджета на сайдбар --> <defaultImage src="images/dockedBg.png" /> </host> </hosts>

Запакуйте эти два файла в ZIP- архив и

измените ему расширение на *.gadget. Теперь

запустим

полученный

файл

и

произведем

установку виджета (просто добавив его в

менеджере виджетов, см. рисунок 2).

После установки виджет появится сам. Итак,

простенький виджет готов и переходим к

самому вкусному.

Docked и undocked У

виджета

есть

два

состояния

docked

(максимальная ширина 130px) и undocked (ограничений нет, но не стоит делать более

400px): Текущее состояние виджета отражает

переменная System.Gadget.docked, а при его изменении

происходит

System.Gadget.onUndock

событие

System.Gadget.onDock:

или

function dockStateChanged() { if (System.Gadget.docked) {

</gadget>

$(document.body).removeClass('undocked')

Затем, в том же редакторе, напишем код для

// Изменение класса body позволяет удобно

<gadget.html>:

// управлять отображением внутренних элементов. .addClass('docked')

<!DOCTYPE html>

.css('width', '130px')

<html>

.css('height', '145px'); // ...

<head>

} else {

<title></title>

$(document.body).removeClass('docked')

<style>

.addClass('undocked')

body {

.css('width', '260px')

width: 130px;

.css('height', '240px');

height: 30px;

// ...

} }

</style> </head>

}

41


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ

Рис. 2. Установка виджета Фон

dockStateChanged:

Фон гаджета задается с помощью элемента g:background:

function dockStateChanged() { if (System.Gadget.docked) { // ... $('#background').css('width', '130px')

<body> <g:background id="background"

.css('height', '145px')

style="position:absolute;z-index:-1;top:0;left:0;">

.attr('src', 'images/dockedBg.png');

</g:background>

} else {

<div id="gadgetContent">

// ...

</div>

$('#background').css('width', '260px')

</body>

.css('height', '240px')

Большинство

виджетов

используют

разное

фоновое изображение для docked и undocked

состояний, размеров

изменение

фона

изображения

происходит

в

и

функции

.attr('src', 'images/undockedBg.png'); } }

Вот в принципе и все. Этого должно хватить

42


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ для того, чтобы создать свой виджет с нуля. И

Заключение

Постскриптум

не

А теперь не могу не обратить внимание на

от навыков программирования, можно найти

не только для семерки*.

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

один интересный ресурс от гугла http://desktop.google.com/downloadsdksubmit. По указан-

ному

адресу

можно

бесплатно

скачать

полноценную среду разработки виджетов (см. рисунок 3). Хороший

мануал

находится

тут

такая

и

сложная

работа,

как

могло

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

http://code.google.com/intl/ru/apis/gadgets/docs/

• А.Гончаров. Самоучитель HTML. – CПб.:

Google

• Википедия о термине «виджет»

basic.html. Скачав IDE дизайнер виджетов и

распаковав

его,

запустим

<designer_en.exe>. Программа дает возмож-

ность создавать виджеты для двух режимов:

непосредственное создание кода и визуаль-

ный режим (в котором не требуется знание

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

но сбалансирована и на создание виджета не

потребуется много времени.

Питер, 2002, 240 с.: ил.

http://ru.wikipedia.org/wiki/Виджет

• Среда разработки виджетов

http://desktop.google.com/downloads-

dksubmit

• Инструкция по разработке

http://code.google.com/intl/ru/apis/gadgets/ docs/basic.html

Рис. 3. Среда разработки GDGD * Следует отметить, что системы XP (не сборки ZverDVD) по-умолчанию не комплектуются менеджером виджетов Windows Sidebar. Тем не менее, его можно просто скопировать без установки / Редакция.

43


ПРО

№15 (июнь) 2011

граммист

lord_ru@mail.ru

Виталий Крячко by kvitaly

ЛАБОРАТОРИЯ

3D ТЕХНОЛОГИИ.

ОСВАИВАЕМ ДОМА...

Лично в своей жизни у меня было три соприкосновения со стереоизображением. В детстве мне подарили немецкую игрушку Стереограф. По виду похожа на бинокль, только квадратный и сверху вставлялись стерео пары из слайдов. Это было потрясающе! Тогда я впервые увидел трехмерную историю о Бременских музыкантах. Следующая встреча произошла уже в юношестве. На экскурсии в Ростове я посетил кинотеатр, где демонстрировались фильмы с трехмерным изображением. В советское время была технология, отличная от нынешней – очки были одноцветными, похожими на обычные светозащитные, но поляризационные. На экран проецировалось сразу два изображения с синхронизированных кинопроекторов. Насколько могу помнить, качество стерео было очень хорошее. Да и на современном этапе стереокинематограф ворвался в мою жизнь (и в вашу наверняка) под брендом 3D кино. Вначале анаглиф с его картонными очками, которые дарили после сеанса, потом уже и IMAX 3D, с дорогими очками, которые тщательно собирали после сеанса. Данная статья поможет самим создать 3D изображение, затратив минимальные средства.

Немного истории… Человечество

беспрестанно

это разделение. Одной из самых доступных в пытается

запечатлеть прекрасное во что-то нетленное.

домашних анаглиф.

условиях

технологий

является

Как попытку показать грядущим поколениям

Анаглиф – метод получения стереоэффекта для

Живопись, скульптура, фотография, кино и

цветового кодирования изображений, предна-

то, что они уже ни когда не увидят в натуре. наконец, стереокинематограф соединить

всю информацию о

как попытка

звуке, цвете и

объеме. Вот уже на протяжении более полутора

стереопары обычных изображений при помощи

значенных для левого и правого глаза. Для

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

века мода на стереоизображения то врывается

в нашу жизнь, то затихает, поджидая нового

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

отображения на более высокий уровень. Как это работает?

В основу всех 3D технологий заложен один

Рис. 1. Каждый глаз видит

предмет

по-

принцип – разделить изображение для левого и

своему: мозг оценива-

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

рует объемный образ

правого глаза (см. рисунок 1), а различие

ет разницу и форми-

44


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ специальные (анаглифические) очки, в которых вместо

диоптрийных

стекол

вставлены

специальные светофильтры, как правило, для

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

Современные стерео-очки используют красный и

сине-зеленый

рисунок

2).

(циановый)

Таким

образом

фильтры

(см.

моделируется

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

глазами. Однако просмотр стереофотографии имеет

одно

существенное

отличие:

такое

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

дает неожиданный результат – стереоэффект

сосредоточено внимание. При этом дальний

план

и

ближний

расплывчато.

При

план

воспринимаются

наблюдении

стереофотографии (снятой с большой глубиной

резкости) все планы сцены воспроизведены

четко.

Что нужно для создания и просмотра 3D изображений?

Применение

значительно

компьютерной

упрощают

стереоизображений, стереофотографию

создания

популярной.

Кроме

снова

компьютера нам понадобятся:

происходит

• цифровая

производит в

большее

результате

впечатление. того,

что

Это

при

наблюдении реального мира человеческий глаз «фокусируется» на том объекте, на котором

фотокамера

фотокамерой;

• программное

техники

процесс

что

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

же

или

обеспечение

делает

телефон

для

с

создания

Рис. 2. Специальные (анаглифи́ческие) очки

45


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ стереоизображения;

Как снимать 3D фото?

• очки для просмотра стереоизображений. К

цифровой

камере

в

плане

создания

анаглифного изображения особых требований нет. Подойдет любая, даже 0.3 Мп с в составе

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

же предпочтительнее аппарат не менее 2 Мп.

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

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

готовых.

Обычные

картонные

очки можно приобрести в пунктах продажи

видеодисков, книжных магазинах. Стоимость до

полутора

долларов

США,

в

пластмассовой

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

изготовления

описаны

в

Интернете, не буду их тут цитировать, при желании найти не сложно. Как вариант, я однажды

использовал

для

просмотра

Если вы внимательно прочитали все, что я

написал выше, то уже наверно догадались, что

нам

понадобятся

две

фотографии

одного

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

правого

глаза.

У

кого

есть

для

этого

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

пользоваться. Я расскажу как сделать нужные

снимки

одним

фотоаппаратом.

Есть

два

основных способа стереосъемки: параллельное

перемещение

камеры

и

«носками

внутрь».

Первый способ (см. рисунок 3) осуществляется так:

сделав

перемещаем

первый

камеру

на

кадр,

параллельно

расстояние

~6

см

(расстояние между глаз) и делаем второй кадр.

При втором способе (см. рисунок 4) выбираем

центральный

объект

композиции,

делаем

первый кадр, затем смещаем камеру и делаем

второй кадр, помещая выбранный объект в то

анаглифных картинок два прозрачных (типа

же самое место видоискателя (допустим, в

сине-зеленого цвета, просто держа их напротив

повернуты внутрь.

целлулоидных) фантика от конфет красного и соответствующих глаз – эффект был не хуже,

центр),

при

этом

камеры

оказываются

чем от очков!

Программное

обеспечение

представлено

достаточно широко. Чаще всего это платное

ПО, громоздкое,

и создание анаглифа в нем

представлено опционально. Есть конечно и

исключения, но со своими недостатками (а кто

бывает на 100% доволен чужой программой?). Естественно,

мы

тут

и

собрались,

чтобы

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

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

программированию, придется прояснить еще

один

момент,

а

именно

способ

съемки

предварительного материала. А иначе просто

не будет возможности протестировать нашу

программу.

Рис. 3. Параллельное перемещение камеры

46


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ создания из них одного 3D анаглифного. Общая концепция такова:

• цветная точка на изображении состоит из смеси трех основных цветов – красный, синий, зеленый (RGB);

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

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

• для

результирующего

наложить

изображения

надо

одно изображение на другое и

восстановить яркость;

• сохранить

полученное

изображения

для

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

Рис. 4. Способ «носками внутрь»

Для написания программы я выбрал среду

На практике второй способ осуществить без

программирования

поэтому

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

подручных способ.

средств

рекомендую

При

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

довольно

сложно,

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

фотографии

не

вспышкой.

и

первый

рекомендуется

Параметры

обеих

будем

бесплатную

PureBasic.

(demo)

в 800 строк для нас несущественно – мы

уложимся примерно в 150.

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

PureBasic

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

На

первый

взгляд,

эти

изображения

не

отличаются друг от друга см. рисунки 5 и 6. Фотографии

должны

быть

сохранены

в

форматеBMP, JPG, PNG. Фотографировать таким

способом спортивные состязания, животных

или даже портреты крайне затруднительно –

живые объекты будут постоянно менять свое

положение,

а

это

нарушит

одинаковости параметров фотографий.

правило

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

которую

http://purebasic.com/download.php. Ограничение

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

Использовать

версию,

создает

эффективно

быстрый

работать

с

код,

способный

графическим

материалом и содержит в себе достаточный

набор

встроенных

графикй.

Не

функций

меняя

для

работы

исходник,

с

можно

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

могут работать в любой ОС семейства Windows, Linux и Mac OSх.

Наш код будет кроссплатформенным: мы не

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

определенной OC.

какой то

Итак, приступим Вначале сообщим нашей программе, с какими

типами файлов мы собираемся работать и

включим

соответствующие

функции

47


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ

Рис. 5. Левое изображение

Рис. 6. Правое изображение

48


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ декодирования:

RedPoint=Red(Point(w, h)) Plot(w,h,RGB(redPoint,0,0))

UseJPEGImageDecoder()

pixels1(p1)=RedPoint ; записываем в массив только красную

UsePNGImageDecoder()

BMP

файлы

; составляющую цвета

обрабатываются

средой

по

умолчанию, ни чего специально включать не

надо. Выходной файл будем сохранять в JPG

формате, включим соответствующий кодер:

Next Next StopDrawing() EndIf

Обработаем второе изображение, оставив в нем

только сине-зеленый цвет:

UseJPEGImageEncoder()

Следующий этап – загрузка файла. Начнем с изображения для левого глаза:

FileName$ = OpenFileRequester("Открыть левое изображение", "", "All supported formats|*.bmp;*.jpg;*.png", 0)

If StartDrawing(ImageOutput(2)) For h= 0 To hei1 - 1 For w= 0 To wid1 - 1 GrPoint=Green(Point(w, h)) BlPoint=Blue(Point(w, h))

If FileName$

Plot(w,h,RGB(0,GrPoint,BlPoint))

LoadImage(0, FileName$) ; загружаем фото

Next

wid = ImageWidth(0)

Next

; определяем его размеры

hei = ImageHeight(0) Mass1=wid*hei

StopDrawing() ; определяем размер массива для фото

Dim pixels1(Mass1) EndIf

Для правого фото – код аналогичный: FileName$ = OpenFileRequester("Открыть правое изображение", "", "All supported formats|*.bmp;*.jpg;*.png", 0) If FileName$ LoadImage(2, FileName$)

EndIf

Далее, по плану, у нас слияние этих двух

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

фото

наложим

первое

красное.

Данные о первом фото у нас хранятся в

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

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

изображение:

wid1 = ImageWidth(2)

If StartDrawing(ImageOutput(2))

hei1 = ImageHeight(2)

DrawingMode(#PB_2DDrawing_AlphaBlend) ; включаем прозрачность

EndIf

For h= 0 To hei - 1 For w= 0 To wid - 1

Массив для него нам не нужен. Обработаем

Plot(w,h,RGBA(pixels1(p1),0,0,125))

красный цвет:

Next

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

If StartDrawing(ImageOutput(0)) For h= 0 To hei - 1 For w= 0 To wid - 1

; накладываем с ; прозрачностью в 50%

Next StopDrawing()

Основная

работа

закончена.

Анаглиф

уже

49


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ создан и хранится он в Image №2. Но при наложении

изображений

результирующее

изображение получилось темнее оригинала.

Надо восстановить яркость. Пишем процедуру

увеличения яркости:

нашему

анаглифу,

изображение

и

вьювире:

Brightness(2,70)

сохраним

откроем

его

ImageX = ImageWidth(ImageNo)

RunProgram("Anaglif.jpg")

ImageY = ImageHeight(ImageNo)

EndIf

For Px = 0 To ImageX-1 For Py = 0 To ImageY-1 Pixel(Px, Py) = Point(Px, Py)

любимом

If SaveImage(2,Anaglif.jpg",#PB_ImagePlugin_JPEG,8); кач. 80% MessageRequester("Запись","Успешно")

Dim Pixel.l(ImageX, ImageY)

в

; увеличим яркость на 70 едениц

Procedure Brightness(ImageNo.l, Bright)

StartDrawing(ImageOutput(ImageNo))

полученное

Общий

код,

полностью

немного

готовый

выглядеть так:

Next

UseJPEGImageDecoder()

Next

UsePNGImageDecoder()

StopDrawing()

UseJPEGImageEncoder()

оптимизированный,

к

компиляции

и

будет

StartDrawing(ImageOutput(ImageNo)) x = 0 Repeat y = 0

FileName$ = OpenFileRequester("Открыть левое изображение", "", "All supported formats|*.bmp;*.jpg;*.png", 0) If FileName$

Repeat

LoadImage(0, FileName$) ; загружаем фото

color = Pixel(x, y)

wid = ImageWidth(0)

Red = Red(color)

hei = ImageHeight(0)

Green = Green(color)

Mass1=wid*hei

Blue = Blue(color)

Dim pixels1(Mass1)

Red = Red + Bright

EndIf

; определяем его размеры

; определяем размер массива для фото

If Red > 255 : Red = 255 : EndIf Green = Green + Bright If Green > 255 : Green = 255 : EndIf

FileName$ = OpenFileRequester("Открыть правое изображение", "", "All supported formats|*.bmp;*.jpg;*.png", 0)

Blue = Blue + Bright

If FileName$

If Blue > 255 : Blue = 255 : EndIf

LoadImage(2, FileName$)

color = RGB(Red, Green, Blue)

wid1 = ImageWidth(2)

Plot(x, y, color)

hei1 = ImageHeight(2)

y = y + 1

EndIf

Until y >= ImageY x = x + 1

p1=0:p2=0

Until x >= ImageX

If wid > wid1: wid=wid1:EndIf

StopDrawing()

If hei > hei1: hei=hei1:EndIf

EndProcedure

Применим процедуру увеличения яркости к

If StartDrawing(ImageOutput(0)) For h= 0 To hei - 1

50


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ For w= 0 To wid - 1

Plot(w,h,RGB(0,GrPoint,BlPoint))

Рис. 7. Итоговое изображение – анаглиф

RedPoint=Red(Point(w, h))

Next

Plot(w,h,RGB(redPoint,0,0))

Next

pixels1(p1)=RedPoint ; записываем в массив только красную ; составляющую цвета

DrawingMode(#PB_2DDrawing_AlphaBlend); включаем прозрачность For h= 0 To hei - 1

p1+1

For w= 0 To wid - 1

Next

Plot(w,h,RGBA(pixels1(p2),0,0,125))

Next

; накладываем с ; прозрачностью в 50%

StopDrawing()

p2+1

EndIf

Next Next

If StartDrawing(ImageOutput(2))

StopDrawing()

For h= 0 To hei1 - 1

EndIf

For w= 0 To wid1 - 1 GrPoint=Green(Point(w, h))

Procedure Brightness(ImageNo.l, Bright)

BlPoint=Blue(Point(w, h))

ImageX = ImageWidth(ImageNo)

51


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ ImageY = ImageHeight(ImageNo) Dim Pixel.l(ImageX, ImageY) StartDrawing(ImageOutput(ImageNo)) For Px = 0 To ImageX-1 For Py = 0 To ImageY-1 Pixel(Px, Py) = Point(Px, Py) Next

В заключение наших стараний Как можно заметить, наша программа не имеет

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

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

и

визуальным

контролем

дело

нескольких минут, и желающие справятся с

Next

этим самостоятельно.

StopDrawing() StartDrawing(ImageOutput(ImageNo)) x = 0

В

прилагаемых

подобная

к

попытка

статье

материалах

сделать

есть

превращение

снимков, а 3D-анаглиф более наглядной.

Repeat y = 0 Repeat color = Pixel(x, y) Red = Red(color) Green = Green(color) Blue = Blue(color) Red = Red + Bright If Red > 255 : Red = 255 : EndIf Green = Green + Bright

Ресурсы • Википедия. Анаглиф

http://ru.wikipedia.org/wiki/Анаглиф

• Поляков

А.Ю.

Третье

фотографии. Часть 1, 2

измерение

http://3dmasterkit.ru/articles/article_1

If Green > 255 : Green = 255 : EndIf Blue = Blue + Bright If Blue > 255 : Blue = 255 : EndIf color = RGB(Red, Green, Blue) Plot(x, y, color) y = y + 1 Until y >= ImageY x = x + 1 Until x >= ImageX StopDrawing() EndProcedure

Brightness(2,70) ; увеличим яркость на 70 едениц – можно ; эксперементировать! If

SaveImage(2, "Anaglif.jpg",#PB_ImagePlugin_JPEG,8)

; качество 80%! MessageRequester("Запись","Успешно") RunProgram("Anaglif.jpg") EndIf

52


ПРО

№15 (июнь) 2011

граммист

Петр Высочанский

http://pure-basic.narod.ru

ЛАБОРАТОРИЯ

СОЗДАЕМ САМОРАСПАКОВЫВАЮЩИЙСЯ ZIP АРХИВ

Что из себя представляет самораспаковывающийся архив? Это файл, объединивший в себе два файла – модуль распаковки и собственно архив. Модуль распаковки является обычным исполняемым файлом и его можно написать почти на любом языке программирования, позволяющем работать с архивами нужного формата, в нашем случае ZIP. Архив в файле находится сразу же после модуля распаковки, то есть он дописан в конец исполняемого файла. Это конечно же не единственный способ создания самораспаковывающегося архива, но такой метод используется многими архиваторами, в частности, популярной программой WinRAR. Мы не будем изобретать колесо, а используем уже проверенные способы.

на рисунке 1. Он позволяет выбрать место

Что нам потребуется? Для

создания

использовать бесплатную,

которого сайте

модуля

демонстрационную

можно

[1].

скачать

Там

есть

нескольких

платформ,

библиотека

PureZIP*,

Windows

x86.

Кроме

работать с ZIP архивами. После

распаковки,

компилятор

того

как

на

будем

PureBasic,

версию

официальном

нам

того,

которая

скачали

и

распаковки

также

Кроме того, если архив защищен паролем, то появится окно для его ввода. Мы не будем

углубляться в создание GUI программы и

понадобится

за рамки данной статьи, и сразу рассмотрим

нужна

для

позволяет

установили

обработчиков событий, поскольку это выходит

код распаковки архива в заданную папку –

процедуру ExtractArchive() (см. листинг 1). Прежде

всего,

объявляются

переменные,

был

архив

паролем?

имеет

нулевой

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

а

файла и прогресс распаковки всего архива.

PureBasic и библиотеку PureZIP для него, создан

файлов,

отображает прогресс извлечения текущего

для

разновидности

но

(папку)

несложный

распаковщик архива, окно которого показано

архивом.

необходимые

Далее,

структуры

для

выясняется:

Для

этого

работы

защищен

и

с

ли

запрашивается

информация об одном из файлов, который анализируется

индекс

состояние

в

архиве

флагов

и

и

если

нулевой бит установлен, то это признак того,

что архив защищен паролем. В этом случае,

при помощи функции InputRequester() будет

создано

диалоговое

информирующее

окно

ввода

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

данных,

что

распаковки нужен пароль (см. рисунок 2). Рис. 1. Окно распаковщика архива

Введенный

передан

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

следующей

* Ее можно скачать на сайте http://gnozal.ucoz.com. К статье приложена библиотека для компилятора PureBasic версии 4.51, который использовался при разработке рассматриваемых программ. Библиотека устанавливается с помощью инсталлятора, нужно лишь правильно указать папку c установленной средой PureBasic / Автор.

пароль

для

будет

функции

53


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ ; Распаковка архива в папку, указанную в переменной ExtractPath.

Листинг 1

Procedure ExtractArchive(ExtractPath.s) GlobalInfo.unz_global_info ; Объявление структур FileInfo.PureZIP_FileInfo BreakExtract = #False DoneFiles

; Создание локальных переменных

= 2

; Получение данных об первом (индекс 0) файле архива If PureZIP_GetFileInfo(ProgName, 0, @FileInfo) = #True If FileInfo\flag & 1 = 1 ; Установленный 0 бит - признак наличия пароля. Pass.s=InputRequester(GetFilePart(ProgName)+" - Архив защищён паролем!", "Введите пароль архива","") PureZIP_SetArchivePassword(Pass) ; Устанавливаем пароль, введенный пользователем. EndIf EndIf

If PureZIP_Archive_Read(ProgName) ; Открываем архив (исполняемый файл распаковщика)

PureZIP_Archive_GlobalInfo(@GlobalInfo) NrOfCompressed.l = GlobalInfo\number_entry ReturnValue.l = PureZIP_Archive_FindFirst()

; Число файлов в архиве ; Поиск первого файла в архиве.

SetGadgetAttribute(#ProgressBar_All, #PB_ProgressBar_Maximum, NrOfCompressed)

; Цикл (While - Wend) распаковки всех файлов, содержащихся в архиве. While ReturnValue = #UNZ_OK If PureZIP_Archive_FileInfo(@FileInfo) = #UNZ_OK ; Данные о файле (размер, степень сжатия и др.) Status = PureZIP_Archive_Extract(ExtractPath, #True, @BreakExtract) ; Распаковка файла на диск

If BreakExtract = #True MessageRequester("", "Распаковка прервана пользователем", #MB_OK|#MB_ICONINFORMATION) Break EndIf

If Status = #UNZ_OK ; Успешная распаковка очередного файла DoneFiles + 1 SetGadgetText(#Text_ExtractFiles, Cut_FileName(ExtractPath+FileInfo\FileName)) SetGadgetState(#ProgressBar_All, DoneFiles) ReturnValue = PureZIP_Archive_FindNext() ; Поиск следующего файла для распаковки. Else MessageRequester("","Произошла ошибка при распаковке"+Chr(10)+FileInfo\FileName,#MB_ICONWARNING) Break

54


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ EndIf EndIf Wend

PureZIP_Archive_Close() ; Закрытие архива If ReturnValue = #UNZ_END_OF_LIST_OF_FILE SetGadgetText(#Text_ExtractFiles, "Архив успешно распакован") MessageRequester(GetFilePart(ProgName), "Архив успешно распакован.", #MB_OK|#MB_ICONINFORMATION) Else ; Если не все файлы были распакованы (ошибка или операция прервана пользователем). SetGadgetState(#ProgressBar_File, 0) SetGadgetState(#ProgressBar_All,

0)

SetGadgetText(#Text_ExtractFiles, "") EndIf

Else ; Обычно свидетельствует об повреждении архива. MessageRequester("", "Ошибка при доступе к архиву.", #MB_OK|#MB_ICONERROR) EndIf EndProcedure

его

содержимое

заданную

можно

в

извлечь

строковой

в

папку,

переменной

"ExtractPath". Данная операция производится

в цикле While – Wend, который прервется при завершении

распаковки,

возникновении

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

PureZIP_Archive_FileInfo()

Рис. 2. Окно ввода пароля архива PureZIP_SetArchivePassword(),

которая

При

информация уста-

новит текущий пароль архива. После всего

о

помощи

текущем

функции

запрашивается файле.

Это

необходимо для отображения имен файлов

извлекаемых из архива. Далее при помощи функции

PureZIP_Archive_Extract()

произ-

этого, можно открыть архив для чтения, что

водится извлечение текущего файла.

PureZIP_Archive_Read(),

Нужно отметить, что работа этой функции не

производится

при

помощи

функции

единственный

аргу-

мент которой – абсолютный путь к архиву, то

завершится

есть к EXE-файлу самораспаковывающегося

распакован

переменную

которых

архива.

Он

программы

заносится

"ProgName"

функцией

в

при

строковую старте

ProgramFilename().

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

до

тех

весь

пор,

файл.

пока Это

не

будет

особенно

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

занять

продолжительное

время. В первом аргументе функции указано место (папка), куда будет извлечен файл. От

55


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ второго аргумента (True или False) зависит,

зарегистрирована в библиотеке PureZIP при

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

функция отображения прогресса упаковки /

отсутствовать. При его наличии, его значение

имя распаковываемого файла, процент его

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

аргумент

не

обязателен

и

может

будет передано в Calback функцию, в которой

отображается прогресс извлечения файла из

помощи PureZIP_SetCompressionCallback() как

распаковки

файлов.

Процедуре

распаковки (в диапазоне 0 … 100) и данные,

переданные

в

необязательном

архива на диск.

функции распаковки файла.

В рассматриваемой программе, передается

После

которой изначально хранится число 0 (False).

прогресс

указатель на переменную "BreakExtract", в

Если же пользователь прервет распаковку

файлов, то в Callback функции, в переменную

запишется число 1 (True).

Код Callback процедуры (см. листинг 2). Она

передается

того

как

SetGadgetState() обработки

при

был

распаковки, событий

аргументе**

помощи

отображен

функции

текущий

выполняется

программы.

В

код

цикле

вызывается функция WindowEvent() до тех

пор, пока не будут обработана вся очередь

событий. Из всех событий, обрабатывается

только одно – закрытие окна программы, при

; Отображение прогресса распаковки обрабатываемого файла.

Листинг 2

Procedure File_Progress(File.s, Percent.f, *UserParam)

SetGadgetState(#ProgressBar_File, PerCent) ; Отображение в окне прогресса распаковки.

Repeat Event=WindowEvent()

; Текущее событие программы.

If Event=#PB_Event_CloseWindow ; Щелчок по крестику в заголовке окна. If EventWindow() = #Window_0 Flags = #MB_YESNOCANCEL|#MB_ICONQUESTION|#MB_DEFBUTTON2 Select MessageRequester("", "Закрыть окно с остановкой распаковки файлов?", Flags) Case #IDYES End Case #IDCANCEL PokeL(*UserParam, #True) Break EndSelect EndIf EndIf Until Event = 0

ProcedureReturn 0 EndProcedure

** В нашем случае, это указатель на локальную переменную "BreakExtract" процедуры ExtractArchive(). Хотя основное назначение процедуры File_Progress() состоит в отображении распаковки файла, но тот факт что при излечении файлов, она вызывается довольно часто, как минимум несколько раз в секунду, позволило возложить на нее еще и обработку событий программы на время распаковки файлов. Иначе бы пришлось распаковывать файлы в отдельном потоке / Автор.

56


ПРО

граммист

№15 (июнь) 2011

ЛАБОРАТОРИЯ возникновении которого, на экране появится

окно показанное на рисунке 3. При нажатии на

кнопку

«Да»:

работа

программы

Рис. 3. Окно подтверждения остановки извлечения файлов

завершится и ее окно закроется. В случае

нажатия на кнопку «Нет»: распаковка файлов продолжится.

А

если

нажать

на

кнопку

«Отмена»: распаковка файлов прекратится, но

Рис. 4. Окно программы, создающей SFX-архив

программа продолжит свою работу. После

компиляции

программы

получится

модуль распаковки архива, размером 90 Кб.

Но архива в нем разумеется нет. Его еще

предстоит

добавить.

А

как

его

добавить?

Можно конечно заранее создать ZIP архив со

всеми требуемыми файлами, а потом дописать его

в

конец

исполняемого

SFX_File:

файла,

любым

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

IncludeBinary "SFX.exe" SFX_File_End: EndDataSection

Он

туда

помещается***

при

помощи

оператора IncludeBinary на этапе компиляции программы.

Метки

оператора,

до

позволяют

и

после

получить

этого

данные,

число добавленных байтов. Но этот метод

загруженные оператором IncludeBinary.

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

Самораспаковывающийся

усложняет

программу,

создание

самораспаковываю-

автоматизирующую

данный

архив

процедура Button_Archive() (см. листинг 3). В

процесс. Ее окно показано на рисунке 4.

первую

Программа

был объявлен в начале программы.

позволяет

создать

самораспа-

ковывающийся архив, защищенный паролем

из файлов выбранной папки. Исполняемый файл модуля распаковки архива, хранится в секции данных программы.

Код программы будет следующим: ; Добавление при компиляции модуля распаковки ; в исполняемый файл. DataSection

создает

очередь,

очищается

динамически

связанный список, имеющий имя Files(). Он Затем вызывается процедура Find_File() (см.

листинг 4), основное назначение которой –

занести в связанный список имена и пути всех

файлов, подлежащих архивации. Она ищет

файлы

в

выбранной

папке

и

во

всех

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

и

управление

передается

процедуре Button_Archive(). Далее подсчиты-

*** Такой способ хранения модуля распаковки хорош тем, что программа состоит всего из одного исполняемого файла. А один файл хранится внутри другого, т.е. по принципу смерти кощеевой – игла в яйце, яйцо в утке, а утка где-то на страницах журнала / Автор.

57


ПРО

граммист

№15 (июнь) 2011

ЛАБОРАТОРИЯ ; Создание самораспаковывающегося архива.

Листинг 3

Procedure Button_Archive(Directory.s, File.s)

Error = #True BreakCompress = #False

SetGadgetText(#Text_CurrentFiles, "Подсчет файлов. Ждите...") ClearList( Files() )

; Очистка динамически связанного списка.

Find_File(Directory, "") ; Поиск файлов, подлежащих архивации.

CountFiles = ListSize( Files() ) ; Число найденных файлов. If CountFiles = 0 MessageRequester("", "В выбранной папке отсутствуют файлы!", #MB_OK|#MB_ICONWARNING) ProcedureReturn EndIf

SetGadgetAttribute(#ProgressBar_AllProgress, #PB_ProgressBar_Maximum, CountFiles) SetGadgetText(#Text_CurrentFiles, "Подсчет файлов")

CurrentDir.s = GetCurrentDirectory() ; Путь к текущей папке программы.

If CreateFile(2,File) ; Создаем файл самораспаковывающегося архива WriteData(2, ?SFX_File, ?SFX_File_End-?SFX_File) ; В начало файла - модуль распаковки архива. CloseFile(2)

Password.s = GetGadgetText(#String_Password) ; Пароль архива PureZIP_SetArchivePassword(Password)

If PureZIP_Archive_Create(File, #APPEND_STATUS_CREATEAFTER) ; Добавление архива в конец файла. SetCurrentDirectory(Directory)

; Установка текущей папки

Count = 0

ForEach Files() ; В цикле упаковываются файлы, имена которых находятся в связанном списке

Count + 1 SetGadgetState(#ProgressBar_AllProgress, Count) ; Увеличение значения прогресса упаковки. SetGadgetText(#Text_CurrentFiles, Cut_FileName(Directory+Files())) Status = PureZIP_Archive_Compress(Files(), #True, @BreakCompress) ; Упаковка файла

If BreakCompress = #True

58


ПРО

граммист

№15 (июнь) 2011

ЛАБОРАТОРИЯ MessageRequester("", "Создание архива прервано пользователем", #MB_OK|#MB_ICONINFORMATION) Break EndIf

If Status <> #Z_OK And Status <> -1 MessageRequester("", "Возникла ошибка при упаковке файла" + Chr(10)+Files(),

#MB_OK|#MB_ICONERROR)

Break EndIf

Next

PureZIP_Archive_Close() ; Завершение создания архива.

If CountFiles = Count Error = #False SetGadgetText(#Text_CurrentFiles, "SFX архив создан") MessageRequester("", "Самораспаковывающийся архив создан.", #MB_OK|#MB_ICONINFORMATION) EndIf

Else MessageRequester("", "Ошибка доступа к файлу при добавлении архива!", #MB_OK|#MB_ICONERROR) EndIf

Else MessageRequester("", "Не удалось создать файл!", #MB_OK|#MB_ICONERROR) EndIf

SetCurrentDirectory(CurrentDir) ; Установка текущей папки программы.

If Error = #True

; Если произошла ошибка

If FileSize(File) >= 0 ; и файл SFX архива был создан DeleteFile(File)

; удаляем файл.

EndIf

SetGadgetText(#Text_CurrentFiles, "SFX архив не был создан") SetGadgetState(#ProgressBar_FileProgress, 0) SetGadgetState(#ProgressBar_AllProgress,

0)

EndIf

EndProcedure

59


ПРО

граммист

№15 (июнь) 2011

ЛАБОРАТОРИЯ Листинг 4

; Занесение путей к упаковываемым файлам в связанный список. Procedure Find_File(Path.s, Sub.s)

If Right(Path.s,1)<>"\":Path + "\":EndIf

; Начало сканирования папки. Directory = ExamineDirectory(#PB_Any, Path, "*.*") If Directory While NextDirectoryEntry(Directory) ; Следующий файл / папка.

Type.l = DirectoryEntryType(Directory) ; Тип объекта (файл или папка). Name.s = DirectoryEntryName(Directory) ; Имя объекта.

If Type = #PB_DirectoryEntry_File ; Найден файл. AddElement( Files() )

; Добавления элемента в список.

Files() =Sub +Name

; Запись в список имени файла.

ElseIf Type = #PB_DirectoryEntry_Directory ; Найдена папка If Name <> "." And Name <> ".." ; Не текущая и не родительская папка. ; Рекурсивный вызов процедуры. Find_File(Path + Name, Sub + Name + "\") EndIf EndIf Wend FinishDirectory(Directory) ; Завершение сканирования папки. EndIf

EndProcedure

вается число элементов связанного списка

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

предстоит архивировать. С помощью функции

пароль

для

того,

чтобы

узнать

сколько

файлов

CreateFile() создается пустой файл – заготовка для

самораспаковывающегося

помощи

функции

архива.

WriteData(),

в

При

файл

записывается модуль**** распаковки архива. После

чего,

CloseFile().

А

производится

файл вот

закрывается дальше

добавление

самораспаковывающийся

начинается

с

установки

функцией

собственно файлов

архив.

текущего

и в

Все

пароля

"Пароль архива". Если это поле пустое, то не

устанавливается.

При

помощи

функции PureZIP_Archive_Create(), открывается ранее созданный файл с уже записанным в

него модулем распаковки. Флаг

#APPEND_STATUS_CREATEAFTER

файла.

После

означает, что архив будет создан в конце SetCurrentDirectory()

этого,

изменяется

функцией текущая

папка программы. Ею становится папка с файлами, подлежащими добавлению в архив.

**** Напомню, этот модуль был добавлен в программу оператором IncludeBinary / Автор.

60


ПРО

граммист

№15 (июнь) 2011

ЛАБОРАТОРИЯ Это необходимо для того, чтобы в архиве были сохранены относительные пути к файлам, а не

абсолютные. Далее, в цикле ForEach – Next, производится перечисление всех элементов

списка Files() и добавление в архив, файлов, пути к которым хранятся в списке.

Файлы

добавляются

в

архив,

функцией

PureZIP_Archive_Compress(). Когда все файлы

будут

добавлены,

функция

PureZIP_Archive_Close() закрывает архив. Все, самораспаковывающийся архив готов!

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

И его

Если щелкнуть правой кнопкой мышки по

файлу самораспаковывающегося архива, то

можно

заметить,

WinRAR

(если

контекстном

меню

системе)

есть

и

что

есть

в

появившемся

пункт

архиватора

возможность

выполнять

конечно

он

установлен

в

стандартные действия над архивом, то есть,

распаковать или открыть его, добавить или удалить файлы, папки и т.д. В свойствах

файла, также присутствует вкладка «Архив»

(см. рисунок 5). Все это указывает на то, что

данный самораспаковывающийся архив, по

своему формату, совместим с аналогичным,

Рис. 5. Свойства файла

самораспаковывающегося архива Ресурсы

создаваемым программой WinRAR.

• Среда компиляции PuraBasic

Заключение

• Библиотека PureZIP http://gnozal.ucoz.com

Здесь

был

рассмотрен

http://purebasic.com/download.php

довольно

простой

пример самораспаковывающегося архива. Его

• Bytessence InstallMaker

http://www.bytessence.com/bim.html

можно использовать как основу для других

проектов, использующих похожий принцип хранения

файлов,

инсталляторов программ.

например

для

На данный момент существует как минимум

один конструктор инсталляторов «Bytessence

InstallMaker»,

использующий

библиотеку

PureZIP для сохранения файлов в установ-

щике программ и их извлечении из него.

61


ПРО

№15 (июнь) 2011

граммист

Алексей Шишкин

alexcones@gmail.com

ЛАБОРАТОРИЯ

ПЫЛЕСОС ИЛИ... ТАЙНАЯ ЖИЗНЬ ФУНКЦИИ SETPARENT()

Когда в последний раз вы меняли монитор? Год? Два года назад? Знаете ли вы, что теперь маленьким разрешением считается то, которое имеет меньше тысячи пикселей по вертикали? Вот и тот программист так считал, который мне эту программу подсунул... Вот что мне с ней делать? Она по-вертикали раза в четыре больше, чем мой монитор. О решении этой проблемы мы и поговорим далее. Откуда слоны в программировании?

Структура

Сколько раз вы встречались с окнами, высота

Итак, создадим же «виртуальный монитор», да

Два? Пять? Десять? Я встречался настолько

стороны. Задача на первый взгляд непростая...

или ширина которых не влезает в ваш монитор?

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

из

данной

ситуации.

Как

обычно,

вначале я подвел теоретическую базу – как

проблема может быть решена в теории.

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

Но не стоит бояться, она решается с помощью

одной единственной API функции. Какой? А вот сейчас и увидим.

Для

того,

сначала

чтобы

создать

определимся

с

такой

его

«монитор»

структурой

и

Итак, теоретически может быть два выхода:

схемой работы. Для начала определимся, как

программный. За неимением средств первый

следующую

лишь презрительного взгляда. Зато второй был

у которого есть скроллеры по краям.

физический

(покупка

второго

монитора)

и

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

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

решением.

Причина

появления

таких

окон

будет

работать

программа.

схему

работы:

Я

предлагаю

выбираем

окно,

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

нужно указать, какое окно мы хотим «всосать»

в себя. В семействе операционных систем

Windows для того, чтобы указать на конкретное

проста как две копейки – при создании окна

окно необходимо всего лишь знать его хендл*.

оптимально

Но как же выбрать хендл из миллиона других?

программист выставил тот размер, который ошибка

подходит

достаточно

к

его

монитору.

распространена

Эта

как

у

новичков, так и у профессионалов – когда перед

глазами нет монитора с разрешением 800 х 600

вообще трудно ориентироваться с размерами.

Но как же обойти задумку программиста, не

«попортив» саму программу? Как обычно на помощь к нам спешит Windows API.

* Хендл - 4-х байтный (в 64-битный системе 8-ми) указатель на блок памяти / Автор.

Первый способ прям как водопроводная труба: H := FindWindow(Nil, 'Калькулятор');

Появляется проблема – так мы можем указать только одно окно. Что же делать?

62


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ

Рис. 1. А мы сейчас сделаем еще дешевле Создание целеуказателя А создадим-ка мы форму... Application.Createform(Tform2, Form2);

Function GetBit : Graphics.TBitMap; Var Bmp : Graphics.TBitmap; DC : HDC; Begin

Form2.Left:=0;

Bmp := Graphics.Tbitmap.Create;

Form2.Top:=0;

Bmp.Height := Screen.Height;

Form2.Width

:= Screen.Width;

Bmp.Width := Screen.Width;

Form2.Height := Screen.Height;

DC := GetDC(0);

Form2.Image1.Width := Screen.Width;

Bitblt(Bmp.Canvas.Handle,

Form2.Image1.Height := Screen.Height;

0, 0,

Form2.Show;

Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY);

Да, неплохо.. А зачем мы это сделали? Да для того, чтобы на ней нарисовать копию экрана:

ReleaseDC(0, DC); Result := Bmp; End;

63


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ Procedure Tform1.Button1click(Sender: Tobject); Var

Procedure SuckIt(X, Y:Integer); Begin

Bit : Graphics.TBitMap;

H := WindowFromPoint(Point(X, Y));

Begin

Form1.Hide; Application.ProcessMessages; Sleep(500); Application.ProcessMessages; Bit := getBit; Application.Createform(Tform2, Form2); Form2.Left:=0; form2.Top:=0; Form2.Width

:= Screen.Width;

Form2.Height := Screen.Height;

Создание фильтра для мешка Но вот незадача: если мы сейчас попытаемся

творить что-либо с рабочим столом мы можем

отключить его так, что придется «кастовать»

заклинание

задач. Устраним проблему:

Begin ShowMessage('Рабочий стол - невкусная пища!');

Form2.Image1.Canvas.Draw(0,0,Bit);

Application.Terminate;

Form2.Image1.Canvas.Rectangle(5,5,10,10);

End;

Form2.Show;

нарисована копия экрана. А для того, чтобы

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

Теперь напишем «поисковую» процедуру:

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

можем «поймать» не только хендл самого окна,

но и хендл одного из его компонентов (кнопки, панели

Shift: Tshiftstate; X, Y: Integer); Begin form2.Hide; form1.Show; Application.ProcessMessages; SuckIt(X,Y); End;

Передавая в качестве параметра координаты

места клика мышью мы получаем координаты

нахождения окна. Теперь мы можем узнать хендл целевого окна:

и

проблему:

пр.).

Попробуем

решить

и

эту

… While GetParent(H) <> 0 Do

Procedure Tform2.Image1mousedown(Sender: Tobject; Button: Tmousebutton;

диспетчер

If H = 0 Then

Form2.Image1.Height := Screen.Height;

Так, теперь мы имеем форму, на которой

через

Form2.Image1.Width := Screen.Width;

End;

перезапуска

H := GetParent(H); …

Остался последний штрих и можно приступать к сверхшаманскому колдунству – переместим

окно

в

угол,

чтобы

«виртуальном мониторе»:

не

искать

его

… SetWindowPos(H, HWND_TOPMOST,0,0,0,0,SWP_NOSIZE ); …

Включение пылесоса

64

на


ПРО

№15 (июнь) 2011

граммист

ЛАБОРАТОРИЯ

Рис. 2. А-а-а, демоны... верните окно! А теперь смертельный номер под куполом

SetParent(H,

собственность:

Пойду-ка я ковер пропылесосю, а то мало ли

цирка – перенос любого приложения в свою

0).

Но

это

остается

вам

домашнее задание – проблема-то уже решена...

что в него «всосалось».

… Windows.SetParent(H, Form1.Scrollbox1.Handle);

И, собственно все. Наблюдаем эффект. Подытожим... Если

делать

полноценный**

монитор,

то

нелишним будет вести список «всосанных»

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

обратно»: к примеру, делая каждой программе ** В ресурсы с журналом включены полные исходные тексты проекта-пылесоса в среде Lazarus / Редакция.

как

65


ПРО

№15 (июнь) 2011

граммист

ЮМОР У меня дома живет котенок Байт, который постоянно ест, постоянно клянчит еду и вообще

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

Разденьтесь догола и используйте свое тело как коврик!

поздно. Однажды ночью иду по коридору, на

Папа,

часть кухни, стол и холодильник. И вот у этого

сидит??? – Не бойся, доча, это же наша мама в

кухне свет горит. Из коридора видна только

папа,

а

кто

это

там

Одноклассниках...

он уже вечером ел, я громко и с раздражением

вЮ3.661.009 Плата КЭП1:

секунду

что интересно – платы КЭП2 нету.

спрашиваю:

из

«Опять того

просматривался,

жрешь,

угла

доносится

тварь?»

кухни,

Через

что

жалобный

не

голос

свекрови: «Ну что ты, Кирочка, я же с самого

утра не ела». Вот откуда рождаются сказки о

злобной невестке. Хотите

загореть

зимой?

Наша

новая

ультрафиолетовая мышь поможет вам в этом!

углу

лохматенький, с красными глазками, всю ночь

холодильника сидит Байт и чем-то увлеченно

питается, наверное, с плиты стащил. А так как

в

– а-ха-ха... Плата «Капитан очевидность 1». И

Приходит новый русский домой, достает из

портфеля ружье и дохлую мышь, кладет их на

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

говорит:

– Слышь, Василич, поставил я на компьютер

66


ПРО

№15 (июнь) 2011

граммист

ЮМОР

винчестер

работает!!!

и

мышку,

а

он

ни

хрена

не

– Ну, значит, у тебя или памяти не хватает, или мать плохая.

– Ты че, мужик... Скоро

разум,

ученые и

он

создадут

во

много

человеческий интеллект.

искусственный раз

опередит

– Это несомненно. А мне вот интересно, что

супермозг придумает в первую очередь?

– В первую очередь он придумает миллиарды

новых отмазок, лишь бы не работать.

В связи с вводом видеофиксации нарушений

Правил дорожного движения, ГАИ объявляет набор

сотрудников.

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

Требования:

Фотошоп.

Зарплата

опытные

сдельная.

Сдавали квартиру двум студентам. Мама

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

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

Сидит крутейший гуру-программист, пишет свою

наисложнейшую

управляющую

процессом.

адски

Внезапно

«мегапрограмму»,

сложным под

и

важным

программистом

ломается стул. Вот просто берет и ломается. Ножки, например, отваливаются. Программист встает с пола, потирая ушибленную место, и

думает: что же теперь делать. Неудобно писать

«мегапрограмму»

стоя.

Решает

программист

обратиться к мастеру по стульям, чтобы тот

ему стул починил или новый выдал. Приходит

он к мастеру: стул, дескать, у меня сломался. Мастер

вздыхает,

откладывает

в

сторону

67 9


ПРО

№15 (июнь) 2011

граммист

ЮМОР стамеску и молоток, поднимает на программис-

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

– Что значит стул сломался? Какой стул, какой

представляете себе сложность этих процедур?

та полные тоски и вселенской скорби глаза: модели,

какого

года

выпуска,

из

древесной породы сделан?

какой

– Ну, обычный стул, деревянный. С четырьмя ножками.

– И где вас таких берут только, а? Ведь сидишь же на этом стуле каждый день, а даже не знаешь, какой он модели! Ну как так можно! Ладно, что случилось-то с ним? – Ножки отвалились.

разболталась, рассохлась,

древесина

болт

Гайка в

месте

вывалился?

понимаете, о чем говорите?

крепления

Вы

крепежа вообще

– Да я то тут при чем? Вы же мастер по

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

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

гордо

смотрит

программиста и изрекает:

боится шелохнуться. Мастер разворачивается, со свистом выскакивает из кабинета и несется

обратно к себе в мастерскую, выкуривая по

дороге целую пачку сигарет. Программист так

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

«Мегапрограмма» остается недописанной. Стул

на

чинит

только

на

следующий

день,

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

– Как это... ножки отвалились?! Не могут там отвалитьcя»!

Бедолага-программист стоит ни жив ни мертв,

мастер

Тут мастер совсем расстраивается... «ножки

идти к вам и закручивать эту гайку! Вы хоть

бедного

– Ну что, пойдем смотреть на твои «отвалив-

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

Ваша теща давно хотела попасть на радио? Один день в компании радиолюбителей – и все пройдет! Облегчите теще жизнь, и подарите

незабываемый уик-энд «по-радиолюбительски». В программу включен мастер-класс по ремонту

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

телевизоров в один передатчик», лекция на тему «Работа в эфире QRP на гвоздь диапазона 160

метров»

и

рукодельный

вечер

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

шиеся ножки»!

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

– Ножки у него отвалились – ну надо же такое

придумать! Тут же ребенку понятно, что разболталась гайка обратного крепления М20! Что вы с этим бедным стулом делали, скажите мне? Верхом по прериям на нем скакали? Ну это же

надо до такого состояния мебель довести… Я

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

68

PROgrammist, №15  

Official editorial layout

Advertisement