108

VR-Online (Август-сентябрь 2010)

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: VR-Online (Август-сентябрь 2010)
Page 2: VR-Online (Август-сентябрь 2010)

Интро2

vr­online | сентябрь 2010

Intro

Долой холивары, давайте работать!

Я никогда не был большим любителем «святых» войн и бесполезных дискусий. Всегдасчитал и, наверное, буду считать, что каждая существующая технология хороша по­своему. Она обязательно кому­то нужна и нет смысла поднимать спор, который всеравно миром не разрешится. Это тоже самое, что спорить с кофеманами,предпочитающими варить бодрящий напиток в турке. Хоть целый день им рассказывайпро плюсы кофеварок — они не примут вашу сторону. Почему? Ведь это долго инеудобно? Потому, что истинный любитель кофе знает, что в турке получается намноговкуснее.Буду откровенен, меня достали всевозможные необоснованные наезды на компаниипроизводящие софт или на сами программные продукты. Ну почему кто­то до сих порсчитает, что Delphi полное говно? Да пускай он и проигрывает тому же C# (в плане ООП),но это очень мощный язык. Он прост в освоении и на нем очень просто создаватьнативные приложения. Хоть закидайте меня помидорами, но против фактов не попрешь.Много знаменитых и качественных продуктов были созданы на Delphi: Total Commander,Skype, TheBat!, Unreal Commander и т. д. Ими пользуются тысячи людей и все довольны.Софт полностью выполняет возложенные на него задачи, а это самое главное.Не подумай, что в предыдущем абзаце я просто пытался отмазать Delphi.Вышеприведенные слова справедливы для любой технологии. За свои 8 лет IT'шнойжизни я сделал один простой вывод: «Технологии нужно использовать для облегченияжизни, а не ради технологий». Под этими словами я подразумеваю, что для каждойзадачи нужно выбирать оптимальное решение. Нельзя пытаться засунуть однутехнологию во множество областей. Быть может с ее помощью и возможно решитьбольшинство задач, но будут ли эти решения эффективны? Однозначно говорю — нет.Пускай разработчики языков программирования, и пытаются сделать свои детищауниверсальными, но на практике все выглядит иначе. Тот же Delphi позволяет создаватьWEB­приложеения, но я бы никогда не согласился делать их на нем.С операционными системами аналогичная ситуация. Linux хорош, но для домашнегоиспользования он, мягко говоря, не очень. Чтобы не говорили матерые линуксойды, адля дома лучше животных не держать, а завести игрушку с именем Windows.Выбирая способ для решения поставленной задачи обращайте внимание на критерий сименем «Эффективность». Решайте задачи эффективно, качественно и быстро. Нестыдитесь использовать технологии (если они действительно позволяют решить задачупроще и лучше), которые стали аутсайдерами из­за эффекта толпы. Делайтерациональный выбор!

Приятного чтения!Игорь Антонов

Page 3: VR-Online (Август-сентябрь 2010)

Содержание3

vr­online | сентябрь 2010

СодержаниеСентябрь 2010

It-NewsHard-NewsКодинг

Я прусь!Обзоры от VR

Без рамки

Меня тошнит!Креатиff

Школа

Мнение VR

Идея проектаФленов Михаил aka

Horrific

(http://flenov.info)

Антонов Игорь akaSpider_NET

Роман Костенко akaLord_of_Fear

Редакторы номера Верстка и оформлениеАнтон Козлов aka

Jimmy Jonezz

Редькин Дмитрий akazahod5277

mail@vr­[email protected]

Вопросы и предложения

1 2. C#1 8. C#20. C#22. Processing24. Delphi27. Delphi34. Python37. Python

Берем WEB­камеру под контрольБинарные деревья поискаЭлегантное сохранение параметровприложенияЗаписки начинающего художникаПолучаем DNS записиКак я писал WinLockerРаскручиваем сайт злобоскриптомИди ты на фиг, twitterfeed!

41 . Linux глазами хакера42. Обзор плеера Samsung YP-R1

47. 1 0 лучших дистрибутивовLinux. Версия 201 051 . Как я ставил Linux наnetbook54. VK Music: Скачаем все!56. Ноутбук + GPS =картографирование59. Синхронизация без границ

67. Inkscape. Создаем постер70. Photoshop. Расскрашиваемфото

72. Incendia. Первыйраз в первый класс

82. PHP. Счетчик посещений83. Создание БД в IBConsoleи приложения в Delphi. Часть189. Знакомимся с1С:Предприятие. Часть 3.Типы данных1 00. Знакомимся с1С:Предприятие. Часть 4.Отладка1 06. C#. Напиши мне, напиши

Page 4: VR-Online (Август-сентябрь 2010)

IT­News4

vr­online | сентябрь 2010

Новос

типод

готови

ли:An

yKey

иSpid

er_NE

TIT-News

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

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

На создание Стакснет, который охотится за специальнымикомпьютерными системами, созданными немецкой фирмой Siemens,потребовалось от шести месяцев до года."Для создания такого червя требуются ресурсы на уровне государства. Я полагаю, что егосоздание было наверняка спонсировано некоей правительственной программой", ­ сказал Эвронв интервью Скай ньюс.

Также специалист добавил, что на вооружении спецслужб этот вирус может использоваться дляатаки специфических целей. "Невозможно представить, что его использует отдельный хакер,сидя у себя дома", ­ считает Гади Эврон. Другой специалист в области компьютернойбезопасности Ури Ривнер заявил, что за несколько месяцев во всем мире червем Стакснет былизаражены от 30 тысяч до 50 тысяч компьютеров на многих предприятиях и корпорациях. Такоеобширное заражение позволило специалистам выявить новый вирус и помогло предпринятьмеры к его нейтрализации.

Состоялся релиз финальной версии iOS 4.1Apple в США начала продажу нового поколения плееров iPod,одновременно разместив в системе обновления новую версиюоперационной системы iOS 4.1, которая доступна для предыдущихпоколений устройств iPod и iPhone. Напомним, что подробно овозможностях новой системы около недели назад рассказывал главаApple Стив Джобс, презентовавший новые iPod и AppleTV. На данныймомент все пользователи последних и предпоследних поколений iPod и

Page 5: VR-Online (Август-сентябрь 2010)

IT-News5

vr­online | сентябрь 2010

iPhone могут обновить программное обеспечение через iTunes бесплатно.В обновлении содержатся несколько новых функциональных дополнений, в том числединамическое масштабирование фото, поддержка аренды видеофайлов через iTunes,возможность загружать HD­видео на YouTube и MobileMe, расширенная поддержка аксессуаров,совместимых с AVRCP и новые варианты работы системы видеотелефонии FaceTime.

Компьютер читает мысли с точностью 90%Американские ученые разработали технологию, позволяющуючитать чужие мысли. Российская пресса уже окрестила аппаратмиелофоном по аналогии с прибором из отечественногофантастического фильма "Гостья из будущего".

Открытие американских биоинженеров преобразует поступающиеиз мозга сигналы в слова, сообщают детали Вести.Ru. Точность, скоторой аппарат читает мысли, составляет до 90 процентов. Впервую очередь он может помочь парализованным пациентам илюдям с ограниченными речевыми возможностями. Внедрениеприбора в медицину может состояться в ближайшие несколько лет.Впервые аппарат был испытан на больном эпилепсией пациенте. Биоинженеры подключили кучасткам его головного мозга, отвечающим за речь, 16 небольших электродов и попросилииспытуемого прочитать несколько простых слов. После того как пациент мысленно повторил этислова, компьютер, проанализировав мозговые волны, смог распознать их с точностью от 76 до 90процентов.

Группа ученых уверена, что в ближайшее время у них получится создать специальное голосовоеустройство, повторяющее то, о чем думает пациент, пишет The Daily Telegraph.

Dell представляет ноутбук-трансформерЗабавный мини­ноутбук представила компания Dell наконференции IDF 2010 в Сан­Франциско. Устройство способнопреображаться в планшетный компьютер. Новинка называетсяInspiron Duo.С виду обычный нетбук легким движением руки превращаетсяв планшет благодаря тому, что его дисплей закреплен внутрирамки с помощью двух шарниров, рассказывает портал«Компьютерра–Онлайн». С их помощью экран можноперевернуть и «положить» тыльной частью на клавиатуру. В итоге получится планшет с 10­дюймовым тачскрином.Известно, что в основе компьютера лежит двухъядерный 1,5­гигагерцевый чип Intel Atom N550, аработает он под управлением операционной системы Windows 7 Home Premium. Продажи DellInspiron Duo стартуют до конца 2010 года.

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

По этому поводу специалист ­ некто Илья А. (полная фамилия неназывается) дал интервью Сnews. Он рассказал, что выявил «дыры» вбезопасности, когда готовился к собеседованию на руководящую позицию вMail.ru.Информация об уязвимостях была передана по назначению. Но прошел месяц, а «дыры» вбезопасности Mail.ru до сих пор не закрыты. Потеряв терпение, Илья опубликовал описаниечетырех «дыр» в популярном ИТ­блоге. Помимо описания проблем, он привел готовые скрипты,

Page 6: VR-Online (Август-сентябрь 2010)

IT-News6

vr­online | сентябрь 2010

Flash Player опасен для компьютераКомпания Adobe предупреждает пользователей об опасной уязвимости воFlash Player. Прореха настолько серьезная, что позволяет киберзлодеямзахватить контроль над компьютером пользователя, сообщаетофициальный сайт Adobe.Критической уязвимости подвержен Adobe Flash Player версии 10.1.82.76 иболее ранних версий для платформ Windows, Macintosh, Linux, Solaris, атакже Flash Player 10.1.92.10 для смартфонной операционной системыGoogle Android, уточняют РИА Новости.

Ошибка также затрагивает Adobe Reader 9.3.4 для всех поддерживаемых настольныхоперационных систем и Adobe Acrobat 9.3.4 для Windows и Macintosh. Уязвимы также болееранние версии этих программ.Уязвимость существует из­за неизвестной ошибки при обработке Flash­данных. Подробности несообщаются. Но по сведениям Adobe, уязвимость уже активно используется хакерами дляпоражения Windows­компьютеров с Flash Player. Об атаках против программ Reader и Acrobatпока неизвестно.Adobe планирует выпустить обновление Flash Player для Windows, Macintosh, Linux, Solaris иAndroid в течение двух­трех недель. Обновление Reader и Acrobat ожидается на неделю позже.

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

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

Под воздействием звука громкостью в 100 дБ устройство дало ток в 50 милливольт. Этогонедостаточно для зарядки мобильного телефона, но исследователи надеются, что в будущем онисоздадут более мощные преобразователи.Устройство, преобразующее звуковые волны в электричество, может использоваться не только втелефонах, но и, например, на автотрассах. Шум машин позволит обеспечить электроэнергиейкварталы города.

По три - каждому!Стало известно, что компания Marvell решила удивить всех своим новымпроектом. В настоящее время они работают над созданием (а точнеетестированием) процессора с тремя ядрами для мобильных устройств(коммуникаторы, смартфоны, планшеты и т.д.). Известно, что кодовое имянового чипа Armada 628 и он создан на базе архитектуры ARM. Главнымифишками нового процессора должны стать: высокая производительность (еще

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

Page 7: VR-Online (Август-сентябрь 2010)

IT-News7

vr­online | сентябрь 2010

Состоялся релиз PostgreSQL 9.0Как­то мы отвлеклись и забыли сообщить, что 20 сентябряобновился популярный бесплатный сервер баз данных ­PostgreSQL (http://postgresql.org). В новой версии продуктаразработчики реализовали:

­ Улучшенную поддержку хранимых процедур;­ Более простое управление разрешениями для объектов;

­ Полная поддержка Windows x64­ Исключающие ограничения (exclusion constraints)

­ Поддержка аутентификации через RADIUS и LDAP­ Поддержка Python 3 в PL/Python

­ Анонимные блоки кода­ Новые возможности для триггеров

­ и т.д.С полным списком нововведений можно ознакомиться на этой странице.

Лицензионную музыку закачали в Интернет бесплатноВ Интернете появился сервис "Яндекс.Музыка". Благодаряему слушать песни известных отечественных и зарубежныхисполнителей можно не только легально, но и бесплатно. Вмузыкальном каталоге собраны около 800 тысячкомпозиций.Если ранее пользователи могли прослушать искомуюкомпозицию в плеере "Яндекса" прямо на страницерезультатов поиска, передает РИА Новости, то теперь они имеют возможность искать и слушатьне только треки, но и альбомы исполнителей из музыкального каталога "Яндекса". Также спомощью нового сервиса можно составить свой плей­лист из любимых композиций."Сервис позволяет добавлять в плей­лист как треки, так и альбомы разных исполнителей ислушать их хоть целый день ­ в хорошем качестве и абсолютно бесплатно", ­ говорится всообщении компании. Зарабатывать же поисковик планирует за счет размещения баннернойрекламы на странице сервиса.Контент для "Яндекс.Музыки" предоставили более 50 правообладателей, среди которыхкомпании Universal, EMI, Warner Music Group, Sony Music, "Первое музыкальное издательство","Монолит", "СБА Продакшн" и многие другие.

бы!), и низкое потребление энергии. Что­ж, поживем ­ увидим. Кстати, появление первыхустройств на новом процессоре ожидается уже в начале следующего года.

Qt обновился до версии 4.7.0Буквально пару дней назад обновился инструментарий для кросс­платформенной разработки приложений ­ Qt(http://qt.nokia.com/products). Из наиболее значимых измененийможно отметить:

­ Повышение производительности­ Исправление множества ошибок

­ Улучшение производительности в Qt Webkit Integration­ Qt Quick

Page 8: VR-Online (Август-сентябрь 2010)

IT-News8

vr­online | сентябрь 2010

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

Сегодня многие поставщики популярных сервисов и приложений длясвязи через Интернет уделяют особое внимание защите данных.Современные алгоритмы шифрования предельно затрудняют взлом иперехват информации, что не позволяет сотрудникам спецслужбпрослушивать переговоры преступников и террористов,комментирует американский законопроект Софт­клуб."В данном случае речь идет не об установлении всеобъемлющегоконтроля над электронными коммуникациями, ­ объясняетконсультант ФБР Валери Капрони в своем интервью газете The NewYork Times, ­ Государство уже предоставило нам такие полномочия иразрешило организовывать прослушку в тех случаях, когда этокасается защиты общественной и государственной безопасности".Законопроект будет представлен на рассмотрение конгресса в следующем году. Разумеется,далеко не все граждане США уверены в полной необходимости предпринимаемых мер. Помнению противников закона, "черные ходы" в системах защиты будут использоваться хакерами идругими злоумышленниками для незаконного перехвата защищенных коммуникаций.

Google исполнилось 1 2 лет!27 сентября Google отпраздновал свой 12­й день рождения. За 12 лет ЛарриПэйдж и Сергей Брин подняли свой стартап (тогда он ещё назывался BackRub) дотранснациональной корпорации, а сами делят 11­е место в списке "Forbes".

MS Security Essentials стал еще халявнееНесмотря на то, что многие пророчили антивирусу от MS неминуемую гибель, онпродолжает жить и завоевывать сердца пользователей. Еще бы, ведь онсовершенно бесплатен и неплохо справляется с возложенными на негообязанностями. Я и сам юзаю MS Essentials уже почти год и пока полностьюдоволен его работой. Начиная, с октября, поклонников MS Essentials станет ещебольше. Компания MS пересмотрела условия лицензионного соглашения,добавив возможность использовать антивирусный продукт в среде малогобизнеса (до 10 компьютеров).

Девятого ослика скачали 2 млн разКомпания MS поспешила поделиться радостной новостью. Бета версию IE 9загрузили 2 млн пользователей со всего мира. Как сообщает представитель MS,популярность IE9 превзошла их ожидания. Еще бы было по­другому! Пиар сделалсвое дело.

Диета для графики от GoogleКорпорация зла добра представила на суд общественности новый формат сжатияизображений ­ WebP. Нетрудно догадаться, что главная особенности WebP отостальных форматов ­ более высокая степень сжатия данных.

Как утверждают представители Google, формат WebP в состоянии уменьшитьразмер изображений (без видимой потери качества) до 39% по сравнению сJPEG­файлами. В основе WebP лежит технология предиктивного кодирования. Еесуть в том, что во время сжатия происходит анализ содержимого соседних блоков пикселей для

Page 9: VR-Online (Август-сентябрь 2010)

IT-News9

vr­online | сентябрь 2010

Разработчики OpenOffice.org объявили о независимости от OracleРазработчики офисного пакета OpenOffice.org создали организацию TheDocument Foundation, которая займется созданием пакета под названиемLibreOffice, пишет TGDaily. Новый продукт станет логическим продолжениемOpenOffice.org, однако не будет использовать это название, котороеявляется торговой маркой Oracle. Последняя получила права наOpenOffice.org, купив корпорацию Sun. Пока неизвестно, будет ли Oracle,которая является одним из ключевых спонсоров проекта OpenOffice.org,спонсировать LibreOffice.LibreOffice уже поддержал ряд компаний и организаций, в том числе Google,Free Software Foundation, Novell и Red Hat. Представители компанииCanonical пообещали включить LibreOffice в будущие версии дистрибутива Linux Ubuntu.

Представители The Document Foundation уже выложили первую бета­версию LibreOffice. Онадоступна для Windows, Mac OS X, систем на базе Linux, а также в исходных кодах. ПокаLibreOffice существует лишь в английской версии, в то время как OpenOffice.org доступен болеечем на 110 языках.

"угадывания" содержимого текущего блока. Такой подход позволяет кодировать лишь различиямежду фактическими и предсказанными значениями.Кто желает протестировать новый формат и увидеть его преимущества своими глазами, можетзагрузить бесплатную тулзу для конвертировании картинок (разных форматов) в WebP. Ксожалению, в настоящий момент программа доступна лишь для Linux. Версия под Windows будетпредставлена в ближайшее время.

Page 10: VR-Online (Август-сентябрь 2010)

Железные новости10

vr­online | сентябрь 2010

Новос

типод

готови

л:Lord

_of_F

earHard-News

Verbatim выпустила первую карту памяти SDXC емкостью 64 ГБКомпания Verbatim выпустила свою первую карту памяти формата SDXC (SecureDigital Extended Capacity), которая отличается высокой емкостью и высокойскоростью передачи данных.Представленная карта памяти Verbatim SDXC имеет емкость 64 ГБ. Такаяновинка отмечена рейтингом скорости UHS­I, что свидетельствует о еёспособности обеспечивать скорость передачи данных до 104 МБ/с. Другойрейтинг скорости – Class 10 – обещает, что минимальная скорость передачиданных не опустится ниже 10 МБ/с.

NVIDIA считает, что смартфоны вытеснят персональные компьютерыСложно оспаривать тот факт, что сегмент устройств на базе процессоров сархитектурой ARM сегодня растёт уверенными темпами ­ не зря жепроцессорный гигант Intel пытается предложить конкурирующие решения с x86­совместимой архитектурой. Компания NVIDIA тоже считает ARM­процессорыприоритетным направлением развития, хотя пока для его поддержки выделяетсяне так много средств, как следовало бы.Глава NVIDIA на недавней профильной конференции выступил со смелымзаявлением. По его словам, в будущем основную часть функций персонального компьютеравозьмут на себя мобильные устройства, по размерам не превышающие габаритов смартфона.Для подключения к внешним экранам будут использоваться беспроводные интерфейсы. ARM ужесейчас является самой быстрорастущей с точки зрения ёмкости рынка процессорнойархитектурой, и в будущем она станет доминирующей, как считает господин Дженсен Хуан.

Seagate выпускает первый внешний жёсткий диск объёмом 1 .5 ТбПо заверению компании, это ­ первый в мире ультрамобильный жёсткий дискс таким большим доступным объёмом. Среди преимуществ упоминаютсянадёжность и скорость работы. Для сравнения производитель приводит такиеданные: фильм, занимающий 25 Гб, запишется на диск за 5 минут, в то времякак при использовании USB 2.0 потребуется уже 14 минут. Цена новинки вамериканской рознице равна $249.Модель будет поставляться на территории США сразу с USB 3.0 кабелем(естественно, совместимым с предыдущей версией USB интерфейса), послеподключения накопителя пользователь также найдёт на нём лицензионныйфильм StarTrek. Продажи по всему миру назначены на конец текущего года.

Появились результаты первых тестов производительностипроцессоров Intel Sandy Bridge

Данный процессор Intel Sandy Bridge носит маркетинговое название Core i5­2400 и работает наштатной частоте 3,1 ГГц. Такой чип не обладает поддержкой технологии Turbo Boost, нообеспечивает поддержку Hyper­Threading, хотя серийные устройства лишатся такой поддержки. Впроцессоре Intel Sandy Bridge используется графическое ядро, расположенное на одном чипе свычислительными ядрами, также для всех ядер предусмотрено использование общей кэш­

Page 11: VR-Online (Август-сентябрь 2010)

Hard-News11

vr­online | сентябрь 2010

Ноутбуки от HP с оригинальными улучшениямиКомпания HP подготовила к выпуску несколько новых моделейпотребительских ноутбуков, в которых реализованы улучшенныетехнологии воспроизведения трехмерного контента, воспроизведениязвука и охлаждения компонентов устройств.Модель HP ENVY 17 3D позиционируется в качестве первого 17­дюймового ноутбука, обладающего поддержкой воспроизведениястереоскопических изображений и содержащего привод Blu­ray иулучшенную акустическую систему. В новинке применяется 17,3­дюймовый дисплей 3D Ultra BrightView, который обладает поддержкойFull HD разрешения 1080p. Для просмотра стереоскопических изображений на таком дисплеепользователю необходимо использовать специальные очки с активным затвором с беспроводнойсинхронизацией. Такой ноутбук содержит высокопроизводительный 4­ядерный процессор IntelCore i7, дискретную видеокарту ATI Mobility Radeon HD 5850, дисковую подсистему емкостью до 2ТБ, оптический привод 3D Blu­ray и акустическую систему Beats Audio с сабвуфером HP TripleBass Reflex.

Также компания HP представила ноутбук ENVY 14 Beats Edition, вкотором используется улучшенная акустическая система BeatsAudio. Также новинка содержит производительный процессор IntelCore (модель не уточняется) и дискретную видеокарту ATI MobilityRadeon HD5650. Отмечается, что со стандартным аккумуляторомданная модель способна работать в автономном режиме до 6,5часов, а при использовании батареи увеличенной емкости – до 13часов. В комплект поставки устройства включаются наушники Beatsby Dr. Dre Solo Headphones.

памяти третьего уровня. Производительность такого графического ядрасопоставима с видеочипом AMD Radeon HD 5450.Производительность процессора Intel Sandy Bridge Core i5­2400 посравнению с современным чипом с аналогичной частотой 3,1 ГГцповышена, в среднем, на 10%. При этом новинка обладает более низкимэнергопотреблением и тепловыделением. Также, по предварительнымданным, цена такого процессора будет несколько ниже. Так, еслисравнивать процессор Sandy Bridge Core i5­2400 с чипами Intelаналогичного ценового диапазона, то прирост производительностидостигает 23%.

Page 12: VR-Online (Август-сентябрь 2010)

C#Берем WEB­камерупод контроль

12

«Раскрыть тайны. Показать все, что скрыто.Узнать только самое главное и интересное. Всеэто в программе….». Не подумай, это нереклама одной из известных телевизионныхпередач. Примерно так у меня ассоциируетсятема сегодняшней статьи. Современныйкомп/бук тяжело представить без наличия WEB­камеры. Видео чаты, скайп, youtube – изрядностимулируют на использование подобныхдевайсов. А что? Заснял прикольный ролик сучастием себя и Иринки из пятой квартиры истал порно…, сорри, звездой. Идей применения– масса! Сегодня я хочу на реальных примерахпоказать, как заюзать самую стандартную web­камеру по максимуму. Итак, как сказал Гагарин:«Поехали!».На что еще сгодится камера?WEB­камера – это девайс не только длявидеоконференций и баловства. Немноготворческого подхода и на ум невольно приходитнесколько идей:1. Видеоглазок. Я даже не знаю, можно лиотнести эту идею к разряду нестандартных. Протакой способ использования WEB­камеры яуслышал еще в далеком 2002 году. Сутьзаключается в возможности применения камерывместо дверного глазка. Монтируешь камеру кдвери и раз и навсегда забываешь, что нужноотрывать задницу от компьютера, когда в твоюдверь кто­то настырно звонит. Открылприложение, посмотрел лик негодяя и забил наподъем из мягкого и нагретого кресла. Скажу посекрету, такой способ я пробовал еще вовремена своего недолгого студенчества. Реальноудобно.2. Детектор движения. И вот, обычная web­камера легким движением руки превращается вбр… полноценный детектор движения. Идеяпросто как две копейки. Ставим камеру в нужноеместо (ничего пошлого и ругательного я не имелв виду) и при помощи хитрой тулзы делаемпостоянное сравнение кадров. Еслиизображение начинает меняться, значит, врагипроявляют активность и пора начинать бить

тревогу. Один из моих интернет­знакомыхзаюзал такой трюк для охраны гаража. Онпросто взял захудалый комп, обеспечил емувыход в инет (благо сегодня организоватьбеспроводной доступ не проблема) и развесилпо периметру камеры. Все камеры постоянноделают снимки и отправляют на комп, а там уженебольшая программа производит сравнение.При обнаружения сильных различий, компспешил отрапортовать хозяину по email и sms.Неплохая идея, правда?3. Камера видеонаблюдения. Эта идея такжепроста, но пользы от нее не меньше, чем отпредыдущей. WEB­камера вполне сгодиться дляорганизации системы видеонаблюдения.Профессиональных фишек (типичных для такихзадач) из нее выжать вряд ли удастся, ноорганизовать постоянную запись видео реально.Качество, конечно же, будет, не ахти, но длядомашних целей хватит. Плохое качество видеонесет не только минусы, но и плюсы. Один изних – сэкономленное на винте место. Кстати,если ты думаешь, что видеонаблюдение – этолишь игра, то глубоко заблуждаешься. Купивкамеру покруче, реально без проблеморганизовать систему видеонаблюдения в своемофисе. Если ты начинающий предприниматель иу тебя каждая копейка на счету, то считай, чтонесколько убитых енотов сэкономлено.Видеонаблюдение, созданное своими руками,обойдется значительно дешевле.4. Продвинутый логон в систему. В старыхфантастических фильмах часто показывали какгерои выполняют вход систему после того, каккомпьютер произведет сканирование их образа.Тогда это казалось чем­то нереальным ивыглядело потрясно, а сегодня такой эффектреально замутить у себя дома, потратив приэтом 20­30$ (цена дешевой web­камеры). Аможет даже не придется платить. Со многимибуками уже идет весь необходимый софт.Установил, настроил и приготовься удивлятьдрузей.5. Управление компьютером. Особые умельцыуспешно юзают web­камеру для управления

vr­online | сентябрь 2010

Автор

:Игор

ьАнто

новe­m

ail:ant

onov.ig

or.khv@

gmail.

comКодинг

Page 13: VR-Online (Август-сентябрь 2010)

Кодинг13

vr­online | сентябрь 2010

своим компом. Выглядит это примерно так.Настраивается специальный софт ипроизводится базовое «обучение». После этогокомп будет выполнять твои команды какдрессированный пес. Махнул ты рукой, а онсразу отдал тебе честь и запустил FireFox илиеще чего. Идею ты понял, а если нет, то сбегайна youtube и посмотри соответствующие ролики(см. ссылки во врезке).Первые досадные огорченияЯ был очень удивлен и растроен, когда узнал,что в великом и могучем .NET Frameworkнапрочь отсутствует возможностьвзаимодействия с WEB­камерами (точнеепростого взаимодействия). В четвертой версииситуация вроде улучшилась (для SilverLightпроектов точно появились соответствующиеклассы), но протестировать я их не успел.Пример для данной статьи я начал писать ещедо официального выхода VS2010 и 4­го дот нета.Уже было, отчаявшись, я полез в любимый гугл иподобно поисковой ищейки стал вбивать одинзапрос за другим. Вначале я исследовал лишьрунет. Результаты были бедноватыми. Все чтоудалось найти ­ ссылки на MSDN и технологиюDirectDraw. Я даже попробовал набросатьпростенький примерчик, но из­за отсутствияопыта в работе с DirectDraw по­лоховскиоблажался. У меня получилось собрать совсемпростенькое приложение, но я так и не смогвыловить в нем все глюки. Закодить на раз дватри приложение на основе данной технологии ­дело не простое!Еще больше отчаявшись, я принялся сечитьресурсы наших западных товарищей. У нихвсегда есть чем поживиться. Проштудировнесколько десятков ссылок мне удалось нарытьмного вкусностей. Среди них быливсевозможные примеры и небольшие статейки(американцы не любят много писать). Мне дажеудалось найти рабочий пример на основеDirectDraw, но когда я увидел код, то ужаснулся.Разобраться в нем новичку будетпроблематично. Поэтому я решил с нимнезаморачиваться, а попытаться найти способпроще. Не успев попрощаться с примером наDirectDraw, мне на глаза попался еще один.Автор примера закодил целую библиотеку дляработы с web­камерами и другими устройствамивидео захвата, используя технологию VFW (VideoFor Windows).Жаль, что проект автора (я про библиотеку) былмаксимально кастрирован. Все что онапозволяла библиотека сделать ­ вывестиизображение с web­камеры. Ни захватаотдельных кадров, ни записи видео и другихполезных нам фич не было.Тут мое шестое чувство взвыло и всячески

начало пытаться намекнуть, что этот проектименно то, что я искал. Не тратя драгоценноевремя на размышления, я решил залезть ипокопаться в сорцах американского коллеги.Не успел я беглым взглядом пробежаться покоду, как увидел имена знакомых win­сообщенийи не менее знакомых названий WinAPI функций.Когда­то давным­давно мне приходилось писатьприложение для работы с web­камерой наDelphi. Тогда­то я и столкнулся с этимифункциями впервые.Соответствующих модулей для Delphi не было,поэтому пришлось мне портировать C++ код вцарство дельфяндии. Эх, намучился же я тогда.Прошу прощения, что­то я немного отвлекся.Посмотрев сорцы, я решил написать своюверсию библиотеки и снабдить ее нужнымфункционалом.

WinAPI в королевстве .NET

Взвод, готовность 1Вполне возможно, что в одном компе/ноутеможет быть несколько web­камер. За примеромдалеко ходить не надо. Мне по работе частоприходится организовывать простенькиевидеоконференции. Обычно в них участвуют двачеловека. Каждого из участников снимаетотдельная камера. Сами камеры подключены кмоему компу. Когда я начинаю съемку, товыбираю в программе для работы свидеокамерами нужную в настоящий моменткамеру. Раз уж мы решили взять камеру подконтроль, то обязаны разобраться, как получатьсписок установленных устройств видео захвата ипроизвести выбор того, с которым будемработать в настоящий момент. Для решения этойнехитрой задачи в WindowsAPI предусмотренафункция capGetDriverDescription(). Онапринимает аж пять параметров:1. wDriverIndex ­ индекс драйвера видео захвата.Значение индекса может варьироваться от 0 до9.2. lpszName ­ указатель на буфер, содержащийсоответствующее имя драйвера3. cbName ­ размер (в байтах) буфера lpszName

Page 14: VR-Online (Август-сентябрь 2010)

Кодинг14

vr­online | сентябрь 2010

4. lpszVer ­ указатель на буфер, содержащийописание определенного драйвера.5. cbVer ­ размер буфера (в байтах), в которомхранится описание драйвера.В случае успешного выполнения, функциявернет TRUE и FALSE в случае ошибки.Описание функции у нас есть, теперь посмотрим,как определить ее в C#. Делается это так:[DllImport("avicap32.dll")]

protected static extern boolcapGetDriverDescriptionA(short wDriverIndex,

[MarshalAs(UnmanagedType.VBByRefStr)]ref String lpszName,

int cbName,[MarshalAs(UnmanagedType.VBByRefStr)] refString lpszVer,

int cbVer);

Обрати внимание, что перед тем, как указать имяподключаемой функции, в обязательном порядкетребуется написать имя DLL, в которой онаопределена. В нашем случае это avicap32.dll.Так, функция импортирована, теперь можнонаписать класс, в котором она будетиспользоваться. Весь код класса для получениясписка устройств я приводить не стану, покажулишь код ключевого метода:public static Device[] GetAllCapturesDevices()

String dName = "".PadRight(100);String dVersion = "".PadRight(100);for (short i = 0; i < 10; i++)

if (capGetDriverDescriptionA(i,

ref dName, 100,ref dVersion,100))

Device d = new Device(i);d.Name = dName.Trim();d.Version = dVersion.Trim();devices.Add(d);

return (Device[])devices.ToArray

(typeof(Device));

Код выглядит проще некуда. Самое интересное внем место – цикл, в котором происходит вызовупомянутой выше функцииcapGetDriverDescription. Из MSDN мы знаем, чтоиндекс (первый параметр функцииcapGetDriverDescription()) может варьироватьсяот 0 до 9, поэтому мы целенаправленнозапускаем цикл в этом диапазоне. Результатом

выполнения метода будет массив классов Device(этот класс определил самостоятельно, см.соответствующие исходники).С получением списка устройств разобрались,теперь позаботимся об отображении видеопотока с камеры. Тут нам сослужит хорошуюслужбу функция capCreateCaptureWindow(),предназначенная для создания окна захвата.Немного забегая вперед, скажу, что дальнейшиедействия с камерой будут происходить путембанальной отправки сообщений окну захвата.Слух тебе не обманул, придетсявоспользоваться до боли знакомой windows­программисту (особенно приколисту) функцииSendMessage().Теперь присмотримся повнимательнее кфункции capCreateCaptureWindow(). Ейтребуется кинуть шесть аргументов:1. lpszWindowName ­ Нуль­терминальная строка,содержащая имя окна захвата.2. dwStyle ­ стиль окна3. x ­ координата X3. y ­ координата Y4. nWidth ­ ширина окна5. nHeight ­ высота окна6. hWnd ­ handle родительского окна7. nID ­ идентификатор окнаРезультатом выполнения функции будет handleсозданного окна или NULL в случае ошибки.Поскольку эта функция также относится кWinAPI, то ее опять­таки нужно импортировать.Код импортирования приводить не буду, т.к. онпрактически идентичен тому, что я писал дляфункции capGetDriverDescription(). Лучше сразувзглянем на процесс инициализации камеры:

deviceHandle = capCreateCaptureWindowA(refdeviceIndex, WS_VISIBLE | WS_CHILD, 0, 0,windowWidth, windowHeight, handle, 0);if (SendMessage(deviceHandle,WM_CAP_DRIVER_CONNECT, this.index, 0) > 0)SendMessage(deviceHandle, WM_CAP_SET_SCALE,-1, 0);SendMessage(deviceHandle,WM_CAP_SET_PREVIEWRATE, 0x42, 0);SendMessage(deviceHandle, WM_CAP_SET_PREVIEW,-1, 0);SetWindowPos(deviceHandle, 1, 0, 0,windowWidth, windowHeight, 6);

В этом коде, сразу после создания окнапроизводится попытка отправки сообщенияWM_CAP_DRIVER_CONNECT. Результатвыполнения больше нуля будет говорить об

Page 15: VR-Online (Август-сентябрь 2010)

Кодинг15

vr­online | сентябрь 2010

успешности.Представим, что сегодня боги на нашей стороне­ производим незамедлительную отправкунескольких сообщений: WM_CAP_SET_SCALE,WM_CAP_SET_PREVIEWRATE,WM_CAP_SET_PREVIEW. Увы, как и в случае сфункциями, C# ничего не знает о существованииэтих констант. Тебе опять придется определятьих самостоятельно. Список всех необходимыхконстант с комментариями я привел в листинге 1.

//Пользовательское сообщениеprivate const int WM_CAP = 0x400;//соединение с драйвером устройствавидеозахватаprivate const int WM_CAP_DRIVER_CONNECT =0x40a;//разрыв связи с драйвером видеозахватаprivate const int WM_CAP_DRIVER_DISCONNECT =0x40b;//копирование кадра в буффер обменаprivate const int WM_CAP_EDIT_COPY = 0x41e;//вклбчение/отключение режима предпосмотраprivate const int WM_CAP_SET_PREVIEW = 0x432;//включение/отключение режима оверлейprivate const int WM_CAP_SET_OVERLAY = 0x433;//Скорость previewrateprivate const int WM_CAP_SET_PREVIEWRATE =0x434;//Включение/отключение масштабированияprivate const int WM_CAP_SET_SCALE = 0x435;private const int WS_CHILD = 0x40000000;private const int WS_VISIBLE = 0x10000000;//Установка callback функции для previewprivate const int WM_CAP_SET_CALLBACK_FRAME =0x405;//Получение одиночного фрейма с драйверавидеозахватаprivate const int WM_CAP_GRAB_FRAME = 0x43c;//Сохранение кадра с камеры в файл.private const int WM_CAP_SAVEDIB = 0x419;

Необходимые константыДальнейшее описание класса для работы с web­камерой я опущу. Каркас я рассмотрел, а со всемостальным разберешься в хорошопрокомментированном исходнике. Единственное,что я не хотел, бы оставлять за кадром – примериспользования библиотеки.Всего в библиотеке я реализовал (точнеедописал) пару методов: GetAllDevices (ужерассматривали), GetDevice (получение драйвераустройства виде озахвата по индексу),ShowWindow (отображение изображения с web­камеры), GetFrame (захват отдельного кадра вграфический файл) и GetCapture (захват видеопотока).В качестве демонстрации работоспособностиизготовленной либы я набросал небольшоеприложение (см. соответствующий скриншот). Наформе я расположил один компонент ComboBox(используется для хранения списка имеющихсяустройств видео захвата) и несколько кнопок –«Обновить», «Пуск», «Остановить» и«Скриншот». Ах да, еще на моей формепестреет компонент Image. Его я применяю дляотображения видео с камеры

Разбор полетов начнем с кнопки «Обновить». Поее нажатию я получаю список всехустановленных устройств видео захвата.Начинка этого обработчика события:

Device[] devices =DeviceManager.GetAllDevices();foreach (Device d in devices)

cmbDevices.Items.Add(d);

Правда, просто? Разработанная намибиблиотека берет на себя все черную работу инам остается лишь наслаждаться объектно­ориентированным программированием. Ещепроще выглядит код для включенияотображения видео потока с камеры:Device selectedDevice =DeviceManager.GetDevice(cmbDevices.SelectedIndex);selectedDevice.ShowWindow(this.picCapture);Опять же, все проще пареной репы. Ну и теперьвзглянем на код кнопки «Скриншот»:Device selectedDevice =DeviceManager.GetDevice(cmbDevices.SelectedIndex);selectedDevice.FrameGrabber();

Я не стал уделять особого внимания методуFrameGrabber(). В моем исходнике вызов методаприводит к сохранению текущего кадра прямо вкорень системного диска. Поступать так вреальном приложении нельзя, не забудь внестивсе необходимые поправки.

Камера под нашимконтролем

Делаем фоткиодной кнопкой

Page 16: VR-Online (Август-сентябрь 2010)

Кодинг16

vr­online | сентябрь 2010

Готовность 3Теперь настало время поговорить о том, каксоорудить простенькую, но надежную системувидео наблюдения. Обычно, такие системыбазируются на основе двух алгоритмов: различиедвух фреймов и простое моделирование фона.Их реализация (код) достаточно объемная,поэтому в самый последний момент я решилпойти по более простому пути. Под легким путемподразумевается использованием мощного, нопока малоизвестного фреймворком для .NET ­AForge.NET.AForge.NET в первую очередь предназначен дляразработчиков и исследователей. С егопомощью, девелоперы могут существеннооблегчить свой труд при разработке проектовдля следующих областей: нейро­сети, работа сизображениями (наложение фильтров,редактирование изображений, попиксельнаяфильтрация, изменение размера, поворотизображения), генетика, робототехника,взаимодействие с видео устройствами и т.д. Сфреймворком поставляется хорошаядокументация. В ней описаны абсолютно всевозможности продукта. Не поленись хорошенькос ней ознакомиться. Особенно мне хочетсяотметить качество кода этого продукта. Всенаписано цивильно и копаться в коде – одноудовольствием.Теперь вернемся к нашей непосредственнойзадаче. Скажу честно, средствами фреймворкаона решается как дважды два. "Тогда зачем тымне парил мозг WinAPI функциями?" –недовольно возразишь ты. А за тем, чтобы ты небыл ни в чем ограничен. Сам ведь знаешь, чтопроекты бывают разные. Где­то удобнейприменить махину .NET, а где проще обойтисьстарым добрым WinAPI.Вернемся к нашей задачке. Для реализациидетектора движений нам придетсявоспользоваться классом MotionDetector извышеупомянутого фреймворка. Класс отличнооперирует объектами типа Bitmap и позволяетбыстренько вычислить процент расхождениямежду двумя изображениями. В виде кода этобудет выглядеть примерно так так:MotionDetector detector = new MotionDetector(

newTwoFramesDifferenceDetector( ),new MotionAreaHighlighting() );

//Обработка очередного кадраif ( detector != null )

float motionLevel =

detector.ProcessFrame( image );

if ( motionLevel >motionAlarmLevel )

flash = (int)( 2 * ( 1000 / alarmTimer.Interval ) );

if (detector.MotionProcessingAlgorithm isBlobCountingObjectsProcessing )

BlobCountingObjectsProcessing countingDetector=(BlobCountingObjectsProcessing)detector.MotionProcessingAlgorithm;

objectsCountLabel.Text="Objects: " +

countingDetector.ObjectsCount.ToString();else

objectsCountLabel.Text= "";

Сэр, посторонних движений не обнаружено!

Ахтунг!!!!!!! Обнаружено проникновение на территорию!

Page 17: VR-Online (Август-сентябрь 2010)

Кодинг17

vr­online | сентябрь 2010

Вышеприведенный код (не считаяинициализацию класса MotionDetector) у менявыполняется при получении очередного кадра сweb­камеры. Получив кадр, я выполняюбанальное сравнение (метод ProcessFrame):если значение переменной motionlevel большеmotionLevelAlarm (0.015f), то значит надо битьтревогу! Движение обнаружено. На одном изскришотов хорошо видна работа демонстрациядетектора движений. В момент, когда кадрыначинают различаться.Готовность 4Помнишь, в начале статьи я говорил, что Web­камеру можно запросто приспособить дляраспознавания лиц и создания продвинутогоспособа лог­она в систему? Если, перевариввесь этот материал, думаешь, что это сложно, тоты ошибаешься! В конце марта на сайтеhttp://codeplex.com (хостинг для OpenSourceпроектов от MS) появился пример (а затем иссылка на статью), демонстрирующийреализацию программы для распознавания лиц сиспользованием WEB­камеры. Сам примербазируется на использовании новыхвозможностей .NET и SilverLight. Разобрать этотпример в рамках журнальной статьи нереально,т.к. автор исходника действительно постарался ивсе сделал максимально шикарно. Тут тебе иалгоритмы для работы с изображениями (фильтрразмытия, уменьшения шума, попиксельноесравнение, растяжка и т.д.) и демонстрацияновинок SilverLight и много чего еще. Однимсловом must use! Ссылку на проект и статью ищиво врезке.Конец фильмаПриведенные в статье примеры послужат тебехорошей отправной точкой. На их основе легкосварганить как профессиональную утилиту дляработы с web­камерой, поднимая на ее продаженесколько сотен баксов или написать хитрого излобного трояна­шпиона.Вспомни статью про бэкап Skype­бесед. В ней яговорил, что времена клавиатурных шпионов ужепрошли. Сейчас особенно актуальны аудио ивидеоданные. Эту статью можно рассматриватькак своеобразное предложение. Как перехватитьаудио ты уже должен знать, а теперь еще узнал,как работать с web­камерой. Если учесть, чтосегодня web­камера обязательный атрибутлюбого ноутбука, то нетрудно представить,сколько "интересного" видео ты сможешьзаснять, подсунув жертве «полезнуюпрограммку» Учти, я тебе этого не говорил :)Удачи в программировании, будут вопросы ­пиши.

Дополнительные ссылки:http://video.aol.com/video­detail/webcam­mouse­control/2225590454 ­ Видео, демонстрирующееуправление компом при помощи WEB­камеры.http://www.youtube.com/watch?v=L476V10Ozi0&feature=related – Управляем компом при помощи ручки­фонарика и WEB­камеры. Очень интересная идея,автор которого демонстрирует несколько способовприменения WEB­камеры в качестве инструментауправления компьютером.http://blogs.msdn.com/rucoding4fun/archive/2010/04/02/facelight­silverlight­4.aspx ­ Русская версия статьи"Silverlight 4 real­time Face Detection" (Распознаваниелиц в реальном времени при помощи SilverLight).http://facelight.codeplex.com/ ­ здесь хостится проект"Facelight", позволяющий распознавать лица вреальном времени. Если ты собрался закодитьсерьезную софтину для определения лиц или логонав систему, то посмотреть на этот проект простообязан.http://www.aforgenet.com/framework/ ­ тут ты найдешьAForge .NET ­ отличный и простой в использованиифреймворк для работы с видео, изображениями и т.д.http://vr­online.ru – все исходники примеров, а такжекучу дополнительной информации ты можешь слить ссайта проекта VR­Online.

Page 18: VR-Online (Август-сентябрь 2010)

C#Бинарные деревья поиска

18

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

Основные элементы бинарного дереваУ любого элемента дерева может быть толькоодин непосредственный предок. В бинарномдереве, каждый узел хранит указатели на двухпотомков, которых называют левым и правым.Свойством бинарного дерева является то, чтоимея в качестве корня произвольный элемент,мы можем обращаться к искомому элементу заLog(N) (поверьте, это очень быстро).Важное свойство дерева ­ в левом поддеревесодержатся ключи, меньше ключа корня, а вправом ключи больше корневого. В бинарномдереве поиска нет двух элементов содинаковыми ключами, если требуетсявыполнение этого условия, то можно вестиподсчет одинаковых ключей. Ключами вбинарном дереве могут быть любые элементы, ярассмотрю случай с целыми числами

Примеры бинарных деревьевНа рисунке приведены примеры бинарныхдеревьев поиска. Как видно из рисунка, деревьямогут отличаться, хотя и содержат одинаковыеэлементы. На это влияет разнаяпоследовательность ввода ключей.Довольно широкое применение получила даннаяструктура данных. Например, в файловойсистеме ReiserFS операционной системы linuxиспользуется концепция бинарных деревьев.Давай, попробуем описать подобную структурупри помощи языка C#:public Elem( int val )

Key = val; //ключдобавляемого узлаLeft = null; //левоеподдеревоRight = null;//правоеподдерево

Если ты знаком с линейными списками, то спониманием структуру не возникнет проблем, аесли нет, то крайне рекомендую почитатьсоответствующую литературу. Ок, предположим,что с пониманием линейных списков у тебя всехорошо, а раз так, то перейдем к рассмотрениюфункции добавления нового узла:void _AddElement( Elem R, int val )

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

if ( val == R.Key )return;

vr­online | сентябрь 2010

Автор

:Дми

трийМ

галиa

kaalfe

nius

http://v

r­onlin

e.ru/u

sers/a

lfenius

Кодинг

Page 19: VR-Online (Август-сентябрь 2010)

Кодинг19

vr­online | сентябрь 2010

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

//ключи, а в правом большие и все это поотношению к корнюif ( val > R.Key ) //если правоеподдерево не содержит листьев, создаем

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

if ( R.Right == null)R.Right = newElem( val );

else_AddElement(R.Right, val );

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

else

if ( R.Left == null)R.Left = newElem( val );

else_AddElement(R.Left, val );

Обрати внимание на функцию поиска, она самаяпростая. Мы будем возвращать указатель наэлемент, содержащий искомый ключ или null,если искомого ключа нет в дереве:void _FindElement( Elem R, int val )

if (R == null) return null;//дерево пустоеif (R.key == val) return R;//искомый ключ найден

//ищем в левом поддереве, потому чтоискомый ключ меньше корняif (R.key > val) return_FindElement(R.left, val);

//ищем в правом поддереве, потому чтоискомый ключ больше корняif (R.key < val) return_FindElement(R.right, val);

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

Удаление узла

Удаление узла с двумя дочернимиэлементамиЭтот случай является самым сложным, потомучто мы не можем заставить родителя удаленногоузла указывать на оба дочерних элементаудаляемого узла. Дерево должно остатьсядвоичным деревом, и поисковые свойствадолжны остаться неповрежденными. Естьнесколько способов выполнить такое удаление.Метод, которым мы воспользуемся, не удаляетузел, а заменяет его информацию, информациейиз другого узла дерева так, чтобы поисковыесвойства были сохранены. После этого мыудаляем необходимый узел. Давайте посмотрим,как это происходит.Удаляем узел, изменяя одну из ссылок егородителя (смотри рисунок 5). Мы можемзамещать удаляемый узел либо с левогоподдерева самым правым узлом (т.е. самымбольшим ключом), либо с правого поддеревасамым левым узлом (т.е. самым маленькимключом).

Удаление узла имеющего 2 поддерева

Дерево выросло, дерево срубилиБинарные деревья поиска – очень интереснаятема. Любой уважающий себя программистдолжен представлять себе что это такое и какэтим пользоваться. Возможно, тебе неприходилось сталкиваться с деревьями ранее,но это не говорит, что тема должна пройти мимотебя. Обязательно потрать немного времени иразберись с данным предметом основательно.Удачи!

Page 20: VR-Online (Август-сентябрь 2010)

C#Tips & TricksЭлегантное сохранение параметров приложения

20

Много статей посвящено удобствупользовательского интерфейса. И расположениекомпонентов, и цвета – оказывается, все имеетзначение. Также зачастую возникаетнеобходимость сохранить какие­нибудьпараметры приложения, например,расположение формы и ее размеры. Для этогоуже в мире .Net реализована специальнаявозможность и в данной статье я ее рассмотрю.Думаю, это будет полезно для тех, ктоизобретает свои велосипеды там, где они нетребуются (например, сохранение параметров вреестре)..NET всегда к нашим услугамДля начала требуется зайти в настройки проекта(Проект ­> Свойства). На вкладке «Параметры»есть таблица, в полях которой и можно настроитьпараметры, которые необходимо сохранять.Поле таблицы «Имя» предназначено длязадания идентификатора параметра(удивительно, правда?). С полем «Тип» тоже всепонятно. Причем для параметров можнозадавать самые различные типы ­ как простойbyte, так и такие специфические типы, какException.Для нашего примера требуется четырепараметра типа int. Поле «Область» указываетна то, где будет располагаться файл ссохраненными параметрами. Если в качествезначения стоит «Пользователь», то файлсохраняется в профиле пользователя. В моемслучае полный путь к нему следующий:C:\Users\user\AppData\Local\Example\SaveParamsExample.vshost._Url_hkimbsrx4btk1hbbv0r23trl354cidvh\1.0.0.0\user.config.Данный файл используется для храненияпользовательских настроек. Если же в качествезначения установить «Приложение», топараметры будут сохраняться в файлеApplicationName.exe.config в папке приложения.Причем следует учесть тот факт, чтопользователь не может менять данныепараметры. Исходя из этого, в примере этомуполю для всех строк ставим значение«Пользователь». Последнее поле – «Значение».

Без комментариев. Получаем следующее:

Теперь немного кода. Для начала нужноподключить пространство имен с параметрамиприложения. В моем случае данная строкавыглядит так:using SaveParamsExample.Properties;Затем, в обработчике загрузки формы напишемследующий код:private void Form1_Load(object sender,EventArgs e)this.Top = Settings.Default.Top;this.Left = Settings.Default.Left;this.Height = Settings.Default.Height;this.Width = Settings.Default.Width;

Из данного кода следует, что для доступа ксозданному нами параметру используетсястрока вида Settings.Default.<ИмяПараметра>.Для сохранения новых параметров создаемобработчик события FormClosed и набираем внем:private void Form1_FormClosed(object sender,FormClosedEventArgs e)Settings.Default.Top = this.Top;Settings.Default.Left = this.Left;Settings.Default.Height = this.Height;Settings.Default.Width = this.Width;

vr­online | сентябрь 2010

Автор

:Поро

тников

Андре

йaka

wwwn

etКодинг

Page 21: VR-Online (Август-сентябрь 2010)

Кодинг21

vr­online | сентябрь 2010

Settings.Default.Save();

ЭпилогВот таким простым образом и осуществляетсясохранение параметров приложения.Полученный в результате сохраненияконфигурационный файл представляет собойобычный XML файл. Пример содержимого такогофайла ниже:<?xml version="1.0" encoding="utf-8"?><configuration>

<userSettings><SaveParamsExample.Properties.Settings>

<setting name="Top"serializeAs="String"><value>237</value>

</setting><setting name="Left"serializeAs="String">

<value>373</value></setting><setting name="Height"serializeAs="String">

<value>300</value></setting><setting name="Width"serializeAs="String">

<value>400</value></setting>

</SaveParamsExample.Properties.Settings></userSettings>

</configuration>

Page 22: VR-Online (Август-сентябрь 2010)

Processing«Записки начинающего художника»Часть 1.

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

все, же затронул, и, что это будет, читай ниже.Создаем скетчСегодня создадим скетч, который послужит намнеким подобием графического редактора сминимум возможностей. Подобные «картины»(образец я привел выше) мы будем создавать спомощью манипулятора мышь. При разработкепрограммы необходимо учесть следующее:1. Чем меньше скорость движения мыши,тем меньше круги и наоборот; толщина линийбудет иметь такую же зависимость.2. Основной цвет закраски красный, но будетменяться лишь его интенсивность насыщения, отсветлых тонов до темных.3. При нажатии на левую кнопку мыши,будем прорисовывать линию, но кроме этого откончика курсора будут прорисовываться двелинии (это сделано для дополнительногоэффекта).Оставим лишние разглагольствования иприступим к делу. Функция setup(), будет

содержать лишь основные инструкции: размерыокна, цвет фона и функцию, определяющуюсглаживание объектов./* переменная, которая будет содержатьзначениескорости движения мыши */float Mspeed;void setup()

//размеры окнаsize(800, 200);//закрашиваем фон полотна белым цветомbackground(255);//сглаживание линий включеноsmooth();

Идем дальше. Системные переменные«pmouseX» и «pmouseY» содержат данные огоризонтальном и вертикальном положениимыши, в предыдущем кадре до текущего кадра.Данные переменные, внутри функции draw()обновляются лишь один раз, но внутри событиямыши, они обновляются каждый раз, когдасрабатывает событие.Используй переменные «pmouseX» и «pmouseY»внутри функции draw(), если хочешь получатьзначения по отношению к предыдущему кадру.Применение «pmouseX» и «pmouseY» внутрифункции мыши позволит получить непрерывноереагирование, всякий раз, при использованииманипулятора мышь. Это необходимоучитывать, т.к. мы высчитывать скоростьдвижения мыши.Умышленно, не стану подробно приводитьразъяснения кода, приведенного в Листинге 1,т.к. надеюсь, тебе будет интересно покопаться внем самостоятельно (кодокопание – лучшийспособ научиться программировать – прим.редактора). Единственное, я привел подробныекомментарии и поэтому сложностей в пониманиикода возникнуть не должно.

Листинг 1.void draw() //вычисляем абсолютное значениеMspeed=abs(mouseX-pmouseX);//выводим информацию о значении скорости

Автор

:Анто

нКозл

овaka

Jimmy

Jonezz

E­mail:

jimmy

jonezz

@bk.ru

Кодинг22

vr­online | сентябрь 2010

Page 23: VR-Online (Август-сентябрь 2010)

Кодинг23

vr­online | сентябрь 2010

мыши в debug-окноprintln(Mspeed);//цвет линий отключенnoStroke();//дублируем значение «Mspeed» в переменную«taille_ellipse»float taille_ellipse = Mspeed;//определяем цвет для эллипса и заносим впеременную «ellipse_color»color ellipse_color =color(150+random(0,100), random(0,21),random(0,21));//задаем цвет окрашиванияfill(ellipse_color);//рисуем эллипс (круг)ellipse(mouseX+random(-20,20),mouseY+random(-20,20), taille_ellipse, taille_ellipse);//кнопка мыши нажата?if (mousePressed == true)

//толщина линий или обводки фигурstrokeWeight(0.1+Mspeed/20);//задаем цвет для линий или обводки фигурstroke(0, 50);strokeWeight(0.1+Mspeed/20);//рисуем линиюline(mouseX, mouseY, width, mouseX);//рисуем линиюline(mouseX, mouseY, 0, mouseX);stroke(0);//толщина линии (зависимость от скорости)strokeWeight(0.5+Mspeed/20);//рисуем линиюline(pmouseX, pmouseY, mouseX, mouseY);

Наверняка у тебя появится желание запечатлеть,результаты работы своего скетча. Для того чтобысохранить содержимое полотна на жесткий диск,как изображение, существует несколькоспособов. Я подробно опишу те, что мнеизвестны, а ты в свою очередь сможешьвыбрать, какой лучше подходит для тебя.Сохранение производится посредством функцииsaveFrame(). Без указания параметров онасохранит изображение, с названием «screen­####.TIF». Чтобы сохранить изображение покакому­либо событию (нажатие клавиши, щелчокмышки и т.д.) необходимо отловить данноесобытие. Например, внутри функции draw(),напишем следующую конструкцию, котораясработает, по факту нажатия любой клавиши:if (keyPressed == true)

saveFrame();

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

возможность существует. Взгляни наконструкцию ниже:void keyPressed()

//это клавиша «s» была нажата?if (key == 's')

//выводим дополнительную информациюprintln("Сохранение...");//задаем название сохраняемого изображенияsaveFrame("Изображение-####.png");println("Сохранено.");//закрашиваем фон

if (key == 'c')

background(255);

В данном случае, я определяю символ(одинарные кавычки назначают тип «char»,двойные «string» – прим. автора) нажатойклавиши. Функция «println()» выведет сообщениев Debug­окно (каретка спускается на следующуюстроку – прим. автора), а вот для функции«saveFrame()» требуется указать параметры, аименно: название сохраняемого изображения,где наличие символа «#» укажет количествоцифр; и не забудь про расширение. Далее, сновавыводим сообщение, что файл сохранен, и,наконец закрашиваем экран белым цветом. Дляпоследней функции ­ background(), я назначилотдельную клавишу. В данном случае это будетработать как очистка экрана.Вот и всеНа данный момент это все, что я хотелрассказать. В следующем номере журнала, япродолжу знакомить тебя с Processing. Какобычно, в конце статьи я приготовил ряд«вкусных» ссылок, на интересные работы«художников», использующих Processing. Своипредложения и пожелания, а также вопросы,направляй мне, или же на форум нашего сайта.Дополнительные ссылки:Официальный сайт: http://www.processing.org/Гуру Processing’a – www.flight404.comКоллекции программ – www.screamyguy.net

Page 24: VR-Online (Август-сентябрь 2010)

DelphiDelphi и DNS.С легкостью получаем DNS­записи

24

На работе у меня периодически возникаетнеобходимость в получении различных DNSзаписей. Например, при поднятиикорпоративного почтовика мне пришлосьвдоволь пообщаться и познакомиться снюансами DNS. После редактирования/созданияDNS­записей нужно проверять, обновились лизаписи на dns­сервере или нет. Это совершеннонесложная операция и в составе операционныхсистем имеются соответствующие консольныетулзы, но поскольку пользоваться имиприходится не часто, я стал забыватьпараметры, которые нужно им передавать. Японимаю, что в таких ситуациях недолго ибраузер с гуглом дернуть, но мне захотелосьнаписать простенькую тулзу с user friendlyинтерфейсом. Об этом подвиге и пойдет речьдальше.Немного предысторииЯ уже сказал, что получить содержаниеопределенных dns­записей вполне реально припомощи имеющихся в операционной системеконсольных утилит. Если ты пользуешьсяWindows, то для получения MX записи (илилюбой другой) определенного доменадостаточно воспользоваться консольнойутилитой nslookup:nslookup –type=mx vr-online.ru

Рисунок 1. Результат выполнения nslookupРезультат выполнения команды я привел нарисунке 1. Как видно из содержания рисунка,почта vr­online доставляется через сервераGoogle. Для того чтобы получить другой типзаписи (например, A) достаточно изменить

параметр type:nslookup –type=A vr-online.ruОстальные dns­записи получают аналогичнымобразом. Если ты предпочитаешь пользоватьсяunix­like системами, то, конечно же, никакогоnslookup'а там нет. Зато в их составе естьутилита host. Пользоваться ей ничуть несложнее, чем nslookup'ом в Windows:host –t mx vr-online.ruПочему эти инструменты мне не нравятся?

Я уже говорил, но повторюсь. В первую очередьменя не устраивает, что при необходимостиполучения dns­записи требуется запускатьтерминал/командный интерпретатор и вводитькоманду. Не знаю почему, но, я постояннозабываю дописывать к nslookup параметр type.Каждый раз приходиться лезть в хелп или в инет.Чтобы избавиться от этих рутинных действий япотратил пять минут времени и написал наDelphi небольшую утилиту. С тех пор, дляполучения информации о DNS­записях япользуюсь сугубо ей.Пять минут – это реально пятьминутМоя фраза, что для создания программыпотребуется не больше пяти минут – ничуть непреувеличена. В составе Delphi идет прекраснаябиблиотека компонентов Indy. Она содержит кучукомпонент для работы с различными сетевымислужбами: gopher, ftp, irc, dns и т.д. В рамкахсегодняшней статьи нам предстоитвоспользоваться компонентом длявзаимодействия с dns серверами.Дизайним форму – 2 минутыНачнем делать наш простенький проект ссоздания главной формы окна. Я не стал делатьчего­то сверх красивого, а обошелся самымпростым вариантом (см. рисунок 2).На форму я бросил два компонента TEdit. Впервый будем вбивать домен, записи котороготребуется получить. Во второй, адрес DNS

Автор

:Анто

новИго

рьaka

Spide

r_NET

E­mail:

antono

v.igor.k

hv@gm

ail.com

Кодинг

vr­online | сентябрь 2010

Page 25: VR-Online (Август-сентябрь 2010)

Кодинг25

vr­online | сентябрь 2010

сервера, к которому должна подключаться нашапрограмма и отправлять запросы на полученияопределенных записей.Поскольку DNS­записи бывают разными, намтребуется предоставить пользователю правовыбора. Хочет он получить MX запись – пустьсебе получает. Так называемое право выбора яреализовал путем добавления компонентаTComboBox. В его свойство Items я сразу жезанес типы DNS­записей. Для своего примера яуказал: MX, A, SOA и NS. Ты можешь расширитьэтот список (предварительно посмотри типызаписей, с которыми умеет работатьсоответствующий компонент из библиотеки Indy),но мне достаточно и этих.Результаты выполнения запроса я буду выводитьв RichBox. Ты можешь поступить точно также илиже воспользоваться тем компонентом, которыйтебе больше нравится.Ну и теперь самое главное – компонент, припомощи которого мы и будем получать DNS­записи. В библиотеке Indy за работу с DNS­серверами отвечает компонент TIdDNS Resolver.Немного про TIdDNSResolverПеред тем как начать писать код, немногопознакомимся с компонентом TIdDNSResolver.Все­таки он будет выполнять главную роль. Итак,для начала рассмотрим свойства компонента, апотом перейдем к методам.СвойстваAllowRecursiveQueries:boolean; ­ свойствоопределяет, должен ли сервер продолжатьобрабатывать запросы клиента, которые требуютполучения записей с другого dns­сервера. Поумолчанию значение установлено в true.QueryRecords:TqueryType; ­ в этом свойствеопределяется список записей, информацию покоторым необходимо получить. В качествезаписей могут быть:­ qtA – адрес хоста;­ qtNS – авторитетный name сервер;­ qtMD – конечные адрес, по которому

нужно доставить почту (mail destination). Внастоящее время MD записи не применяются.Используй MX;­ qtMF – отправитель почты. В настоящеевремя опять же не используется. ПрименяетсяMX;­ qtName – каноническая запись имени(псевдоним);­ qtSOA – начальная запись зоны. Онауказывает сервер, на котором хранитьсяэталонная информация о домене;­ qtMB – почтовый ящик доменного имени;­ qtMG – член почтовой группы;­ qtMR – запись указывает почтовый ящик,соответствующий другому почтовому ящику.­ qtWKS – запись Well­known Serviceсодержит перечень распространенных службTCP/IP, поддерживаемых определеннымпротоколом (TCP/UDP) на конкретном IP адресе.­ qtPTR – указатель на доменное имя;­ qtHINFO – информация о хосте;­ qtMINFO – определяет почтовый ящикстороны, ответственный за почтовый ящик илисписок рассылки;­ qtMX – запись указывает почтовыйсервер, принимающий почту для текущей зоны.­ qtTXT – дополнительная информация озоне;­ qtSTAR – все типы записей;QueryResult:TQueryResult; ­ в данном свойствесодержится коллекция с результатамивыполнения запроса к dns­серверу.Host:string; ­ адрес dns­сервера с которым будетустанавливаться соединение;Методыprocedure Resolve (ADomain:string); ­ методвыполняет запрос на получение данных овыбранных dns­записях с dns­сервера длядомена, переданного в качестве параметра.Собственно говоря, это единственный метод,который нас интересует. На этом считаю, чтознакомство с компонентом TIdDNSResolveокончено. Переходим к коду.Пишем код – 2 минутыС основным компонентом мы познакомились,теперь пришло время для написания кода.Создай обработчик события OnClick для кнопки,по нажатию которой будет выполнятьсясоединение с DNS­сервером и отправка запросадля получения определенных записей и напишив нем код из листинга 1.

Рисунок 2. Форма будущей программы

Page 26: VR-Online (Август-сентябрь 2010)

Кодинг26

vr­online | сентябрь 2010

Листинг 1. Основной кодvari:integer;

beginDNSResolver.Host := DnsServerEdit.Text;

case RecordTypeComboBox.ItemIndex of0: DNSResolver.QueryType := [qtMx];1: DNSResolver.QueryType := [qtA];2: DNSResolver.QueryType := [qtSOA];3: DNSResolver.QueryType := [qtNS];

end;DNSResolver.Resolve(DomainEdit.Text);with DNSResolver.QueryResult do

for i:=0 to Count-1 doif (Items[i] is TARecord) thenRichEdit1.Lines.Add((Items[i] asTARecord).IPAddress)

else if (Items[i] is TMXRecord) thenRichEdit1.Lines.Add((Items[i] asTMXRecord).ExchangeServer)

else if (Items[i] is TNSRecord) thenRichEdit1.Lines.Add((Items[i] asTNSRecord).HostName)

else if (Items[i] is TSOARecord) thenRichEdit1.Lines.Add((Items[i] asTSoaRecord).Primary)

end;

В самом начале листинга я присваиваю свойствуhost компонента DNSResolver адрес DNSсервера, который введен в поле ввода с именемDNSServerEdit. Затем, я определяю, какие dns­записи меня интересуют. Поскольку всевозможные DNS­записи у меня определены вComBox, я просто сравниваю индекс выбранногов настоящее время элемента. Если он равеннулю, то значит, меня интересует тип записи MX.С определением остальных записей ситуацияаналогичная.Определив типы записей, информацию покоторым нам требуется получить, я вызываюметод Resolve(). В качестве параметра япередаю текст, введенный в поле DomainEdit. По­хорошему, в нем должно быть введено имядомена, информацию о котором хотим получить.После вызова метода, я начинаю перебиратьколлекцию с результатами и выводить их вRichEdit. На первый взгляд вывод результатоввыглядит хитро, но это только на первый. Насамом деле все просто. Поскольку результатыпопадают в коллекцию, то сразу напрашиваетсявывод – чтобы перебрать всю коллекциюэлементов необходимо воспользоватьсяциклами. Запускаем цикл и в нем выполняемпроверку. Если текущий элемент являетсяклассом TMXRecord (как пример), то значит, намнадо считать значение свойства ExchangeServer.Остальные проверки работают по такому жепринципу.Стоп, а как узнать свойство, которое нужносчитывать у класса, соответствующегоопределенной dns­записи? Тут есть нескольковыходов:

1. Заглянуть в документацию наофициальном сайте;2. Посмотреть исходники компонента;Мне проще воспользоваться вторым способом.

Рисунок 3. Программа в действииЗаключениеНа этом сегодняшний урок подошел к концу.Надеюсь, он оказался тебе полезным. Еслипоявятся вопросы, не стесняйся, пиши мне наemail. Удачи в кодинге, увидимся!

Page 27: VR-Online (Август-сентябрь 2010)

Delphitrojan.winlock.Осваиваем вирусмейкерство

27

Твою мать! Я опять хватанул эту заразу! Fuck,shit! Примерно так каждый из нас ругается вочередной раз, подхватив популярную малварьтипа Winlocker. Сегодня вирусы такого типа какчума в средневековье. Хватануть их легко, алечить проблематично. Что говорить, дажесамые матерые маги клана «антивирус» невсегда способны дать оперативный отпормерзопакостной заразе. А ведь 99% этихтворений написаны школьниками, которые едва­едва научились кодить. В этой статье япостараюсь доходчиво разжевать все тонкостиразработки ужасных винлокеров.Как происходит заражениеНе будем сразу лезть в кодерские дебри, аразберемся, с теорией. Самым первым деломрассмотрим типичные варианты заражения.Способов заразиться – чрезвычайно много.Наибольшей популярностью пользуются:1. Баги браузеров. Не для какого не секрет, чтоодна из целей современного вирусописателябраузер пользователя. Полезных web­сервисовпруд пруди и пользователи, конечно же, имипользуются. Браузер для многих самая частоиспользуемая программа, которая очень редкозакрывается (прим. автора – у меня вообще незакрывается).Не надо ходить к гадалке и спрашивать ответ навопрос: «Через какую дверь лучше всегопрорваться в систему пользователя?». Тут и такясно – нужно заюзать уязвимости в самыхпопулярных браузерах. Чтобы провернуть этотспособ на практике – не нужно обладать особыминтеллектом. Достаточно пробежаться поsecurity­сайтам, найти соответствующий exploit икрасиво оформить его под свои нужды. Быстро,просто и бесплатно.2. Здравствуй бажный Flash. В последниемесяцы, компания Adobe лажает максимальнокруто. Не успеют выпустить новую версию flashплеера, как хакеры умудряются обнаружить вней критическую уязвимость. Находят, тыкаютразработчиков носом, а те не спешат их (или немогут?) исправлять. Глупо полагать, что

вирусописатели будут сидеть на месте и ждать,когда же залатают багу. Они не дремлют ипытаются эксплуатировать уязвимость вкоростных целях. Вот так и выходит, что послепросмотра забавного ролика, твоя системаначинает вести себя странно.3. Пользовательская наивность. Когда я начиналготовить эту статью, то ради экспериментазагрузил ОС в виртуальной машине ипопробовал побродить по «сомнительным»сайтам. Не поверишь, но я умудрился три разаподхватить Winlocker, согласившись наустановку «последней версии» flash плеера и«специальных» кодеков. Честно говоря, я былнемного в шоке, т.к. думал, что подобныеспособы уже не канают, а нет…На чем будем кодитьЯ долго думал, на каком языке, писать примерык данной статье, и решили вспомнить хорошопроверенный временем Delphi. «Так у тебя жеexe'шник получится под мегабайт!» ­ возразишьты. Отчасти твоя, правда, но эту проблему мырешим еще на стадии зарождения. Весь кодбудет приведен на чистом API. Соответственно,скомпилированный проект будет весить меньше100 килобайт. А если по нему пройтисьархиватором байт кода, то удастся скинуть ещепару десятков кило.Основа любого Winlocker'аГлавный кирпич любого Winlocker – форма,растянутая почти на весь экран. Причем это не,просто большая форма, а окно, котороеперекрывает все остальные и совершенно неслушается никаких команд. Ни свернуть, неизменить размер, ни уж тем более завершитьпроцесс программы.На первый взгляд может показаться, чтовирусописатели изобрели какое­то ноу­хау, но вреале все намного проще. По факту, это самоеобычное окно, для которого установлен стильотображения поверх всех окон. Чтобы окно велосебя как партизан и не реагировало на просьбыюзера, разработчики слегка модифицируют

Автор

:Анто

новИго

рьaka

Spide

r_NET

E­mail:

antono

v.igor.k

hv@gm

ail.com

Кодинг

vr­online | сентябрь 2010

Page 28: VR-Online (Август-сентябрь 2010)

Кодинг28

vr­online | сентябрь 2010

процедуру обработки сообщений из внешнегомира.Модификация сводится к банальной обработкесообщения WM_SYSCOMMAND. Если быть ещеточнее, то в процедуре (см. листинг 1) обработкиполученных сообщений, нужно всего, лишьобъявить проверку на сообщениеWM_SYSCOMMAND. Самое смешное, что вобработке этого сообщения можно вообще неписать код. Твоя форма и так перестанетреагировать на события внешней среды.

Галерея финлокеров

АвтостартВирус должен загружаться вместе соперационной системой. Чем раньше будетзапущен вирус, тем больше шанцев, чтоустановленные антивирусы пойдут лесом.Существует несколько способов обеспечитьсвоей программе автозагрузку. Условно ихможно разделить на две группы: простые ипродвинутые. На рассмотрение продвинутых нехватит места в статье, поэтому поглядим лишьна простые, основанные на использованииреестра. Итак, в реестре есть несколько уголковавтостарта:1.HKLM\Software\Microsoft\Windows\CurrentVersion\Run – отсюда стартуют программы, запускаемыепри входе в систему любого юзера.2.HKCU\Software\Microsoft\Windows\Current\Version\Run – место аналогично предыдущему, заисключением того, что отсюда стартуетпрограммы для текущего пользователя.3.HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices – список программ запускаемых довхода пользователей в систему.4.HKLM\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\Run – этот раздел реестраотвечает за старт программ, добавленных вавтозагрузку через групповые политики.5. HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows – еще одно место,содержащее список программ, загружаемых вместес Windows.6. KHLM\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon – в этой веткеуказывается ссылка на винлогон, но ничего немешает указать и путь до своей программы.7. Папка автозагрузки. Пожалуй, самыйпримитивный способ, но тем немее, многиевирусописатели им пользуются.

Какое из предложенных мест автозагрузкивыбрать для своего творения? Точного ответанет, но крайне рекомендуется не ставить все накакой­то один их предложенных вариантов. Кудалучше использовать комбинацию, т.е.прописываться сразу в несколько мест. Примерзаписи в автозагрузку на WinAPI приведен влистинге 2.Листинг 1. Незакрываемое окно на Windows API:wc.cbSize:=sizeof(wc);

wc.style:=cs_hredraw or cs_vredraw;wc.lpfnWndProc:=@WindowProc;wc.cbClsExtra:=0;wc.cbWndExtra:=0;wc.hInstance:=HInstance;wc.hIcon:=LoadIcon(0,idi_application);wc.hCursor:=LoadCursor(0,idc_arrow);wc.hbrBackground:=COLOR_BTNFACE+1;wc.lpszMenuName:=nil;wc.lpszClassName:='win_main';RegisterClassEx(wc);leftPos:=20;topPos:=0;windowWidth:=Screen.Width;WindowHeight:=Screen.Height;MainWnd:=CreateWindowEx(0,

Page 29: VR-Online (Август-сентябрь 2010)

Кодинг29

vr­online | сентябрь 2010

'win_main','test',ws_overlappedwindow,leftPos,topPos,windowWidth,windowHeight,0,0,Hinstance,nil);

SetWindowLong(MainWnd, GWL_HWNDPARENT,GetDesktopWindow);

SetWindowPos(MainWnd, HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);

ShowWindow(MainWnd, CmdShow);While GetMessage(Mesg,0,0,0) dobeginTranslateMessage(Mesg);DispatchMessage(Mesg);

end;

Листинг 2. Win API для работы с реестром:varKey: HKey;

begin//Сюда можешь подставить один из путейавтозагрузки.

RegOpenKey(HKEY_LOCAL_MACHINE,PChar('путь в реестре'), Key);RegSetValueEx(Key,PChar(paramstr(0)),

0, REG_SZ,pchar(paramstr(0)),lstrlen(pchar(paramstr(0)))+1);

RegCloseKey(Key);end;

И тебя заблокируемПереходим к самой интересной части –блокировки системы пользователя. Честноговоря, чего­то сверхнового я тебе врядлирасскажу. Если ты хоть раз пользовался каким­нибудь твикером, то наверняка уже знаком сбольшинством из рассмотренных далеепримеров. Все блокировки производятся путемвнесение изменений в реестр.Перед тем какрассмотреть конкретные примеры объектовблокировки, я хочу поделиться с тобой однимсоветом. На основе него, очень легкопридумывать новые «пакости». Идея проста добезобразия. В профессиональных редакцияхWindows (те, что Pro и выше) имеется редакторгрупповых политик (gpedit). С его ты имеешьвозможность создавать правила входа в системуи т.д. Например, ты запросто можешь назначитьпрограмму, которая будет запускаться послезагрузки системы, заблокировать стартопределенного приложения и т.д. Практическивсе операции, которые выполняются через этуоснастку, на самом деле изменяютопределенные ключи реестра. Если ты

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

ВеликийProcessMonitor

Редакторгрупповыхполитик

Редактор реестраБольшинство пользователей привыклиредактировать реестр с помощью встроенного вWindows редактора реестра (regedit). Посколькунаш вирус будет вносить изменения в реестр,нам кровь из носа нужно не допустить,ковыряние в реестре со стороны нерадивогопользователя. Нечего ему совать свойлюбопытный нос, куда не надо. Решить этозадачу лучше путем блокировки запускаредактора реестра. Чтобы выполнитьблокировку, достаточно создать ключDisableRegistryTools со значением 1 в веткеHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System.Диспетчер задачВсе винлокеры, которые я видел, безисключения блокировали запуск диспетчеразадач. Что ж не будем от них отставать.Реализуется эта фича путем создания ключа

DisableTaskMgr(тип dword) созначением 1 втой же самойветке, где иРезультат блокировки

Page 30: VR-Online (Август-сентябрь 2010)

Кодинг30

vr­online | сентябрь 2010

DisableRegistryTools.Установка и удаление программОсобо мозговитые юзеры, путем аплетаустановка и удаление программ, в случаезаражения системы пытаются инсталлироватьантивирусы. Это легко присечь на корню, еслисоздать ключ NoAddRemovePrograms созначением 1 (тип dword) все в том же разделе,где и DisableRegistryTools.Блокируем доступ к дискамЧтобы полностью испортить пользователюнастроение можно вообще заблокировать доступк присутствующим дискам в системе. Пусть юзердаже не пытается запустить антивирус со своейфлешки! Выполняем эту трик путем созданияключа NoViewOnDrive (тип dword) в разделеHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer. В качествезначения для ключа указываем битовою маскублокируемого диска. Например, для диска C этубудет 4. В случае если требуется заблокироватьнесколько дисков, то их маски придется сложить.Например, значение 12 будет соответствоватьблокировке диска C (4) и D (8).Ограничиваем запуск приложенийС помощью реестра реально определить списокодобренных для запуска программ. Если этотсписок заполнен, то все приложение, которые внего не попали, пользователь запустить несможет. Список одобренных к запускуприложений создается здесь:HKEY_CURRENT_USER\Microsoft\Windows\CurrentVersion\Policies\Explorer\RistrictRun. Создав вэтом разделе ключи (тип REG_SZ) для каждойразрешенной программе, тебе нужно будетподняться на один уровень выше и добавитьпараметр RestrictRun типа dword со значением 1.Управление компьютеромМного нехороших дел сможет натворитьпользователь, если у него имеется доступ кзапуску оснастки «Управление компьютером».Полностью отключить оснастку с помощьюреестра нельзя, но удалить ссылку на ее запускиз контекстного меню ярлыка «Мой компьютер» ­проще пареной репы. Всего лишь требуетсясоздать параметр NoManageMyComputerVerbтипа dword со значением 1 в разделеHKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer.Вырубаем службыИспользуя возможности реестра, ты без проблемсможешь отключить ненужные (например,антивирусы) пользователю службы. Полныйсписок установленных в системе службнаходится в веткеHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Для деактивации службы

отредактируй значение ключа start. Например,чтобы установить службе «Тип запуска» взначение «вручную», ключу start необходимоприсвоить 3. Если желаешь, чтобы твой вируспротянул во вражеской системе дольше, тосоветую вести в своем творении базу службантивирусов. Т.е. тебе необходимо четкоопознавать сервисы антивирусов и менять имтип запуска.

В msdn можно найти ответ на любой вопросА что еще нам надо?Типичные функции любого Winlocker'а мырассмотрели, теперь самое время подумать отом, как улучшить наше детище. Честно говоря,я не понимаю, почему профессиональныевирусописатели не встраивают в подобныевирусы дополнительные полезные функции.Ведь нет никакой гарантии, что юзер дотянетсядо мобилы и отправит заветную смс'ку накороткий номер, тем самым обогатив авторавируса. Зато, всегда есть шанс увести с тачкипользователя полезную информацию: пароли наразличные сервисы, документы, записанныеskype переговоры и т.д. Мы не будем вводитькаких­то ограничений, а проапгрейдим наш вируспо полной программе. Итак, ниже я описалшесть фишек, которые было бы полезнореализовать в подобном «проекте».Фишка 1 : В любом месте веселеевместеЗаразил компьютер бедного пользователя? Незабудь позаботиться о его друзьях! Помни, чембольше распространится вирус, тем большешансов получить деньги. Обосновавшись навражеской тачке, нужно не терять времени зря, апытаться найти новый плацдарм. Как этосделать? Один из простых и самых действенныхспособов – мониторинг и заражение флэшек.Поскольку пользователи постоянно пользуютсяфлешками, нашему вирусу будет легкомигрировать из одной системы в другую.Определить факт подключения флешки – легко.

Page 31: VR-Online (Август-сентябрь 2010)

Кодинг31

vr­online | сентябрь 2010

Достаточно написать код, обрабатывающийсобытие WM_DEVICECHANGE. Пример кодасмотри в листинге 3.Листинг 3. Мониторим флэшкиvar

disk:DWORD;begincase Msg.WParam ofDBT_DEVICEARRIVAL: //Если подключили флэшку

if (PDEV_BROADCAST_HDR(Msg.LParam)^.dbch_devicetype =DBT_DEVTYP_VOLUME) then

begin//Пытаемся определить букву дискаdisk :=PDEV_BROADCAST_VOLUME(Msg.LParam)^

.dbcv_unitmask;//Выполняем свой зловредный код

end;DBT_DEVICEREMOVECOMPLETE: //Если флэшкуизвлекли

if (PDEV_BROADCAST_HDR(Msg.LParam)^.dbch_devicetype =DBT_DEVTYP_VOLUME) then

begin//Флешку отмантировалиend;

В третьем листинге я использовал константы иструктуры, описания которых нет в модулях,поставляемых вместе с Delphi. Их придетсяописывать самостоятельно.Фишка 2: Ваши пассы будутнаши!Какими web­сервисами пользуется современныйюзер? Не нужно иметь семь пядей во лбу, чтобыугадать хотя бы несколько из них: почта,одноклассники, в контакте, facebook, twitter, etc.Список можно продолжать до бесконечности. Кчему это я клоню? А к тому, что находясь навражеской территории, было бы неплохо собратьвсе пароли. Авось в будущем пригодятся. К томуже, имея на руках такие козыри, становитсяреальным простимулировать жертву. Например,получив пароли от всевозможных аккаунтов,автор вируса может воспользоваться ими длясмены контактных персональных данных иизменения паролей на свои. В результате,реальный пользователь попадет в оченьнехорошую ситуацию. Попросту говоря, онлишиться своего аккаунта. Это уже кудасерьезней заблокированного рабочего стола, араз так, то шансы оплаты «твоих услуг»возрастают.Сразу возникает вопрос, а каким образом этопроще всего сделать? Обычно юзеры хранятсвои пароли прямо в браузере, поэтому сразунапрашивается вариант угнать файликхранилища паролей. Пример такого угона былпродемонстрирован в статье «Злобный комп».Сейчас повторяться не буду, а лучше покажутебе альтернативный способ.

Идея заключается в банальноммодифицировании hosts. В этом файлепрописываются соответствия типа: «символьныйадрес сайта:ip». Наша программа должна уметьмодифицировать этот файл и добавлятьсоответствия для популярных web­сервисов. «Акуда будем переадресовывать пользователя?».Можешь для этого замутить свой evil сайт, накотором и будут располагаться скамыпопулярных сервисов. Этот способ прост вреализации, но при массовом заражениипользователей, такие сайты наверняка будутумирать быстрей, чем самые дохлые бактерии. Всвязи с этим, откажемся от предложенногоспособа, а пойдем не совсем стандартным путем– встроим в вирус мини web­сервер. При такомраскладе пунктом назначения переадресации унас будет localhost.Например:127.0.0.1 www.odnoclassniki.ruРассматривать правка файла host не будем,лучше сразу взглянем на то, как с помощьюDelphi поднять WEB­сервер. Если тыпостоянный читатель нашего журнала, то ты ужедолжен хорошо ориентироваться в Winsock API.Где­то года два назад, в рубрике кодингпубликовали мои статьи про написаниевсевозможных клиентов (FTP клиент, PROXYсервер, IRC и т.д.) используя лишь api функции.Рекомендую тебе поднять подшивку ихорошенько ознакомиться с сабжевой темой. Какразберешься, возвращайся и кури третийлистинг.Листинг 4. Самопальный WEB­серверvar_buff: array [0..1024] of char;_request:string;_temp: string;_path: string;_FileStream : TFileStream;

beginRecv(_client, _buff, 1024, 0);_request:=string(_buff);

_path := GetFilePath (Copy(_request, 1, pos(#13, _request)));

_path := ReplaceSlash(_path);if ((_path = '') or (_path = '\')) Then_path := DocumentRoot +'\' + DirectoryIndex;

elseif ((_path[length(_path)] ='\')) Then_path := DocumentRoot + '\' +

DirectoryIndex; if (FileExists(_Path)) Thenbegin_FileStream :=

TFileStream.Create(_Path, fmOpenRead);SendStr(_Client, 'HTTP/1.0 200 OK');SendStr(_Client, 'Server: xSrV');SendStr(_Client, 'Content-Length:' +

Page 32: VR-Online (Август-сентябрь 2010)

Кодинг32

vr­online | сентябрь 2010

IntToStr(_FileStream.Size));SendStr(_Client, 'Content-Type: '

+ GetTypeContent(_Path));SendStr(_Client, 'Connection: close');SendStr(_Client, '');SendFile(_Client, _FileStream);_FileStream.Free;

End//Вырезано

Теперь вбив одноклассники.ру, жертва попадетне на реальные одноклассники, а прямо в лапынашего evil сервера. Само собой, web­сервердолжен быть вежливым и отобразить реальнуюстраницу одноклассников (читай – скам сайта,который нужно заранее подготовить). Ну адальше все просто и банально – юзер вбиваетсвои данные для входа, после чего наш web­сервер их сохраняет. Чтобы не былооткровенного палева, желательно сделатьстраницу, на которой описать, что одноклассникисейчас недоступны или что­то в подобном роде.Или как вариант, сразу отправлять введенныеданные на реальные одноклассники.Фишка 3: Экстази дляпользователяВсе winlocker просят у честного юзера денег заизлечение компа (которое, кстати так и неделают), но как и следует ожидать, платитьжелают далеко не все (я бы никогда не заплатил:)). К чему этого я все говорю? А к тому, чтонеплохо было как­то простимулироватьпользователя. Дать ему допинг, от которогонаверняка захочется распрощаться с паройкровных баксов. Как это сделать? Один издейственных вариантов будет совершение маршброска по директориям пользователя ишифрование найденных файлов. На какиефайлы обращать внимание? Лучше всего на те,от которых может завесить работа/учеба жертвы,например: документы (doc, xls, mdb, ppt, txt),изображения (jpeg, png, bmp), исходные тексты(php, pas, c, h, cpp, dpr, py и т.д.). Если жертваписала дипломную работу или какой­нибудьсверважный отчет, который завтра сдавать, то утебя есть все шансы получить денежноевознаграждение. Как тебе идейка?Теперь поговорим о технической реализации этофичи. Поиск файлов осущетвляется сфункциями FindFirst() и FindNext() из модуляSysutils. Работать с ними легко, но простота фастфуда отрицательно отразиться на фигуре нашегоприложения. Поскольку, набирать лишний веснам не к чему, мы воспользуемся болеедиетическими продуктами: FindFirstFile() иFindNextFile(). Работать с ними чуточку сложнее(см. пример поиска файлов на диске), но красотатребует жертв.Шифрование файлов, средствами Delphi такжеосуществляется достаточно просто. Все зависит

от выбранного способа шифрования. Один изсамых простых воспользоваться готовымимодулями, которых на torry.net и на другихсайтах пруд пруди. Например, мне попалсянеплохой вариант от одного из разработчиковDelphi. В этом модуле реализованы следующиефункции://Шифрование файлаfunction FileEncrypt(InFile, OutFile: String;

Key: TWordTriple): boolean;//Расшифровка файлаfunction FileDecrypt(InFile, OutFile: String;

Key: TWordTriple): boolean;//Шифрование текстаfunction TextEncrypt(const s: string;

Key: TWordTriple): string;//Расшифровка текстаfunction TextDecrypt(const s: string;

Key: TWordTriple): string;//Шифрование «памяти»function MemoryEncrypt(Src: Pointer; SrcSize:Cardinal;

Target: Pointer; TargetSize: Cardinal;Key: TWordTriple): boolean;

//Расшифровка «памяти»function MemoryDecrypt(Src: Pointer;

SrcSize: Cardinal; Target: Pointer;TargetSize: Cardinal; Key: TWordTriple):boolean;

Полный текст этих функций, а также примеры ихиспользованиия ты найдешь на нашем диске.Фишка 4: Размножайся!Попав в чужую систему нужно потрудиться ипостараться удержаться в ней как можнодольше. Стопроцентно сказать, как это лучшевсего это сделать, я не могу. Первое (и самоепростое в реализации), что мне пришло в голову,встроить в winlocker мини джойнер. Алгоритмбудет таким. При активации в системе жертвыосновная программа будет заражать наиболеечасто используемые программы. Причем, самвирус прицепляться не должен. В качествепаразита будет выступать маленькая«безобидная» программка. Ее основнойфункцией будет выполнение проверки наналичие процесса вируса. Если его нет, тонеобходимо инициировать загрузку «вируса» изинтернета и дальнейший его запуск.С точки зрения программирования, создать joinerсовсем не сложно. К тому же, пару лет назад(см. статью «Вместе веселее» в #104 номере)мы поднимали эту тему на страницах нашегожурнала.Фишка 5: Играй в прятки помаксимумуКак показала практика, авторы Winlocker'ов несильно забоятся о безопасности своих детищ.Защита большинства представителей этойгруппы вирусов, попавшихся мне на глаза,сводилась к банальному присвоению

Page 33: VR-Online (Август-сентябрь 2010)

Кодинг33

vr­online | сентябрь 2010

неприметного имени файла. Например:system.exe, user32.exe, csrss.exe, eplorer.exe ит.д. Я не думал, что подобные способы ещепрокатывают, но как выяснилось, я заблуждался.Я рекомендую тебе не пренебрегатьбезопасностью, а предусмотреть несколькоразных алгоритмов:1. Давай файлу вируса неприметное имя. Хотьэто и примитивное правило, но соблюдать егокрайне желательно.2. Удали вирус из списка процессов. Этого можнодобиться, разобравшись с перехватом APIфункций. Мы уже много раз писали про перехватAPI. Обязательно перечитай эти статьи!3. Используй несколько способов автозагрузки.Фишка 6: Убить на стартеНе поленись и напиши процедурупринудительного завершения процессов. Онаобязательно поможет тебе уберечь свое детищеот злобных антивирусов, которые пользовательбудет пытаться запустить. В идеале вообщеорганизовать перехват функций,использующихся для запуска программ и недопускать, чтобы они нормально отрабатывали.Epidemic completeНаписать WinLocker и срубить на нем несколькосотен баксов – более чем реально. Пользователипо­прежнему не думают о безопасности и привозникновении щепетильной ситуации готовыотправить заветную смс'ку, нежели напрячь своиизвилины. Сегодня я показал скелет типичногоWinlocker'a. В принципе, довести его до боевогосостояния дело нескольких часов. Только нужноли это делать? Выбор за тобой! Главное незабывай о том, что написание ираспространение вирусов уголовно­наказуемоедеяние, за которое можно схлопотать реальныйсрок.P.S. Само собой, исходник полноценного вирусая не дам. Нет, не потому что я жадный. Этивирусы и так всех достали, поэтому я чертовскине хочу, чтобы после этой статьи их стало ещебольше. Вдобавок, мне не хочется читатьновости как правоохранительными органамибыли задержаны очередные создатели ужасныхвирусов ;­).

Page 34: VR-Online (Август-сентябрь 2010)

PythonРаскручиваем сайт злобоскриптом на Python

34

По работе получил задание: раскрутить портал.Неправильная верстка, не транслитнаяссылочная структура, конечно, будут весомымифакторами отсутствия сайта в топе. Не менеевесомым обстоятельством, влияющим напозиции портала, оказалось полное отсутствиессылок с внешних ресурсов (я уже не говорю облизких по тематике). Решение этой задачи былорешено автоматизировать.Что предложил яЯ предложил следующий вариант алгоритмасвоего злобоскрипта:1. Пройтись по карте сайта, преобразовать ее вмассив урлов (т.е. все доступные для индексациистраницы сайта);2. Из каждой страницы взять метаданные (тегиdescription и keywords);3. Осуществить по содержанию метатегов поиск(автоматический поиск легко реализовать вяндексе) что бы найти близкие по тематикестраницы;4. Для каждой из найденных страниц узнатьPageRank сайта и есть ли в ней поля ввода(textarea),5. Сохранить все в лог­файл.6. Согласно лог­файла необходимо разместитьссылки (уже руками, а то до автоматизируетесьтут мне) по выданным адресам.Идею оценили, и я принялся за дело. В этойстатье дабы не раскрывать коммерческой тайны(какие сайты мною раскручиваются) длянаглядности (а заодно и для личной выгоды)пример рассмотрю применительно к раскруткесвоего блога.Кодим скриптЧтобы не валить все в одну кучу, разделим нашузадачу на несколько подзадач, а именно:1. Получение ссылок из карты сайта;2. Парсинг страницы на предмет метатегов

(применительно к блогу будем обрабатыватьзаголовки);3. Парсинг выдачи поисковика по заданномузапросу;4. Определение авторитетности страницы (илиресурса);5. Определение наличия полей ввода.Оформим каждый из этих пунктов в видефункции и поместим их в отдельный модуль (яобозвал его seo.py):import reimport stringimport urllibimport urllib2# проверка ссылки на поле вводаdef checkinp(url):

if url[:7] != 'http://':url = 'http://' + url

try:page = urllib.urlopen(url).read()

except:return False

else:pass

return '<textarea' in page# главный домен страницыdef host(url):

if url[:7] == 'http://':url = url[7:]

url = string.split(url, '/')[0]return 'http://'+url

# поиск в яндексе# page - номер страницы поиска# numdoc - количество ссылок на странице (20,50)def ypages(text, page=0, numdoc=10,results=[]):

host = "http://yandex.ru/yandsearch"headers = 'User-Agent' : 'Opera/9.80(Windows NT 5.1; U; ru) Presto/2.2.15Version/10.00','Host' : 'ya.ru','Accept' : 'text/html,application/xml;q=0.9, application/xhtml+xml,image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1','Accept-Language' : 'ru-RU,ru;q=0.9,en;q=0.8','Accept-Charset' : 'Accept-Charset: iso-

vr­online | сентябрь 2010

Автор

:Toly

WWW:

http://to

ly­blog

.ruКодинг

Page 35: VR-Online (Август-сентябрь 2010)

Кодинг35

vr­online | сентябрь 2010

8859-1, utf-8, utf-16, *;q=0.1','Referer' :'http://www2.amit.ru/forum/index.php','Connection' : 'Keep-Alive, TE','TE' : 'TE: deflate, gzip, chunked,identity, trailers' if page != 0:

url = urllib.urlencode("p": str(page),"text": text, "lr":"77", "numdoc":str(numdoc))else:

url = urllib.urlencode("text": text,"lr":"77", "numdoc":str(numdoc))request = host+"?"+urldata = urllib2.urlopen(request)txt = data.read()links = re.findall(r'href="http://([^"]+)',txt)for link in links:

if 'yandex' not in link and link not inresults:results.append(link)

return results# убираем частоповторяющиеся выражения (взаголовках)def del_strs(title):

not_words = ['-рецепты.', 'Модуль quotes.','Цитадель Зла', '.']for word in not_words:

if word in title:title = string.replace(title, word,'')

return title# получаем заголовок на страницеdef get_title(url):

page = urllib.urlopen(url).read()titles = re.findall(r'<h2class="title">([^<]+)', page)return del_strs(titles[0])

# ссылки из карты сайтаdef sitemap_links(url):

sitemap = urllib.urlopen(url).read()urls = re.findall(r'<loc>([^<]+)<',sitemap)return urls

# эта и последующие функции - для вычисленияpagerankdef get_pagerank(url):

hsh = check_hash(hash_url(url))gurl ='http://www.google.com/search?client=navclient-auto&features=Rank:&q=info:%s&ch=%s' %(urllib.quote(url), hsh)try:

f = urllib.urlopen(gurl)rank = f.read().strip()[9:]

except Exception:rank = 'N/A'

if rank == '':rank = '0'

return rankdef int_str(string, integer, factor):

for i in range(len(string)) :integer *= factorinteger &= 0xFFFFFFFFinteger += ord(string[i])

return integerdef hash_url(string):

c1 = int_str(string, 0x1505, 0x21)c2 = int_str(string, 0, 0x1003F)c1 >>= 2

c1 = ((c1 >> 4) & 0x3FFFFC0) | (c1 & 0x3F)c1 = ((c1 >> 4) & 0x3FFC00) | (c1 & 0x3FF)c1 = ((c1 >> 4) & 0x3C000) | (c1 & 0x3FFF)t1 = (c1 & 0x3C0) << 4t1 |= c1 & 0x3Ct1 = (t1 << 2) | (c2 & 0xF0F)t2 = (c1 & 0xFFFFC000) << 4t2 |= c1 & 0x3C00t2 = (t2 << 0xA) | (c2 & 0xF0F0000)return (t1 | t2)

def check_hash(hash_int):hash_str = '%u' % (hash_int)flag = 0check_byte = 0i = len(hash_str) - 1while i >= 0:

byte = int(hash_str[i])if 1 == (flag % 2):

byte *= 2;byte = byte / 10 + byte % 10

check_byte += byteflag += 1i -= 1

check_byte %= 10if 0 != check_byte:

check_byte = 10 - check_byteif 1 == flag % 2:

if 1 == check_byte % 2:check_byte += 9

check_byte >>= 1return '7' + str(check_byte) + hash_str

А вот и основной скрипт:import seoimport urllib# имя файла-отчета (лог)fname = 'result.csv'# адрес карты сайтаsitemap = 'http://toly-blog.ru/sitemap.xml'# функция занесения строки в лог-файлdef log(st):

global fnamef = open(fname, 'a+')f.write(st+'\n')f.close()

# пишем в лог шапку таблицыlog('pr_host;pr_page;url;link\n')# считываем ссылки сайта из карты сайтаurls = seo.sitemap_links(sitemap)# для каждой страницы сайтаfor url in urls:

print url# определяем заголовок страницыtitle = seo.get_title(url)if title == 'Рубрики':

continueprint title# ищем заголовок в яндексеlinks = seo.ypages(title)# для каждой найденной страницыfor link in links:

# если есть поля вводаif seo.checkinp(link):

# определяем ee pagerankpr_page =str(seo.get_pagerank(link))

# и pagerank ее хостаpr_host =str(seo.get_pagerank(seo.host(link)))

Page 36: VR-Online (Август-сентябрь 2010)

Кодинг36

vr­online | сентябрь 2010

# оформляем и пишем в логst =pr_host+';'+pr_page+';'+url+';'+linklog(st)

Запускаю скрипт и иду пить кофе…

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

По окончании работы скрипта получаемаккуратный csv­файл, из которого понятно, кудакакую ссылку можно оставить в комментариях:На этом все, жду вопросов и комментариев. Также хотелось бы услышать предложения поулучшению алгоритма скрипта.P.S. В коде намеренно допущена ошибка (аможет и несколько ошибок – не помню), которыене позволяют использовать скрипт на полнуюкатушку.

Page 37: VR-Online (Август-сентябрь 2010)

PythonИди ты на фиг, twitterfeed!

37

В который раз убеждаюсь – полагаться нужнотолько на себя и свои силы (возможности,ресурсы и далее по списку). Не жизнь, а чередазаконов Мерфи. Но, обо всем по порядку.ПредысторияРаскручивая ресурс, задался целью наследить втвитере. На ресурсе часто появляются новыезаписи в блогах и для лучшей индексации иповышения количества внешних ссылок кросс­постинг в твитер не помешает. На сайте ужеимелся rss­генератор и я уже собирался былоклепать свой парсер­rss­и­авто­твитт, какнаткнулся на twitterfeed.com . Там мне былообещано принимать на вход rss’ку и репоститьссылки с описаниями в твитер. Регистрируюсь,добавляю свою rss, рассекречиваю логин спаролем от twitter’а и устанавливаю самуювысокую частоту обновления rss’ки – 30 минут.Через полчаса первые пять укороченных ссылок(http://bit.ly) с описаниями затвитились. Спустя2,5 часа затвитились еще две ссылки, хотядолжно было быть намного больше. Это менясовсем не устраивало. Мне нужна стабильность– если в течение получаса в rss’ке появиласьссылка, значит, она стабильно появляется и втвитере.Питон – всему головаО том, что python­боты легко находят общийязык с популярным сервисом микроблоггинга яузнал еще полгода назад из журнала “Хакер”, авот сокращалку ссылок нужно было приручитьсамостоятельно. Сначала мой выбор пал наКликер – готовый API (да еще и первый примерна питоне) позволил накатать скрипт за 3минуты. Но при проверке оказалось, что всеукороченные ссылки ведут на одну страницу(хотя когда укорачивал не скриптом, а руками –все работало; мистика!). Тогда я решилиспользовать http://b23.ru. Правда тампользоваться API разрешают толькозарегистрированным пользователям и не более30 укорачиваний за час, но эти ограничения меняне отпугнулиДля того чтобы не твитить один и тот же пост

несколько раз пришлось хранить id’ки твитнутыхпостов в текстовом файле. В ссылке idпередается GET­параметром rid.

А вот и исходник скрипта:# -*- coding: utf-8import pycurlimport StringIOimport urllibimport urllib2import reimport string# сокращалка ссылокuser = '11111' # логинkey = 'pass' # ключ из настроекhost = 'http://b23.ru/api/shorten/'# сокращалка ссылокdef shorter(url):

passman =urllib2.HTTPPasswordMgrWithDefaultRealm()passman.add_password(None,'http://b23.ru', user, key)opener =urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman))urllib2.install_opener(opener)result = urllib2.urlopen(host+url)return result.read()

# из items выделяем ссылку, номер, заголовокdef get_fields(item):

title =re.findall(r'<title>(.+?)</title>', item)[0]# если rss'ка в виндовой кодировке -обращаем в utf-8title =

vr­online | сентябрь 2010

Автор

:Toly

WWW:

http://to

ly­blog

.ruКодинг

Page 38: VR-Online (Август-сентябрь 2010)

Кодинг38

vr­online | сентябрь 2010

title.decode('cp1251').encode('utf-8')link = re.findall(r'<link>(.+?)</link>',item)[0]link = string.replace(link, "&amp;","&")rid = re.findall(r'rid=([^&]*)',link)[0]rid = int(rid)desc =re.findall(r'<description>(.*?)</description>',item, re.DOTALL)[0]# если rss'ка в виндовой кодировке -обращаем в utf-8desc =desc.decode('cp1251').encode('utf-8')return title, link, rid, desc

# твитимdef tweet(txt):

txt = txt[:139]data = StringIO.StringIO()curl = pycurl.Curl()

curl.setopt(pycurl.URL,'http://twitter.com/statuses/update.xml')curl.setopt(pycurl.WRITEFUNCTION,data.write)

curl.setopt(pycurl.USERPWD,'логин:пароль')curl.setopt(pycurl.POSTFIELDS,'status='+txt)

curl.setopt(pycurl.POST,1)curl.perform()curl.close()

#==========================================собственно сама прога# формируем массив твитанутых id-шниковtry:

fposted = 'posted_tweets.txt'f = open(fposted, "r")posted = f.readlines()f.close()for i in xrange(len(posted)):

posted[i] = int(posted[i])except:

posted = []# получаем rssrss = urllib.urlopen('адрес rss`ки').read()# делим на itemsitems = re.findall(r'<item>(.+?)</item>', rss,re.DOTALL)# пробегаемся по всем элементам rss'киfor item in items:

# из items выделяем ссылку, номер,заголовокtitle, link, rid, desc =get_fields(item)print str(rid)+"\n"# проверяем rid на твитнутостьif rid not in posted:

# сокращаем ссылкуshort = shorter(link)# и твитим короткую ссылку,заголовок и описаниеtweet(short+' '+title+' '+desc)# запоминаем что затвитилиf = open(fposted, "a+")f.write(str(rid)+"\n")f.close()

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

легким движением руки мы сварганили своймини­твиттер фид. Удачи!

Page 39: VR-Online (Август-сентябрь 2010)

Я прусь!Делимся впечатлениями

39

JimmyJonezz: Начальства нетна работе (отпуск) и я прусь поэтому поводу, т.к. нет нагоняя,постоянного контроля инадсмотра над моимидействиями. Не сказать, что яплюю в потолок и "курюбамбук", но все равноработается легче и лучше. Ждус трепетом приезда своегоначальства, т.к. знаю, чтополучу кучу указаний инаправлений. То, что неуспеваю сделать дома, слихвой выполняется на работе,да и благодаря отсутствиюначальства, я написал большуючасть статей и шаблонов.Почитываю литературу ипропадаю в Интернете впоисках "вкусной" информации.Меня прет такая ситуация.Забыл упомянуть, что каждыйвечер, я делаю легкуюпробежку и на турник, качатьмускулатуру. Нет ничего лучшеэтого. Завидуйте, все те, ктострадает от лени. =)zahod5277: На днях братишкеподарили гитару, и покабрательник в школе я постигаюискусство извлечения звука изинструмента. Искренневосхищаюсь людьми, которыеумеют играть на гитаре. Это жетакой труд! Да, понимаю чтосложно только по началу, но всеже! Лично я, пока научилсяпереставлять пальцы с одногоаккорда на другой, чуть головойне повредился! Заставитьсгибатся пальцы так, как надо,первые разы очень сложно. Также, так как не имею ни тюнера,ни камертона, заколебался ееуже настраивать. Нашел

софтинку, которая заменяетреальный тюнер. Интереснаяпрограммулина, выручила.Kastor: Я очень рад, что у меняесть возможность хоть и редко,но достаточно своеобразнопроводить свое свободноевремя. Да еще и как! Недавнобыл на пожарной вышке.Высота четвертого этажа.Пристегиваю страховку,пропускаю веревку через«восьмерку» и карабин,свешиваюсь из окна. Страховкаготова? Готова! Вперед! Длятех, кто хоть пару раз такспускался, это не кажется чем­то сложным. Поэтому тренерусложнил задачу.Свешиваешься из окна, словносидишь на подоконнике, свесивноги на улицу. Держишь веревкуи, отталкиваясь,разворачиваешься в воздухелицом обратно к стене. Тутглавное преодолеть страх иповерить, что ты останешьсявисеть на веревке, а небахнешься об землю. Далее,спускаясь, пролетаешь среднееокно и влетаешь в самоепервое (второй этаж). Быстроотстегиваешь страховку (будетмешать), становишься лицом кокну и, отталкиваясь ногой отподоконника, выпрыгиваешь изокна как можно дальше. Задачаспуститься на землю, некоснувшись стенки. Признаюсь,этот момент достаточностремный. Опять же, прыгая вокно надо поверить, чтосвободному падению будетпрепятствовать веревка,которую ты держишь в руках иможешь резко поставить на

тормоз через «восьмерку». Аеще на этих выходных был влесничестве, на соревнованияхпо туризму. Три дня безцивилизации. Днемпреодолевали навесныетрассы, искали контрольныепункты и вязали узлы. Ночамитравили анекдоты и грелись укостра чаем. Еще бы. Холодинатакая. В палатке спал, думалспина к земле примерзнет.Набегался за три дня докрепатуры в ногах, но оно тогостоило. Теперь, надеюсь,представится возможность ещераз побывать в тире или дажена полигоне. Кажется, почти годне стрелял из оружия.ZeroXor: От осени. Да, ядействительно прусь от того,что закончилась эта кошмарнаяжара (хотя многие уверяют, чтолето в Сибири в этом году былохолодным – лично я холодовособо не заметил, а вот отжары пришлось помаяться), чтопомог родителям убратьурожай с огородов и делянки вполе. В конце­концов от того,что вечерами теперь неслышно пьяных компаний подокнами. Плохо разве? Ничуть!А еще так классно впрохладный вечер завернутьсяв теплое одеяло, налить кружкугорячего сладкого чая ивключить какой­нибудьхороший фильм или подкаст.Spider_NET: В этом месяце я сженой и с друзьями сходили наконцерт группы «Кипелов». Мывдоволь накричались иполучили кучу позитивныхэмоций. Давно я так уже не

vr­online | сентябрь 2010

VR­Cr

ewЯ прусь!

Page 40: VR-Online (Август-сентябрь 2010)

Я прусь!40

vr­online | сентябрь 2010

отдыхал. Вроде всего лишь двачаса драйва, а душе реальнохорошо. После концерта ажзахотелось снова творить.Концерт был не единственнымподарком судьбы. 24 сентябрястартовал 6­й сезонSupernatural(Сверхъестественное) — одногоиз самых моих любимыхсериалов. Признаюсь честно, яуже месяца два с нетерпениемждал этого события и вот такидождался. Теперь знаю, на чтоя буду тратить 40 минуткаждого субботнего вечера ;­)lord_of_fear: Как же я рад, чтопришли те времена, когда наработе при покупке железа,мониторов и прочего можно несмотреть на самые­самыедешёвые модели. Например,отличный 20­дюймовыймонитор BenQ можно купить за5999 рубликов. Доступныйценник. Нормальная видюхадля офисного компа стоит всего1500р. Не нужно через силупользоваться этим го*ном,интегрированным в материнку,если оно выдаёт мутноеизображение. Винт на 250Гигвсего за 1400. Сегодня воттолько собрал под заказотличный игровой системник за27300. Даёшь компьютер вкаждый дом! :) Хе­хе.

Page 41: VR-Online (Август-сентябрь 2010)

“Linux глазами Хакера”

41

Пару месяцев назад, гуляя по магазину ozon.ru иподыскивая, что же почитать, мне на глазапопалось третье издание книги Миши Флёноваaka Horrific “Linux глазами Хакера”. Ценаоказалась очень даже привлекательной, поэтомуя сразу кликнул по пимпе “в корзину”.Заинтересовал так же факт наличия CD вкомплекте.Про стиль изложения материала Horrific’ом,думаю, нет смысла рассказывать. Если “БиблияDelphi” была твоей первой книгой, то тыпоймёшь, о чем я. Миша всегда умелпреподнести материал так, что даже новичокпоймёт. И эта книга не явилась исключением изправил. Всё четко, просто и доступно. Авторобщается с читателем на протяжении всей книги,иногда рассказывая случаи из своейпрофессиональной практики, местами даваяполезные советы “как надо делать” и как “ненадо делать”.Книга имеет достаточно броское название.Понимаю, что название выбирает не автор, аредактор издательства, но, считаю, что этойкниге оно совсем не подходит. Ибо “хакер” внашем понимании – профессионал. Т.е. эта книгадолжна быть написана профессионалом дляпрофессионалов. Лично у меня выстраиваетсятакая логическая цепочка. Книга же написанапрофессионалом для новичков и немногопродвинутых пользователей. Даны базовыезнания. Всего понемногу. Информацияпреподнесена очень понятно и доступно. Но! Это– не тот материал, который я хотел бы прочитатьв книге с таким названием.Так же мне совсем непонятна любовь Horrific’а кMandriva Linux. Пишет, что это – его любимыйдистрибутив. Если спросить любогопродвинутого линуксоида “что ты думаешь оMandriva”, то он ответит в стиле “Отстой. Ни зачто себе не поставлю. И тебе не рекомендую”. Ия с этим согласен. Отстойный глючныйдистрибутив. Вкатывает только новичкам,впервые увидевшим Linux после винды. Нуладно, о вкусах не спорят. :)

После окончания прочтения книги я сразу жераспаковал диск и вставил в привод. Егосодержимое меня, мягко говоря, удивило.Полный объем данных – 280Мб. Из них 245метров – обои. Причем даже не обои, а простофотки зданий, животных, растений и прочего.Зачем это здесь? Остальной же материал – 3сорца на Java и десятка полтора старыхМишиных статей. Часть из них даже не имеетникакого отношения к миру Linux. ИМХО, этотненужный диск в комплекте только увеличиваетстоимость книги.Считаю, что всё­таки книга заслуживает твёрдойчетверки. Я ничуть не пожалел, что прочитал её.Нашлось и для меня кое­что новенькое иинтересное :)ИТОГИ:Полезность: 4/5Стиль изложения: 5/5Качество печати: 5/5Оправданность цены: 100%Стоимость книги – 358 руб. в магазине Ozon.RUСсылка на книгу в магазине:http://www.ozon.ru/context/detail/id/5217643/

vr­online | сентябрь 2010

Автор

:Ром

анКос

тенко

akaLor

d_of_fe

arEm

ail:kos

tenko.

r.khv@

gmail.

comОбзоры от VR

Page 42: VR-Online (Август-сентябрь 2010)

Обзор Mp3 flashплеера Samsung YP­R1

42

Честно сказать, Samsung всегда вызывал у менянекие подозрения и сомнения, связанные свпечатлением, прежде всего от их телефоннойпродукции. Но взглянув на соотношениефункционала устройств и их цены, я понял, чтокомпания не стоит на месте и не удержался отпокупки.Итак, сейчас в моих руках находится плеер (насамом деле это нечто большее) YP­R1. Есликому интересно, то это уменьшенный вариант ихже плеера P3. Начну обзор с внешнего вида икомплектации, а затем мы плавно перейду ксамому вкусному – мультимедийнымвозможностям. Прости за качество фоток ­ необладаю пока качественной, аппаратурой чтобыделать подобные обзоры ­ надеюсь в будущемвсе наладится.Внешность и комплектация

Плеер сделан из алюминия, оснащен сенсорнымэкраном, покрытым закаленным стеклом. Кромепластиковых кнопок включения/выключения (онаже и блокировка) и регулирования громкостифизических элементов управления он не имеет.Признаться, передо мной тут же возник вопрос –насколько удобно и оправдано сенсорноеуправление на таком маленьком экране(диагональ ­ 6,5 см), но оно превзошло все, дажесамые смелые ожидания. Плеер шустро иудивительно точно откликается на всеприкосновения, ошибки, конечно, случаются, но ядаже на более крупном экране Nokia 5530ошибался гораздо чаще – приятно удивлен.Комплект поставки разочаровал – вакуумныенаушники, насадки к ним, usb­кабель и

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

Наушники на меня сильного впечатления непроизвели, я бы включил в комплект обычные«вкладыши» ­ неискушенные слушателисэкономили бы пару сотен рублей, а искушенныетут же их выкинут, подключат свои любимые«сенхайсер» и будут правы.Заявленное время работы от встроенногоаккумулятора – 25 часов в режимевоспроизведения музыки и 5 часов, в режимевидео. Параметры слабенькие, но даже приактивном использовании на рабочий деньзарядки вполне хватает – что приемлемо длясреднестатистического городского жителя,главное не забыть зарядить его перед началомнового дня – на это требуется 3 часа.Подключение к компьютеру произошло быстро илегко – плеер определился как флешка, ипомимо прочего там обнаружилась любопытнаяпрограммка EmoDio – самсунговский аналогiTunes (позже напишу её полноценный обзор), ноособенной нужды в ней я не ощутил.Теперь настала пора все­таки включить плеер ипоближе познакомиться с функциями:Передо мной открывается интерфейс, которыймне чем­то напомнил Vista с её виджетами.Интерфейс разбит на несколько экранов,

vr­online | сентябрь 2010

Автор

:Овчи

нников

Михаи

лaka

Night_

Storm

WWW:

http://N

storm

.3nd.r

uОбзоры от VR

Page 43: VR-Online (Август-сентябрь 2010)

Обзоры от VR43

vr­online | сентябрь 2010

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

МузыкаЯ не буду сильно разглагольствовать насчетудобства интерфейса – каждому свое, я читалмножество негативных отзывов, но сам так и незаметил никаких неудобств, главное держатьсвою медиа­коллекцию в порядке – спрописанными тегами и обложками, тогдадействительно будет и красиво и удобно,особенно радует режим выбора альбома как наiPod.

Качество звука хорошее, самсунг здесь главнымкозырем позиционирует технологию улучшениязвучания DNSe (есть как большое количествопресетов, так и возможность настроить всесамому). Признаться, сильного впечатления онана меня не произвела, и для таких как я естьобычный эквалайзер, без наворотов.Есть возможность составлять плейлисты (ихможно также составлять через EmoDio и

загружать в плеер), присутствует визуализация.Плеер умеет читать следующие форматы: MPEG1/2/2.5 Layer 3(8 ­ 320 Кбит/с, 8 ­ 48 кГц), WMA(12­320Кбит/с,16­48кГц), Ogg(32­400Кбит/с,Q0­Q10,8­48кГц), AAC­LC (8 ­ 320 Кбит/с, 8 ­ 48 кГц),AAC+(8­320Кбит/с,8­48кГц), Enhanced­AAC­Plus (8 ­ 320 Кбит/с, 8­ 48 кГц), FLAC(уровни0­8,16­48кГц), RA (20 ­ 96 Кбит/с, 8 кГц,11,025 кГц, 44,1 кГц), WAV (стандарт wav, 8 ­ 48 кГц).ВидеоХорошее разрешение позволяет довольнокомфортно смотреть видео – и маленький экрансовершенно не помеха! Для эксперимента язагрузил в плеер несколько клипов в разныхформатах и один 700мб dvd­rip. Из десятказагруженных клипов играть отказались лишь 2(но эта проблема легко решается с помощьюпрограммы EmoDio – при копировании через нееона сама переконвертирует видео в нужныйформат).

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

Page 44: VR-Online (Август-сентябрь 2010)

Обзоры от VR44

vr­online | сентябрь 2010

Плеер понимает изображения форматов JPEG(Baseline, Progressive), BMP (макс. 32 бита),PNG, Gif (89a/87a). Легко, практически безподторомаживаний работает с изображениямивысокого разрешения, позволяет переворачиватьих, масштабировать, а так же поставить вкачестве заставки на рабочий стол (еще естьвиджет – рамка с фотографиями, куда тожеможно поставить свое фото).Flash-playerНесмотря на заявленную в плеере поддержкуформата SWF (Flash Player 8.0 или более ранниеверсии, ActionScript 2.0 или более ранниеверсии), флешки любых версий он играет беззвука, а содержащие упомянутый ActionScript ивовсе играть отказывается. Я надеюсь, этунедоработку разработчики устранят в ближайшихпрошивках, пока же флеш­плеер бесполезен.РадиоРадио работает хорошо, имеется режим, как иручной настройки, так и автоматического поиска.Принимает сообщения RDS (правда у нас вРязани оказалась только одна радиостанция,которая их транслирует). Надо заметить, что спервого раза плеер нашел не все радиостанции– затрудняюсь предположить почему. Имеетсявозможность записи эфира.

Радио не поставишь напаузу, но есть моменты, когда просто нужновыключить звук – для этого есть кнопочка mute,признаться в других плеерах мне этого очень нехватало – еще раз приходится снимать шляпу.Функция чтения текстаЕсли все предыдущие возможности были вполнеожидаемыми в плане интерфейса, и особеннымничем не отличались, то здесь меня Samsungудивил. Несмотря на то, что плеер понимаеттолько формат *.txt, реализовано все ну оченькрасиво: твои файлы – это книжки на книжнойполке, а на корешке подписаны названия.Просто, но выглядит очень здорово! Нажав на

книжку,открываетсятвой текстовыйфайл, причемможносамостоятельновыбрать емуфон и размершрифта, алистать егоможно, какпростымдвижениемпальца, так инастроитьавтоматическую прокрутку.Закладкиесть, и работас нимиосуществляется так же непринужденно.BeatDJМы плавно переходим к второстепеннымфункциям. BeatDJ – это игрушка позволяющаяпопробовать вам ремикшировать какую­нить изкомпозиций на вашем плеере, путем добавленияразличных скретчей, сэмплов и эффектов.Звучит заманчиво, на деле же быстро надоедает.ИгрыПомимо 4 встроенных игр, можно скачать ещенесколько с сайта производителя. Из всех 4 игрмне понравилась только «судоку», да и то игратьв нее не очень удобно, но убить время помогает,остальные же не представили большогоинтереса, хотя я так думаю, что довольнокачественная графика и звук приведут в восторгболее младшее поколение.Запись голосаЯ привык к свистящим и шипящим диктофонамна плеерах и мобильных телефонах, и каково жебыло мое удивление, когда я услышал довольноприемлемое качество в этом устройстве.Хотя, конечно надо признать, что бассы сильноискажаются, но все­таки он предназначен длязаписи голоса, а не для инструментальныхзаписей, поэтому, к сожалению, репетицию нанего вряд ли удастся записать.Файловый менеджерНичего особенного – папки и файлы. Из всехвозможностей только удаление и добавление вплейлист – бедновато как­то хотелось бы хотябы базовых возможностей – переместить,скопировать, создать папку.Я малость разочарован, признаться, может вследующих прошивках, добавят еще что­нибудь,я на это очень надеюсь.

Page 45: VR-Online (Август-сентябрь 2010)

Обзоры от VR45

vr­online | сентябрь 2010

DatacastsПри подключении плеера к компьютеру, EmoDioможет обновить RSS ленты новостей черезинтернет и загрузить в плеер, для последующегопросмотра их там.Я пока, что не стал сильно разбираться с этойфункцией, но взять на заметку её определенностоит.BluetoothНапоследок самое вкусное – возможностьиспользования плеера в качестве гарнитуры длятелефона, или наоборот, возможностьиспользования стерео­гарнитуры дляпрослушивания плеера. И опять хочется пожатьруку разработчикам – насколько все красивореализовано.

Мой SonyEricsson безпроблем«подружился»с YP­R1, итеперь, невынимаятелефон изкармана, ямогупринимать звонки и звонить сам – качество связилучше, чем на самом телефоне – хотя наверно япреувеличиваю на фоне общих впечатлений. Дляконтактов имеется телефонная книга, ископировать их туда можно, передав с телефоначерез тот же блютус (хотя не со всех моделейтелефонов они распознаются корректно).Также с помощью блютуса можно обмениватьсяфайлами с другими плеерами и телефонами.ВиджетыОни в основном декоративные и я бы дажесказал «женские». Тем не менее, имеетсяпарочка полезных в хозяйстве:Заметки – с рукописным вводом.

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

Мировое время – с красивым глобусом, которыйможно вращать.Разряд батарейки – мне кажется, он работаетнемного некорректно, но время покажет.Часы – есть несколько видов.Календарь – довольно удобный, тем более, чтоподдерживает импорт событий из Outlook.На декоративных виджетах я останавливатьсяне буду, лучше приведу выдержку из инструкциисо всеми виджетами:

Подключение к телевизоруПлеер позволяет просматривать видео ифотографии на экране телевизора. В комплектес ним никаких шнуров не идет, и в инструкциитакже очень мало написано. Методом дедукциибыло вычислено, что нужен шнур дляподключения видеокамеры к телевизору – содной стороны 4­х пиновый «мини­джек», сдругой 3 тюльпана. Но, конечно же, всеоказалось не так просто, и показывать плееркроме шумов ничего не стал. Почитав форумы, японял, что я не один такой, и пришлось крепкозадуматься – решение было найдено, и я опишуего в отдельной статье. Надо признать, чтокачество картинки на телевизоре очень дажехорошее, только не забудьте зарядить батарею,чтобы не омрачить себе просмотр на серединефильма.ЗаключениеИтак, как ты уже убедился ­ перед нами самыйнатуральный медиа­комбаин. Samsung нанесхороший удар по конкурентам, нонеоднозначный. И самый главный вопрос наповестке дня – почему в таком мощномустройстве такая слабая батарея? Итак, давайеще раз взвесим все минусы и плюсы:Плюсы:• Хорошее качество воспроизведения музыки.• Отличная работа с видео.• Хорошее разрешение экрана, и удобный,адекватный сенсор.• Большое количество удобных виджетов (я так

Page 46: VR-Online (Август-сентябрь 2010)

Обзоры от VR46

vr­online | сентябрь 2010

думаю в следующих прошивках они будутрасширяться).• Возможность настроить интерфейс по своемуусмотрению.• ТВ­выход.• Блютус.• Благодаря таким возможностям хорошеесоотношение цена/качество.Минусы:• Малая емкость батареи.• Скудный комплект поставки.• Сложности подключения ТВ­выхода (в силупредыдущего пункта).• Небольшой экран (я понимаю, что есть болеестаршая модель с большим экраном, но ярассматриваю именно этот плеер ).• Некорректная поддержка flash (надеюсьустраниться прошивкой в самое ближайшеевремя).• Не самые удобные наушники.• При таком функционале не хватает только wi­fiи браузера – получился бы убийца iPod touch.Итак, какой вердикт? Если ты городской житель итебе нужен маленький многофункциональныйпомощник, чтобы скрасить скуку в течениерабочего дня, а так же выгодно щегольнутьперед знакомыми – то must have однозначно.Если же ты турист, которому нужен надежныйспутник в дороге, то тут я рекомендуюприсмотреться к iRiver P7. Выхода на телевизорнет, зато в 2 раза больше памяти, в 2 разабольше дисплей, и в два раза больше времяработы от аккумулятора, но и в карман его неположишь. Я своей покупкой доволен, стоит лиследовать моему примеру – решать тебе.

Page 47: VR-Online (Август-сентябрь 2010)

10 лучших дистрибутивовLinux в 2010 году

47

Я считаю, что на данный момент нет ни одногодействительно стабильного дистрибутива Linux сграфическим сервером на борту. Иксы сводятвсю стабильность линукса на нет. Таковаситуация на данный момент…. Я с нетерпениемжду того времени, когда я смогу поставить X­сервер и буду уверен в 100­процентнойстабильности. Надеюсь, этот момент настанет…А пока мой выбор ­ Debian без графическойсреды.Лучший дистриб для новичков:

Ubuntu 1 0.04Мало кто не слышал об Ubuntu. Именно этослово для большинства пользователейассоциируется с миром Linux. Ubuntu – антидотв мире неопределённости. В большинствеслучаев он работает сразу из коробки. Тебе ненужно беспокоиться о ненайденных драйверахна железо, проблемах установки иконфигурирования софта. Просто вставь диск впривод, ответь на несколько простых вопросов, иты увидишь красивый интерфейс Ubuntu 10.04,носящий кодовое имя Lucid Linx.В отличие от других разработчиков, девелоперыUbuntu знают как сделать рабочий столпривлекательным. Нежные оттенки фиолетового,оранжевого и черного теперь смотрятсязначительно лучше утомительных тускло­коричневых цветов предыдущих версий. Воттолько весьма непривычно теперь смотрятся

кнопки управления окнами, располагающиеся влевом верхнем углу. Однако пользователи,имеющие дело с OS X, не найдут для себя этотфакт столь непривычными.Ubuntu обладает отличным репозиторием именеджером пакетов. Программы устанавливатьпроще простого. Нужно лишь обладатьподключением к интернету. Убунту линукс –победитель в нашем рейтинге.Лучший дистрибутив для профи:

Fedora 1 3.Fedora Linux включает в себя большинстводостоинств Ubuntu, таких как: отличнаяподдержка оборудования, удобный интерфейс ибольшой выбор пакетов. Однако есть нюанс:этот дистрибутив не подойдёт, если ты ищешьпроприетарное и закрытое ПО. Кодеки MP3,Adobe Flash, драйвера Nvidia и пр. не установитькакой­то парой кликов мыши как в Ubuntu. Надозаметить, что процесс установки подобногософта только усложняется от версии к версии.Приходится придерживаться альтернатив сисходным кодом, предоставляемых Fedora.Но это и не так уж плохо. Последний релизвключает в себя отличный Nouveau Nvidia driver.Новый менеджер фотографий Shotwell являетсяотличным приложением для работы сизображениями.

vr­online | сентябрь 2010

Перев

од:Ро

манК

остенк

оaka

lord_of

_fear

e­mail:

kosten

ko.r.kh

v@gm

ail.com

Без рамки

Page 48: VR-Online (Август-сентябрь 2010)

Без рамки48

vr­online | сентябрь 2010

Лучший дистрибутив для миграциис Windows: PCLinuxOS

Это – первый из рассматриваемых намидистрибутивов, использующий графическуюсреду KDE по умолчанию. Ты, конечно же,можешь подобрать версию и с другойграфической средой. Но KDE, на мой взгляд,больше всего подходит для windows­пользователей.PCLinuxOS станет отличным выбором для тех,кто хочет стабильности и windows­likeинтерфейса. В дистрибутив включены последниеверсии K3b Blue­Ray, CD и DVD Burner, Digikamphoto management tool, Choqok social networkingtool и плеера Amarok. Графическая средаособенно не оставит равнодушными тех, ктопоследние пару лет юзал виндовый файловыйменеджер, редактор реестра и эффекты Aero вWindows Vista и Windows 7.

Лучший дистрибутив длястаренького железа: Puppy Linux 5.0Сила Linux в его гибкости. Он работает везде:начиная сотовыми телефонами, заканчиваябортовыми компьютерами космическихкораблей.

Puppy Linux – это дистрибутив, образ которогозанимает всего 128Мб. Просто запиши образ надиск, загрузись с него и работай. ОС будетработать из RAM. А все произведённыеизменения будут записаны на свободноепространство этого же CD/DVD.А самым классным является тот факт, что 5­яверсия Puppy может работать с репозиториямиUbuntu. Это даёт возможность установить любойи тысячи доступных пакетов для Ubuntu Linux.Лучший дистрибутив для твоего

десктопа: Linux Mint 9.0Linux Mint, по моему мнению, по праву занимаетместо в нашем рейтинге как лучший дистрибутивдля десктопа. Может Linux Mint и основан наUbuntu, но зато он, как настоящий десктопныйдистрибутив, с легкостью решает все сложныезадания пользователей благодаря множествувстроенных утилит и уникальной графическойсреды.По дефолту в качестве графической средыиспользуется Gnome c изменёнными панелями.Привычного top­bar’а тут нет, а нижняя панельвыполнена в стиле Windows. Менеджер пакетовудобнее и продуманней, чем в Ubuntu. Имеетсявозможность активировать эффекты рабочегостола, Compiz и другие красивости с помощьюудобной панели на рабочем столе.

Лучший дистрибутив для нетбуков:Ubuntu UNR 1 0.04

Отличная совместимость с железом,изысканный GUI и удобное меню запускаприложений делает UNR выбором номером одиндля нетбуков.Загрузка Ubuntu UNR идёт всего порядка 20секунд. Поддерживается абсолютно всё железонетбуков из заявленного разработчиками спискамоделей. UNR позволяет продлить времяработы от батареи благодаря продвинутымалгоритмам энергосбережения.

Page 49: VR-Online (Август-сентябрь 2010)

Без рамки49

vr­online | сентябрь 2010

Canonical на славу потрудились надграфическим интерфейсом. Благодаря емупользователь имеет удобную возможностьпереключаться между приложениями, которыеработают на максимальном разрешении.Удобства при работе так же добавляютсистемные сообщения, выдаваемые ОС,например, при низком уровне заряда батареи,новых твитах в твит­ленте или полученном e­mail’е.

Лучший дистрибутив длясисадминов: Debian 5

Debian – один из самых популярныхдистрибутивов Linux, оказывающийзначительное влияние на развитие этого типа ОСв целом. Всем известный Ubuntu основан как разна нём. Debian имеет наибольшее среди всехдистрибутивов хранилище пакетов, и если дажене по их числу, то по числу поддерживаемыхархитектур: начиная с ARM, используемой вовстраиваемых устройствах, наиболеепопулярных x86 и PowerPC, новых 64­разрядныхAMD, и заканчивая IBM S/390, используемой вмейнфреймах. Именно поэтому этот дистрибутив– лучший выбор для сисадмина.Стабильные версии операционной системыDebian называются именами персонажеймультфильма «История игрушек». Последняя,нестабильная версия дистрибутива Debianпостоянно носит кодовое имя «Сид», по имениотрицательного персонажа из мультфильма,который постоянно ломал игрушки.

Лучший дистрибутив для офиса:OpenSUSE 11 .3

Это – второй из рассматриваемыхдистрибутивов, использующий графическуюсреду KDE по умолчанию. Так же как иPCLinuxOS, который я порекомендовал длямиграции с Windows, OpenSuse выбран по тойже причине: дружелюбный интерфейс дляиспользования в офисе. Однако, еслиPCLinuxOS – маленький проект с небольшойподдержкой, то OpenSuse – последняя огромнаянадежда компании Novell. Поэтому он не толькокачественно поддерживается на уровнедесктопов, но и на уровне серверов.На основе openSUSE также собираютсядистрибутивы для корпоративных клиентовNovell Linux Desktop (NLD), Suse Linux EnterpriseDesktop (SLED) и Suse Linux Enterprise Server(SLES). Novell активно сотрудничает с Microsoft,которая в результате соглашения о патентахподдерживает и распространяет дистрибутивыSuSE, в которых немаловажную роль играетMono — реализация запатентованной Microsoftплатформы .NET , что вызвало недовольствочасти сообщества пользователей иразработчиков свободного ПО.

Лучший дистр для серверов:CentOS 5.5

CentOS (англ. Community ENTerprise OperatingSystem) — дистрибутив Linux, основанный накоммерческом Red Hat Enterprise Linux компанииRed Hat, и совместимый с ним. По сути CentOSLinux ­ это RedHat Enterprise Linux, из которогоудалены только коммерческие закрытыепрограммы.Срок поддержки каждой версии CentOSсоставляет 7 лет (с помощью выпускаобновлений безопасности). Новая версияCentOS выходит раз в 2 года и каждая версиярегулярно обновляется (каждые 6 месяцев) дляподдержки новых аппаратных средств. Врезультате это приводит к безопасной, легко

Page 50: VR-Online (Август-сентябрь 2010)

Без рамки50

vr­online | сентябрь 2010

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

масштабируемой Linux среде.Лучший дистрибутив для

мультимедии: Ubuntu StudioПервый официальный релиз — Ubuntu Studio7.04, вопреки нумерации дистрибутивов Ubuntu(Год.месяц), выпущен не в апреле, а в мае 2007года.Является разработкой группы MOTU (Masters ofthe Universe). Цель проекта — быстроеразвёртывание готовой к использованию фото­,видео­, аудио­ студии с минимальнымизатратами средств и максимальным комфортом.В отличие от других дистрибутивов Ubuntu,установка Ubuntu Studio основана не на Live­CDинсталляторах, а использует консольнуюпрограмму. Кроме того, дистрибутив оказалсяслишком большим, чтобы поместиться насемисотмегабайтный компакт­диск, поэтому

обычно устанавливается с DVD.

Оригинал материала:

http://www.techradar.com/news/software/operating­

systems/10­best­linux­distros­for­2010­704584?artc_pg=1

Page 51: VR-Online (Август-сентябрь 2010)

Как я ставил Linuxна нетбукПрактические советы из личного опыта

51

Сбылась мечта идиота! У меня появилсянебольшой, но весьма шустрый (по моиммеркам) нетбук. Точные параметры я сейчасвыдать не могу, но могу сказать точно ­ этакрошка мощнее моей десктопной машины.Скорость процессора, правда, практически такаяже, но если учесть вдвое больший объемоперативной памяти (причем DDR2 против DDR1десктопной машины), более скоростной винт инебольшой дисплей, станет понятно, откудапоявилась производительность.Только Linux и ничего большеЕстественно, от Windows 7 Starter мы с супругой(кстати, этот нетбук – подарок мне от нее, уж незнаю, за какие такие заслуги) отказались сразу.Продавец, грустно вздохнув, заблокировал виндуи с вселенской грустью в голосе спросил:“ИксПишку ставить будете?”. “Нет, Linux” ­ответил я. Тот, задумчиво почесав макушку,пожелал удачи.И вот нетбук успешно доставлен домой,распакован и слегка (все­таки я не спал ужебольше суток, боялся просто отключиться)обмыт. Сразу стало ясно, что CD/DVD­приводанет (на то он и нетбук, в конце концов), потомуустанавливать систему придется некимхитроумным и на тот момент неизвестным мнеспособом.Замечу также, что от специальных “нетбучных”сборок я решил отказаться, спасибо френдам изтви, подтвердившим мою мысль, и поставитьобычный десктопный Debian Lenny, которыйзатем и допилить до состояния, удобного личномне.Любая работа начинается сгугления.Немного погуглив, я обнаружил, что создатьустановочную (инсталляционную, говоря умно)флешку не так уж и сложно. Главное, чтобы ееобъем был не менее 256 МБ. Конечно, насегодняшний день это не ограничение, но свойфлеш­парк я не обновлял достаточно давно, врезультате чего имеются и 128­мегабайтные

носители. Ну да ладно, настало время перейти ксамому интересному и нужному (особенно еслиты нашел этот материал, пытаясь и самустановить Linux на нетбук).Сорвав с шеи mp3­плеер (а он у меня как раз на256 МБ), я воткнул его в десктоп (да, длясоздания инсталляционного флеш­дискапонадобится уже настроенный компьютер) ипервым делом определил, каким же устройствомон оказался.Создаем загрузочный flash­диск DebianGNU/Linux.Определяется это до смешного просто (впрочем,в Linux все делается довольно просто):#dmesg

Рисунок 1. Монтируем флешку

Итак, плеер определился как /dev/sda. Теперьнужно было добывать файло, которое,собственно, и будет устанавливаться. Решив незаморачиваться, я вытянул файл загрузочногообраза и iso­образ дистрибутива дляархитектуры i386.Если у тебя, уважаемый читатель, есть интерескачать образы для другого типа машин, то нужнопоправить адреса ссылок, либо снова­таки

vr­online | сентябрь 2010

Автор

:Zero

Xor

WWW:

zeroxo

r.ruБез рамки

Page 52: VR-Online (Август-сентябрь 2010)

Без рамки52

vr­online | сентябрь 2010

погуглить на тему, где их можно добыть. Личномне хватило этого, потому и не стал искатьничего дальше.Теперь, не монтируя флешку, открываем (еслине сделали этого при определении флешки)терминал, получаем права рута и... и, кстати, незабудь скопировать всю важную информацию сфлешки – после выполнения команды она будетуничтожена целиком и полностью (информация,конечно же, а не флешка).# zcat boot.img.gz > /dev/sda

Вместо boot.img.gz поставь полный путь кскаченному файлу загрузочного образа, если тынаходишься не в этом каталоге. Ну и,естественно, sda замени на то устройство,которым флешка распозналась на твоей тачке.Шаг следующий ­ физический. Вынимаемфлешку и вставляем ее обратно. Требуется этодля того, чтобы наша свежесозданная файловаясистема распозналась системой. На всякийпозорный проверим, что же получилось:# mount /dev/sda /mnt/# ls /mnt

Таким образом, мы примонтируем флешку ипосмотрим ее корневой каталог, если кто незнает. Вместо того, что было (а я предупреждал,что вся информация будет уничтожена, междупрочим), можно увидеть не так уж много файлов,в основном, конфигурационно­текстовых, хотя иsetup.exe тоже встречается. Если и ты этоувидел, значит, все прошло в лучшем виде иможно спокойно заливать туда же образдистрибутива, простым копированием.

Рисунок 2. Проверяем содержимое флешкиМаленькие разочарованияДальнейшая установка не сулила никакихпроблем, но они нежданно­негаданно появились.После установки сетевой версии Debian Linux

программа aptitude никак не хотела работать собразами дисков. Выполнив ручноемонтирование диска, я запустил программуaptitude, которая размонтировала /cdrom/ иупрямо не могла подключить нужный мнерепозиторий. Видимо, не понимая подвоха,система пыталась разыскать реальный CD,воткнутый в реальный привод, которого у меня,понятное дело, не имелось.А теперь о том, почему, собственно, эта траблаоказалась для меня неожиданной. Дело в том,что сетевая карта (уж, по крайней мере,интерфейс eth0) распознавалась всегда на летуво время установки. Моему удивлениюпрактически не было предела, когда во времяустановки Debian выплюнул мне сообщение "ненайдена сетевая карта" и предложил выбрать ееиз списка доступных. Неудивительно, что в этомсписке ее не оказалось, ведь иначе система исама смогла бы ее инициализировать.Локальный репозиторий из iso-образов дисков дистрибутиваОказалось, что я мыслил в верном направлении,просто не знал еще одной тонкости.Монтирование было делом правильным, простонужно было не обманывать систему, а прописатьв настройках репозитория не диск, а файл с iso­образом. Например, я создал в корне каталогrepos, а в нем ­ каталог disks, в который искладывал диски, а также каталоги cd1, cd2 иcd3, куда, собственно, и монтировал образы.Затем я отредактировал /etc/apt/sources.list:deb file:///repos/cd1/ stable contrib maindeb file:///repos/cd2/ stable contrib maindeb file:///repos/cd3/ stable contrib main

И смонтировал диски:# mount -t iso9660 /repos/disks/debian-505-i386-CD-1.iso /repos/cd1 -o loop# mount -t iso9660 /repos/disks/debian-505-i386-CD-2.iso /repos/cd2 -o loop# mount -t iso9660 /repos/disks/debian-505-i386-CD-3.iso /repos/cd3 -o loop

Вняв мудрому совету, я решил оформитьмонтирование дисков в виде скрипта, чтобы немучиться с набором команд каждый раз, когдаэто понадобится. Попутно сразу создал точкимонтирования и скопировал iso­образы дисковна винт. Вот что у меня получилось:#! /bin/shmount -t iso9660 /repos/disks/debian-505-i386-CD-1.iso /repos/cd1 -o loopmount -t iso9660 /repos/disks/debian-505-i386-CD-2.iso /repos/cd2 -o loopmount -t iso9660 /repos/disks/debian-505-i386-CD-3.iso /repos/cd3 -o loop

Page 53: VR-Online (Август-сентябрь 2010)

Без рамки53

vr­online | сентябрь 2010

Таким образом, я вытянул первые три CDдистрибутива. Можно было, конечно, продолжитькачать, раскладывать, монтировать иустанавливать софт таким же образом, но когдарядом виднеется штекер сетевого кабеля,подключенного к безлимитному тарифу, желаниеставиться с диска уменьшается практически донуля. Потому и было принято решениеподружить нетбук с Инетом.Настройка сетевого интерфейса вDebian на нетбукеСудя по тому, что удалось разузнать о сетевойкарте, входящей в комплект нетбука ­ это еемодель, JMC26X. Поискав в этом направлении,увидел, что сие чудо железно­сетевой техникидействительно не поддерживается "из коробки".Мало того, найти этот драйвер я не смог бы,даже выкачав полный дистрибутив (а это чутьболее 30 CD­дисков). Благо, довольно скоронашлись нужные сырцы, собрать и установитькоторые, а затем включить интерфейс, былоделом трех минут. Делалось это так:Распаковал архив и вошел в свежесозданныйкаталог с сырцами:

# tar xjvf jme-1.0.5.tbz2# cd jme-1.0.5

Установил драйвер (после выполнения этогодействия проверь наличие файла/lib/modules/KERNEL_VERSION/kernel/drivers/net/jme.ko, если он создан, значит, все в порядке):# make# make install

И подключил его:# modprobe jme

После этих действий команда ifconfig показалауспешно установленный и даже настроенныйeth0. Не очень веря, что решение оказалосьнастолько простым, я воткнул сетевой кабель внетбук. Роутер зажег цифру "3" означающая, чтоинтерфейс успешно им обнаружен и запущен вэксплуатацию.Все еще не веря в свое счастье, я открылIceweasel, резво вбив в адресную строкудоменное имя моего блога. И через пару­тройкусекунд лицезрел загруженную страницу.Тут и сказке конецСобственно, на этом все проблемы по установкеLinux на нетбук я посчитал законченными.Прописав адреса сетевых репозиториев, яполучил доступ ко всем доступным пакетамDebian, всем программам, всем обновлениями,вообще ко всему. Остается лишь настроить

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

Page 54: VR-Online (Август-сентябрь 2010)

VKMusicСкачаем все!

54

Программа, о которой я хочу рассказать сегодня,конечно же, не новость, но в тоже время многиелюди о ней даже и не подозревают. О чем я?Бывали в ситуации, когда очень хотелосьсохранить песенку, услышанную в контакте? Авидео с ютьюба? А быть может тебе частоприходится пробиваться сквозь бесконечныекапчи и ожидания на депозите? Для рядовыхбездельников это занятие ежедневное иежечасное, но и даже серьезным и занятымлюдям приходится иногда заниматься этими«мелкими делишками».Красивое решение проблемыЯ слишком ценю свое время и нервы (интернет­соединение у меня не очень надежное ) чтобыпользоваться онлайн­сервисами, да и не оченьони удобны и стабильны. Искав альтернативу ясовершенно случайно наткнулся назамечательную программу VKMusic.

Программа при первом запуске попросилаввести почту и пароль от вконтакта. Я не знаю, вкакой мере она честна насчетконфиденциальности – я не особо дорожу своейучетной записью в знаменитой социалке (занесколько месяцев использования не былозамечено грехов, но на всякий пожарный недолгозарегать и второй аккаунт). Нажав на кнопочкупоиска, я обнаружил неплохой список сервисов(во всяком случае, все, что нужно мнеприсутствует).

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

Очень удобная возможность! Я нашел у своихдрузей немало интересной музыки (надо сказатьраньше я не обращал внимания на ихмузыкальные пристрастия). Но и без этоголюбые исполнители и песни находятся безпроблем:

vr­online | сентябрь 2010

Автор

:Овчи

нников

Михаи

лaka

NightS

torm

WWW:

http://n

storm

.3dn.r

uБез рамки

Page 55: VR-Online (Август-сентябрь 2010)

Без рамки55

vr­online | сентябрь 2010

Это все хорошо и забавно, но в описании былаобещана закачка с deposit files, и rapidshare, носоответствующих пунктов я не наблюдаю.Захожу в настройки. А вот и соответствующиеплагины!

Все оказалось довольно просто: нужноскопировать адрес файла на любом изподдерживаемых файл­хостов в буфер обмена,и программа сама предложит его закачать.Скачка начинается без всяких капч и ожиданий,но если на том, же депозите прервать закачку, тов следующий раз возобновить её можно будеттолько после тайм­аута в 40 минут, но все равноприятно, что хотя бы не нужно смотретьненавистную рекламу.И на закуску я оставил самую интереснуювозможность. Нажимаем на неприметнуюкнопочку с буквой “I”. Перед нами откроется окно,в котором можно ввести исполнителя. Вводим. Инажимаем «Поиск в Яндекс». Вот, что предсталоперед моими глазами:

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

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

Дополнительные ссылки:http://vikim.ru/ ­ официальный сайт программы.

Page 56: VR-Online (Август-сентябрь 2010)

Ноутбук + GPS =картографирование

56

В начале этого лета я купил себе супер девайс,который называется Samsung i900 WiTu. Этоткоммуникатор содержит в себе все, что мненеобходимо. А в частности я говорю про WiFi иGPS модули. Все это в совокупности с ОСWindows Mobile 6.1 и замечательной программойSniffi дает мне возможность заниматьсякартографированием беспроводных сетей,просто гоняя на скутере по улицам города с КПК,который лежит в кармане. Модуль WiFi ловитблизлежащие сети и в месте с данными GPS всеэто заносится в лог файл формата KML.Казалось бы вот оно – счастье вардрайвера. Ноэто не совсем так. В своей апрельской статье«Вардрайвинг по­взрослому» я уже отметил, чтомодули WiFi мобильных девайсов не такиечувствительные и мощные, как те, чтоустановлены в ноутбуках. Да и программы,которые можно установить на ноут, болеефункциональны, чем те, что написаны подWindows Mobile. Вывод из вышесказанного такой– сегодня мы подружим наш ноутбук с GPSприемником, который установлен вкоммуникаторе.Часть 1 – ПодготовкаДля работы нам понадобятся собственноноутбук, КПК, набор кое­каких программ,терпение и молоток с наковальней (ну на самыйкрайний случай). Вероятнее всего твоймобильный девайс, при подключении к ноутбуку,будет определяться как мобильное устройство сосвоим IP адресом, а не как COM порт. Придетсяпомочь ему в этом при помощи программы HWVirtual Serial Port. Она будет устанавливатьвиртуальный последовательный порт. Качаем ееи устанавливаем в режиме «StardartaloneApplication».

Далее переходим к ее настройке (вкладкаSettings), которая сводится к установке галочки«TCP Server Mode» и снятию их с «EVT Enabled»и «Connect to Device even if Virtual COM isclosed».

Теперь возвращаемся на вкладку «Virtual SerialPort» и устанавливаем свободный COM порт,через который другие программы будут получатьданные с GPS приемника. Я выбрал 11­й.Так же меняем порт, на который сервис ждеткоманд, с 23 на 31873. Это вовсе не магическоечисло. Просто программа, которая будетотсылать данные с GPS приемникакоммуникатора, использует именно этот порт.Приготовления готовы, жмем кнопку «CreateCOM» и созерцаем в разделе «LAN» статус«Listen». Не будем огорчать программу ипредоставим ей данные, которые она так ждет.Для этого необходимо подключить свой девайс кноутбуку через USB кабель и настроитьсоединение. Возможно, на разных мобильныхустройствах это делается по­разному, но намоем коммуникаторе под управлением WM 6.1(вероятно и на всех остальных тоже) этоделается через Microsoft Active Sync.Теперь скачиваем программу GPS2Blue иустанавливаем на коммуникатор. Ее можнонайти по ссылкеhttp://users.skynet.be/hofinger/GPS2Blue.html. Тамже можно ознакомиться с большим количествомее возможностей, из которых сегодня нам

vr­online | сентябрь 2010

Автор

:Kast

orEm

ail:Ka

storDr

iver@

gmail.

comБез рамки

Page 57: VR-Online (Август-сентябрь 2010)

Без рамки57

vr­online | сентябрь 2010

понадобится только парочка. Перед тем какбраться за программу поищи в своем КПКнастройки GPS. У меня программным портомGPS является COM3, а скорость стоит 4800бит/сек.Запускаем GPS2Blue и выставляемсоответствующие настройки, плюс ставимгалочку в поле «TCP/IP». Жмем кнопку «On» и накоммуникаторе наблюдаем кучу сообщений оботкрытии GPS порта и передаче данных, а наноуте в HW Virtual Serial Port – статус«Connected».

Поздравляю! Данные с GPS приемника льются кнам на ноутбук и пора бы их использовать внаших коварных целях. В принципе, ты можешьначинать пользоваться различнымипрограммами навигации (или им подобными),указывая в настройках для приема данных портCOM11. Но у нас задача другая, поэтому качаемпоследний Network Stumbler и заходим внастройки, прямо на вкладку «GPS».

Протокол оставляем NMEA 0183 как и скорость в4800 бит/сек. А порт выбираем такой, какой мысоздавали в HW VSP, то есть 11­й. Минут черезпять GPS приемник КПК найдет необходимоеколичество спутников и в статусной строкеNetStumblera появятся твои координаты.Врубай на ноуте WiFi модуль и газуй по улицамгорода в поисках беспроводных сетей. Вместе скучей полезной информации, которую можетопределить NetStumbler, так же будут записаныкоординаты, где была найдена очередная WLAN,а еще вероятное расстояние до нее. Хоть этот

параметр и относительный, но согласись,достаточно интересный.Наш враг – проводЧто ты говоришь? Мешает провод идущий отКПК к ноутбуку? Сейчас мы избавимся от него.IT­шники мы или нет? Используя Bluetooth этосделать проще простого.Необходимо создать соединение между КПК иноутбуком. На ноуте я использовал внешнийUSB­шный Bluetooth донгл и программуBlueSoleil. На коммуникаторе я добавил свойкомпьютер в список устройств. Выбрал длясоединения последовательный порт и создалисходящий порт COM2 (выбрал из спискадоступных).

Теперь запускаем на КПК GPS2Blue и убираемгалочку с «TCP/IP». Ставим ее в «BT» ивыбираем порт COM2 для передачи данныхчерез Bluetooth. Жмем «On» и наблюдаемрадостные сообщения об открытии GPS и

Bluetooth портов, а так же о передаче данных.BlueSoleil выдал сообщение о подключениимоего КПК к COM6 компьютера. Значит теперьименно его надо указывать в настройкахNetStumbler’a. Тут уже обошлось без всяких

виртуальных портов, об этом позаботилсяBlueSoleil.Часть 2 – КартографированиеКоординаты определяются, сети ловятся на ура,

Page 58: VR-Online (Август-сентябрь 2010)

Без рамки58

vr­online | сентябрь 2010

данные фонтаном льются в наши лог файлыNetwork Stumbler’a. Теперь возникает вполнелогичный вопрос: что делать с этими *.ns1файлами? Не просматривать же их каждый раз всамом Стамблере? Нет, конечно! Сейчас мынанесем найденные сети на карту. Здесь я могупосоветовать тебе два способа. Первыйзаключается в программе KNSGEM.Устанавливаем ее в корень диска «С:». Вобразовавшуюся папку «Knsgem» кидаем нашифайлы с расширением *.ns1 и запускаемпрограмму.Если у тебя все прошло нормально, топоздравляю. У меня же, на данном этапе,постоянно вылетала непонятная ошибка.Приходилось жать «Ignore», но ожидаемые *.kmlфайлы все же создавались. После конвертацииони помещаются в папку «KML». Теперь можнооткрывать полученные файлы в Google Earch инаблюдать найденные сети и различнуюинформацию о них. А информация достойнаявнимания, ведь помимо данных о самой сетиесть возможность просмотра вероятного радиусадействия сети и покрытия ею пространства.Узнать более детальную информацию опрограмме и скачать ее можно по следующейссылке http://www.rjpi.com/knsgem.htm.Способ номер два заключается в использованиисервиса «gpsvisualizer» по ссылкеhttp://www.gpsvisualizer.com/map_input?form=wifi.Он так же конвертирует лог файлы NetStumbler’aв выбираемый нами формат, среди которых есть

KML.Сперва выбираем наши лог файлы, далееуказываем желаемый формат (KML, думаю,самое оно) и жмем кнопку «Draw the map». Вновом окне нам будет предоставлена ссылка дляскачивания нашего KML файла. Вот приведупример своей карты, которая получилась в

результате обхода парочки своих кварталов.При конвертации во втором выпадающем спискебыл выбран режим «Display as tracks ANDwaypoints», в результате чего на карту попали нетолько точки, где была найдена сеть, но и ещекакие­то треки. Вероятно это те места, гделовилась сеть или… блин! Я пока еще самтолком не разобрался, но смотрится красиво =)Search completeНа этом хочу откланяться и пожелать тебе удачив дальнейших экспериментах. Помни, что ничегоне возможного не существует. Главноеприложить немного усилий и поверить вуспешный исход дела. Удачи!

Page 59: VR-Online (Август-сентябрь 2010)

Глобальнаясинхронизация

59

Забыл флешку на работе? Или закрутился и нескинул на нее важный документ? А можетфлешка с важными данными и вовсе умерла? Совсеми перечисленными вопросами я столкнулсяна своей шкуре и к счастью нашел элегантныеварианты их решения. Возможно, онипонравятся и тебе. В этой небольшой статьеповедаю тебе о том, как я синхронизируюважные файлы между своими тремякомпьютерами.ПредысторияЯ был чертовски счастлив до того момента какустроился на работу. Под счастьемподразумевается отсутствие необходимостисинхронизировать файлы между разнымикомпьютерами. У меня был один ноутбук,который я мог таскать за собой и флешка. Нужночто­то показать на своем ПК — не проблема!Взял ноут с собой и устроил презентацию.Любимый софт, файлы — все под рукой. Спереносом документов аналогичная ситуация —сделал копию на флешку и порядок. Самоеглавное не забыть обновить файл с документомна буке после того как поработал с ним сфлешке. К счастью это проблема решаласьтакже быстро и не принужденно. Требовалосьтолько заюзать соответствующую софтину. Таксобственно я и поступал.В 2006 году я устроился на первую работу сполным рабочем днем. Одновременно сосчастьем (тогда мне очень нужна была работа) ялицом к лицу встретился с проблемойсинхронизации файлов. В моем владениипоявился еще один компьютер (рабочий) накотором я выполнял (помимо рабочих задач)свои личные дела (в перерывах писал статьи дляVR­Online и Хакера). Сначала, все подобныевещи я тупо создавал на флешке, но послевнезапной гибели одной из них я завязал с этойзатеей. Как сейчас помню, что на той несчастнойфлешке были исходники и текст статьи в журналХакер.Еще спустя полгода я приобрел себе домой ещеодин компьютер. Тогда я только начал жить

вместе со своей будущей женой и одного компанам стало категорически не хватать. Мнепостоянно требовался ПК для работы, а ей дляучебы. Увеличение числа компьютеров такжесказалось на проблеме синхронизации.Периодически возникала ситуация, когда мнеприходилось работать за разнымикомпьютерами дома, т. е. количество ПК междукоторыми требуется синхронизировать файлы,возросло до 3 (два домашних и один рабочий).Вот тут я понял, что без нормальной системысинхронизации мне не прожить.Выход есть: Флешка + Десктопнаятулза

Первое решение,которое пришломне в головузаключалось впоиске мощнойпрограммки,которую я мог быустановить навсе своихкомпьютерах,указать ейдиректорию иисточниксинхронизации, аона уже следилабы заизменяемымифайлами.Подобного родапрограммдостаточно много, но одним из главных условийдля меня было поддержка работы с флешками.Софтина должна сама определятьподсоединение флешки и если флешкаявлялась синхронизируемой (список флешек,содержимое которых, должносинхронизироваться — второе важное условие),то выполнялась бы синхронизация. Несмотря намои поиски, найти такую программу мне так и неудалось. Везде попадались тулзы длясинхронизации по инету (а с инетом у меня тогдаvr­online | сентябрь 2010

Автор

:Анто

новИго

рьaka

Spide

r_NET

Email:

antono

v.igor.k

hv@gm

ail.com

Без рамки

Page 60: VR-Online (Август-сентябрь 2010)

Без рамки60

vr­online | сентябрь 2010

были проблемы). Для моих условий программунайти так и не удалось.Такое печальное положение дел не оставляломне выбора как взять и написать простенькоеприложение для синхронизации. Благо, сделатьэто было не сложно. По сути, требовалосьтолько научиться работать с флешками(определение момента подключения, проверкафлешки на синхронизируемость и т. д.). Вся этаинформация имеется в MSDN, поэтомупоколдовав несколько вечеров я смог сварганитьвполне рабочую тулзу. В ней была реализованаподдержка списка синхронизируемых флешек(сравнение происходило по серийному номеруфлешки), а также небольшая системаприоритетов и правил (какие файлы заменяем, адля каких создаем копию с номером версии).Потратив некоторое количество времени наразработку, я полностью решил на какое­товремя свои проблемы. Жаль, что мои трудностис синхронизацией были лишь вершинойайсберга. Внезапно передо мной всплылапроблема с именем «забывчивость».Периодически я забывал флешку дома, а значит,вся стратегия синхронизации проваливалась втартарары.Gmail + Google Docs + GoogleReaderВ 2007 году я решил окончательно распрощатьсяс почтой от mail.ru. Объем спама, попадающего вмой ящик, просто достал. Его было на порядокбольше, чем полезных писем, а постояннотратить время на удалении лишнейкорреспонденции мне изрядно надоело. Смиграцией на новую почту проблем не возникло.Альтернативу я нашел практически сразу ипользуюсь ей до сих пор. Если кто не догадался,то я говорю о Gmail (mail.google.com). На товремя (да и сейчас тоже) почтовик Googleвыгодно отличался от всех остальных: Куча места Функциональный web­интерфейс Мощный спам­фильтр Отсутствие рекламных баннеровС первых дней я влюбился в Gmail (а после и вдругие сервисы WEB­гиганта) и юзаю его по сейдень. Кстати именно после миграции на gmail яотказался от своего любимого десктопногопочтовика — «The bat!». Когда­то это былазамечательная программа, но сегодня я не вижув ней смысла, да и каких­либо нужныхпреимуществ перед gmail тоже.К чему это я все рассказываю? Большоеколичество выделяемого под почту места, атакже удобный RSS Reader не могли остатьсямной не замеченными. Посмотрев на все эти

бенифиты, я решил, а почему бы не заюзатьсервисы гугл для выполнения синхронизации?Тем более на то время у меня уже дома имелсясносный доступ к сети интернет, а на работе увсех была корпоративная почта (на нее трафикбыл не лимитированный). Мне ничего немешало слать письма с важной информациейпрямо себе на почту.Чтобы как­то разделить список всех писем яюзал систему меток. Вся корреспонденция,которая была из моей рабочей почты,группировалось по определенным меткам. К нимвсегда можно было получить доступ, а самоеглавное среди писем было легко найти нужное.Все­таки система поиска в почте у Googleдействительно мощная и качественная. Вот так янашел для себя еще один способсинхронизации. Конечно, он был немногонеудобен, но на, то время меня устраивал.Немного позже я открыл для себя google docs ивсе документы, (статьи, тексты) я стал сразуписать в них (пишу до сих пор).Ну и как ты, наверное, уже понял, проблемасинхронизации RSS фидов решилась путемиспользования Google Reader. Собственно тутдаже ничего не приходилось синхронизировать.Перетащил все фиды из старой программы вReader и забыл. Захотел почитать — открылбраузер и почитал. Записи доступны в любоевремя и в любом месте. Лучше не придумаешь.DropBox — всему головаШли дни, летелимесяцы. Возможностеймоей схемысинхронизации сталокатастрофически не хватать. А как же их хватит,если у меня появился дома безлимитныйинтернет, а вместе с ним возросли аппетиты?Мне хотелось обмениваться с домашним компомцелыми файлами (метров эдак так по 50­100).Само собой возможности web­почты стало нехватать. Если еще файл размеров 15­20мегабайт можно было позволить себе закачатьна почту, то о более серьезных размерах можнобыло и не мечтать. Да и к тому же меня сталонапрягать, что по приходу домой нужно сначалавыкачать файлы из почты, а потом уже их юзать.Никакого удобства!Делать нечего — запряг гугл и начал активныепоиски. Долго ли коротко ли, но результаты незаставили себя ждать. Одна из ссылок привеламеня на сайт проекта dropbox (dropbox.com).Почитав about, и посмотрев demo ролики я понял— это то, что я искал! Уж эта тулза решит всемои проблемы!Как работает DropBoxПринцип функционирования DropBox крайнепрост. Для начала тебе требуется

Page 61: VR-Online (Август-сентябрь 2010)

Без рамки61

vr­online | сентябрь 2010

зарегистрироваться на официальном сайтепроекта (http://dropbox.com) и слить клиентскуючасть программы. Программа­клиент позволиттебе определить папку, содержимое которойбудет участвовать в синхронизации, а такженачнет вести наблюдение за изменениемнаходящихся в ней файлов и папок. Стоит тебетолько поместить в папку, определеннуюdropbox’ом, файл или директорию, какпрограмма клиент сразу же начнет загрузкуфайлов на сервер. По окончанию загрузки (твоихфайлов на сервер), все переданные файлыначнут расходиться по остальным твоимкомпьютерам (определенные, как участникисинхронизации).

Возможности DropBoxЧтобы влюбиться в DropBox много времени непотребуется. Достаточно ознакомиться сосписком функциональных возможностей, какстрелы амура вонзятся в твое сердце. Пронаиболее важные из них я поведаю ниже:1. Тарифные планы на любой вкус. Оченьприятно, что создатели DropBox постаралисьудовлетворить интересы всех категорийпользователей. Тем, кому не требуетсясинхронизировать очень большие файлы (впределах 2­х гигабайт) незачем платить.Достаточно воспользоваться бесплатнойподпиской. Она ничем не отличается от платныхза исключением объема синхронизируемыхфайлов. Как я уже сказал, на бесплатном тарифеон составляет 2 гигабайта. А если быть точнее,то эти два гигабайта можно запросто превратитьв 8. Само собой, не платя ни копейки. «Как?» ­спросишь ты? Достаточно отправитьприглашения своим друзьям (через сайт dropbox)и если кто­то из них согласится на установкуDropBox, ты получишь дополнительное халявноеместо. Если быть точным, то за каждогоприведенного человека ты будешь получать 250мегабайт места. Неплохо? Я, например,прокачал свой аккаунт до 3­х гигабайт. Знаю, чтодо предельной планки мне еще далеко, но есличестно, места и так хватает. Во всяком случае,пока.Кстати, тем, кому 8­гигов мало — нерасстраивайтесь. Ценник у тарифных планов

весьма дружелюбный и в принципе многие могутпозволить себе перейти на платный тариф.Например, тариф с 50­ю гигабайтами обойдетсявсего лишь в 9, 99$/месяц. Для такого объемавесьма не дорого. Существует также тариф соста гигабайтами на борту. За него просят 19,99$.Я пользуюсь сервисов чуть меньше двух лет ипока еще не успел израсходовать и половиныместа (у меня, правда, доступно 3­гигабайта).Так, что я уверен, что для большинства за глазахватит и бесплатной подписки.2. Доступ к файлам через web. Ко всемфайлам, участвующим в синхронизации естьвозможность получить доступ через web. Этоочень удобно, когда файлы нужны на чужомкомпьютере. Открыл браузер, зашел на нужныйресурс и качнул/закачал необходимое файлов. Яэту фичу использую довольно­таки часто.Особенно когда нахожусь вкомандировке/отпуске.3. Умная система синхронизации. DropBoxдостаточно умен и проворен. Если тыиспользуешь его в домашней сети (например, надвух домашних ПК, объединенных в сеть), тоDropBox будет делать синхронизацию междуними не по инету, а по локальной сети. Вродемелочь, но на самом деле фича очень полезная.Расскажу на примере случая, который однаждыслучился со мной. Мне потребовалосьперенести с работы один весомыйдистрибутивчик (где­то 600 метров). Как на злофлешки под рукой не было, и решил простокинуть iso'шник в DropBox. Пока закончитсярабочий день, и я доберусь до дома, файлыбудут на месте. Закинул файло и забыл.Приехав домой, я сразу же проверил DropBox надомашнем компе.Решил заинсталить дистрибутив, как вдруг мойстационарный комп подрезала любимая. Ейнужно было срочно что­то сделать по учебе. Нучто ж, думаю, сейчас заведу нетбук и все сделаюна нем, жаль только, что придется расходоватьтрафик (дело даже не в трафике, а во времени)на синхронизацию такого большего файла.Удалять из синхронизируемой папки его нехотелось, т. к. он мог пригодиться.Включил бук и сразу обратил внимание наповедение DropBox. Он моментально началсинхронизироваться, и скорость закачкибольшего файла была просто офигенной! «Либоу моего прова слетели ограничения, либо файлысинхронизируются по локальной сети» ­ подумаля. Ответом оказался второй вариант.4. Восстановление удаленных файловВсе файлы, которые были когда­тосинхронизированы, а потом удалены, подлежатвосстановлению в течение определенноговремени. Точный временной промежуток сказать

Page 62: VR-Online (Август-сентябрь 2010)

Без рамки62

vr­online | сентябрь 2010

не могу, но однажды мне пришлосьвосстанавливать файл, который я случайноудалил час назад. Сказать по правде в тотмомент я даже не знал об этой возможности.Наткнулся случайно на нее в админке (web­кабинете). Теперь я спокоен за своинеосторожные действия.5. Поддержка различных платформ.Разработчики dropbox понимают, что Windows —не единственная ОС, поэтому они не стремаютсяделать клиентов DB и для других платформ.Будь ты гламурный маковод или суровыйлинуксойд — не беда. Клиент Dropbox доступендля Windows, Linux, Mac, а также некоторыхмобильных ОС: iOS, BlackBerry (на моментнаписания статьи клиент находился в стадииразработки), Android, Windows Mobile (пока неофициальная версия). Только представь, что всетвои фотки или заметки, сделанные накоммуникаторе, будут сразу же передаваться набольшой комп. Ну, разве не здорово?6. Свобода для творчества. API DropBoxофициально открыт, а это значит, что твояфантазия практически ничем не ограничена.Используй возможности DropBox для интеграциисо своими проектами, не изобретай очереднойвелосипед (ссылки на sdk для различных языковнаходятся в конце статьи).На что еще сгодиться DropBoxНе забывай, что применив капельку фантазии,ты сможешь использовать DropBox не только длясинхронизации своих документов, но и дляподдержания актуальных версий баз данныхкаких­либо приложений. Например, есть у меняодна программка, которая позволяет хранитьзаметки в удобном виде. Все хорошо, но впрограмме не реализована синхронизация. Неможешь — научим! Это досадное ограничение яобошел путем помещения БД программы в папкудля синхронизации. В программе для хранениязаметок, я прописал путь к новомуместоположению БД (как на домашнем компе,так и на рабочем) и со спокойной душой началюзать ее как в старые добрые времена. Толькотеперь при изменении или добавлении новойзаписи в программку хранения заметок Dropboxсразу начинает выполнять синхронизацию, азначит на всех моих компьютерах будет свежаябаза заметок.Помимо вышеперечисленного нестандартногоприменения DropBox его запросто можноиспользовать для создания бэкапов. Пропиши всвоих скриптах (в которых выполняетсярезервное копирование) в качестве пути папку,определенную dropbox для синхронизации. Врезультате каждый созданный бэкап будетзаливаться на сервера dropbox, чтоположительно скажется на надежности хранениятвоих резервных копий. Понятное дело, что дляпостоянных бэкапов тебе потребуется солидное

количество места, но подумай, не обязательно,же заливать все версии бэкапов в DropBox?Идея примерно такая:1. Прокачиваем свой аккаунт по максимуму(т. е. достигаем планки в 8 гигабайт).2. Определяем правила хранениярезервных копий, которые будут загружаться насервера DropBox. Тут все зависит от конкретнойситуации, но в большинстве случаев достаточнозаливать на сервера две­три копии в неделю(созданные в начале, середине и конце недели).По достижению срока хранения копии в месяц —удаляем самую первую копию и т. д. Само собой,помимо DropBox все копии должны хранитьсягде­нибудь еще. Как говориться: «Резервныхкопий много не бывает!».3. Наслаждаемся халявным сервисом!DropBox — хорош, но не всесилен

Казалось бы, что еще нужно?DropBox вроде и так все делаетотлично! Да, свою работу онвыполняет хорошо, но иногданужна несколько другаясинхронизация. Например, мнеочень часто хочется сохранитькакую­нибудь web­страницу к себе на комп дляпоследующего чтения. Чаще всего такаяпотребность у меня возникает на работе. Увиделинтересную ссылочку, а для чтения нет времени.Вот если бы имелось средство, позволяющееделать текстовые заметки, которые могли бысинхронизироваться со всеми имеющимися уменя компьютерами. Не вопрос, можно забитьна опрятность и те же web­страницы кидать вотдельную папку DropBox. Все будетзамечательно пока не потребуется скажем поиск.Не думаю, что у тебя когда­нибудь возникнетжелание перебрать пару десятков web­страниц,чтобы найти что­то нужное.Решений как всегда несколькоСитуация аналогична с файлами. Проще всегоиспользовать для хранения всевозможныхзаметок Google Docs. Места там более, чемдостаточно; они доступны в любой точке мира; споиском так вообще проблем нет. Красота! Жальтолько, что копировать именно web­страницы вних несколько неудобно. Я не раз сталкивался сситуацией, когда вместе с копируемым текстом яполучал кучу какой­то срани.Благо Google Docs — не единственный выход.Уже достаточно давно развивается программаEvernote (http://www.evernote.com). Я им началпользоваться не так давно, но чувствую, чтонаша дружба затянется надолго.Что такое Evernote?Evernote — сервис для синхронизации текстовыхзаметок, изображений, аудио­файлов и видео­

Page 63: VR-Online (Август-сентябрь 2010)

Без рамки63

vr­online | сентябрь 2010

роликов. В отличие отуниверсального DropBox, Evernoteзаточен для работы с текстом иизображениями, а значит тут естьвсе необходимые фишки длякомфортной работы с этимитипами данных: поиск, система тегов,группировка информации и т. д.Как и в случае с DropBox, для того чтобы начатьпользоваться Evernote тебе необходимозагрузить клиентское приложение и создатьаккаунт. Собственно говоря, в нем ты будешьработать со всеми своими заметками.Клиентское приложение доступно длянескольких платформ (Windows, Mac, iPhone,iPod, iPad, Android, BlackBerry, Palm Pre, WindowsMobile). К сожалению, версии для Symbian иLinux (для linux есть неофициальный клиент,ссылку на него ищи в конце статьи) пока нет. Враспоряжении этих пользователей пока имеетсялишь WEB­интерфейс, который, надо отдатьдолжное, сделан качественно.По внешнему виду, клиент Evernote чем­тонапоминает интерфейс MS Outlook (см.соответствующий рисунок): слева расположеныгруппы заметок, а остальную часть занимаетсписок заметок и область для их чтения.

Все создаваемые заметки можно группироватьпо дневникам (дневник = группа). Я лично сразупотратил несколько минут времени и создалнеобходимые группы. Чего советую сделать итебе, иначе ты рискуешь быстро сотворитьинформационный бардак.Досадные ограниченияEvernote — хороший и полезный сервис,предоставляющий кучу ресурсов, но всехорошее нужно платить. Сразу послерегистрации ты автоматически подписываешьсяна бесплатный тарифный план. От платного онотличается:1. Невозможность убрать рекламный баннерв интерфейсе программы,2. Ограничения на количество создаваемыхзаметок в месяц. На платном тебе

предоставляют дисковую квоту в размере 500Мб/мес, т. е. каждый месяц твое хранилищеможет разрастаться на 500 мб. Прииспользования бесплатного тарифа тебепридется довольствоваться лишь 40 мб/мес. Посвоему опыту могу сказать, что эти сорокмегабайт более, чем достаточно. Во всякомслучае, мне хватает.3. Типы файлов. На платной подписке нетограничений на тип загружаемых файлов.Бесплатный тариф подразумевает хранениелишь изображений, рукописных заметок,документов в формате pdf, а также аудио­файлы.4. Доступ к предыдущим версиям заметок.Пока я не пользуюсь платной подпиской и немогу высказать свое личное мнение касательноэтой фичи, но уверен она понравится тем, ктолюбит набивать и постоянно редактировать своизаметки (создаваемые в evernote). Поправилтекст, а через недельку вспомнил, что все­такипервая версия была не такой уж и плохой. Невопрос — пару щелчков мыши и первый вариантпредстанет перед тобой во всей красе.5. Максимальный размер одной заметки.Для бесплатных тарифов это 25 мегабайт, а дляплатных в два раза больше.6. Повышенная безопасность. Для платныхтарифов реализована поддержка SSLшифрования.Сколько стоит расширенная версияEvernoteНесмотря на большие отличия от бесплатноготарифного (взять хотя бы объем места) платнаяподписка на Evernote стоит всего лишь 5$ вмесяц. Дорого это или нет — решать тебе. Просебя скажу, что пока я не решился на покупку, т.к. мне за глаза хватает и бесплатной. Если начнуиспытывать нехватку, то скорей всего разорюсьна платный тариф.Особые синхронизацииПро софт для синхронизации файлов ярассказал более, чем подробно, но помимопростых файлов иногда требуетсясинхронизировать настройки каких­либоприложений. Да, в самых простых случаях мыможем использовать для этого DropBox идрайвер prymie_ruki.sys — настраиваем вприложении, параметры которого хотимсинхронизировать новые пути кконфигурационным файлам (если программаподдерживает такую функцию). Под новымпутем подразумевается папка DropBox черезкоторую и будет выполняться синхронизация.Все просто и красиво.Увы, такой трюк не удастся провернуть длябольшинства программ. Мне в принципе это и не

Page 64: VR-Online (Август-сентябрь 2010)

Без рамки64

vr­online | сентябрь 2010

нужно. Я юзаю не так много программ, которыетребуется как­то по особенному твикать.Единственное, что мне хотелось бы, чтобыдомашний браузер синхронизировалустановленные плагины со своим коллегой,которым я пользуюсь на работе. Ведь как онобывает, сидишь на работе читаешь чью­нибудьзаметку про интересный плагин, затем ставишьего и радуешься расширенным возможностям.Возвращаешься домой, открываешь привычноеокно бродилки, а в нем чего­то не хватает —свежеустановленного плагина. Знакомаяситуация?В этом вопросе очень сильно повезлопользователям Google Chrome. Начиная с 6­йверсии (если не ошибаюсь) возможностьсинхронизации плагинов (а также другихпараметров браузера) появилась как встроеннаяфича. Честь и хвала тому, кто придумал иреализовал эту опцию!К сожалению, полностью перейти на Chrome япока не могу. Глюки браузера убиты еще не доконца, а закрыть на них глаза я не могу. Вот иприходится ездить на лисе и ломать голову надрешением выше озвученной задачи.Как обычно борются с отсутствием определеннойфункции в FF? Правильно, путем поискасоответствующего плагина. Данная ситуация неисключение, поэтому я сразу отправился наhttps://addons.mozilla.org и принялся за поискиподходящего плагина. К моему удивлению, долгоискать не пришлось. Мне на глаза попалсяплагин с именем FEBE. Он позволяет создаватьрезервную копию плагинов, установленных вбраузере. Кроме того он может включать врезервную копию: истории, закладок и т. д. Всесозданные бэкапы он помещает в выбраннуютобой директорию.Сам по себе плагин не умеет передавать файлыс созданными резервными копиями. Об этомпридется позаботиться самому. Если ты ужеустановил себе DropBox, то много думать непридется. Просто указываешь в качестве папкивыгрузки плагинов отдельную, участвующую всинхронизации, директорию в DropBox и все.Применять данный плагин я начал совсемнедавно, но пока его функциональностью более,чем доволен. Попробуй его в действии и ты. Уменя сразу будет к тебя одна просьба, если тынайдешь более функциональный плагин длярешения вопроса с синхронизацией плагинов, тоpls сообщи и мне ;­)Синхронизация успешно завершенаОрганизовать синхронизацию данных междуразными компьютерами не так уж и сложно.Достаточно выбрать соответствующийинструмент, потратить немного времени на егонастройку и наслаждаться результатами. Сейчас

я уже не могу представить свой комп безDropBox и Evernote. Все необходимые файлынаходятся в них, и я чертовски рад, что фраза«ой я зыбыл флешку с важными данными наработе/дома» больше ко мне не относится. Наэтом все, удачной синхронизации, дружище!

Забыл флешку на работе? Или закрутился и нескинул на нее важный документ? А можетфлешка с важными данными и вовсе умерла? Совсеми перечисленными вопросами я столкнулсяна своей шкуре и к счастью нашел элегантныеварианты их решения. Возможно, онипонравятся и тебе. В этой небольшой статьеповедаю тебе о том, как я синхронизируюважные файлы между своими тремякомпьютерами.ПредысторияЯ был чертовски счастлив до того момента какустроился на работу. Под счастьемподразумевается отсутствие необходимостисинхронизировать файлы между разнымикомпьютерами. У меня был один ноутбук,который я мог таскать за собой и флешка. Нужночто­то показать на своем ПК — не проблема!Взял ноут с собой и устроил презентацию.Любимый софт, файлы — все под рукой. Спереносом документов аналогичная ситуация —сделал копию на флешку и порядок. Самоеглавное не забыть обновить файл с документомна буке после того как поработал с ним сфлешке. К счастью это проблема решаласьтакже быстро и не принужденно. Требовалосьтолько заюзать соответствующую софтину. Таксобственно я и поступал.В 2006 году я устроился на первую работу сполным рабочем днем. Одновременно сосчастьем (тогда мне очень нужна была работа) ялицом к лицу встретился с проблемойсинхронизации файлов. В моем владениипоявился еще один компьютер (рабочий) накотором я выполнял (помимо рабочих задач)свои личные дела (в перерывах писал статьидля VR­Online и Хакера). Сначала, все подобныевещи я тупо создавал на флешке, но послевнезапной гибели одной из них я завязал с этойзатеей. Как сейчас помню, что на той несчастнойфлешке были исходники и текст статьи в журналХакер.Еще спустя полгода я приобрел себе домой ещеодин компьютер. Тогда я только начал житьвместе со своей будущей женой и одного компанам стало категорически не хватать. Мнепостоянно требовался ПК для работы, а ей дляучебы. Увеличение числа компьютеров такжесказалось на проблеме синхронизации.Периодически возникала ситуация, когда мнеприходилось работать за разнымикомпьютерами дома, т. е. количество ПК между

Дополнительные ссылки:

http://dropbox.com – официальный сайт DropBox.http://nevernote.sourceforge.net/ ­ здесь можнозагрузить неофициальный клиент EverNote(NeverNote) для использования в операционнойсистеме Linux.https://addons.mozilla.org/ru/firefox/addon/2109/ ­ плагинFEBE для FireFox, позволяющий выполнятьсинхронизацию плагинов.http://www.evernote.com/ ­ официальный сайтEverNote.

Page 65: VR-Online (Август-сентябрь 2010)

Меня тошнит!65

JimmyJonezz: Женщина зарулем ­ это мартышка сгранатой, за этот месяц я такоевидывал, что не каждыйюморист опишет эти забавные исмешные ситуации. Меняудивляет, и я постояннозадаюсь вопросом: ­ чеминтересно руководствуетсяженская логика, привыполнении того или иногодействия, будь то разворотмашины на перекрестке, ездазадним ходом и т.д. Как онивообще ездят!? Кто позволилим взять в свои руки, рульавтомобиля!? Они какинопланетяне с другой планеты­ вышли из космическогокорабля и сели за транспорт, дане просто сели, а принялисьуправлять им. "Долой женщин савтомобилей, даешь женщинуна кухню".ZeroXor: Наверное, не меняодного просто наизнанкувыворачивает от наглостинекоторых старушек,называемых на луркеметробабками. В метро я неезжу, но вот маршрутками ииногда автобусами –приходится. Такие зачастуювстречаются персонажи,уверенные, что все и каждыйим что­то должен. Особеннонеприятно было выслушиватьвсякие гадости, сидя с почти 39­градусной температурой.Kastor: Уже минут 15 стараюсьвспомнить, что ни будьнеприятное, что случилось сомной за этот месяц. Но в головуприходит только одно событие,связанное с моим

университетом. Вернее, даже смоим факультетом. Но я обэтом даже рассказывать нехочу, на столько все тупо исмешно. Скажу только, чтостремление продолжатьучиться в нем падает все ниже.zahod5277: Все. Сил моихбольше нет. У кого еще зуб накомпанию "Миелофон"? Едем вМоскву и сожгем их главныйофис нахрен!!! Рассказываю вчем дело. Значится. Так как вгороде, в который я недавнопереехал, уже присутствует 3Gпокрытие, решил первое времяобойтись своим 3G­момедом.Первые две недели прошлиочень замечательно ­ скоростьзагрузки 100­170 кб/с (это,поверьте, для меня ОЧЕНЬмного), странички открываютсямахом, счастье! Вдруг приходитмесседж "Через 50 мб вводитсяограничение на скорость". Неуспел я дочитать СМС какскорость потухла. Оставшиесядве недели сидел смаксимальными 8­12 кб/с!!! Натакие извращения даже dial­upне способен. Решилпожаловатся в компанию ­пришел туда, обьяснилситуацию. Девушка, похлопавглазками и посмотрев вмонитор, заявила, что, мол, уменя тариф дурацкий, еслиподключу другой все будет тип­топ. Толи сыгралаобаятельность девушки, толи ятакой доверчивый, поверил вобщем. Дождался концамесяца, заправил снова одиндеревянный килорубль и опятьначал радоватся счастью (100­170 кб/с все таки!) Что вы

думаете? Прошло опять так­ровно две недели. Хлоп! Все.Хеллоу 8 кб/с! Как я по вамскучал. В конце месяца(сентября) скорость вообщебьет все возможные рекорды. Ягугл открываю только с пятойпопытки! Вот думаю ­ можно лиих засудить или нет?Отмажутся же по­любому.Zanuda25: Меня уже тошнит отвсех реформ правительстваГрузии, особенно в сфереобразования и науки. Вот дочего мы все докатились.Проводят эксперимент повнедрению системы обученияанглийкому языка с первогокласса. Последствия они себене представляют. Или еще одноновшество в сфереобразования, которое больноударило по психике пожилыхпедагогов. Представьте себе,старше 60 лет педагоги будутпроходить курсы обученияработе с компьютером, иначеони будут считаться вродеретроградами или, хуже того,второсортными людьми. Вотменя уже как 2 недели мутит отэтих новшеств...Spider_NET: Обычно в этойрубрике я выражаюнедовольство к нашимчиновникам, но в этот раз ярешил изменить традициям. Неповеришь, но в сентябре менязатошнило от того, что моихвозможностей не хватает нареализацию всех задуманныхидей. Вот реально, планы есть,новых идей предостаточно, авоплотить все это в жизнь неполучается. Банально не

vr­online | сентябрь 2010

VR­Cr

ewМеня тошнит!

Page 66: VR-Online (Август-сентябрь 2010)

Меня тошнит!66

vr­online | сентябрь 2010

хватает времени. Вродепытаешься все спланировать ирассчитать, но на 100% всепродумать не выходит.Обязательно случитьсянепредвиденная ситуация,которая спустит весь план вунитаз.Надоееееееееелллллло!Бесссссссситтт! Как же хочетсянемного стабильности и чуточкусвободного времени. Ну почемув сутках всего лишь 24 часа?!lord_of_fear: Поднакопилось уменя за этот месяц... Тошнилоиногда по несколько раз занеделю. :) Взять хотя быпроцесс сборки новогокухонного гарнитура. Ох, уж янамучился. Непрерывнаятошнота длинной в 3 дня :) Походу сборки оказалось, чтопроизводители ­ ламеры.Посему пришлось вносить своиизменения в конструкциюизделия. :) Но в результате всёвышло отлично. Решил ещёсебе шкаф­купе установить.Узнал сколько стоит и первойфразой, которая у меня у менявырвалась, стала "Охренеличтоли? Он из золота что ли?".55000 за какой­то шкаф!Совсем ошалели. В результате,как оно обычно бывает у нас встране, знакомства сделалисвоё дело. Я поставил себешкаф за 20000. Существеннаяразница, да? И то, 20k ­ егомаксимальная цена! :)

Page 67: VR-Online (Август-сентябрь 2010)

Векторная графикаInkscape:Создаем постер

67

Очередной серфинг по сети, в поисках«вкусностей», привел меня на сайтdeviantart.com, на котором я тут же началобживаться. Создал аккаунт, получиввозможность просматривать закрытые работыхудожников, а также загружать свои. Посленекоторого ознакомления с персональнымкабинетом, я, наконец, принялся просматриватьальбомы, по интересующим меня тематикам. Впроцессе беглого осмотра, я наткнулся наальбом с коллекцией постеров, от разныххудожников. Понравившиеся мне, тут же пошли впапку «Избранное», и вдохновленный работами,я принялся создавать свой постер, но для началарешил глянуть урок от Simona Pfreundner,который мы и рассмотрим ниже.Как и в предыдущих уроках, инструмент, которыммы будем пользоваться остается неизменным –векторный редактор Inkscape. Если кто еще незнает, что это за редактор, то советую неполениться и полистать предыдущие журналы«vr­online» за 2010 год, или обратиться кпоисковику. Надеюсь, вы также как и я, полюбитеэтот инструмент.Хочу сделать, некоторое отступление по поводутого, что мое описание всех производимыхдействий будет несколько сжато, т.к. опять жеповторюсь, в предыдущих уроках мызатрагивали основные «моменты» редактора,поэтому чтобы не зацикливаться на одном, я небуду особо расписывать свои действия.Новичкам, советую читать подборку журналов,вышедших ранее августа 2010 года.

Чуть выше, я привел часть образца (для того,чтобы заинтриговать читателя – прим. автора),нашего будущего постера, который ещепредстоит создать.Начнем с дерева. Инструмент ­ «перо»используем для обрисовки дерева. Конечно,сложно сразу, да и при помощи мышкинарисовать красивое дерево, поэтому я быпосоветовал сначала нарисовать образец налисте бумаги, и уже потом использоватьотсканирование изображение или найти примердерева в Интернете. Мой пример дерева, ниже.Я уже сделал несколько, копий и расставил так,как мне нужно.

Окраску дерева и его обводку, оставляю на вашеусмотрение. Это, думаю не должно вызватькакие­либо затруднения. Теперь, нужнонарисовать несколько листьев, желательноразных размеров. Используем все тоже «перо».Хочу отметить, что контур, который будетерисовать должен быть замкнутым, иначе вы несможете произвести заливку. Ниже, пример того,как это сделал я. Цвет листьев ­ badc2fff, аобводка ­ 789314ff. После создания пятилистьев, располагаем их вместе и объединяем вединый объект.

Совсем забыл напомнить, что для дальнейшихvr­online | сентябрь 2010

Автор

:Jimm

yJone

zzEm

ail:jim

myjon

ezz@b

k.ruКреатиff

Page 68: VR-Online (Август-сентябрь 2010)

Креатиff68

vr­online | сентябрь 2010

действий, нам понадобиться инструмент «Spray»­ это необходимо для создания кроны дерева, т.к.дублирование объектов не всегда даст нужнуюнам форму, поэтому обновляйте Inkscape допоследней версии и приступайте к созданиюкроны. Чтобы опрыскиватель распылял листья,выделите объект листьев и применяйтераспылитель, но не делайте ее слишком плотно.Чтобы придать естественность, несколькодеревьев переместите на некоторое количествослоев вперед, а также вручную расположителистья, чтобы придать более эстетический видкроне дерева.Далее приступимк созданиютравы, создайтри травинки (заосновуокрашиваниятравы, возьмитецвет листьев),продублируй и кпродублированному объекту примени зеркальное отображение(клавиша «H»). Расположи, их ближе друг к другуи объедини в один объект. Результат моейработы ниже.

Теперь создай прямоугольник, высотой в ~2­3 см,на всю ширину страницы, заполните его цветомтравы и по верхнему и нижнему краю, данногопрямоугольника пройдитесь распылителем, взявза объект распыления куст травы,приготовленный нами ранее.

Теперь необходимо позаботиться о фоне, дляэтого, я бы посоветовал создать новый слой. Навсю страницу помести прямоугольник и примениградиентную заливку: от черного цвета ккрасному.Позади деревьевсоздадим эффект«взрыва» солнечныхлучей. Создадимнекий луч, в видеудлиненноготреугольника, и спомощью двойногощелчка по объектупереместим центрвращения объектана конец треугольника. Далее с помощьюкоманды «Клоны» ­ «Создать узор из клонов…»,

вызываем диалоговое окно, в которомустанавливаем следующие параметры:1. Симметрия: Простое смещение.2. Смещение: Смещение по Y, на строку: «–100%».3. Строк должно быть 25, а столбцов 1.4. Поворот: На строку: 19 градусов.Конечно, у тебя будут свои значения, взависимости от размера клонируемого объекта.Я советую присмотреться к этому диалоговомуокну, т.к. при помощи клонирования можноделать достаточно интересные абстрактныефигуры. Теперь мы просто объединяем всеполучившиеся «лучи» и помещаем этот объектпозади деревьев. Я применил градиентнуюзаливку: от черного цвета до прозрачного (можнотемно зеленый). Деревья сливаются с фоном,поэтому я немного осветлил стволы, такжеможно применить более светлую обводку.

Продублируем одиниз стволов, иприменим к немутрансформацию(Shift+Ctrl+M):вертикально отразимпродублированныйствол, и используемвращение на угол 45градусов (deg), приэтом, увеличив масштаб на 150%. Убираемобводку и применяем градиентную заливку – отчерного цвета к прозрачному. Далее дублируемеще один ствол и также отображаем еговертикально, увеличив масштаб на 170%.Добавляем слой,на котором будетрасполагатьсятекст, т.к.основнуюинформациюпостер несетчерез текст. Нампонадобитьсяэкзотический шрифт ­ «Astro867» (ссылка наскачивание в конце статьи – прим. автора).Пример выполнения ниже:

Page 69: VR-Online (Август-сентябрь 2010)

Креатиff69

vr­online | сентябрь 2010

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

Автор: Simona PfreundnerДополнительные ссылки:Оригинальная статья:http://vector.tutsplus.com/tutorials/designing/how­to­make­an­eco­friendly­vector­poster/Шрифт «Astro867»: http://www.dafont.com/astro867.fontInkscape: http://www.inkscape.org/

Page 70: VR-Online (Август-сентябрь 2010)

Photoshop.Расскрашиваем фото

70

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

Для начала нам надоустранить шум на лице,сделать кожу болеегладкой. Это нужносделать для того, чтобынаша “краска” легламаксимально ровно игладко. Делается этолегко и просто.Дублируем слой.Выбираем верхний слой,именно его будемредактировать. В менюфильтров выбираем“Шум”­“Медиана”. Радиусвыбираем на глаз, нотак, чтобы не сильно исказилось исходноеизображение. Далее используем размытие поГауссу, и так же как и с шумом, радиус делаемнебольшим (2 пикселя и то много). Далеенакладываем слой­маску (о работе с маскамиможно прочесть в одном из моих уроков). Теперьчерной мягкой кистью делаем более четкимиглаза, губы, волосы, уши, нос. Все выполняемпредельно аккуратно, экспериментируя спрозрачностью и нажимом кисти. В итоге у васдолжна получится такая мадам. Не очень и

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

Теперь фокус. В окне режима наложения слоявыбираем “Цветность”. Вуаля!

Таким же образом закрашиваем губы и глаза, незабываем для каждой новой части лицасоздавать новый слой. Далее придадим глазамвыразительности. Создадим новый слой. Белымvr­online | сентябрь 2010

Автор

:Редь

кинДм

итрий

akazah

od5277

zahod5

277@v

r­onlin

e.ru

Креатиff

Page 71: VR-Online (Август-сентябрь 2010)

Креатиff71

vr­online | сентябрь 2010

цветом закрасим глазные яблоки.

Далее применим небольшое размытие и сотремучастки, выходящую из области глаз. Затемнарисуем ей ресницы. Берем тонкую чернуюмягкую кисть и аккуратненько обведем места, гдееле­еле видны ресницы. Теперь опять­такинемного размоем и убавим непрозрачность слоядо 50­60%. Тем самым мы добавили “теней”,чуть видимых, но неплохо подчеркивающихглаза. Тем же образом раскрасим брови.Волосы заслуживают отдельного внимания. Да,конечно, их можно так же покрасить, но мы ихпросто затемним. Берем лассо, обводим волосынашей мадам, копируем и на новом слоевставляем. Меняем режим наложения на“Умножение” и опять­таки немного размываем.Далее можно добавить бликов, создав новыйслой над слоем с кожей, немножко повозюкатьтам белым цветом, размыть и обрезать мягкимластиком, так же можно осветлить блузку.Сейчас наступает коренной перелом. Помните,после “гламуризации” кожи мы дублировалинашу мадам? Так вот, сейчас мы осветляем припомощи кривых верхний слой, и ставим режимналожения “Линейный свет”.

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

«затемнение» и «осветление» и поиграться нацветном слое. Этим самым мы смогли быдобиться объемности без дополнительного слояи без изменений параметров наложения.Однако, приведенный мной прием более быстр ибольше подходит для новичков.

Page 72: VR-Online (Август-сентябрь 2010)

Incendia.В первый раз в первый класс.

72

Incendia – простая, но в то же время удобнаяпрограмма для создания трехмерных фракталов.Сегодня нам предстоит в этом убедиться напрактике. Загружай программу с официальногосайта (www.incendia.net), устанавливай ивозвращайся к тексту статьи. Хотя, статьей ееназвать нельзя, т.к. по сути это переводофициальной документации.Немного о документацииДокументация INCENDIA условно можноразделить на различные группы. Например:The Fractal and Main Control Panel

Рисунок 1. The Fractal and Main Control PanelЭлементами являются (рисунок 2):

Рисунок 2. ЭлементыЗдесь ты можешь выбрать сам фрактал, нажавна фрактальное имя, а точнее тот тип фрактала,

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

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

Рисунок 4. Кнопки загрузки и сохранения параметровКнопки служат для сохранения в текстовыйфайл, в котором определены все параметрыпрограммы и загрузки уже ранее сохраненныхпараметров. Расширение файла используется ".par". Содержание буфера этими кнопками несохраняется.

Рисунок 5. Загрузка и сохранение буфера

vr­online | сентябрь 2010

Перев

оддок

умент

ации:i

talija

(http:/

/www.d

emiart

.ru/for

um/ind

ex.php

?show

user=1

575)

Креатиff

Page 73: VR-Online (Август-сентябрь 2010)

Креатиff73

vr­online | сентябрь 2010

Эти две кнопки для сохранения всех параметровпрограммы в буфер на данный момент ивыгрузки их из буфера. Расширение файлаиспользуется ". Zb3" и содержимое файлаявляется бинарным.

Рисунок 6. Сохранять и загружать сценарии: (рис.6)Эти две кнопки служат для сохранения изагрузки Incendia сценариев. Кнопка «Сохранитьскрипт» видна только в некоторых фрактальныхтипах, что позволяет пользователюэкспортировать выбранные для фракталасценарии. Incendia запрашивает файл исценарий сохраняется с расширением ". PRG".Сценарий может быть изменен в любойтекстовой программе, такой как notepad.exe.Кнопка загрузки сценария видна только привыборе фрактала Incendia Script. С помощью еевы ты можешь загрузить любой Incendia Script.Для более подробной информации о сценарияхи их форматов, смотрите раздел Incendia Scriptдокументация.В чем принципиальное отличие загрузкипараметров от скриптов: параметры ­ это ужеготовая скомпонованная сцена с изображением,скрипт же ­ это набор определенныхпоследовательных действий, которые можнонакладывать на различные формы и сцены иполучать всегда разные интересные результаты.

Рисунок 7. Создание нового фракталаПосле того как ты выбрал тип фрактала, можновыбрать случайные фрактальные параметрыэтой кнопкой. Это приведет к появлению новых

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

Рисунок 8. Кнопки Preview и DrawЭти две кнопки используются в основном, дляпросмотра фрактальных итераций в двухрежимах: Draw (белые точки) и быстрыйпредварительный просмотр фракталов Preview(заштрихованы и с текстурой). Кроме того, онимогут быть использованы для блокирования иразблокирования трекбола управления камеройи ползунка масштабирования. Используй кнопку«Предварительный просмотр», чтобы увидеть,как фрактал развивается.В окне просмотра, при выборе режима Draw, тыможешь контролировать фрактал с помощьюмыши. Левая кнопка мыши управляет трекболомвращения. Можешь ограничить вращение поразличным осям, выбрав конкретноенаправление в трекболе Rot: ТВll ­ в любомнаправлении; Xr ­ вверх, вниз; Yr ­ вправо, влево;Zr ­ по часовой стрелке, против часовой.Правая кнопка мыши управляет перемещениемфрактала. Оно также может быть ограниченоконкретными направлениями в трекболе:Trans: XYt ­ в любом направлении;Xt ­ по горизонтали;Yr ­ по вертикали.Колесо мыши контролирует коэффициентмасштабирования (если на твоей мышкеотсутствует колесико, то юзай вместо негоползунок Zoom).Примечание: кнопки просмотра изображенияработают только в условии, когда отключеныпараметры Baseshapes и Transformations навкладке Editors, так что если тебе не удаетсяпосмотреть на свое творение, первым деломпроверяйте и выключайте именно эти данные.

Рисунок 9. Кнопки Render и ContinueКнопки предназначены для запуска отрисовкифрактала, перед его сохранением. Render ­начинает процесс рендеринга, сводя все

Page 74: VR-Online (Август-сентябрь 2010)

Креатиff74

vr­online | сентябрь 2010

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

Рисунок 10. Диалоговое окноОтвет "да"­ если ты хочешь удалить все и начатьрендеринг заново. Отвечай "Нет", если ты нехочешь потерять предыдущее содержимоебуфера. После нажатия этой кнопки онаисчезнет, и появляется кнопка Stop . Эта кнопкапросто останавливает процесс. Ты можешьиспользовать ее, чтобы прервать все потокипрограммы, которые действуют на фрактал. Принажатии на Stop, кнопки Render и Continue вновьстанут видимыми.Кнопка Continue работает точно так же, как иRender, но с той лишь разницей, что она нестирает содержимое буфера. Это полезно, еслиты остановишь фрактальный процессрендеринга (для сохранения, например,изображения), а затем захочешь, продолжить.Небольшое предупреждение: Поскольку кнопка"Продолжить" не стирает содержимое буфера,если ты прервешь процесс и сделаешь поворот,Zoom, Pan или изменишь, любой параметрфрактала, то будет отображено как новое, так истарое содержимое (другими словами тыполучишь двойное изображение).Важное примечание: На момент нажатия Renderили кнопки "Продолжить", панельпредварительного просмотрастанет черной. Используй кнопкупредварительного просмотра,чтобы увидеть фрактал.

Рисунок 11. Колесо для запуска рендеринга,Это колесико появляется после запуска процессарендеринга (нажав «Пуск» или кнопку«Продолжить»). Оно начинает вращаться, афрактал вычисляется. Оно исчезает, если нажатькнопку «Стоп».Процесс рендеринга в этой программе оченьдлительный и ответ на вопрос: "а колесиковообще когда­нибудь заканчивает своевращение?" ­ так и не был получен. В связи сэтим, есть смысл периодически останавливатьвычисления, сохранять изображении, а затемзапускать вычисление снова (кнопка Continue).Уже потом сравнивать сохраненные

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

Рисунок 12. The Render PanelSave Bitmap ­ кнопка сохранения фрактала вBitmap (*. BMP­файл). Ее нажатие приводит костановке рендинга и сохранения файла.Сохранение скорости определяется различнымифакторами, такими, как разрешение и качествопередискретизации. Процент­индикатор внижнем правом углу панели показывает ходпроцесса сохранения. После сохранения файла,ты можешьпродолжать процессотрисовки, нажав накнопку Continue илиначать новую,кликнув на кнопкуRender.

Рисунок 13. Кнопки Save Material и Load MaterialКнопки предназначены для сохранения изагрузки конфигурации фактических материалов,в том числе текстуры, присвоенной данномуматериалу (под названием ссылка, а нефактические данные текстуры).Clear Fog ­ очищает буфер тумана. Используйего, если вы хочешь перезапустить расчетыобъема.Clear Shadows ­ очищает теневой буфер.Очистив буфер с помощью этой кнопки, тыможешь получить Shadowless сцену. Послевнесения изменений процесс продолжается,расчет тени также начинается с заполнениябуфера.

Приведенная на рисунке выше панель имеет тризакладки:­ Материалы и текстуры Tab, для определенияматериалов параметрами;­ Tab окружающей среды, изменения иопределения различных параметров

Page 75: VR-Online (Август-сентябрь 2010)

Креатиff75

vr­online | сентябрь 2010

окружающей среды;­ Шейдеры Tab, для создания различныхэффектов шейдеров, финальное изображение;

Показанные выше два изображения показываютвыбранную текстуру, как для окружающей среды,так и для диффузных элементов. Верхний из нихявляется элементом окружающей среды, анижний элементом для текущего слотаматериала. Характеристики этих материальныхэлементов расположены в Группе материальныхпараметров.Цифровой дисплей, как здесь, так и вдругих местах показывает порядковыйномер материала (в данном случае) слота, гдеприменяются текстура. Также ты можешьпосмотреть количество используемых текстур.Максимальное их количество может быть 10. Вовсех неиспользуемых слотах стоит параметр "0".

The Ambient and Diffuse Texture Buttons ­ Принажатии одной из этих кнопок, появляетсяпанель текстуры. В ней можно выбрать текстуру,которая будет применяться на выбранномобъекте (Ambient или диффузный) для текущегослота материала.Панель состоит из окна предварительногопросмотра текстур, двух стрелок навигации ипяти кнопок (Цвет, Град, Ext. Фактура, Отменитьи ОК). Если выбрать текстуру, она подсветитсязеленым освещением. Используя стрелки дляперемещения по библиотеке, нажми на нужнуютекстуру для её выбора. Как только это будетсделано, нажимай "ОК", чтобы применить её квыбранному слотом материалу. Если не хочешьприменять текстуры – клацни на кнопку"Отмена". Вполне вероятно, что тебе можетпотребоваться текстура, которой нет вредакторе. В этом случае жми на "Ext. Фактура ".Перед тобой появится окно с содержимымжесткого диска на котором ты можешь выбратьсвою текстуру. Помни, что Incendia используюттекстуры в формате BMP (*. BMP).В конце спискаматериаловнаходятсяградиенты,которые такжеможно выбратьдля раскраски

объектов.Градиент можно подгрузить с компа (есликонечно он у тебя есть): кнопка Gradиспользуется для загрузки карт цвета файла.После ее нажатия, программа запросит файлкарты Fractint. Если он будет загружен, тоградиент появится в окошке Ambient. Принажатии на кнопку Color, появиться панельвыбора цвета:

Важно отметить, что параметры материалаявляются исключительными для каждойтекстуры определенного слота, в отличие отпредыдущих версий Incendia , где ониприменялись ко всем слотам.Параметр Ambient определяет, насколько яркойили темной ,будет текстура. Например, если выустановите ее в 0,5, яркость текстуры будет вполовину фактических значений текстуры. Есливы установите ее на 2.0, яркость будет в двараза ярче исходной текстуры. Этот параметр независит от источника света, его определяет цветповерхности фрактала.Параметр Diffuse работает аналогичнымобразом, но этот параметр зависит от источникасвета. Дальше идут параметры контролязеркальных элементов/зеркального отражения.Они подразделяются на:­ Specular (отражение). Определяет, насколькосконцентрировано зеркальное отражение. Еслиустановить его на более низкие значения,зеркальное отражение будет рассеянным наосвещенной поверхности фрактала;­ Specular Int (зеркальная интенсивность).Параметр контролирует яркость зеркальногоэлемента;­ fresnel Ext/Int ­ параметры уравнения Френеля(Френеля Ext. Френеля Int);Эти параметры определяют коэффициентыФренеля (внешнего и внутреннего отраженияпреломления) для фрактальной поверхности.

Page 76: VR-Online (Август-сентябрь 2010)

Креатиff76

vr­online | сентябрь 2010

Цвета преломленный и отраженный свет взятыиз Skylight уравнений или растровый фон.Параметр Shadow Depth определяет темнотутеней. Если вы установить его на 1.0 ­ теньисчезает. Reset ­ кнопка восстанавливаетзначения по умолчанию на панели параметровматериала для текущего слота.

Панель Options определяет различныепараметры затенения INCENDIA. Предлагаютсяследующие варианты:­ Enable Fog. Включение или отключениеиспользования Тумана в визуализации.Активировав его, противотуманное управлениецветом становится видимым. Этот туман независит от параметров освещенности фрактала.­ White Shader. Стиль "уголь", из серыхслучайных точек. Никаких цветов ввизуализации.­ Black and White. Похож на древесный уголь, новместо серых оттенков, используется толькочерный пиксель на белом фоне.­ Volumetric Fog. Активация расчета объемноготумана (не путать со стандартнымипротивотуманными фарами)­ Background. Включение использования фона,либо с помощью уравнений или простогорастрового файла. Если выбрана эта опция,появляется дополнительная панель снастройками:­ The Skylight Background. Задает позиции светавокруг фрактала исоздаетреалистичныевосходы и закатысолнца. Расчетсвета и цвета,основаны на"практическиханалитическихмоделях для"дневного света"(рисунок 14).

Рисунок 14­ The Bitmap Background. Опция позволяетиспользовать простое изображение для фона.Используй кнопку для загрузки изображения

(рисунок 15).

Рисунок 15­ Fresnel Eq. Позволяет Формуле Френеля наповерхности фрактала создавать эффектcristalized изображения. Цвета взяты из фона(свет или растр), они будут добавлены взначение текущего материала (текстуры,градиент или цвета).­ Drawing. Выбирает специальный режимрисования, которые состоят в трех видахчертежа. Когда вы выбираете его, контрольстанет видимым.­ The Standard Drawing. Опция пытаетсяимитировать рисование на бумаге (рисунок 16)

Рисунок 16­ Radial Gradient. Параметр настраиваетградиент. Ты можешь изменить значенияградиента серого к конкретным градиентам,загружая его в окружающую часть материала(рисунок 17).

Рисунок17­ Angular Gradien. Параметр определяет цветградиента, в соответствии с углом наклона на

Page 77: VR-Online (Август-сентябрь 2010)

Креатиff77

vr­online | сентябрь 2010

фрактальной поверхности (рисунок 18).

Рисунок18­ Fog Color. Данныйэлемент появляется,только если туманвключен, и состоит из трех (красный, зеленый,синий) движков, позволяющих определитьфактический цвет тумана;

На панели Enviroment Controls можно настроитьмногие эффекты окружающей среды. Например:­ Fog Parameters (“Fog P. A” and “Fog P. B” ).Опция определяет, густоту и распространениетумана;­ Fog P. A. Плотность тумана. Чем меньшезначение, тем выше концентрация тумана;­ Fog P. B. Исходное положение тумана, и накакое расстояние он распространяется. Приболее высоких значениях, туманраспространится шире.Цвет тумана определяется в контроле цветатумана.­ Sun Turbidity (Sun T.). Параметр определяетколичество пыли в воздухе в атмосферныхрасчетах. Эффект покраснения атмосферы приболее высоких значениях.­ Volumetric Fog color components. Эти трипараметра контроля (красный, зеленый и синий)объемного тумана. Если значенияположительны, цвет тумана добавляется кизображению. Наоборот, если ониотрицательные, туман будет вычитаться изобраза.

Рисунок 19. Light Volumetric Fog

Рисунок 20. Dark Volumetric FogКкнопка Reset восстановит значения поумолчанию параметров окружающей среды.

Рисунок 21Блок Ligth Distribution control определяет, как светдиффузии будет отображаться на поверхностифрактала. Возможные варианты:

Рисунок 22. Стандарт­ Стандарт. Распределение рассеянного светаопределяется стандартным образом.

Рисунок 23. Синус Stripes

­ Синус Stripes. Распределение рассеянного

Page 78: VR-Online (Август-сентябрь 2010)

Креатиff78

vr­online | сентябрь 2010

света возмущается синусоидой.

Рисунок 24. Косинус Stripes­ Косинус Stripes. Распределение рассеянногосвета возмущается косинусом волны.

Рисунок 25. Exponential­ Экспоненциальная. Интенсивность светарассчитывается по экспоненте

Рисунок 26. Random­ Random. Интенсивность света небольшойслучайной величины.

Рисунок 27. Вмешательство­ Вмешательство. Распределение рассеянногосвета рассчитывается по интерференционнойкартине.

Рисунок 28. Soft Light

­ Soft Light. Свет должен быть равномернораспределен по поверхности фрактала.Блок Surface Average Filter. Эти фильтрыпредназначены для сглаживания шума нафрактальной поверхности.Блок Ambient Occlusion включает или отключаетдве вариации шейдеров:­ Per Pixel. Расчет окружающих окклюзий длякаждого пикселя. Если выбрана эта опциястановятся видны следующие параметры:­ Samples. Количество образцов для каждогопикселя. Чем больше число, медленнее расчеты,но более точные расчеты.­ Radius. Максимальное расстояние (в пикселях)от выбранного пикселя.Расчет Pixel окружающей окклюзии происходитмедленно, особенно на больших фрактальныхсценах, но это увеличивает 3D представление офрактальной поверхности.­ Averaged. Расчет окружающей окклюзиирендеринга сцены. Если выбрана эта опция,параметры управления окружающей окклюзиистановятся видны.­ Samples. Количество образцов для каждогопикселя. Чем больше число, медленнее расчеты,но более точное.­ Radius. Максимальное расстояние (в пикселях)от выбранного пикселя.Блок Resolution ­ определяет разрешение в

Page 79: VR-Online (Август-сентябрь 2010)

Креатиff79

vr­online | сентябрь 2010

пикселях. Ты можешь выбрать разрешение иприменить его, нажав кнопку «Изменить». 2xAAопция используется для сглаживания. Когда этаопция активна, внутренне Incendia удваиваеттекущее разрешение и масштаб (во времясохранения изображения).Блок Projection. Данный переключательиспользуется для определения типа проекции,которую виртуальная камера будетиспользовать.При этом прогноз выбора точки зрения, контроляапертуры становится видимым. С его помощьюможно определить отверстие виртуальнойкамеры (камеры не должны иметь негативныеотверстия).Блок Shadow. Переключатель включает иливыключает тени для текущего изображения.Поскольку расчет тени замедляет генерациюизображений, ты можешь отключить тени ивключить их только при начале рендеринга(используй кнопку ПРОДОЛЖИТЬ вместоRENDER, иначеисчезнет дисплей).Блок Cycles. Переключатель используется дляопределения количества циклов итерации (втысячах) рассчитываемых в каждой петле.Возможность используется для определения,количества тактов процессора, которое Incendiaбудет использовать. Например, если установитьего в 32, то Incendia не займет слишком многотактов процессора, а следовательно не окажетслишком большого влияния на общую работукомпьютера. Установив параметр в значение256, компьютер сосредоточит все циклыпроцессора в процесс визуализации. Используйэто значение, когда хочешь оставить машинутолько для рендеринга фракталов.Кнопки типа Reset используются для сбросапозиции, вращения и масштабирования.The Reset Position button. Центр фрактала наокне просмотра.The Reset Rotation button. Отменяет любоевращение, которое было применено к фракталу.The Rescale button. Прерывает любоерасширение примененное к фракталу.Grid ­ Этот элемент управления позволяетвыбрать между четырьмя типами сетей в окнепредварительного просмотра (ВНИМАНИЕ: этисетки только гиды и не влияют на изображение).None ­ Нет сетки.Cross ­ Зеленый крест, который разделяет панельна четыре области и знаменует центр.Thirds ­ Он разделяет панель на трети. Если выхотите создать несколько художественныхфракталов, в центре наиболее важная частькомпозиции.

Divine 1 ­ Деление плоскости с золотой серединына квадратные панели. Вновь в центре самаяважная часть вашей композиции.Divine 2 ­ Так же, как предыдущий вариант, но наэтот раз стороны состава соответствуют золотойсередине.Вкладка Editor состоит из двух основныхразделов: Baseshape и Transformations. КнопкаEdit открывает и закрывает редактор Baseshape.Именно эту кнопку следует выключать, чтобысделать предварительный просмотр фрактала.Кнопка Open открывает все элементы редактора.Кнопка New добавляет новую форму илипредмет в фрактал, открывая доступ к текущимпараметрам. Кнопка Delete удаляет текущуюформу из фрактала.Стрелочки позволяют перемещаться междуимеющимися во фрактале формами ипредметами. Цифра в боксе Baseshapeпоказывает на порядковый номер текущейформы.­ Depth. Параметр определяет количествофрактальных итераций, или по другому: сколькораз будет повторяться данная форма пофракталу.­ Radius. Параметр определяет фактическийразмер baseshape.­ P1..P13. Эти и следующие параметры длякаждой формы индивидуальны и отличаются взависимости от объекта (например, в торе, P1,определяет размер внутреннего круга тора).­ The Random Button. Случайными параметрамитекущей формы (работает не во всехbaseshapes).­ Show Baseshape. Опция позволяет показатьили скрыть основную форму в центре фрактала.Это пригодиться во фракталах, как множестваЖюлиа кватернионов, потому чтопервоначальное baseshape может быть больше,чем повторные, фактически скрывая их.­ Scale. Элемент управления позволяет изменятьмасштаб baseshape в X, Y и Z направлении (Непутать с радиусом параметров, что даетравномерное масштабирование).­ Shear. Элемент управления позволяет сдвигатьbaseshape по многим направлениям.­ Rotation. Элемент управления используется снебольшим трекболом, чтобы определитьвращение baseshape.­ Theres a little selector. На левой стороне пульта,можно использовать для ограничения поворота.Возможные варианты:­ T, Полный трекбол ротации;­ X, вращения ограничена по оси X;

Page 80: VR-Online (Август-сентябрь 2010)

Креатиff80

vr­online | сентябрь 2010

­ Y, вращения ограничена по оси Y;­ Z, вращения ограничен в Z оси;­ 0, Сброс вращения baseshape;­ Panel. Селектор переключает изображениемежду векторным представлением элементовсцены и фактически самой камерой.­ Window. Переключатель позволяетпросматривать в четырех типах видов:­ Камера. Фактический угол наклона камеры, выможете вращать и панорамирование камеры (спомощью кнопки мыши). Baseshape и видовомдвижении ограничены (X, Z) плоскости.­ Фронт. В окне вида спереди (+ Z). Здесьможешь использовать правую кнопку мыши,чтобы изменить положение в baseshape (X, Y)плоскости. Левой кнопкой мыши перемещаемсяна плоскости, а ползунком масштабированияможно увеличивать изображение.­ Слева. (­X), ты можешь контролироватьдвижение baseshape в (Y, Z) плоскости с правойкнопкой мыши. Левой кнопкой мышиперемещаемся на плоскости, а ползункоммасштабирования можно увеличиватьизображение в нем.­ Top. (+ Y), ты можешь контролировать движениеbaseshape в (X, Z) плоскости с правой кнопкоймыши. Левой кнопкой мыши перемещаемся наплоскости, а ползунок масштабирования можноувеличивать изображение в нем.­ Control. Переключатель используется восновном для управления левой кнопкой мыши,работает в окне вида из камеры.Возможные варианты:1. левая кнопка мыши будет вращать камеру.2. левая кнопка мыши используется дляперемещения по сцене.Material. Переключатель присваивает материалуслот для текущего baseshape. Используй его,если вы хочешь сделать несколько baseshapes сразличными материалами.Выбранный предмет (или форма) Baseshape,который в данный момент подвергаетсяизменениям, имеет красный цвет.Невыбранная Baseshapes (т.е. форма) имеетзеленый цвет. Преобразования (илитрансформации) не используются в этомредакторе, но выступают здесь пунктирнымиокружностями с центрами на осяхпреобразования. Эти элементы имеют синийцвет. Когда происходит работа с изменениемтрансформаций на соответствующей вкладке, товыбранная для работы трансформацияокрашивается в желтый цвет.

Сцена Center. Элемент указывает на центрсцены (камера вращения происходит вокруг этойточки), в виде зеленого кубика.Iterations Points. Реальные точки итерации всехфрактальных компонентов (baseshapes ипреобразования). Они белого цвета и служат вкачестве руководства для редактированияэлементов.Displacement Mapping Baseshapes. Картысмещения Baseshapes (dmaps), являютсячастным случаем baseshapes, которыйиспользует растровые файлы, для применениякарты. Эти формы окрашены в золото, а не взеленый цвет.Их шесть, и когда один какой­нибудь из нихпредмет выбран, то кнопка "Загрузить DMap"становится видимой.Она позволяет загружать изображения срасширением .bmp. Растровое изображениепреобразуется (выбрав максимальное значениедля каждой точки RGB), и отображаться наповерхности baseshape. Если значение пикселячерный (0,0,0 в RGB), пиксель считаетсяпрозрачным, и это отображается как отверстие.­ Перемещение плоскости (DPlane)Это самая простая карта смещения baseshape,состоит в основном из небольшого плоскогоквадрата с dmap экструзией в одну сторону(другие остаются прежними).­ Двойное перемещение плоскости (DDPlane)Вторая карта смещения baseshape, работает втой же форме, как первая, но в отличие отпервого, dmap экструзия идет в обе стороны.­ Перемещение колонки (DColumn)Это колонна dmap. В этом случае, dmapповторяется четыре раза в направлении х надколонной поверхности.­ Перемещение цилиндр (DCylinder)Данный dmap похож на предыдущий, ноотображение происходит в радиусе цилиндра,вытягивание как внутренней так и внешнейстороны от центра цилиндра.­ Перемещение диска (DDisc)На этом перемещении baseshape, dmapпереходит в поверхность диска, вытягиваясьвверх и вниз.

­ Перемещение цилиндраSQ (DCylinderSQ)Работает по тому же пути,что DCylinder baseshape,но вместо определениякругового цилиндра, это вквадрате.

Page 81: VR-Online (Август-сентябрь 2010)

Креатиff81

vr­online | сентябрь 2010

Вкладка TransformationКнопки:Edit ­ открывает и закрывает редакторTranformation. Также она изменяет вид окна отстандартной точки, в векторное представлениефрактальных элементов;New ­ создает новую трансформацию, добавляяеё к имеющимся (если таковые есть);Delete ­ удаляет текущую выделеннуютрансформацию;Стрелки позволяют переходить от однойтрансформации к другой, последовательно ихвыделяя. Цифра в боксе Transformationуказывает на порядковый номер текущейтрансформации. Кнопки Save и Load ­ сохраняюти соответственно загружают трансформации.Блок Variations. Полезен, когда ты выбрал типтрансформации фрактала.Ты можешь использовать селекторы(расположенные в левой части панели), чтобыактивировать изменения. Также, в случаенеобходимости воспользуйся расположеннымисправа ползунками, с целью изменения вариациивеса (отрицательные значения будут разрешены,и они дают интересные результаты). На данныймомент только 10 вариаций поддерживаются. Вследующих версиях, это число будет увеличено.Блок Scale. Позволяет изменять размер(масштабировать) в X, Y и Z направлениях.Равномерно позволяет масштабировать по тремосям.Блок Shear. Позволяет сдвигать трансформациюво многих направлениях.Блок Rotation. Управляет вращением.Возможные варианты:­ T, Полный трекбол ротации;­ X, вращения ограничена по оси X;­ Y, вращения ограничена по оси Y;­ Z, вращения ограничен в Z оси;­ 0, Сброс вращения преобразования;

Page 82: VR-Online (Август-сентябрь 2010)

Счетчик уникальныхпосещений сайтана PHP

82

В этой небольшой статья я хочу рассказать тебе,как написать простейший счетчик уникальныхпосещений на PHP. Мы будем подсчитыватьчисло уникальных обращений к сайту, и хранитьданные в базе. Усаживайся поудобнее, сейчасмы немного по программируем.Сначала конфеты, потом постельМы с тобой не какие­то ганстеры­программисты,поэтому начнем, как и подобает – с теории, а ужепотом поглядим и покопаемся в коде.Первым делом мы создадим базу данных ивставим кусок кода в верхнюю часть каждойстраницы. Данный код будет отлавливать IPюзеров и записывать их в базу данных. ПомимоIP мы также будем записывать дату посещения.Во время записи очередного адреса посетителянам придется просматривать IP­адреса клиентов,посетивших сайт в этот день. Если IP уже есть вбазе, то новая запись создаваться не будет.Например, если IP 124.456 посетил наш сайт02/04/00, то запись в базе данных будет создана,если этот же IP посетил наш сайт, к примеру,04/04/00. Если же он дважды зайдёт 02/04/00, тодобавлять новую запись не будем.Делаем базу, пишем кодНастало время создать базу данных. Выполниэтот SQL­скрипт:CREATE TABLE `uniquehits` (`ip` varchar(255) NOT NULL,`date` date NOT NULL default ’00-00-0000’);

Как закончишь с созданием БД, вставь этот код вверхнюю часть каждой страницы, на которой тыхочешь учитывать посещаемость. В данномруководстве не рассматривается посещаемостьотдельных страниц (т.е. сколько посмотреликонкретную страницу, ты не узнаешь), каждуюстраницу будем считать в целом. Таким образом,если посетитель просмотрел 2 страницы, то мыбудем записывать IP единожды. Код,реализующий данный алгоритм приведен ниже:

<?php$connection = mysql_connect ('localhost','USERNAME', 'PASSWORD')or die ('Unable to connect!');mysql_select_db('admin1_counter') or die(mysql_error());$_SERVER['REMOTE_ADDR'];$ip = $_SERVER['REMOTE_ADDR'];$fetch = mysql_query("SELECT * FROM uniquehitsWHERE ip ='".$ip."' AND date=NOW()") ordie(mysql_error());if ( mysql_num_rows($fetch) == 0 )mysql_query("INSERT INTO uniquehits(ip, date)VALUES('$ip', NOW())") or die(mysql_error());mysql_close($connection);?>

Теперь подумаем об отображении количествапосещений. Я посоветую реализовать дваварианта: в первом будут отображатьсяпосещения за день; а во втором можноотобразить общее количество уникальныхпосещений, исключая посещения с одного IP, нов разные дни. Иными словами, в этом вариантеты увидишь все уникальные IP, с которыхпросматривали твою страницу. Итак, выведемежедневную посещаемость:<?php$connection = mysql_connect ('localhost','USERNAME', 'PASSWORD')or die ('Unable to connect!');mysql_select_db('admin1_counter') or die(mysql_error());$counttotal = mysql_query("SELECT DISTINCT ipFROM uniquehits") or die(mysql_error());$uniquetotal = mysql_num_rows($counttotal);echo $uniquetotal;mysql_close($connection);?>

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

vr­online | сентябрь 2010

Перев

од:Ма

ксимБ

огдано

вaka

Limone

llШкола

Оригинал статьи: http://designkai.com/unique­hits­counter/

Page 83: VR-Online (Август-сентябрь 2010)

Создание БД в IBConsoleи приложения в Delphi.Часть 1.

83

Привет. Сегодня я тебе расскажу о созданиибазы данных в IBConsole. Создание же самогоприложения ожидает тебя во второй частистатьи. Итак, прочь разговоры. Перейдём к делу.1. Для начала научимся запускать локальныйсервер и создавать БД.Для запуска локального сервера на компьютереиспользуется утилита IBConsole. После запускапрограммы (по умолчанию: Пуск ­> Всепрограммы ­> InterBase ­> IBConsole) появитсяокно (Рис. 1).

Рис. 1Чтобы запустить локальный сервер выберите вглавном меню “Server ­> Register…” после чегопоявится диалоговое окно “Register Server andConnect” (Рис. 2).В поле “Server Information” вводится информацияо сервере. Local Server/Remote Server – типсервера (локальный или удаленный). Привыборе “Remote Server” поля “Server Name” (Имясервера или его IP в сети), “Network Protocol”(используемый протокол ­ TCP/IP) и “Alias Name”(псевдоним БД) будут активными, если выбрать“Local Server” – неактивными. В поле Descriptionвводится описание базы данных.В поле “Login Information” вводится информацияо пользователе сервера. В данном примереиспользуются значения администратора,созданного при установке СУБД (“User Name” –SYSDBA, “Password” – masterkey. Регистр

ВАЖЕН!!!).

Рис. 2После заполнения необходимых полей длярегистрации сервера, жмем “ОК”. Окно IBConsoleпосле регистрации локального сервера показанона Рис. 3.

Рис. 3Создание базы данных.Прежде чем приступать к созданию БД,создадим рабочую папкудля БД на диске –С:\Temp\MyBD. Теперьнеобходимо создать базуданных на сервере. Дляэтого в главном менювыбираем “Database ­>Create Database…” послевыполнения командыпоявится диалоговое окно“Create Database” (Рис. 4).Рис. 4

vr­online | сентябрь 2010

Автор

:Токар

чукАл

ександ

рaka

Kewa

2008

E­mail:

Kewa

2008@

yandex

.ruШкола

Page 84: VR-Online (Август-сентябрь 2010)

Школа84

vr­online | сентябрь 2010

В одной из строк “Filename(s)” вводим путь к базеданных и название файла базы данных. Извыпадающего списка “Page Size” выбираемразмер страницы, в выпадающем списке “DefaultCharacter Set” выбираем кодировку (кодировкаподдерживающая русский язык – WIN1251), вполе “SQL Dialect” вводится номер диалекта SQL(от 1 до 3). Номер диалекта определяется толькодля InterBase версии 6.х.Для создания файла базы данных жмем кнопку“OK”. Окно IBConsole после создания базыданных показано на Рис. 5.

Рис. 5Созданная база данных автоматическирегистрируется на сервере и с нейустанавливается сеанс связи для работы.В дереве отображается информация озарегистрированных на сервере базах данных(метаданные). Метаданные – надстройка надбазой данных (Домены, Таблицы, Индексы и т.п.).Другими словами метаданные – это данные оданных.После копирования файла базы данных (*.gdb)на другой компьютер (сервер) его необходимозарегистрировать на сервере. Для этого вглавном меню IBConsole выберите “Database ­>Register…” появится диалоговое окно “RegisterDatabase and Connect” (Рис. 6).В поле “Database” указывается путь к базеданных. Его можно ввести либо в ручную, либо спомощью кнопки, расположенной рядом с полемввода. В поле “LoginInformation” вводитсяинформация опользователе идополнительныепараметры. В поля“User Name” и“Password” вводитсяимя пользователя ипароль. Извыпадающего списка“Default Character Set”выбирается названиеиспользуемойкодировки.

Рис. 6

После заполнения необходимых полей длярегистрации базы данных на сервере,необходимо нажать на кнопку “OK”, изарегистрированная база данных отобразится вдереве.При работе с многопользовательскими базамиданных возникает проблема – обеспечениедостоверности данных при одновременнойработе нескольких пользователей с одной базойданных.Для обеспечения пользователей удобнойработой в многопользовательском режиме,используют транзакции, принцип действияследующий:Начинаем транзакцию;Вносим изменения;Пытаемся завершить транзакцию;При удачном завершении все изменениясохраняются;При не удачном завершении все измененияотменяются;Если передумали вносить изменения, топропускаем третий пункт и сразу отменяемтранзакцию.2. Работа таблицамиТеперь мы рассмотрим процесс созданиятаблиц. Схема связи таблиц изображена на Рис.7. Таблица SOTRUDNIK является главнойтаблицей по отношению к таблице DOLZNOST.Поле SOTRID – внешний ключ, поле SOTKOD –вторичный ключ. Связь между таблицамииспользуется 1 : М (один­ко­многим).

Рис. 7После создания и регистрации базы данных насервере переходим к созданию таблиц в базеданных. Для этого в дереве окна IBConsoleвыбираем пункт Tables. После чего выберите вглавном меню “Tools ­> Interactive SQL…”,появится окно ‘Interactive SQL’, предназначенноедляработы сбазойданныхРис. 8.

Рис. 8В окнеInteractive SQL

Page 85: VR-Online (Август-сентябрь 2010)

Школа85

vr­online | сентябрь 2010

можно выполнять любой запрос: созданиетаблиц, модификация данных в них, извлечениеданных и т.п. Для изучения синтаксиса командSQL выполните команду “Help ­> SQL Reference”.В верхней части вводится запрос на выполнение(на Рис. 8 запрос на создание таблицыSOTRUDNIK).Разберемся в запросе:CREATE TABLE "SOTRUDNIK" – командасоздания таблицы с именем указанным вкавычках. После указания имени в круглыхскобках указываются параметры таблицы, послезакрытия скобки обязательно ставится точка сзапятой."SOTRID" INTEGER NOT NULL, – описание полятаблицы. В кавычках указывают имя поля. Послезакрытия кавычки описывают ограничения поля(тип, размер и т.п.).NOT NULL – указывает на то, что придобавлении записи в таблицу поле не можетбыть пустым. Атрибут "SOTRID" имеетцелочисленный тип и обозначается какINTEGER. Остальные атрибуты ("FAM", "IMA","OTCH") имеют текстовое значение иобозначаются VARCHAR, после чего в круглыхскобках указывается максимальное допустимоеколичество символов. Так же указываетсяиспользуемая кодировка для символов(кодировка, поддерживающая русские буквы –WIN1251).После ввода запроса для его выполнениянеобходимо выполнить команду в главном меню“Query ­> Execute” (или нажать сочетание клавишCtrl + E). Если запрос введен правильно, то вокне IBConsole появится только что созданнаятаблица (если выбран пункт Tables) и окнозапроса очистится. Окно IBConsole послесоздания таблицы показано на Рис. 9.

Рис. 9В InterBase нет такого типа, как счетчик(autoincrement). Функция счетчика реализуетсясозданием генератора.Генератор – хранящаяся в базе данныхпрограмм (скрипт), выдающая уникальноезначение при каждом обращении к ней. Для

каждого автоинкрементного атрибута можносоздать свой генератор, или использовать одингенератор для нескольких атрибутов.Генератор создается в окне Interactive SQL(“Tools ­> Interactive SQL…”). Код запроса насоздания генератора на Рис. 10.

Рис. 10Для выполнения запроса выполните команду“Query ­> Execute”, если запрос на созданиегенератора написан без ошибок, то окноInteractive SQL очистится. Для проверки наналичие генератора в дереве IBConsoleвыберите пункт Generators.После создания генератора необходимо указатьначальное значение генератора, данный запроспоказан на Рис. 11.

Рис. 11Теперь необходимо привязать генератор кконкретному атрибуту таблицы. Для этогоиспользуется триггер.

Триггер – хранимая процедура,вызываемая автоматически SQL­сервером примодификации данных в базе данных. Триггернельзя вызвать непосредственно из приложенияклиента. Триггеру нельзя передать входныепараметры и получить от него значениявыходных параметров. Триггеры всегдареализуют действие.По выполнению события, триггеры разделяютна:Триггер добавления;Триггер изменения;

Page 86: VR-Online (Август-сентябрь 2010)

Школа86

vr­online | сентябрь 2010

Триггер удаления.

По времени вызова, триггеры делятся на:До:После.

Т.е. есть шесть видов триггеров – до и послевыполнения каждого действия (добавление,изменение и удаление).SQL запрос на создание триггера, связывающеготаблицу “SOTRUDNIK” с генератором“GEN_SOTR” показан на Рис. 12.Конструкция SET TERM задает новыйразделитель операторов. Если ее неиспользовать, то получится, что послеNEW.SOTRID=GEN_ID(GEN_SOTR,1); стоитточка с запятой, и после END тоже должнаставиться точка с запятой, а это InterBaseвоспримит как ошибку.CREATE TRIGGER "BEF_INS_SOTR" FOR"SOTRUDNIK" – в данной строке создаетсятриггер (CREATE TRIGGER) с именемBEF_INS_SOTR (без кавычек) для (FOR)таблицы SOTRUDNIK.

Рис. 12Строка ACTIVE BEFORE INSERT указывает нато, что триггер будет выполняться (ACTIVE) до(BEFORE) добавления (INSERT) новой записи втаблицу. Если необходимо выполнить триггерпосле добавления, то вместо BEFOREиспользуется оператор AFTER (т.е. ACTIVEAFTER INSERT). И соответственно, если триггериспользуется во время удаления или изменения,то вместо INSERT указывается DELETE илиUPDATE (например: ACTIVE BEFORE DELETE).AS – зарезервированное слово, открывает телотриггера. Тело триггера всегда помещают воператорные скобки – BEGIN / END.NEW.SOTRID=GEN_ID(GEN_SOTR,1); –

присвоение в новой записи (слово NEW)атрибута SOTRID значение, полученное отвстроенной функции GEN_ID. В скобкахуказывается два параметра:Имя генератора;Шаг генератора (т.е. на какое число должноувеличиться значение генератора приследующем обращении к нему).Для создания триггера необходимо выполнитьзапрос (“Query ­> Execute”). Созданный триггерможно посмотреть, выбрав в дереве окнаIBConsole пункт Tables и щелкнув два раза левойкнопкой мыши на имени таблицы. Появитсяокно, отображающее свойства таблицы (Рис. 13).В окне Dependencies указан созданный триггер.Для просмотра полей таблицы и их ограниченийнеобходимо перейти в окно Properties. В окнеMetadata отображается текст SQL­запроса,который полностью описывает структурутаблицы. Записи, содержащиеся в таблицепоказаны в окне Data. В окне Permissionsуказаны пользователи, допущенные доуправления данными и их права.С помощью выпадающего списка, которыйрасположен сверху, можно перемещаться междутаблицами.

Рис. 13На этом создание главной таблицы закончено.По аналогии с созданием главной таблицы,создадим дочернюю таблицу – DOLZNOST. Т.к.создание таблицы аналогично, подробногоописания не будет.В первую очередь необходимо создать самутаблицу DOLZNOST. Для этого откроем окноInteractive SQL и введем туда запрос насоздание таблицы:CREATE TABLE "DOLZNOST"(

"DOLID" INTEGER NOT NULL,"NAIMDOL" VARCHAR(20) CHARACTER SETWIN1251,"SOTKOD" INTEGER NOT NULL,PRIMARY KEY ("DOLID"),FOREIGN KEY ("SOTKOD") REFERENCES"SOTRUDNIK" ("SOTRID")

);

Page 87: VR-Online (Август-сентябрь 2010)

Школа87

vr­online | сентябрь 2010

Стоит отметить строку FOREIGN KEY("SOTKOD") REFERENCES "SOTRUDNIK"("SOTRID"). В данной строке описываетсясоздание вторичного ключа (FOREIGN KEY),который необходим для связи таблиц. Послесоздания таблицы, необходимо создатьгенератор. Код создания представлен ниже:CREATE GENERATOR "GEN_DOLZ"Когда генератор создан, ему назначаетсяначальное значение:SET GENERATOR "GEN_DOLZ" TO 0

Теперь привязываем генератор GEN_DOLZ катрибуту DOLID таблицы DOLZNOST:SET TERM !!;CREATE TRIGGER "BEF_INS_DOLZ" FOR "DOLZNOST"ACTIVE BEFORE INSERTASBEGIN

NEW.DOLID=GEN_ID(GEN_DOLZ,1);END!!SET TERM; !!

При добавлении нового сотрудника значениеатрибута SOTRID будет присвоен автоматически,но при добавлении новой должности сотрудникузначение атрибута SOTKOD будет присвоен неавтоматически, а будет взято значение изатрибута SOTRID:

Попов В.Н. работает на должности директор;Сидоров Н.В. работает на двух должностях –программист и тестер;Иванов А.Г. работает менеджером.Создание вторичного ключа необходимо длякорректного отображения представлений.Представление – виртуальная таблица, сама посебе не хранит информацию, а являетсярезультатом выполнения некоторого запроса.3. Теперь пора научитьсякопировать и восстанавливать базуданных.Для резервного копирования необходимо вдереве окна IBConsole выбрать ту базу данных,для которой будем создавать резервную копию.Щелкнуть на названии БД (в нашем случае БДназывается MyBasa) правой кнопки мыши и в

появившемся меню выбрать команду “Backup /Restore ­> Backup …” Рис. 14.Рис. 14

После чего на экране появится окно “DatabaseBackup” (Рис. 15). В поле Alias будет выбрананаша база данных ­ MyBasa. В группе элементов“BackupFile(s)” в поле Alias необходимо ввестиMyBasa (имя базы данных в резервной копии). Впервой строке списка Filename(s) указываемпуть и имя файла архивной копии базы данных(C:\Temp\MyBD\MyBasaBackup.bac). Расширениедля файла архивной копии базы данных можнозадать любое. При нажатии на “OK” начнетсяпроцесс резервного копирования. Послезавершения копирования появитсяинформационное окно, в котором сообщается,что резервное копирование завершено.

Рис.14Для закрытия информационного окна нажмите“OK”. После чего закрываем окно “DatabaseBackup”, в котором отображается информацияпо резервному копированию Рис. 15.Для просмотра созданного файла необходимоперейти в папку, которую указали призаполнении поля “Filename(s)” (C:\Temp\MyBD).Восстановление резервной копии.Для восстановления резервной копиинеобходимо сначала отключить соединение сбазой данных. Для этого в дереве окна IBConsoleщелкаем правой кнопкой на имени БД (MyBasa)и выбираем пункт “Disconnect” (Рис. 16). На

Page 88: VR-Online (Август-сентябрь 2010)

Школа88

vr­online | сентябрь 2010

экране появится окно, в котором будетспрашиваться, уверены ли мы в том, что хотимотключить соединение с выбранной базойданных. Подтверждаем наш выбор (кнопка Yes).После чего соединение с базой данных будетпрервано.Далее выбираем команду главного меню окнаIBConsole “Database ­> Maintenance ­> Backup /Restore ­> Restore…”.

Рис. 16На экране появится диалоговое окно DatabaseRestore, в котором указываются параметрывосстановления базы данных из резервной копииРис. 17.В поле Alias группы элементов Backup File(s)

будет выбрана база данных – MyBasa (если онане выбрана автоматически, то выберите ее извыпадающего списка). Если в выпадающемсписке нет названия базы данных, тогдавыберите пункт “File…” и в появившемсядиалоговом окне укажите самостоятельно путь иназвание базы данных (если диалоговое окно невидит файл БД, то в выпадающем списке “Типфайлов” выберите “All files (*.*)”). После указаниябазы данных в этой же группе элементов встроке Filename(s) будет указан путь и имяфайла к резервной копии базы данных.В группе элементов Database будут указаныпараметры по умолчанию. Если необходимопоменять название базы данных, тогда в полеAlias введите новое название. По умолчаниюфайл базы данных будет восстановлен в папку,содержащую резервную копию файла БД. Путь,куда будет восстановлен файл базы данныхотображается в строке “Filename(s)”. Послеуказания параметров восстановления базыданных необходимо в группе элементов“Options:” в поле “Overwrite” установить значение“True”. Это означает, что база данных будетпереписываться из резервной копии.После указания всех параметров длявосстановления необходимо нажать на кнопку“OK” для запуска процесса восстановления базыданных из резервной копии Рис. 18.Когда восстановление закончится в окне“Database Restore” будет указано “Service ended”,означающую, что операция прошла успешно ибаза данных восстановлена успешно.

Рис. 18Всю информацию о ходе восстановления можносохранить в отдельный файл, для этого вглавном меню окна “Database Restore” выберитекоманду “File ­> Save…”.После восстановления файла базы данныхзакройте окно “Database Restore”, и в окнеIBConsole подключите восстановленную базуданных. Для этого щелкните правой кнопкоймыши на имени базы данных (MyBasa) и ввыпадающем списке выберите команду“Connect”.

Рисунок 15.

Рис. 17

Page 89: VR-Online (Август-сентябрь 2010)

1С:Предприятие 8.xЧасть 3.Типы данных

89

В прошлом году я написал две статьи, в которыхначал знакомить тебя с разработкой подплатформу «1С: Предприятие 8.х». К сожалению,на тех двух статьях все и закончилось. Сначалане было времени, потом пропало желание.Прошел год, и мне снова захотелось продолжитьначатое дело. Надеюсь, в этот раз мне удастсянаписать больше хороших статей. Что ж,приступим!О чем пойдет речьПервая статья была вводной. В ней я рассказал,как создать новую базу данных, а также добавитьв конфигурацию первый объект – справочник. Вовторой статье я немного отбился от плана исразу перешел к рассмотрению языка запросов.Это не совсем правильно, особенно учитывая,что я совершенно не рассказал про встроенныйязык. В сегодняшней статье я попытаюсьисправить это упущение. Мы поговорим о типахданных, а также о всяких языковых нюансах.Типы данных в мире 1С:Предприятие 8.xПеред тем как погрузится в языковыеконструкции встроенного языка, мы должныпознакомиться с основными типами данных. Ксчастью, их не так уж и много:­ Число. Под числами в 1С подразумеваются какцелые, так и значения с плавающей запятой.Максимальная разрядность значения типа«число» может быть 32 знака, включаядесятичную точку. Стоит также учитывать, чтоограничение в 32 знака действует на числа,которые будут записываться в базу данных. Есливы объявили переменную и присвоили в неезначение больше 32 знаков, то все будет ok. Длячисловых значений, которые хранятся в памяти,данное ограничение не действует. Послеобъявления переменой типа «Число» еезначением будет 0.­ Строка. Строка она и в Африке строка. Как влюбом другом языке программирования, в 1Среализованы все необходимые функции дляманипулирования строками. Значения данного

типа представлены в юникоде (Unicode). Длинапеременных типа строка – не ограничена.­ Дата. Опять же, типичный для многих языковтип «Дата». Помимо самой даты значенияданного типа содержат и время. Под временемподразумевается часы, минуты и секунды. Сразупосле инициализации переменной типа «Дата»ей будет присвоено значение (дата) «01 января0001 года 00 часов 00 минут 00 секунд».Запомни это, т.к. это в будущем оно обязательнопригодится.­ Булево. Как и следует ожидать, переменныеданного типа могут принимать лишь двазначения: Истина, Ложь.­ Неопределено. Значения типа «неопределено»применяются в случаях, когда требуется указатьпустое значение, не относящееся ни к какомудругому типу данных. Например, тебе нужнообъявить переменную, которая потом будет где­нибудь использоваться. Ты конечно можешьприсвоить ей значение вроде 0 или «» (т.е.пустая строка), но тем самым ты сразуустановишь для нее соответствующий тип (числоили строка). А что если установка одного из этихтипов тебе в последствие может помешать? Вотв таких случаях можно использовать значениетипа «неопределено». Стоит также заметить, чтомногие функции встроенного языка, в случае неуспешного выполнения, в качестве результатавозвращают значение данного типа. Оченьрекомендую, при описании своих функции,руководствоваться тем же правилом.­ Null. Общий смысл у Null почти такой же, как и у«неопределено». Значения данного типаприменяются для обозначения отсутствующегозначения в базе данных. Чаще всего, получитьзначения данного типа ты можешь прииспользовании языка запросов. Например, тынаписал запрос, в котором используешьобъединение таблиц. Звезды сложились неочень удачно, и в одной из таблиц отсутствуетзначение, удовлетворяющее твоему условию. Втаком случае, на месте отсутствующегозначения будет значение типа Null.

vr­online | сентябрь 2010

Автор

:Анто

новИго

рьaka

Spide

r_NET

Email:

antono

v.igor.k

hv@gm

ail.com

Школа

Page 90: VR-Online (Август-сентябрь 2010)

Школа90

vr­online | сентябрь 2010

Со значением типа Null возможно столкнуться нетолько при работе с запросами. Например,значение типа Null принимают реквизиты,которые не используются объектом. Честноговоря, на практике с этим сталкиваешься крайнередко. Из примеров могу только вспомнить,вариант, описанный в одной из статей с диска«ИТС». Представим, что у нас естьиерархический справочник с реквизитом«количество». При создании данного реквизита,ему установили свойство «Использование» взначение «Для элемента». Если попробоватьобратится к данному реквизиту для элементасправочника типа «группа», то его значением какраз будет Null.­ Тип. Данный тип применяется для определенияимеющихся типов. Немного запутано звучит? Ok,попробую объяснить на примере. Представь, чтоперед тобой встала задача сравнить типы двухпеременных. В коде это будет выглядетьпримерно так:Переменная1 = 123; //Поскольку мы присвоиличисло, значит тип переменной будет «число».Переменная2 = «строка»; //Здесь мы присвоилистроку, значит тип переменной будет строка.

Теперь тебе нужно на 100% убедиться, чтопеременная1 является числовой. Вот тут нам ипригодится тип «Тип» (забавно звучит), а такжепарочка вспомогательных функций. Пока небудет лезть в подробности. Просто взгляни ипопробуй понять нижеприведенный пример:Если (ТипЗнч(Переменная1) = Тип(«Число»)) Тогда

Сообщить(«Переменная1 являетсячисловой!»);Иначе

Сообщить(«Переменная1 НЕ являетсячисловой :(»);КонецЕсли;

В этом небольшом кусочке кода, я сначалаполучаю тип переменной при помощи функции«ТипЗнч()». Данная функция в качествепараметра принимает значение, тип котороготребуется получить. В нашем случае это«Переменная1». Затем мне требуется получитьзначение типа «Тип», характеризующее тип«Число». Для этого во встроенном языкепредусмотрена функция «Тип()». Она принимаетвсего лишь один аргумент – строковоепредставление имени типа. Раз нам требуетсясравнить с типом «Число», то параметром дляфункции будет «Число». После завершениясравнения выводим сообщение.Коллекции значенийПомимо примитивных типов, в платформе 1С:Предприятие 8.х, реализованы так называемыетипы­коллекции. В переменных таких типов тыможешь хранить целые коллекции (наборы)

значений. Наиболее часто используемые:1. СписокЗначений. Представляет собойтаблицу, состоящую из четырех колонок:a. Значение.b. Представление.c. Пометкаd. Картинка.Разумеется, для каждого элемента тебедоступны все эти 4 поля. В первом ты можешьхранить непосредственно значение; во второмтекстовое представление значения; в третьемзначение тип Булево; и в четвертом – картинку,характеризующую данный элемент. Никто оттебя не требует заполнения всех четырех полей.Можешь заполнять лишь поле значение. Всебудет прекрасно работать, правда, для такихситуаций проще всего применять другуколлекцию – массив.2. Массив. Как и в любом другом языкепрограммирования, в 1С реализованаподдержка массивов. Ты можешь использоватькак одномерные, так и многомерные массивы.Массивы в 1С могут быть фиксированной длины,а также динамические. В последнем вариантеуказание размера массива не требуется.3. ТаблицаЗначений. Один из самых частоприменяемых типов­коллекций. Таблицазначений очень похожа на массив и списокзначений. Здесь ты также можешь хранитьколлекцию значений, но в отличие от массивовили списков значений, тебе доступны,следующие вкусняшки:a. Колонки. Ты без проблем можешь создатьсколько угодно колонок и использовать их всвоих целях. Каждая колонка может быть какопределенного типа, так и произвольного.b. Итоги. Для числовых колонок имеетсявозможность подсчета итогов.c. Сортировка значений.d. Поиск строк.e. Группировка по значению (Свертывание).Допустим, у тебя есть куча строк, в которыхсодержится номенклатура (товар, услуга) исумма. Номенклатура периодическиповторяется. Тут тебе приспичило посчитатьобщую сумму по какому­то одномутовару/услуге. Для решения подобных задачлучше всего использовать свертывание. Всерешение сведется к вызову одного лишь метода.Прикладные типыПомимо примитивных типов существуют еще такназываемые «прикладные». Главное их отличиеот примитивных типов в том, что они зависят отконфигурации, т.е. изначально сама платформа

Page 91: VR-Online (Август-сентябрь 2010)

Школа91

vr­online | сентябрь 2010

о них ничего не знает. Звучит немного запутанно,попробую объяснить на примере.Представим, что нам потребовалось создатьсправочник (назовем его номенклатура) дляхранения номенклатуры нашей организации.После того как ты добавишь в деревоконфигурации новый элемент типа справочник,тебе сразу станут доступными несколько новыхтипов:­ СправочникСсылка.Номенклатура­ СправочникОбъект.Номенклатура­ СправочникВыборка.Номенклатура­ СправочникМенеджер.Номенклатура­ СправочникСписок.НоменклатураПри создании других объектов конфигурациибудет происходить та же история. Например,если мы добавим к нашей конфигурации новыйдокумент (например, ПриходнаяНакладная), то унас опять же появятся несколько новых типов:­ ДокументСсылка.ПриходнаяНакладная­ ДокументОбъект.ПриходнаяНакладная­ и т.д.Сразу хочу обратить твое внимание напохожесть прикладных типов. Возьмем, кпримеру, тип«СправочникВыборка.<ИмяСправочника>». Этоттип представляет собой результат выборкиэлементов из справочника по заданнымусловиям. У объектов такого типа вобязательном порядке имеются:­ метод Следующий(), позволяющий перейти наочередной элемент выборки;­ свойства, посредством которым идетобращение к реквизитам справочника (именасвойств = именам реквизитов).Так вот, если ты научился работать с объектамитипа «СправочникВыборка.<ИмяСправочника>»,то считай, что ты сразу познал мастерствоработы с объектами типа:«ДокументВыборка.<ИмяДокумента>». Уобъектов такого типа тоже имеется метод«Следующий()» и точно также ты можешьполучить доступ к реквизитам документапосредством одноименных свойств. Точно такоеже правило (похожести) актуально и для другихтипов объектов. Когда мы начнем рассматриватьпрактические примеры ­ ты в этом убедишься.Думаю, смысл прикладных типов понятен, а разтак, то рассмотрим некоторые из них чутьподробней. Начнем, пожалуй, с типа «ссылка».Хотя лучше было начинать не с этого типа, нокак показывает практика, именно со значениямитипа «ссылка» встречаешься раньше, чем сдругими.

Тип «Ссылка»Тип «Ссылка» ­ один из тех типов с которымитебе придется частенько работать приразработке/доработке решений на базеплатформы 1С:Предприятие. Данный типсоздается для всех объектов конфигурации,которые хранят данные объектного типа.Примерами таких объектов являются:справочники, документы и т.д.Для чего нужны ссылки? В первую очередь дляидентификации объекта данных. Например,каждый элемент справочника имеет своюуникальную ссылку. Если ты удалишь элемент, азатем создашь точно такой же (заполнив всереквизитами теми же данными, что и были уудаленного элемента), то он не будеттождественен удаленному элементу, т.к. у негобудет совсем другой идентификатор.Под идентификатором подразумевается guid(уникальный 128­битный идентификатор). Еслиговорить еще точнее, то каждая ссылка выглядитпримерно так: ad6f4d4b­ad79­11df­a55d­cc98d6e732d7.У тебя может возникнуть логичный вопрос: «Аможно ли создать элемент справочника иприсвоить ему определенный guid?». Да, этодействительно можно сделать. В следующихуроках мы рассмотрим этот процесс на практике.Тип «Объект»Подобно типу «Ссылка» тип «Объект» создаетсялишь для тех объектов конфигурации, которыехранят в себе данные объектного типа(справочники, документы и т.д.). Изменяя данныетипа «Объект» ты вносишь изменениянепосредственно в БД. Если сравнивать тип«Объект» с типом «Ссылка», то главное ихотличие будет в том, что посредством первогоможно модифицировать данные, а с помощьювторого выполнять лишь чтение. Объект любогоэлемента можно получить по ссылке.ПрактикаВсе что я рассказал выше – это конечно жехорошо и тебе крайне желательно (на данномэтапе) хотя бы в общих чертах ориентироватьсяв типах данных платформы 1С:Предприятие 8.х.Чтобы лучше запомнить материал и хотьнемного попрактиковаться, я предлагаю теберассмотреть нижеприведенные примеры. Крайнежелательно, чтобы ты, самостоятельно набирали смотрел все приведенные мной примеры. Этопринесет намного больше пользы, чем просточтение.Как практиковатьсяДля воспроизведения рассмотренных примеровлучше всего создать новую обработку и весь кодписать в ней. Это делается следующим образом:

Page 92: VR-Online (Август-сентябрь 2010)

Школа92

vr­online | сентябрь 2010

1. Запусти 1С:Предприятие в режимконфигуратор (для этого предварительнопридется создать чистую базу).2. В главном меню конфигуратора зайди в«Файл» ­> «Новый».3. В появившемся окне (см. рисунок 1)выбери «Внешняя обработка» и нажми на кнопку

«Ok”.Рисунок 1. Окна выбора вида документа

4. Выполнив эти три простых шага, тысоздашь новую обработку (см. рисунок 2).Заполни поле «Имя». Напиши сюда все чтохочешь, но помни, что в имени не допускаютсяпробелы и оно должно начинаться на букву илицифру. Свою обработку я назвал«ОбработкаДляТестов».

Рисунок 2. Новая обработка5. Теперь нас отделяет всего лишь один шагдо написания первых строчек кода. Давайсоздадим в нашей обработке новую форму ибросим на нее один компонент­кнопку. Создатьновую форму можно как минимум двумяспособами:a. Нажми на кнопку «Действия». Впоявившемся контекстном меню выбери пункт«Добавить» ­> «Форму».b. В табличной части окна настроекобработки кликни правой кнопкой мыши попункту «Формы» и в появившемся диалоге

нажми «Добавить».6. В окне создания новой формы (см.рисунок 3) тебе предложат установитьследующие опции:­ Тип формы. Доступно два варианта: «формаобработки» и «произвольная форма». Посколькумы собираемся делать именно формуобработки, то соответственно выбираем первыйвариант. Обрати внимание на флажок«Назначить форму основной». После егоустановки наша форма будет сразу жеотображаться при открытии обработки.­ Имя. Имя для твоей формы. В своем примере явсе оставил по умолчанию.­ Командная панель формы сверху. Стоит лисоздавать вверху формы панель инструментов.Я оставил как есть.­ Командная панель формы снизу. Настройкааналогична предыдущей. Только на этот разречь идет о нижней панели инструментов.Флажок оставляем.Прошвырнувшись по всем настройкам, сразунажимаем кнопку «Готово». Результатомнажатия, станет создание новой формы с двумя

панелями инструментов (верхней и нижней), атакже двумя кнопками с именами: «Выполнить»и «Отмена».Рисунок 3. Добавляем новую форму

Page 93: VR-Online (Август-сентябрь 2010)

Школа93

vr­online | сентябрь 2010

Рисунок 4. Конструктор новой формы

Рисунок 5. Созданная формаНу, вот и все. Осталось лишь бросить на формукомпонент «Кнопка» или просто создатьобработчик события «ПриНажатии» для ужесозданной кнопки«Выполнить».Воспользуемсявторым вариантом.Щелкни два разалевой клавишеймыши по кнопке«Выполнить».Справа должнапоявиться панельсо свойствами исобытиямивыбранногоэлементауправления.

Рисунок 6. Свойствакнопки

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

Если ты все сделал правильно, то перед тобойдолжно открыться окно «Редактор кода» ссгенерированной процедурой«КнопкаВыполнитьНажатие()». Собственно вней, нам и предстоит набивать код примеров.Пока мы не начали писать первый код, хочусразу предупредить: «Не волнуйся, если спониманием примеров у тебя возниклисложности!». Все придет со временем и спрактикой. Если даже что­то не понятно, топросто воспроизводи код примера у себя исмотри что и как работает, а еще лучше напиши

мне письме и я отвечу тебе в индивидуальномпорядке.Объявление переменныхВо встроенном языке 1С нет никойопределенной области для объявленияпеременных (в отличие от Delphi).Потребовалась переменная – взял и объявил.Кому­то такой подход кажется удобным, а кому­то нет. Когда я переходил с Delphi на1С:Предприятие, то поначалу меня это бесило, апотом привык.Все переменные можно условно разделить натри вида:­ Локальные. Эти переменные доступны лишь впределах одной функции/процедуры и после еевыполнения будут благополучно уничтожены.­ Глобальные. Такие переменные объявляются всамом начале модуля и доступны в любой изпроцедур данного модуля.­ Экспортные. Данные переменныепредставляют собой модифицированную версиюглобальных перемен. Они объявляются такжекак и глобальные (в самом начале модуля), азатем к ним дописывается ключевое слово«Экспорт». Если ты объявил переменную какэкспортную, то ты можешь обратиться к ней издругих модулей (не относящихся к данномуобъекту).Тренируемся1. Объявление локальных переменныхНачнем с самого простого – объявлениелокальных переменных. Перейди в кодсгенерированной процедуры и доведи его доследующего вида:Процедура КнопкаВыполнитьНажатие(Кнопка)

ЧисловаяПеременная = 0;СтроковаяПеременная = "";ПеременнаяТипаДата = Дата("00010101");ПеременнаяБулево = Истина;

КонецПроцедуры

Обрати внимание, что я нигде не указываю типпеременной. 1С:Предприятие устанавливает егосамостоятельно на основе содержимого.2. Объявление глобальных переменныхТеперь попробуем объявить глобальнуюпеременную. Для этого поднимись в самоеначало нашего модуля формы и напиши в немключевое слово «Перем» (разумеется, безкавычек), а после него имя нашей переменной. Вкачестве имени я выбрал«ГлобальнаяПеременная». Обязательно послеимени переменной поставь точку с запятой.Проделав эту операцию, твой код должен статьпримерно таким:Перем ГлобальнаяПеременная;

Page 94: VR-Online (Август-сентябрь 2010)

Школа94

vr­online | сентябрь 2010

Процедура КнопкаВыполнитьНажатие(Кнопка)ЧисловаяПеременная = 0;СтроковаяПеременная = "";ПеременнаяТипаДата = Дата("00010101");ПеременнаяБулево = Истина;

КонецПроцедуры

Так­с, теперь можно попробовать заюзатьобъявленную глобальную переменную. Для этогодобавь в код процедуры две строчки:ГлобальнаяПеременная = «Это строковаяглобальная переменная»;Сообщить(ГлобальнаяПеременная);

Первая строка не должна вызвать затруднений.Во второй же, я вызываю встроенную метод«Сообщить()». С ее помощью можно выводитьлюбые сообщения в окно «Служебныесообщения» (Режим 1С:Предприятие). Каждомувыводимому сообщению можно присвоитьопределенную иконку. Тем самым, пользовательсможет различать тип сообщения: операциявыполнена успешно, возникла ошибка и т.д.Чтобы добавить к выводимому сообщениюиконку тебе необходимо передать процедуревторой параметр типа «СтатусСообщения». Онможет принимать одно из следующих значений:БезСтатуса – никакая иконка добавляться ксообщению не будет.Важное – перед твоим сообщением будет двавосклицательных знака.Внимание – в качестве иконки будет одинвосклицательный знак.Информация – при этом типе выводится иконка ввиде английской буквы i.Обычное ­ значение по умолчанию. Если тывызываешь процедуру «Сообщить()» и неуказываешь второй параметр, то на самом делесчитается, что ты указалСтатусСообщения.Обычное.ОченьВажное – тоже, что и «Важное», тольковместо двух выводится три восклицательныхзнака.Рассмотрим пример использования методаСообщить() со вторым параметром:Сообщить(«Какой-то текст»,СтатусСообщения.Информация);Сообщить(«Какой-то важный текст»,СтатусСообщения.Важное);Сообщить(«Какой-то очень важный текст»,СтатусСообщения.ОченьВажное);

Рисунок 7. Демонстрация метода Сообщить();

Первое испытание нашейобработки

Мы уже написали код, результат выполнениякоторого можно увидеть на экране (помнишьвывод в окно служебных сообщенийсодержимого переменнойГлобальнаяПеременная?) и теперь самое времясделать это.Как ты уже знаешь, в режиме «Конфигуратор»мы разрабатываем программное решение, аработаем с ним непосредственно из режима«Предприятие». Значит, чтобы испробовать код,мы должны запустить 1С в режиме«Предприятие», а затем открыть нашу обработкуи клацнуть на одну единственную кнопку –«Выполнить». Что ж, так и поступим.Проще всего режим «Предприятие» запуститьпрямо из конфигуратора. В таком случае, тебесразу будет доступна отладка кода (см.соответствующую статью в этом номере)конфигурации. Выполнить запуск ты можешьпутем выбора в меню «Отладка» пункта «Начатьотладку» или просто нажав на клавишу F5.Попробуй проделать эту нехитрую операцию.После запуска 1С в режиме «Предприятие»,заходи в меню «Файл» и выбирай в нем пункт«Открыть». В появившемся диалоговом окнеоткрой свою сохраненную обработку (файл срасширением epf). Если не запутаешься в этойпростейшей операции, то увидишь формуобработки.

Рисунок 8. Наша обработка в режиме «Предприятие»Нажимай на кнопку «Выполнить». Если ошибок вкоде допущено не было, то ты увидишьпримерно такую картинку:

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

Page 95: VR-Online (Август-сентябрь 2010)

Школа95

vr­online | сентябрь 2010

Вся разница заключается в использованииключевого слова «Экспорт», которое влияет навидимость переменной.Не будем многословить, а просто объявимэкспортную переменную в модуле объектанашей обработки. Перейти в модуль обработкиможно из окна настроек. Помнишь, мы в немзадавали имя нашей обработке и создавалиформу? Если подзабыл, то взгляни на рисунок2 и освежи свою память.Так вот, в этом окне нужно нажать на кнопку«Действия» и в появившемся контекстном менювыбрать «Открыть модуль объекта». Откроетсяеще одно окно редактора кода. Это и естьмодуль объекта. Пока не будем вдаваться внюансы модулей (об этом поговорим в отдельнойстатье), а просто объявим в этом местепеременную:Перем ЭтоСуперПеременная Экспорт;

Сохраняй изменения и закрывай окно редакторакода с модулем объекта. Возвращайся в модульсвоей формы и в обработчике события«ПриНажатии» кнопки «Выполнить» напиши:«Это» (без кавычек) и нажми ctrl+space (пробел).Перед тобой должно появится окно дополнениякода:

Рисунок 10. Окно дополнения кодаВ нем уже будет выделено имя переменной, ккоторой мы собирались обратиться. В нашемслучае это ранее объявленная экспортнаяпеременная. Попробуй ради интереса присвоитьей какое­нибудь значение.Экспортные переменные ты можешь объявлять и

в модуле формы, а затем обращаться к нимскажем из другой формы или вовсе другойобработки. Когда мы будем делать своюконфигурацию, я покажу, как это делается напрактике.Операции со значениями разныхтиповИтак, начнем с типа «Число». Здесь всестандартно. Ты можешь производить созначениями типа «Число» любыематематические операции:­ сложение (+)­ вычитание (­)­ умножение (*)­ деление (/)­ остаток от деления (%)Ну и само собой ты можешь применять кзначениям типа «Число» различные знакисравнения:< ­ меньше> ­ больше<> ­ неравно>= ­ больше либо равно<= ­ меньше либо равноРассмотрим несколько примеров:a = 1; // a = 1b = 2; // b = 2c = a + b; // с = 3c = c ­1; //с = 2a = c * c; // a = 4c = a / 2; // c = 2z = a < c; // z = ложь, т.к. 4 > 2x = c <= a; //x = истина, т.к. 2, меньше, чем 4 и т.д.Ok, с операциями над числовыми значениямиразобрались, теперь возьмемся за строки. Состроковыми значениями ты также можешьпроизводить ряд операций. Например:­ сложение (конкатенация). Прибавление однойстроки к другой;­ логические операции. При работе со строкамиты можешь использовать различные знакисравнения. Результатом такого кода будетзначение типа «Булево» (Истина или Ложь);Как обычно, проверим все на примерах://Конкатенация строкаПерваяСтрока = ”Этот мир”;ВтораяСтрока = “придуман не нами”;

Рисунок 9.

Page 96: VR-Online (Август-сентябрь 2010)

Школа96

vr­online | сентябрь 2010

ТретьяСтрока = ПерваяСтрока + ” ” +ВтораяСтрока; //ТретьяСтрока = “Это мирпридуман не нами”//Логически операцииПерваяСтрока = ”VR-Online”;ВтораяСтрока = ”is cool”;Результат = ПерваяСтрока < ВтораяСтрока;//Результат = Ложь, т.к. ПерваяСтрока длиннеевторой.Результат = ВтораяСтрока <= ПерваяСтрока;//Результат = Истина, т.к. ВтораяСтрока корочеПерваяСтрока

В принципе, про строки мне сказать большенечего. Хотя нет, стоп! Я совсем забылрассказать о том, что в 1С:Предприятие всестроки хранятся в UNICODE. Имей это ввиду.Преобразование значенийПреобразовывать значения можно явно инеявно. Под явным преобразованиемподразумевается, что нам требуетсясамостоятельно указать тип, к которому мыхотим преобразовать значение. Не будет далекоходить, и сразу рассмотрим пример:Переменная1 = 25;Сообщить(Строка(Переменная1));

В первой строке я объявляю числовуюпеременную, а во второй, вывожу ее значение,предварительно указав, что значение должнопреобразоваться к строке. Это действие явыполняю при помощи функции «строка()».Неявное преобразование заключается в том, чтодля выполнения конвертирования значения кновому типу не требуется использоватьдополнительные функции. Платформа всесделает за нас. Взгляни на примеры://Пример 1Переменная1 = 25;Сообщить(Переменная1); //Значение переменнойавтоматически преобразуется к типу «строка».//Пример 2Переменная1 = 243;Если Переменная1 Тогда //Условие сработает,т.к. после преобразования значения//к типу «Булево» мы получим «Истина»Сообщить(«Истина»);КонецЕсли;//Пример 3Переменная1 = 0Если Переменная1 Тогда //А вот здесь условиене сработает, т.к. после преобразования

//получим «Ложь»Сообщить(«Истина»);КонецЕсли;

Для явного преобразования ты можешьиспользовать функции: Число(), Строка(), Дата(),Булево(). Попробуй познакомиться с этимифункциями на практике. Напиши несколькопримеров и посмотри, как они работают.Работа с коллекциями значенийКоллекции значений – наиболее часто

используемые типы значений при разработкерешений под платформу 1С:Предприятие.Самой простой коллекцией является Массив –тип данных, для хранения наборов значенийодинакового типа. Если ты ни разу несталкивался с этим словом, то представь, чтотебе требуется объявить переменные созначениями от 1 до 100:Переменная1 = 1;Переменная2 = 2;Переменная3 = 3;…

Решение полностью рабочее, но ты толькопредставь, что придется объявить 100переменных. Вот это уже совсем некрасиво инеудобно. Куда лучше объявить массив из 100элементов. Посмотрим на пример:Массив = Новый Массив(99);Массив[0] = 1;Массив[1] = 2;Массив.Добавить(3);…

Помимо того, что вместо 100 имен переменных утебя будет всего одно, при использованиимассивов ты получаешь такую полезнуювозможность как перебор его элементов. Со старазными именами переменных ты это несделаешь при всем желании. Посмотримпример:Для сч = 0 По Массив.Количество() – 1 ЦиклСообщить(Массив[сч]); //Выведет «1»КонецЦикла;

Обрати внимание на пример, в котором яобъявлял новый массив. При инициализациипеременной типа массив я указал в конструкторе(Новый Массив) значение 99. Этим действием яуказал верхнюю границу количества элементов.Стоп! Я же хотел создать массив для хранения100 элементов, почему тогда пришлось указать99? Все просто. Счет элементов массиваначинается с 0, а не единицы. Поэтому иполучается, что указывая 99, мы на самом делеподразумеваем 100.Массивы можно разделить на два вида:динамические и статические. В приведенномвыше примере я описал статический массив. Онотличается от динамического тем, что имеетфиксированное количество элементов. Во времясоздания массива я сразу указал верхнююграницу элементов. Изменить это значение впроцессе работы с массивом уже будет нельзя.С динамическими массивами все наоборот. Во

Page 97: VR-Online (Август-сентябрь 2010)

Школа97

vr­online | сентябрь 2010

время их создания не нужно указыватьмаксимальное количество элементов. Простоинициализируем переменную типа массив исразу можем добавлять в нее любое количествозначений. Посмотрим пример:Массив = Новый Массив();Массив.Добавить(1);Массив.Добавить(2);Массив.Добавить(3);…

Чтобы перебрать элементы динамическогомассива можно воспользоваться уже знакомойнам конструкцией:Для сч = 0 по Массив.Количество() – 1 ЦиклСообщить(Массив[сч]);КонецЦикла;

Помимо разделения массивов на динамическиеи статические их также можно поделить наодномерные и многомерные. Вышеприведенныепримеры демонстрировали одномерныемассивы, т.е. массивы с одним измерением. Каки многие другие языки программирования, 1Споддерживает многомерные массивы. Что такоемногомерный массив? Это такой же массив,только в нем каждый элемент является ссылкойна другой одномерный массив. Опять же,взглянем на пример:МногомерныйМассив = Новый Массив (2, 4, 10);В этом примере я объявил массив из двухэлементов, каждый из которых являетсямассивом из 4 элементов, каждый из которыхявляется массивом из 10 элементов. Попытайсяэто переварить.Списки значенийСписки значений представляют собой болеепродвинутую версию массива. Этот тип данныхтакже позволяет хранить наборы значений, но вотличие от массива имеет, ни одну колонку, лишьдля хранения значения, а целых четыре:­ Значение. Сюда записывается значениепроизвольного типа;­ Представление. Строковое представлениезначения;­ Пометка. Значение типа булево, определяющееустановку пометки для значения;­ Картинка. В данную колонку можно записатьзначение типа «картинка»;Для чего можно использовать список значений?Да много для чего! Если хочешь, чтобы юзервидел не сырое значение из списка, то заполняйколонку «представление» и в нее пиши нужныйтекст. Рассмотрим небольшой пример.Представь, что нам требуется перебрать всеимеющиеся в конфигурации документы и

вывести пользователю их имена. Причем не теимена, что указаны в поле «Имя» во времясоздания нового документа, а тот текст, которыйсодержится в поле «Синоним» (как правило, внем пишется полное название документа).Причем стоит учитывать, что реальное имядокумента (из поля «Имя») нам также можетпригодиться, поэтому его также необходимосохранять. Код решения озвученной задачисмотри ниже.//Создаем переменную типа СписокЗначенийСписокЗначений = Новый СписокЗначений;//На всякий случай сразу ее очищаемСписокЗначений.Очистить();//Начинаем перебирать все имеющиеся документыДля Каждого Документ Из Метаданные.ДокументыЦикл//Добавляем информацию об очередном документев нашу переменную

СписокЗначений.Добавить(Документ.Имя,Документ.Синоним);КонецЦикла;//Теперь выводим все содержимое нашего списказначенийДля сч = 0 по СписокЗначений.Количество() - 1Цикл

Сообщить("Представление: " +СписокЗначений[сч].Представление + ";Значение: " + СписокЗначений[сч].Значение);КонецЦикла;

Не будем вдаваться в подробности получениясписка документов, т.к. это не относится к темеданной статьи, а посмотрим лишь, какпроисходит работа со списком значений. Итак,для того чтобы добавить новый элемент всписок значений требуется воспользоватьсяметодом «Добавить()». Он принимает несколькопараметров:

­ Значение (Произвольный тип) – в данныйпараметр записываются значения произвольноготипа. Этот параметр является обязательным длязаполнения.

­ Представление (Тип данных – строка) –параметр не обязателен для заполнения. В неготы можешь записывать строковоепредставление для значения.

­ Пометка (Тип данных – булево) – опять же,параметр не обязателен к заполнению, но принеобходимости в него можно записыватьзначения типа булево, т.е. ИСТИНА/ЛОЖЬ.

­ Картинка (Тип данных – картинка) – картинка,она и в Африке картинка.

В вышеприведенном примере я заполняю лишь

Page 98: VR-Online (Август-сентябрь 2010)

Школа98

vr­online | сентябрь 2010

первый и второй параметр, т.е. «Значение» (имядокумента) и «Представление» (синонимдокумента). Остальные параметры простоигнорирую, т.к. в их использовании нетнеобходимости.

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

Переменная =СписокЗначений[4].Представление;

Получение значения/пометки/картинки делаетсяаналогичным образом.Таблица значенийПо своей сущности тип данныхТаблицаЗначений похож на СписокЗначений. Вкачестве главного отличия можно выделитьвозможность создания произвольных колонок.Если в списке значений к твоим услугам лишьпредопределенные колонки, то в таблицезначений нет никаких ограничений. Требуетсяопределенный набор колонок – взял и создал.Кроме колонок, доступны также фишки вродегруппировки по значению, подсчета итогов поколонке и т.д.Поскольку принцип работы с таблицамизначений почти такой же, как и со спискамизначений, то я не буду расписывать подробности,а просто приведу несколько примеров. Всеподробности мы рассмотрим, когда будемразрабатывать собственную конфигурацию//Создаем таблицу значенийТаблицаЗначений = Новый ТаблицаЗначений;//Определяем колонки//Каждой колонке можно задать определенный типданных.//Рассмотрим этот вариант в следующий разТаблицаЗначений.Колонки.Добавить("Товар");ТаблицаЗначений.Колонки.Добавить("Количество");ТаблицаЗначений.Колонки.Добавить("Сумма");//Заполняем таблицу значений даннымиНоваяСтрока = ТаблицаЗначений.Добавить();//Записываем данные в кажду колонкуНоваяСтрока.Товар = "Огурец";НоваяСтрока.Количество = 5;НоваяСтрока.Сумма = 25;НоваяСтрока = ТаблицаЗначений.Добавить();НоваяСтрока.Товар = "Морковь";НоваяСтрока.Количество = 10;НоваяСтрока.Сумма = 15.5;НоваяСтрока = ТаблицаЗначений.Добавить();НоваяСтрока.Товар = "Огурец";НоваяСтрока.Количество = 9;НоваяСтрока.Сумма = 45;

//Перебираем строки таблицы значений и выводимсодержимое в окно служебных сообщенийДля Каждого СтрокаТЗ Из ТаблицаЗначений Цикл

Сообщить("Строка таблицы значений: ");Сообщить("");Сообщить("Товар: " + СтрокаТЗ.Товар);Сообщить("Количество: " +СтрокаТЗ.Количество);Сообщить("Сумма: " + СтрокаТЗ.Сумма);Сообщить("-------------------");

КонецЦикла;//Посчитаем итоговую сумму по всем строкамСообщить("Всего товаров на сумму: " +ТаблицаЗначений.Итог("Сумма"));Сообщить("Общее количество: " +ТаблицаЗначений.Итог("Количество"));//Теперь посчитаем количество и суму за огорцыТаблицаЗначений.Свернуть("Товар", "Количество,Сумма");Сообщить("--------------");//После вывода, строка с огурцами будет одна,а не двеДля Каждого СтрокаТЗ Из ТаблицаЗначений Цикл

Сообщить("Строка таблицы значений: ");Сообщить("");Сообщить("Товар: " + СтрокаТЗ.Товар);Сообщить("Количество: " +СтрокаТЗ.Количество);Сообщить("Сумма: " + СтрокаТЗ.Сумма);Сообщить("-------------------");

КонецЦикла;

Результатом выполнения данного кода будет:

Строка таблицы значений:Товар: ОгурецКоличество: 5Сумма: 25­­­­­­­­­­­­­­­­­­­Строка таблицы значений:Товар: МорковьКоличество: 10Сумма: 15,5­­­­­­­­­­­­­­­­­­­Строка таблицы значений:Товар: ОгурецКоличество: 9Сумма: 45­­­­­­­­­­­­­­­­­­­Всего товаров на сумму: 85,5Общее количество: 24­­­­­­­­­­­­­­Строка таблицы значений:Товар: Огурец

Page 99: VR-Online (Август-сентябрь 2010)

Школа99

vr­online | сентябрь 2010

Количество: 14Сумма: 70­­­­­­­­­­­­­­­­­­­Строка таблицы значений:Товар: МорковьКоличество: 10Сумма: 15,5­­­­­­­­­­­­­­­­­­­Вот и всеНа этом я хочу закончить свое и без тогозатянувшееся повествование. Статья получиласьдостаточно большой, но я надеюсь, ты осилишьее до следующего номера, т.к. в октябрьскоговыпуске будет опубликовано продолжение.Удачи!

Page 100: VR-Online (Август-сентябрь 2010)

1С:Предприятие 8.xЧасть 4.Отладка

100

В прошлой части статьи (ух, и большая же онаполучилась) я рассказал тебе о существующихтипах данных в системе «1С:Предприятие 8».Практическая часть той статьи была небольшой,но все же, я показал тебе, как объявлятьпеременные различных типов, а такжесравнивать их значения или определять их тип. Вчетвертой части статьи я хочу немного отойти отпоставленного плана (да простите менягрешного) и сразу рассмотреть такой важныйпроцесс как отладку. Если не научитьсяоперировать отладчиком (благо это не сложно),то есть большие шансы превратить процессразработки в сущий кошмар.Может это и звучит смешно, но мне частоприсылают вопросы (связанные спрограммированием на Delphi) в которых просятпосмотреть исходник и найти ошибку. Если мнепозволяет время, то я с удовольствием берусь заэто дело и в 99 случаях из 100 ошибки одни и теже: обращение к несуществующему индексу вмассиве, взаимодействие с объектами, которыеуже были уничтожены и т.д. Все эти проблемыочень легко обнаружить и пофиксить припомощи отладчика. Странно, но почему­тоначинающие программисты пренебрегают этим.Хотя, отчасти я могу объяснить. Когда я читалкниги по Delphi, то замечал, что во многих из нихотсутствуют главы с описанием и примерамиотладки приложения. А ведь зря! На мой взгляд,нужно сразу начинать учить работать сдебаггером (отладчиком), чтобы новичок понял,что без этого дальше никуда.Что такое отладчикЕсли у тебя уже имеется опытпрограммирования на каком­либо языкепрограммирования, то ты наверняка знаешь, длячего нужны отладчики, а значит, можешь сразупереходить к следующему разделу статьи. Здесьже я рассмотрю само определение.Итак, отладчик – это отдельное приложение,либо компонент среды разработки (IDE)предназначенный для поиска ошибок впрограмме. Отладчик позволяет тебе выполнять

код программы пошагово (трассировка),просматривать значения переменных, изменятьих значения (прямо во время выполненияпрограммы) и т.д.Я уже сказал, что отладчики бывают каквстроенные в IDE, так и выполненные в видеотдельных приложений. С первыми все понятно,а для чего нужны вторые? Все просто – дляотладки любых приложений. Например, был всвое время такой замечательный продукт (нынене развивается) как SoftICE. Для крэкеров 90­х/середины 2000­х, SI был инструментов 1. Онпозволял отлаживать абсолютно любыепрограммы/драйвера для Windows. Крэкерыиспользовали его для анализа программ с цельюснятия системы защиты, а разработчики дляотладки своих приложений.Отладка в 1С:Предприятие 8.хПоскольку «1С:Предприятие» это все жеплатформа, включающая в себя полноценнуюсреду разработки присутствие в ней отладчикавполне обосновано. Запусти «1С:Предприятие»в режиме конфигуратор и открой в немсозданную в прошлом уроке информационнуюбазу. Затем, создай новую внешнюю обработку.Для внешней обработки нам потребуетсясоздать форму. Как это делается, ты можешьпрочитать в первой части статьи. Делать какие­либо настройки для формы, а также добавлятькомпоненты нам не потребуется. Длясегодняшнего урока, созданных по умолчаниюкнопок «Выполнить» и «Закрыть» будет вполнедостаточно.

Рисунок 1.Пустая формановой обработки

vr­online | сентябрь 2010

Автор

:Анто

новИго

рьaka

Spide

r_NET

Email:

antono

v.igor.k

hv@gm

ail.com

Школа

Page 101: VR-Online (Август-сентябрь 2010)

Школа101

vr­online | сентябрь 2010

Так, с обработкой разобрались, теперьопределим действие для кнопки «Выполнить».Для этого щелкни один раз левой клавишеймыши по кнопке «Выполнить», а затем в панелисвойств (рисунок 2) кликни напротив свойства«Действие» по пимпе с изображением лупы.После этого перед тобой откроется редакторкода с созданной заготовкой для процедурыКнопкаВыполнитьНажатие(Кнопка).В теле процедуры напишем небольшой кусочеккода. Я понимаю, что еще не объяснял тебе проциклы, условия и т.д. (на примере«1С:Предприятие»), но не стоит волноваться.Пока просто перепиши мой код (если ты ужеимеешь опыт программирования, то с егопониманием не должно возникнуть проблем), а вследующей статье я уже подробно расскажу проразличные языковые конструкции применяемыев «1С:Предприятие».

Листинг 1. Код для отладкиПеременная1 = 24;Переменная2 = 31;Массив = Новый Массив;//Ошибок не возникнетРезультатСложения = Переменная1 +Переменная2;//Ошибок не возникнетРезультатВычитания = Переменная2 -(Переменная1 + 7);//А вот здесь произойдет ошибка//на 0 делить нельзяРезультатДеления = Переменная1 /РезультатВычитания;//запускаем цикл от 0 до 1 млн//заполняем массивДля сч = 0 по 1000000 Цикл

Массив.Добавить(сч + сч);КонецЦикла;

Приведенный кодпрост, но сегодня намтакой и нужен. Обративнимание, в нем нетвыводов сообщений срезультатамивычислений, их нампредстоит смотреть вотладчике.ВозможностиотладчикаНаш код готов, самоевремя приступить кего отладке. Все функции встроенного отладчикав «1С:Предприятие» ты можешь найти в пунктеглавного меню «Отладка». Рассмотрим егосодержимое подробней:

1. Продолжить отладку – Кнопкапредназначена для двух действий: запускрежима «Предприятия» для начала отладки;продолжение отладки после остановкипрограммы на точке останова.

2. Перезапустить – Перезапуск режима«Предприятие» вовремя отладки.Функция обычноприменяется когда тывнес изменения в код,но забывперезапустить1С:Предприятие (длятого чтобы внесенныетобой измененияначали действовать)запустил отладку. Вэтом случае ты такжепопадешь в окноотладки, но недавновнесенные измененияв код не будутзадействованы. Чтобыпрервать процессотладки (взависимости ототлаживаемой частион может заниматьдостаточнопродолжительное время) и перезапуститьсоздаваемое решение, и предназначена этакнопочка.3. Завершить – завершение процессаотладки. 1С'ка, запущенная в режиме«Предприятие»? будет закрыта (именно такопия, которая связана с отладчиком). Этотпункт применяется для принудительнойостановки отладки. Например, ты выполняешьотладку и код зациклился. Тут ничего неостается делать, как выполнить прекращениеотладки.4. Остановка по ошибке – выполнениеостановки программы при возникновенииошибки. Функция позволяет начинать отладкусразу после возникновения ошибки. Обычно этаопция применяется при тестировании (особеннопри первом тесте разрабатываемого решения),т.к. мы еще не можем знать проблемныхучастков в коде (следовательно, не можемопределить нужную точку останова), поэтомучтобы приступить к отладке в моментвозникновения ошибки. Чуть позже я рассмотрюпример ее практического использования.5. Подключение – подключение отладчика куже открытой конфигурации в режиме«Предприятие». Возможность полезна дляотладки решений запущенных от имени другогопользователя или выполняющихся на удаленномкомпьютере. Очень часто сталкиваешься сситуацией, когда на твоей тачке все работаетотлично, а на компьютере конечногопользователя происходят какие­то странности. Втаких ситуациях, проще всего подключитьсяотладчиком к его 1С'ске, и посмотреть что кчему.

Рисунок 2. Окно свойств кнопки

Рисунок 3. Возможностиотладчика

Page 102: VR-Online (Август-сентябрь 2010)

Школа102

vr­online | сентябрь 2010

6. Шагнуть в – трассировка кода с заходом впроцедуру. Сразу представим пример. Тебетребуется отладить некий код (например, тот,который мы написали в обработчике событиядля нашей единственной кнопке), а в коде естьвызов функции, объявленной, в общем, вмодуле. Когда ты доберешься до кода вызовафункции, у тебя будет выбор – перейти к отладкетела функции или продолжить отладкуобработчика события. Для перехода к отладкекода вызываемых процедур/функции ипредназначена эта кнопка.7. Шагнуть через – полнаяпротивоположность предыдущем пункту. Если тыдошел в коде до вызова функции и нажал«Шагнуть через», то перехода к отладке телафункции не будет.8. Шагнуть из – выход из телафункции/процедуры. Если ты вдруг перешел котладке тела функции и передумал пошагововыполнять ее код, то нажимаешь «Шагнуть из» имоментально вернешься к месту, в которомвыполнил погружение.9. Идти до курсора – отладка будетвыполняться до места в котором установленкурсор. Затем пошаговая отладка будетзавершена и приложение продолжит работу вштатном режиме.10. Текущая строка – перемещение курсорана текущую строку отладки.11. Точка останова – установка точкиостанова (брякпоинта; бряка; – сленговыевыражения). В месте установки точки останованачнется отладка приложения. Например, тебенадо начать отладку с пятой строчки своего кода.Ставишь на ней точку останова и запускаешьпрограмму на выполнение. Как только дойдеточередь до точки останова, сразу же произойдетпереключение в режим пошагового выполненияпрограммы.12. Точка останова с условием – у этойфункции точно такая же роль, что и упредыдущей, но за одним исключением.Переключение в режим отладки произойдетлишь в случае выполнения заданного условия.Подобные точки бывают очень полезны во времянахождения нерегулярно повторяющихсяошибок. Допустим, ты знаешь, что ошибкавозникает при 100­м разе выполнения цикла. Какбыть? Каждый раз пошагово просматривать 100раз выполнения цикла? Можно, но не нужно.Лучше поставить точку останова с условием иначинать отладку сразу на 100­й итерации.13. Отключение точки останова – временноеотключение точки останова. Выполнив этуфункцию, ты больше не будешь попадать врежим отладки в месте установки точкиостанова. Она будет отключена (но не удалена).

14. Убрать все точки останова – удалениевсех ранее расставленных точек останова втексте программы.15. Отключить все точки останова – то жесамое, что и отключение точки останова, толькодля всех расставленных точек.16. Точки останова – просмотр всехустановленных точек останова в диалоговомокне. В нем ты можешь отключать/включатьточки останова, устанавливать для них условия,удалять и т.д.17. Вычислить выражение – функцияпозволяет вычислить/посмотреть выражение,записанное на встроенном языке. Это, пожалуй,наиболее часто используемая функция во времяотладки. С ее помощью выполняется просмотрзначений переменных; просмотр результатавыполнения выражения на встроенном языке;перенос переменны в специальное табло (дляпостоянного наблюдения за содержимымпеременной во время пошаговой отладки).18. Табло – отображение панели, на которуюможно перетаскивать переменные, значениекоторых будут отображаться во время пошаговойотладки. Именно в эту панель попадаютпеременные после нажатия кнопки «Включить втабло» в окне «Выражения», вызываемом черезфункцию «Вычислить выражение».19. Стек вызовов – в стеке вызововвыводится последовательностьфункций/процедур, которые привели к строке,отлаживающейся в настоящий момент.20. Замер производительности – инструментвыполняет замеры производительностиконфигурации или определенной ее части. Еслидля разрабатываемого решения особоезначение имеет скорость выполнения, то этотинструмент поможет тебе выявить участки кода,которые выполняются особенно медленно.Отладка на практикеФункции, предоставляемые платформой«1С:Предприятие» для отладки мы рассмотрелии теперь самое время проверить некоторые изних на практике. Начнем с самого простого –установки точки останова. Перейди в редакторкода (если ты еще не в нем), установи курсор напервой строчке и нажми клавишу F9 (иливоспользуйся пунктом «Точка останова» в меню«Отладка»). Затем, нажми клавишу F5 (начниотладку). Выполнив это действие, ты запустишь«1С» в режиме «Предприятие». В нем открывайсозданную обработку и жми на кнопку«Выполнить». Не успеешь моргнуть и глазом, какперед тобой снова распахнет свои объятия«Конфигуратор», только теперь напротивстрочки, где мы установили точку останова,появится желтая стрелочка. Это означает, чтосейчас будет выполнена данная строка. Чтобы

Page 103: VR-Online (Август-сентябрь 2010)

Школа103

vr­online | сентябрь 2010

это произошло, тебе нужно воспользоватьсяклавишами «навигации»: F11 (шагнуть в), F10(шагнуть через), Shift+F11 (шагнуть из) и Shift +F10 (идти до курсора).Нажми клавишу F10. Желтая стрелкапереместится на следующую строку и впеременную с именем «Переменная1» будетзаписано числовое значение 24. Чтобы в этомубедиться, выдели имя переменной(«Переменная1») и нажми сочетание клавишShift + F9 (нажатие равносильно выбору пункта“Вычислить выражение» в меню «Отладка»).Если ты не промахнулся с выделением именипеременной, то увидишь примерно такую жекартинку как на рисунке 4.

В этом окне мы можем узнать тип переменной,ее значение, а также, в случае необходимости,вычислить произвольное выражение навстроенном языке. Например, попробуй ввести встроке «выражение» следующий текст:ТипЗнч(Переменная1) = Тип("Число")Затем нажми кнопку «Рассчитать» и в окнерезультатов ты должен увидеть примерноследующее:

Рисунок 5. Вычисляем значение выраженияЧто означает данное выражение? Все просто, внем я выполняю сравнение типа значенияпеременной «Переменная1» с типом «Число».Если «переменная1» является числом, торезультат будет «Истина». В нашем случае таконо и есть.Надеюсь, с этим все ясно, двигаемся дальше.Пока закрой окно вычисления результатов ипопробуй пошагово пройтись по всему коду.Периодически проверяй значение переменных с

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

Рисунок 6. Окно «Остановка по ошибке»Этим действием мы укажем отладчику, чтопереходить в режим пошаговой отладки нужновсякий раз как платформа будет генерироватькакую­нибудь ошибку. В этом окне также естьтабличная поле, в котором ты можешьопределить текст сообщений, при возникновениикоторых стоит переходить в режим отладки. Длянашего примера мы не будем определять списокконкретных сообщений. Нам главное увидетьработу этой функции в действии. Итак, установифлажок и нажми кнопку Ok.Вернись в режим «Предприятие» и вновь вобработке нажми кнопку «Выполнить».Поскольку мы устанавливали точку останова, тозначит, ты сразу попадешь в режим отладки. Длядемонстрации примера нам это не нужно,поэтому после того как выполнение программыостановится (сработает точка останова) нажмиF5, тем самым продолжив выполнение.Буквально сразу после нажатия F5 ты вновьпопадешь в отладчик, а также увидишьсообщение как на рисунке 7.

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

Рисунок 4. Смотрим значение переменной

Рисунок 7. Сработала система «Остановка поошибке»

Page 104: VR-Online (Август-сентябрь 2010)

Школа104

vr­online | сентябрь 2010

текст ошибки. Нажав кнопку Ok, ты сможешьпродолжить отладку приложения.Я уже говорил, что этот инструмент весьмаполезен при начальной отладке приложения.Установил реакцию на ошибки и начинаешьспокойно тестировать приложение. Возниклаошибка – перешел в отладчик и началпросматривать содержимое всех переменных,участвующих в выполнении операции.Точки останова с условиемТочки останова могут быть двух видов – обычныеи с условием. С первыми мы уже познакомились,теперь настала очередь вторых. Чтобыустановить точку останова с условием,необходимо установить курсор в строке, длякоторой требуется создать точку останова, апосле этого пройти в меню «Отладка» и выбратьпункт «Точка останова с условием». Перед тобойдолжно появиться небольшой окно (рисунок 8), вкотором требуется ввести текст условия, привыполнении которого будет запускатьсятрассировка программы.

Напиши в этом окне: «РезультатВычитания = 0»(без кавычек) и нажми Ok. Сразу после этого,слева от строки, на которой находится курсор,появится значок в виде знака вопроса ( ).Считай, что установка точки останова с условиемнам удалась. Попробуй опять нажать на кнопку«Выполнить» нашей обработки (в режиме«Предприятие») и посмотреть поведениеотладчика. Если ты все сделал правильно, топрактически сразу попадешь в отладку, т.к.сработает условная точка останова, котораясравнивает значение переменной«РезультатВычитания» с 0.Такой тип точек останова очень удобноприменять в коде с большим количествомвычислений и расчетов. Вспомни сразу пример,который я приводил при описании меню«Отладка».Шагаем «в» и «из»Немного разнообразим наш пример. Добавь вкод обработки следующую функцию:Функция Умножить(Число1, Число2)

Возврат Число1 * Число2;КонецФункции

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

простейшей операции, в целом нет. Числа можнои так перемножить. Я ее описал лишь для того,чтобы опробовать на практике варианты шаговотладки. Ок, идея понятна. Давай, где­нибудь восновной процедуре произведем вызов толькочто описанной функции. В своем примере я этосделал сразу после строки с операциейсложение:РезультатУмножения = Умножить(Переменная1,Переменная2);

Установи для этой строки точку останова и вновьзапусти отладку (не забудь, что тебе требуетсязакрыть в режиме предприятия открытуюобработку и заново ее открыть, иначе твойновый код обработан не будет). После того какуправление будет передано отладчику нажмиклавишу F11 и ты сразу перепрыгнешь в телофункции Умножить(). Попав в функциюУмножить(), можешь начать трейсить ее код(выполнять пошагово) или сразу из неевернуться на то же место откуда и пришел. Длявозврата воспользуйся функцией Шагнуть из(Shift + F11).

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

Рисунок 8. Установка точки останова сусловием

Рисунок 9. Стек вызовов после захода в функциюУмножить()

Page 105: VR-Online (Август-сентябрь 2010)

Школа105

vr­online | сентябрь 2010

наш тестовый код небольшое изменение. Найдистроку, в которой происходит деление на 0 изакомментируй ее (установи курсор на строку инажми сочетание клавиш ctrl + / или простоперед строчкой поставь два слеша (//)). Этопришлось сделать для того, чтобы нашаобработка не выдавала ошибку на этой строке, адобралась до кода с длинным циклом.Выбери пункт «Замер производительности» вменю «Отладка». Не пугайся, если перед тобойне появится каких­либо окон. Так все и должнобыть. Пока ты просто активировал замерпроизводительности и теперь нужно начатьтестировать нашу обработку. Перейди в режим«предприятие» и нажми на кнопку «Выполнить».Как только обработка завершит свою работу,тебе надо вернуться в конфигуратор и опятьзайти в меню «Отладка» ­> «Замерпроизводительность». На этот раз перед тобойдолжно появиться окошко как на рисунке 10. Внем ты можешь увидеть время, затраченное навыполнения определенных участков кода твоейобработке. Применительно к нашему примеру,самым медленным участком будет бесконечныйцикл.

Рисунок 10. Замеряем производительностьЗаключениеОтладка – неотъемлемая часть разработкиприложения. Чтобы не говорили, а без отладчикамногие проблемы выявить нереально. Ксожалению, не все начинающие программистыгорят желанием разбираться с нюансамиотладки. Свое объяснение этому факту я ужеприводил. Это в корне неверный подход. Раноили поздно тебе все же придется столкнуться с«кошмаром» с именем «Отладка». Так почему необуздать отладчик уже сегодня?

Page 106: VR-Online (Август-сентябрь 2010)

C#Tips & TricksНапиши мне, напиши!

106

Не редко случается ситуация, когда программетребуется отправить какое­либо сообщение наопределенный адрес. Например, у вас естьпрограмма мониторинга, которая должнаотправить сообщение при аварийной ситуации.Средствами C# это сделать не просто легко, аочень легко. В данной статье я приведу примеротправки письма, рассказав об основныхмоментах.Для примера я создал форму, содержащую триполя ввода (Кому, Тема и тело письма) и кнопкуОтправить:

Собственно, код при нажатии на кнопку Sendследующий:private void button1_Click(object sender,EventArgs e)

if (txtTo.Text == string.Empty)

MessageBox.Show("Please specify theaddress");return;

SmtpClient client = newSmtpClient("ServerName");client.Credentials = newNetworkCredential("UserName", "Password","DomainName");MailAddress from = newMailAddress("UserEMail", "FromWho",Encoding.UTF8);MailAddress to = newMailAddress(txtTo.Text);MailMessage message = new MailMessage(from,to);message.Body = txtMessage.Text;message.BodyEncoding = Encoding.UTF8;

message.Subject = txtSubject.Text;message.SubjectEncoding = Encoding.UTF8;try

client.Send(message);catch(Exception ex)

MessageBox.Show(ex.Message);message.Dispose();

Вначале проверяется, заполнено ли поле txtTo(Кому). Если нет, то показываем сообщение изавершаем выполнение процедуры.Затем создается экземпляр объекта SmtpClient,который и позволяет приложениям отправлятьписьма по протоколу smtp.SmtpClient client = newSmtpClient("ServerName");Сразу в конструкторе указываем имя почтовогосервера. Это может быть MyExchange влокальной сети или mail.ru в интернете.Затем задаем настройки аутентификации:client.Credentials = newNetworkCredential("UserName", "Password","DomainName");В данном случае задается три параметра: имяпользователя, его пароль и домен.Следующее действие – это создание двухэкземпляров объекта MailAddress, которыйпредставляет электронный адрес. Первый – этоадрес отправителя, второй – адрес получателя.Наконец, создаем сообщение как экземпляркласса MailMessage и заполняем его параметры.В примере показан минимум, который нужен дляписьма, в реальном приложении его можнорасширить за счет прочих полей (например, комуотсылать копии – параметр CC и т.д.).Последнее действие – это отправка письма вблоке try­catch и очистка занимаемыхэкземпляром MailMessage ресурсов вызовомметода Dispose().

vr­online | сентябрь 2010

Автор

:Поро

тников

Андре

йaka

wwwn

etШкола

Page 107: VR-Online (Август-сентябрь 2010)

Мнение VRНациональная ОС. Нужна ли она нам?

107

JimmyJonezz: Национальнаяоперационная система нужнагос. учреждениям и структурамотносящимся непосредственнок образованию. Для простогообывателя достаточного того,что уже есть.Kastor: Блин, как же это смешнозвучит =) Национальнаяоперационная система. Это чтоименно под этимподразумевается? Что тамбудут только русские шрифтычто ли? Если бы тот, ктопридумал этот термин, хотьнемного шевелил мозгами, тоон знал бы, что Россиямногонациональная страна. Нуи к какой тогда нации будетотноситься эта ОС? Да и зачемона нужна? Как много вопросоввозникает сразу, ответы накоторые наверняка будутсмешными и нелепыми.Некоторые могут возразить,мол, чтобы не закупать тот жеWindows будем юзать свою ОС.Хм, юзайте Linux. Зачем деньгитратить на разработку того, чтоуже есть? Кстати, когда­то водном подкасте слушалобсуждение российскогодистрибутива ASP Linux. Так вотодин из разработчиков сказал,что название произошло отАлександра СергеевичаПушкина. Бери и юзай! Кудауже национальнее то =)zahod5277: Что­то слишкоммного в последнее времяпредлагается национальных IT­проектов. Кажется начинаетпопахивать национализацией,хотя, может паранойя? В любомслучае, я считаю что

национальная операционнаясистема лишь средствонаворовать побольше бабла. Даи нафига нам ОС, основаннаяна Linux? Те же яйца, только впрофиль. Глупо все как­то.ZeroXor: Когда заходит разговоро новых нац.проектах в сфереIT, мне сразу вспоминаетсяразмышление М. Н. Задорноваи его фраза “Наш Президент,похоже, в детстве не доиграл.Только вот почему все мытеперь должны играть вместе сним?”Вообще, создается ощущение,что у Президента все, чтосодержит в названии “IT”,“модернизация”, “инновация”,вызывает какое­тонепреодолимое желание всеэто претворить в жизнь. Анекоторые этим пользуются,пересылая выделенные деньгине по адресу.Так уже было не раз и не два.Потому лично мне как­то неслишком верится, что“Национальную ОС” постигнетболее удачливая судьба.А лично мне вполне хватаетсвободно­бесплатного Debian'ав качестве операционнойсистемы, ничего другого и ненужно.Lord_of_Fear: Ох, уж этинациональные проекты...задолбали. По ящику вечнорассказывают в новостях продефицит бюджета, но у насто и дело возникаютразговоры о миллионахинвестиций в какие­тобесполезные национальный

фиговины. Задолбали! Ненужно это никому. Не будутэтим пользоваться. Если мнепонадобится бесплатная ось,то я себе Debian поставлю.Все же остальные простокачнут кряк на винду и небудут заморачиваться.Spider_NET: «Ты ж мэняспидманула, ты ж мэняпэдвила..» ­ я сразу вспоминаюэту веселую народную песенку,когда заходит речь онациональных IT проектах. Нуне верю я в успех и качествонациональных поделок. Нет, яверю в наших программистов, ина сто процентов уверен, чтоони ничуть не хуже западных.Но у меня нет веры в тех, ктозанимается реализацией нац.IT проектов. Как показываетпрактика, вся работа надпроектами сводится кполучению больших деньжищ,которые тратятся, не пойми начто. В итоге, каждая поделкарождается мертвым. А еслитак, то зачем они нужны?Zanuda25: Мое мнение таково:никакой оценки не даю этомупроекту. Разложу все пополочкам. Сначала перечислимплюсы.1. Свою ОС иметь – этонеплохо, так как ты самзнаешь, где баги можноприкрыть и ни от кого независишь...2. Вон грузины сделали ОСWindows грузиноязычным...А вот минусы.1. Ухлопают прорву денег.

vr­online | сентябрь 2010

VR­Cr

ewМнение VR

Page 108: VR-Online (Август-сентябрь 2010)

Мнение VR108

vr­online | сентябрь 2010

И снова ничего не сделают.2. А вот, если сделаютсвою ОС, то она может неприжиться. К примеру,грузинская версия Windowsполностью не прижилась.