VR-Online (July 2010)

Page 1


2

Интро

Intro

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

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

К сожалению, пользоваться лишь олдскульным вариантом «бумажка + ручка» не представляется возможным. Работать приходится как дома, так и на работе. Бывает так, что начав дело дома, приходится доводить его до ума на работе. На бумаге план есть, но не будешь, же тоскать его с собой туда­сюда! Нужна какая­то банальная синхронизация. В итоге для себя я выбрал Google Docs + бумажка (ничего смешного :­)). Сначала я составляю план в гугл­доках. Затем, когда начинаю работать распечатываю его или пишу на бумаге (в зависимости от объема плана). Отметки о выполнении того или иного пункта произвожу первым делом на бумаге, а потом уже в электронной версии. Увы, приходится делать лишние движения, но пока я готов платить эту цену, т.к. ощущаю, что в целом моя производительность увеличивается. Приятного чтения, дорогой читатель!

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

vr­online | июль 2010


3

Содержание

Содержание

Июль 2010 (25)

It-News Hard-News VrIP Персона Кодинг 1 4. Delphi. 1 7. Delphi. 1 9. Java. 21 . C# 23. C# 26. C# 28. Python

Креатиff

51 . lnkscape.

Картонная коробка

Подражаем Office 2007. Свой mini­ bar Асечные страсти. Часть 1 Первое приложение для Android OS Ввод данных Простая база фильмов с использованием Microsoft Acces Простой телефонный справочник на C# Рецепты

54. What is?

Разбираемся с фракталами

Безопасность

56. NuCaptcha.

Головоломка для спамеров

58. Tor.

Защита передачи данных

Мнение VR

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

35. English Grammar in Use

Осваиваем грамматику английского

37. Opera Unite.

Удобный доступ к содержимому

39. Обзор HTC Tattoo 41 . Желанный андроид. Обзор HTC Desire

Без рамки

43. Processing. Введение

Интерактивная визуализация

46. Операция "Щит и меч"

Меня тошнит! Идея проекта

Фленов Михаил aka

Horrific

(http://flenov.info)

Редакторы номера

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

Spider_NET

Верстка и оформление

Антон Козлов aka

Jimmy Jonezz

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

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

Lord_of_Fear

zahod5277

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

mail@vr­online.ru

antonov.igor.khv@gmail.com

vr­online | июль 2010


Новости подготовили: AnyKey и Spider_NET

4

IT-News

IT­News IP- голод может наступить через... 343 дня

Американские ученые предупреждают, что запасы IP­адресов иссякнут через год. Конечно, при условии, что Всемирная глобальная паутина продолжит расти такими темпами, как сегодня. Выходит, что люди на планете могут столкнуться с совершенно новым для себя видом голодания?

О том, что незанятые IP­адреса в рамках протокола IPv4 подходят к концу, миру сообщило Read Write Web, сославшись на Джона Куррана, президента и исполнительного директора Американского реестра интернет­адресов.

IPv4 – наиболее широко применяемый IP­протоколе в современном Интернете. Поскольку он использует 32­битные адреса, то в общей сложности в рамках данного протокола можно создать чуть больше 4 млрд IP­адресов.

Но здесь, главное, не поддаваться панике, а искать альтернативный выход. Ведь провайдерам и телекоммуникационным компаниям так или иначе придется решать эту проблему. Альтернативой может стать, к примеру, протокол IPv6 (в нем используются 126­битные адреса) или технология NAT, позволяющая соотнести несколько адресов с одним IP­адресом.

OpenSolaris будет закрыт

В списке рассылки разработчиков OpenSolaris появилось письмо с черновиком разъяснения позиции Oracle по поводу Solaris&OpenSolaris. Один из участников этой группы, работающий в Oracle, подвердил данную информацию. Вкратце суть этого разъяснения такова:

* Проект OpenSolaris закрывается. Возрождается бесплатный вариант поставки Solaris Express.

* Исходные коды будут по большей части открываться под лицензией CDDL, также будет продолжена практика открытия исходных кодов под лицензией GPL. Однако, при этом код не будет широкодоступен еще некоторое время после выхода его бинарной версии в продукте, а посмотреть на него можно будет в публикуемых снапшотах. * Для компаний­партнеров на индивидуальной основе код и скомпилированные модули будут предоставляться в режиме раннего доступа. Возможно также сотрудничество с элементами совместной разработки. Примером такого сотрудничества названо партнерство с Intel.

* Разработчики Solaris будут участвовать в интеграции широкораспространенных компонентов в свою систему в плотном взаимодействии с апстримом. Примерами таких компонент названы Apache, Perl, OFED (набор драйверов для работы с промышленным оборудованием), Gnome, X11, OpenSSL.

Вирусописатели тоже полюбили Android

"Лаборатория Касперского" сообщила об обнаружении первой трояна типа Trojan­SMS, работающем под платформой Android. Чтобы избежать заражения новым троянцем, пользователям достаточно быть внимательными, устанавливая на смартфон бесплатное ПО. Новая вредоносная программа попадает на Android­смартфоны под видом установочного APK­файла видеоплеера объемом чуть меньше 13 килобайт. Если пользователь соглашается на его установку, троянец проникает в систему и начинает отсылать SMS­сообщения на платные номера без

vr­online | июль 2010


5

IT-News

ведома и согласия владельца. Будь внимательным!

Открытый интернет глазами Google

Корпорация зла и американский оператор связи Verizon отправили в Комиссию по связи США список принципов, соблюдение которых важно для сохранения целостности и открытости интернета. Об этом событии было сообщено в блоге компании Google, специализирующимся на юридических и общественных вопросах. На данном этапе документ состоит из двух страниц, содержащих девять рекомендаций.

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

Стала доступной для загрузки 4-я тестовая версия IE 9

Сегодня команда разработчиков очередной версии блохастого браузера сообщили о выходе очередной тестовой версии. Изменения по сравнению с предыдущей:

­ Реализовано аппаратное ускорение всех возможностей HTML5. Это подразумевает, что IE 9 "опережает" другие браузеры, которые не могут похвастаться полной поддержкой аппаратной отрисовки элементов страниц. Тестирование производительности можно выполнить при помощи теста http://ie.microsoft.com/testdrive/Performance/PsychedelicBrowsing/ ­ Новый JavaScript движок (Chakra). Отличие от предыдущего движка проявляется в первую очередь в полной интеграции с браузером. Напомню, раньше связь с движком JS была реализована посредством COM.

­ Улучшенная поддержка WEB­стандартов. Новая бетка набирает 95 баллов в тесте Acid3. Пяти не хватает из­за неполной поддержки SVG Fonts и SMIL animation of SVG. К финальному релизу данный недочет должен быть исправлен.

Найти пропавших домашних питомцев поможет найти MS Tag

Компания MobilPetTag (http://www.mobipettag.com/) предлагает всем желающим воспользоваться одноименным сервисом (в основе лежит технология MS Tag), помогающим сократить время поиска потерявшихся домашних животных. Выглядит все это примерно так. Хозяин генерит (с информацией о себе) и печатает MS Tag. Затем, полученную бумажку прикрепляет к ошейнику своего любимца. Если вдруг случится несчастье и питомец потеряется, нашедший его человек сможет определить полную информацию о владельце животного. Ему достаточно отсканировать Tag с бирки и получить описание на сайте.

Грядет особая версия Visual Studio

Компания Microsoft всегда старается выпускать максимально простые в использовании продукты. Если это операционная система ­ то она обязательна, должна иметь user­friendly интерфейс. Если это среда разработки, то в ней должны быть все необходимые функции для комфортной работы и все такой же дружественный интерфейс. Вроде и так все круто, но компания не собирается сдавать позиции, а наоборот, старается сделать свои продукты еще более простыми. Например, совсем недавно MS анонсировала новую версию Visual Studio. 23 августа, должна выйти в продакшн beta версия Visual Studio LightSwitch (именно так будет называться новинка. Отличие от других версий будет заключаться в более существенном упрощении разработки приложений. В ide будет доступен ряд шаблонов, описывающих разнообразные корпоративные процессы. При помощи этих шаблонов, обычные менеджеры смогут разрабатывать простенькие приложения. Процесс разработки будет напоминать игру в конструктор. vr­online | июль 2010


6

IT-News

Google собирается закрыть Google Wave?

Сегодня на популярнейшем ИТ­ресурсе Techcrunch появилась новость о том, что корпорация Google заявила о прекращении поддержки своего нашумевшего проекта Google Wave. Команда, ранее работающая над этим проектом, прекращает всякую работу. Techcrunch приводит информацию, как подтвержденную, хотя и без ссылки на первоисточник.

Вообще говоря, странно, что подобное случается — ведь сам Сергей Брин утверждал, что данный проект является «новым уровнем интерактивности». В самом деле, Google Wave представляет собой частично e­mail, частично Twitter и частично интернет­ мессенджер. Пользователи сервиса могут перетаскивать различные файлы с рабочего стола прямо в Google Wave. Проект в полной мере заработал только в мае этого года, несмотря на то, что в первый раз о нем услышали еще год назад, в мае 2009, на конференции, проведенной Google в Сан­Франциско. Почему сервис закрывается? Команда разработчиков утверждает, что в проекте «участвует слишком мало пользователей, которых мы бы хотели видеть».

Злоупотребление Интернетом вызывает депрессию

Подростки, проводящие в Интернете большое количество времени рискуют погрузиться в депрессию. Синдром «тоски зеленой» у этих тинэйджеров встречается в два раза чаще, чем у их сверстников, которые пользуются Сетью умеренно. Основанием для вывода стала публикация по результатам исследования, произведенного в китайской провинции Гуанчжоу, пишет Руформатор. Из 1041 подростка более 940 использовали Интернет аккуратно. А почти 10 процентов тинэйджеров Сетью злоупотребляли.

Более активных интернетчиков взяли под контроль. Наблюдения за ними в течение девяти месяцев показали, что депрессия у них развивалась в 2,5 раза чаще. Как объясняют исследователи, у психически здоровых подростков Интернет может вызывать нарушения здоровья. Правда, имеется и другое объяснение: люди с отклонениями просто более склонны часами просиживать в Сети. Другие исследования показали, что к неумеренному использованию Интернета мальчики склонны больше девочек. Также было отмечено, что те, кто использует Интернет сверх меры, более склонны к тому, чтобы развлекаться в сети, а не искать в ней информацию.

ФБР обвиняет "Википедию" в пособничестве мошенникам

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

В письме владельцу "Википедии" некоммерческому фонду Wikimedia фэбээровцы сослались на закон, запрещающий изготавливать любые копии знака правоохранительного агентства, сообщают подробности инцидента "Вести.Ru".

Якобы, злоумышленники могут воспользоваться изображением герба на сайте "Википедии" в корыстных или мошеннических целях. Претензия до смешного нелепая, так как скачать изображения герба бюро можно по всему Интернету, в том числе ­ на сайте самого ФБР.

Неудивительно, что владельцы "Википедии" ответили фэбээровцам вежливым отказом, пишет New York Times. А в письме, направленном в бюро, главный адвокат некоммерческой организации Майкл Годвин заявил, что Wikipedia готова отстаивать свою правоту в суде.

vr­online | июль 2010


7

IT-News

Adobe судится с российским программистом

Компания Adobe предъявила иск на сумму 900 тыс. руб. программисту из Мурманской области. В компании заявляют, что с финансовой точки зрения это самое крупное дело об интернет­пиратстве в российской практике фирмы.

Обвиняемый по делу о нарушении авторских прав компании Adobe 23­летний Михаил Беляев работает программистом в Кольском научном центре РАН, передает Security Lab.ru со ссылкой на CNews. Михаил поддерживал в локальной сети ftp­сервер, на котором хранилось несколько терабайт данных. Все содержимое этого ресурса предоставлялось пользователям локалки на бесплатной основе. В конце января оперативники отдела «К» пришли с проверкой в офис интернет­провайдера, услугами которого пользуется Беляев. Они определили владельца ftp­сервера и составили протокол. По словам Беляева, спустя несколько дней после проверки он убрал все контрафактное ПО из общего доступа. Но несмотря на это, в марте на него завели дело по статье 146 УК РФ.

По словам обвиняемого, первоначально компания оценила ущерб в 750 млн. руб., а размер иска составил 1,5 млн. руб. (подача иска на удвоенную сумму ущерба – это типовая практика). После того, как Беляев признал свою вину, Adobe согласилась оформить мировое соглашение и снизить сумму до 450 тыс. руб. (соотвественно исковая ­ 900 тыс. руб.). На текущий момент Михаил уже выплатил компании 50 тыс. руб. Однако иск на сумму 900 тыс. руб. до сих пор находится в суде. Решение по делу будет вынесено 4 августа.

По новой технологии лесные пожары разбомбят

В России разработаны специальные авиационные боеприпасы АСП­500. Они в несколько раз могут повысить эффективность тушения природных пожаров. Начинка этих боеприпасов – огнегасящий состав. Еще одно преимущество АСП­500 – их можно сбросить точно в эпицентр пожара. Как передает "Интерфакс", в настоящее время противопожарная авиация применяет так называемые сливные средства, из которых реагенты выливаются в зону горения. Но потоки нагретого воздуха над пожарищем мешают попасть точно по цели. Новые боеприпасы позволят достичь почти 100%­ной точности доставки средств тушения. АСП­500 представляет собой оболочку с 400 литрами огнегасящего состава и диспергирующим (распыляющим) зарядом, после подрыва которого создается облако диаметром более 30 метров. При этом образуется поток смеси с начальной скоростью около 400 м/сек, который охватывает площадь пожара в 1000 кв м. Система может быть установлена на любом самолете или вертолете, имеющем оборудование для сброса бомб калибра 500 кг, и применяться в любых метеоусловиях при температуре окружающей среды от пяти градусов мороза до 50 градусов тепла

Виртуальное кладбище на MissYou2.com

MissYou2 – виртуальный мемориал, позволяющий создавать виртуальные странички умерших людей. Это социальный проект, предлагающий создавать интернет­мемориалы для сохранения памяти о людях. На сайте можно ознакомиться также со страничками памяти ряда известных людей. В отличие от американского каталога могил Find A Grave, MissYou2 посвящен виртуальным памятникам усопшим. Дизайн MissYou2 весьма привлекателен. Он выполнен в некоей «облачной» цветовой гамме. Можно поставить его создателям плюс за то, что они не взяли в пример те сайты, посвященные теме мертвых, которые активно эксплуатируют мрачные серо­черно­красные тона, комментирует Руформатор. Вверху расположены значки стран, на языки которых можно перевести основные элементы сайта, причем перевод вполне корректный и грамотный. Создатели MissYou2 также готовят аналогичный портал для увековечивания памяти животных – PetEden. Функционал портала пока недоступен в полной мере. Дизайн у сайта такой же, как у MissYou2, но в другой цветовой гамме. vr­online | июль 2010


8

IT-News

Избраны «хранители» Интернета на случай глобального сбоя сети

Интернет может быть полностью заблокирован. Но только лишь, как обещают, в случае крайней необходимости. Начиная с июля этого года Глобальная сеть находится под защитой Системы безопасного расширения доменного имени (DNSSEC).

Решением специальной международной комиссии создана группа из шести человек, обладающими сверх полномочиями. В их распоряжении находятся специальные коды для перезагрузки сети Интернет в случае ее глобального сбоя, технологической катастрофы или террористической акции, сообщают СМИ. Шесть человек из разных стран мира должны будут ввести каждый свой собственный фрагмент пароля, активизирующего процедуру перезагрузки сети Интернет, после ее экстренного выключения. В настоящее время прессе известен лишь один «хранитель» Интернета из шести. Это преподаватель университета британского города Бас Пол Кейн. Принадлежащий ему фрагмент "ключа" записан на микрочип, вмонтированный в пластиковую карточку. Информация о других "хранителях" не раскрывается, вероятно, в целях безопасности.

Ты спрашиваешь, Ask.com отвечает

Ask.com ­ четвертый по популярности поисковик среди американцев. Вчера представители ask'a сообщили о запуске в тестовом режиме нового сервиса, позволяющего пользователям задавать вопросы реальным людям (аля очередной клон вопросов и ответов от Google, а также Ответы@mail.ru). Создатели новинки надеются, что сервис поможет пользователям получать ответы на сложные вопросы, ответы на которые очень проблематично найти на просторах сети. Официального названия сервис еще не получил.

Чиновники хотят общаться с народом через Skype Связаться с московскими чиновниками можно будет через программу Skype. Такой странный эксперимент запустили в одном из московских округов. К воплощению идеи в жизнь подошли на столько серьезно, что власти даже готовят к изданию свой справочник skype­адресов.

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

По данным пресс­службы, в ближайшее время все 12 управ районов займутся выявлением социально незащищенных граждан, желающих установить web­камеры и подключить систему Skype для общения с представителями органов исполнительной власти, родственниками и друзьями. "Параллельно начнется установка программного обеспечения в управлениях культуры, физической культуры, образования, здравоохранения, семейной и молодежной политики", ­ отмечается в сообщении.

Google разработала он-лайн конструктор приложений для Android

Разработчики компании Google разработали крайне интересный он­ лайн сервис. Благодаря новому App Inventor практически любой пользователь с продвинутыми навыками пользователя сможет создать свое собственное приложение для популярной мобильной операционной системы Android. Естественно сервис насмешит профессиональных программистов, которые используют vr­online | июль 2010


9

IT-News

инструменты вроде Android SDK, однако для новичков в программировании App Inventor предоставит отличные возможности для реализации идей.

В App Inventor реализована возможность так называемого визуального дизайна приложений ― в сервисе представлен дисплей гуглофона, на который прям мышью можно накидать функциональных кнопок, эдитбоксов, гиперссылок, текстовых полей. Присутствует функция drag and drop. Оснастив интерфейс своей будущей программы необходимыми элементами, можно запросто зайти в свойства каждого, более подробно отредактировав функции и параметры. Со слов представителей Google, App Inventor позволит создавать игры, информационные приложения и даже программы с привязкой к местности. Чтобы получить возможность использовать сетевое приложение, достаточно заполнить форму и дождаться приглашения от Google. Ссылка на конструктор: http://appinventor.googlelabs.com/about/

vr­online | июль 2010


Новости подготовил: Lord_of_Fear

10

Hard-News

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

Массовый переход на DDR4 начнётся в 201 5 году

Хотя мы регулярно наблюдаем, как производители оверклокерской памяти выпускают всё более быстрые комплекты DDR3, а компания Intel даже собирается внедрить для платформы LGA 2011 поддержку памяти типа DDR3­2666, рано или поздно возможности памяти этого поколения будут исчерпаны, и отрасль начнёт переход на использование памяти типа DDR4. На одном из профильных мероприятий представители комитета JEDEC недавно сообщили, что стандарт DDR4 будет утверждён в 2011 году, его внедрение начнётся в 2012 году, а говорить о массовом переходе на память типа DDR4 можно будет не ранее 2015 года. Модули памяти типа DDR4 смогут охватить диапазон рабочих режимов от DDR4­2133 до DDR4­4266.

HDD на 3 терабайта в ноутбуке. Уже реально.

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

Компания Eurocom, специализирующаяся на производстве мощных во всех смыслах переносных компьютеров, с недавних пор предлагает для своих "мобильных рабочих станций" опцию в виде возможности установки четырёх винчестеров Seagate Momentus объёмом по 750 Гб. Таким образом, совокупный объём всех винчестеров, находящихся в корпусе ноутбука, может достигать 3 Тб.

По сравнению с базовой конфигурацией Eurocom Panther D900F, которая уже стоит более $3000, присутствие четырёх винчестеров объёмом по 750 Гб увеличивает стоимость мобильной рабочей станции на $1424.

Zalman оснастил лопасти вентилятора акульими плавниками

Представители самых разных направлений инженерной деятельности с давних пор пытаются заимствовать конструктивные решения у самой природы, поскольку эволюция за многие миллионы лет довела некоторые идеи до степени, близкой к совершенству. Компания Zalman довольно неожиданно обратилась к этому источнику "вдохновения", выпустив корпусной вентилятор модели ZM­SF3 с "акульими плавниками" на лопастях.

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

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

vr­online | июль 2010


11

Hard-News

Seagate медлит с началом поставок винчестеров объёмом 3 Тб

Ещё в конце июня компания Seagate представила винчестер объёмом 3 Тб в серии внешних накопителей FreeAgent GoFlex. Предполагалось, что он поступит в продажу по цене $249 в ближайшее время, и до конца года Seagate предложит версию винчестера аналогичного объёма во внутреннем исполнении. Применение последней в современных компьютерах ограничивается необходимостью отказа от BIOS в пользу EFI и использования 64­ разрядных операционных систем.

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

Kingston оснащает модули памяти водоблоком

Компания OCZ Technology давно выпускает модули памяти с гибридной системой охлаждения, которая позволяет опираться на принцип обдува радиаторов воздухом или использовать интегрированный водоблок, в зависимости от ситуации. Компания Kingston решилась установить водоблоки на серийные модули памяти только сейчас.

В серию HyperX H2O вошли двух­ и трёхканальные наборы памяти типа DDR3­2000 (9­10­9­27) и DDR3­2133 (9­11­9­27), работающие при номинальном напряжении 1.65 В, и состоящие из модулей объёмом 2 Гб.

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

Компания GlacialTech решила напомнить изнывающим от жары россиянам, что в Сибири должно быть холодно, наделив именем Siberia свой очередной процессорный кулер. Впрочем, сарказма искать в этом совпадении не следует ­ в модельном ряду кулеров GlacialTech уже есть Alaska, теперь подошла очередь другого "полюса холода".

Способный приютить два вентилятора разных типоразмеров (140 мм и 92 мм) радиатор имеет шесть тепловых трубок. Производительности кулера должно хватать для охлаждения процессоров с уровнем TDP до 130 Вт включительно. Система креплений предусматривает совместимость с процессорными разъёмами LGA 775/1156/1366 и Socket 754/939/AM2/AM3/AM2+.

vr­online | июль 2010


12

VrIP-Персона

Гатамов Рабадан Главный редактор журнала Progam (http://www.progam.ru/)

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

Идея появилась давно: мы с другом Кириллом Валуйским вели небольшой игровой сайт — бесплатные игры, программы warez, все в этом духе. В какой­то момент захотелось отойти от темы пиратского контента к чему­то более интересному и перспективному, поэтому стали думать над необычными идеями. И как­то Кирилл сказал, что у него закралась совершенно бредовая идея создать игровой журнал, бесплатный, в противовес дорогостоящим глянцевым. В pdf, например. Не задумываясь, я согласился, смутно представляя, насколько титанической будет эта работа. Если говорить коротко: за пару­тройку лет мы выпустили восемь номеров, сменили несколько доменов, концепций сайта, закрылись в кризис и вернулись только сейчас уже с немного другим электронным журналом. Тот журнал, что вы видите на сайте, по сути уже не первый, девятый выпуск Progam, выстраданный путем проб и ошибок. А предыдущие номера даже стыдно показывать :­)

Про игры выпускается достаточно много глянцевых журналов, чем progam выделяется на их фоне? Он абсолютно бесплатен. И это принципиально: даже если журнал появится в печати (в идеале стремимся к этому), цена его будет на порядок ниже, чем у «титанов» игровой журналистики. Какие электронные журналы вы читаете?

Ну, вот, VR­Online читал недавно :­) А так стараюсь уделять больше времени книгам. С какой периодичностью вы планируете выпускать журнал?

Пока получается раз в два месяца, не чаще. Когда додумаем структуру взаимодействия авторов, редакторов и вертальщиков, тогда перейдем на номер в месяц.

Как вы считаете, есть ли будущее у электронных журналов?

Да. Журналы могут уйти от привычного pdf, но будущее, безусловно, есть. Взять хотя бы iPad — идеальное средство для чтения электронной периодики. Какой глянцевый журнал (про игры) вы считаете наиболее удачным и почему? Какие необычные у вас вопросы :­)

Сейчас не читаю игровые журналы. Нравился «Game.Exe», потому что не боялись отойти от привычных норм.

Блоги про игры есть, журналы тоже, а вот с телепередачами дела обстоят куда хуже. Как вы считаете, нужна ли сегодня качественная телепередача про игры? Например, что­то вроде "Виртуальная реальность" или "От винта" из начала 90­х? Нельзя сделать хорошую, серьезную телепередачу про игры. Все это превращается в глупость, плохую и несмешную комедию, где ведущий с усердием рассказывает «свежие новости» о слиянии компаний, диктует второсортные обзоры, и вообще очень сильно пытается доказать, что происходящее в игровой индустрии — это очень важно для зрителя. Игры — развлечение, и рассказывать о них можно только в формате веселой, ни на что не претендующей передачи.

StarCraft 2. Вы ждали эту игру? Успели уже попробовать? Как на ваш взгляд, игра оправдает ожидания фанатов?

Я не играл, не фанат. Но наши авторы уже играли, на сайте есть хороший обзор от Саши Лозовского (http://www.progam.ru/content/starcraft­ ii­wings­liberty­mnenie), плюс в журнале будет еще одно развернутое мнение от Романа Кусайко. Как вы относитесь к фильмам по одноименным играм? Стоит ли вообще снимать такое кино? Если я не ошибаюсь, подобные

vr­online | июль 2010


13

VrIP-Персона

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

Я подозрительно отношусь к фильмам по играм, хороших экземпляров мало, а хитов совсем ни одного. Из понравившихся вспоминается только «Сайлент Хилл».

Снимать нужно, хотя бы потому, что хорошо выходит редко. Но начинать карьеру режиссера с видеоигры, наверное, опасно: вот, оказалось ведь, Уве Болл, прославленный геймерами магистр треша, делает неплохое кино, судя по последним работам. Чего на ваш взгляд не хватает в современных играх?

Мне кажется, всего хватает :­) Индустрия движется, развивается, достигается большая интерактивность, контент становится удобным и добирается в консоль за один клик. Электронные развлечения постоянно улучшаются, эволюционируют, и это прекрасно. Идеальная игровая платформа на сегодня? (Ваше мнение)

Сейчас Xbox 360 себя вполне оправдывает, неплохая цена, новый стиль и все популярные игры. Планируете ли вы запуск подкаст ленты посвященной играм?

Нет такого желания. Если нужны интересные подкасты, послушайте Chiptune, хорошая восьмибитная музыка (http://gameit.podfm.ru/chiptune/19/). А мы скорее сразу возьмемся за видеообзоры, когда придет время. Ну и напоследок, чтобы вы хотели пожелать нашим читателям? Делайте то, что любите. Рискуйте и пробуйте разные варианты, стремитесь к цели и не слушайте советы. Ну, и читайте VR­Online и Progam, конечно :­)

vr­online | июль 2010


Автор: Агайгельдиев Руслан aka AgRuMa

14

Кодинг

Delphi

Подражаем Office 2007 Свой mini­bar

Не успели многие начинающие пользователи компьютера закончить разного рода курсы по освоению всемирно известного офисного пакета MS Office 2003, как «злые» программисты компании Microsoft написали новую версию MS Office 2007, в которой интерфейс был кардинально. Что же принес нам новый дизайн? Многие офисные работники, увидев новый вид программного продукта, побежали от ужаса в ближайшую аптеку за корвалолом. Неужели все так страшно?

После подробного знакомства с приложением, оказалось, что не такой уж он и страшный. Много очень удобных нововведений, которые значительно ускоряют написание документов. Одним из таких, на мой взгляд, приятных новшеств является MS Office Mini­bar. На мой взгляд, очень удобный инструмент ­ где ни кликни мышкой, появляется панель, с возможными вариантами действий над выбранным объектом, будь это таблица, рисунок, диаграмма или просто текст. А почему бы не сделать Мини­бар для своей программы? Чем мы хуже Microsoft’а (ничем, просто у нас нет столько денег – прим. редактора)? Тем более сделать это, с технической точки зрения, вовсе не сложно. Я провел все необходимые исследования и выяснил все тонкости mini­bar строения.

Для созданий своего мини­бара нам понадобится немного: 1.

Базовые знания Delphi

3.

Руки (прямые)

2. 4.

Голова на плечах

И немного старания.

Приступаем

Перво­наперво создадим проект нашей новой программы (File­New­Application)! Мини­бар в

нашем случае будет обычная форма, связанна с главной формой и выполняющая в ней разного рода действия. Пользоваться придется им часто, поэтому для простоты обращения создадим процедуру, под названием Minibar. После слов {$R *.dfm}

Объявим процедуру: procedure TForm1.Minibar (forma:tform; prozr:boolean; timer_p:ttimer; obr:byte);

Она принимает четыре параметра

Forma – переменная типа tForm, которая будет служить для нас шаблоном формы. Какую форму мы укажем, та и появится в качестве мини­бара.

Prozr – переменная типа Boolean. Данная переменная будет включать или выключать плавное появление или исчезновение формы. Вы спросите, зачем этот параметр? Если вы будете писать большой проект, то возможно он у вас будет забирать много системных ресурсов, что может привести к «торможению» компьютера и было бы не плохо заранее продумать возможность отключения визуальных эффектов. Timer_p – переменная типа tTimer. Она указывает на таймер, отслеживающий положение курсора. В зависимости от отдаления курсора мыши от нашего МБ, окошко будет плавно затухать и наоборот, по приближению появляется. Obr – переменная типа byte. В нашей процедуре используется в качестве параметра для обращения к функции. В моем случае, функция определяет два параметра: 0 – Создание и обработка формы Мини­бара. 1 – Параметр для обращения таймера к функции. С помощью этого параметра

vr­online | июль 2010


15

Кодинг

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

Пришло время подробней рассмотреть процедуру Minibar. Начнем с параметра – 0. Создадим условие для переменной obr. Для этого напишем три, простые строчки: case obr of 0: Begin

Для того, чтобы М­Б, появлялся именно в том месте, где мы нажали мышкой, нам требуется записать координаты положения курсора. Их будем записывать в переменную типа tPoint. Назовем её «pos», в разделе описания переменных Var объявим переменную var

pos : tpoint;

И перепишем следующий код:] case obr of 0: begin pos:=mouse.CursorPos; // переменной pos присваиваем координаты позиции курсора forma.Show; // Активируем Мини-бар forma.Left:=pos.X; // Отступ слева делаем по значению X forma.Top:=pos.Y-forma.ClientHeight; // Отступ сверху делаем по значению У и отнимаем // рабочую высоту формы, чтобы нижний правый край формы был рядом с положением курсора if prozr=true then // если параметр прозрачности равен – истина, тогда begin forma.AlphaBlend:=true; // включаем параметр прозрачности формы timer_p.Enabled:=true; // активируем таймер timer_p.Interval:=1; // для плавности ставим интервал таймера 1 миллисекунду end else // если параметр прозрачности не равен истине, значит timer_p.Enabled:=false; // не активируем таймер end;

Теперь поглядим на обработку обращения таймера. Для работы с таймером придется объявить несколько новых переменных: const dl = 100; // переменная от мини-бара, при котором равна нулю var i, ip : integer; pr,lv,vr,nz,vn:boolean; слева, vr – сверху, nz –

определяет расстояние прозрачность будет // pr – справа, lv – снизу, vn – внутри.

Переходим к коду: 1: // Для дальнейшей работы нам надо отследить где по отношению к мини-бару находится курсор // всем переменным присваиваем значение - ложь Begin pr:=false; lv:=false; vr:=false; nz:=false; vn:=false; // считываем положение курсора pos:=mouse.CursorPos; // если курсор находится левее чем мини-бар, тогда всем значениям кроме lv присваем ложь, if pos.X<forma.Left then begin pr:=false; lv:=true; vr:=false; nz:=false; vn:=false; end; // если курсор находится левее чем мини-бар, тогда всем значениям кроме pr присваем ложь, if pos.X>forma.Left+forma.ClientWidth then begin pr:=true; lv:=false; vr:=false; nz:=false; vn:=false; end; // если курсор находится левее чем мини-бар, тогда всем значениям кроме vr присваем ложь, if pos.Y<forma.Top then begin pr:=false; lv:=false; vr:=true; nz:=false; vn:=false; end; // если курсор находится левее чем мини-бар, тогда всем значениям кроме nz присваем ложь, if (pos.Y>forma.Top+forma.ClientHeight) then begin pr:=false; lv:=false; vr:=false; nz:=true; vn:=false; end; // если курсор находится левее чем мини-бар, тогда всем значениям кроме vn присваем ложь, if (pos.y<forma.Top+forma.ClientHeight) and (pos.Y>forma.Top) and (pos.X<forma.Left+forma.ClientWidth) and (pos.X>forma.Left) then begin pr:=false; lv:=false; vr:=false; nz:=false; vn:=true;

vr­online | июль 2010


16

Кодинг end; // движение курсора слева. Отслеживаем на сколько курсор левее нашего компонента

if (pos.X<forma.Left) and (pos.X>forma.Leftdl+5) and (lv=true) then begin // в зависимости от расстояния между курсором и Мини-баром делаем форму прозрачной ip:=255-(forma.Left-pos.X)*(round(255/dl)); // вычисляем нужную прозрачность // если прозрачность больше либо равна нулю, тогда… if ip>=0 then forma.AlphaBlendValue:=ip; // если прозрачность формы от нуля до пяти, значит можно её закрыть if (forma.AlphaBlendValue=0) or (forma.AlphaBlendValue<5) then forma.close; end; // движение курсора справа if (pos.X>(forma.Left+forma.Width)) and ((pos.X<(forma.Left+forma.Width+dl-5))) and (pr=true) then begin ip:=(forma.Left+forma.ClientWidthpos.X)*(round(255/dl)); if ip<0 then ip:=255-ip*(-1); // если прозрачность меньше нуля, тогда умнажаем на -1, чтобы поменять знак if ip>=0 then forma.AlphaBlendValue:=ip; if (forma.AlphaBlendValue=0) or (forma.AlphaBlendValue<5) then forma.close; end; // движение курсора сверху if (pos.Y<forma.top) and (pos.Y>(forma.Topdl+3)) and (vr=true) then begin ip:=255-(forma.Top-pos.y)*(round(255/dl)); if ip>=0 then forma.AlphaBlendValue:=ip; if (forma.AlphaBlendValue=0) or (forma.AlphaBlendValue<5) then forma.close; end; // движение курсора снизу if (pos.Y>forma.top+forma.ClientHeight) and (pos.Y>(forma.Top+forma.ClientHeight-dl+3)) and (nz=true) then begin ip:=(forma.Top+forma.ClientHeightpos.y)*(round(255/dl)); if ip<0 then ip:=255-ip*(-1); if ip>=0 then forma.AlphaBlendValue:=ip+255; if (forma.AlphaBlendValue=0) or (forma.AlphaBlendValue<5) then forma.close; end; // Для того, чтобы Мини-бар был полностью непрозрачным, // обрабатываем случай, когда курсор расположен над мини-баром if (pos.X>forma.Left) and (pos.X<forma.Left+forma.clientWidth) and (pos.Y>forma.Top) and (pos.Y<forma.Top+clientheight) and (vn=true) then begin forma.AlphaBlendValue:=255;

end; button1.Caption:=inttostr(ip); end; end; …

Теперь приступим к созданию самого Мини­бара! Создаем новую форму, Нажимаем Alt+F11, связываем её с формой Form1. Такое же действие проделываем и с главной формой, связывая, её с формой Мини­бара. При создании мини­бара я использовал библиотеку Alpha Control, благодаря ней, у меня получился примерно такой вот Мини­бар.

При создании Мини­бара рекомендую следовать следующим пунктам: 1. Мини­бар следует делать как можно компактней, так, чтобы он как можно меньше пространства занимал на экране.

2. При использовании выпадающих списков, вам следует отключать таймер, так как если высота списка больше 100, то форма будет закрываться. 3. Все компоненты рекомендуется отодвинуть от краев формы примерно на 3­5 пикселей, благодаря этой операции, при появлении Мини­бара он будет отличаться от формы.

Мини­бар мы создали, теперь давайте разберемся, как его вызывать. В обработчике нужного вам события впишите следующую строчку. minibar(form2,true,timer1,0);

Добавьте на форму таймер и сделайте его не активным. В обработчике OnTimer пишем: procedure TForm1.Timer1Timer(Sender: TObject); begin minibar(form2,true,timer1,1); end;

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

vr­online | июль 2010


Автор: aka Grad

17

Кодинг

Delphi

Асечные страсти Часть 1.

Сервисы для мгновенного обмена сообщениями плодятся как грибы, однако старушка Аська не собирается сдавать позиции. Чего с ней только не случалось! Ее создали на «святой» земле, продали американскому монстру, а тот и вовсе передал ее в руки российских бизнесменов. Несмотря на все перетрубации, аська все еще популярна среди простых смертных и в ее рядах наблюдается пополнение. Такое положение дел не оставляет нам выбора как взять и разобраться во всех тонкостях асечного протокола.

Немного истории

Появилась на свет ICQ в большом израильском городе Тель­Авив. Изначально ее хотели использовать только для обеспечения связи между несколькими удаленными друг от друга компьютерами. Именно так и появилась всем известная аська.

После создания ICQ никто не планировал выпускать ее на паблик и пытаться как­то монетизировать. Разработчики лишь хотели облегчить себе работу, путем экономии времени (еще бы, какой гик не любит общаться прямо со своего рабочего места?).

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

Сказать, что у нее мгновенно появились пользователи, значит, не сказать ничего. ICQ появилась на тысячах компьютерах разных стран мира буквально за пару дней, и потребность в кнопке скачать ICQ стала невообразимой. В 1998 году ICQ была приобретена компанией AOL за 407 миллионов долларов. А разработчики переквалифицировались в инвесторов. Мировая сеть ежедневно, можно даже сказать ежесекундно разрастается и расширяется. Каждый день в ICQ регистрируются тысячи

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

Ася + Delphi

Для взаимодействия с асечным протоколом уже давно существует провереннный временем компонент — ICQClient. Написал этот чудесный компонент не кто­то, а наш с вами соотечественник ­ Александр Демченко aka Coban2k. К сожалению, автор забросил поддержку компонента, но его дело не умерло. Ныне за совершенствованием проекта занимается Царь Иоанн XIII http://progs.volkov.spb.su/ticqclient По указанному линку можно найти последнюю версию компонента, а также примеры использования.

Работаем с компонентом

Ну вот, теперь давайте перейдем к установке компонента. У меня Delphi 7 и я скачал компонент TICQClient_v1.35_alpha http://forum.volkov.spb.su/index.php?action=dlattac h;topic=13747.0;attach=25. Устанавливается компонент как обычная библиотека. Не забудьте прописать путь к компоненту в настройках (если он автоматом не прописался). Ну все, установку закончили. Переходим к более близкому знакомству. Компонент находится на вкладке Samples, бросаем его на форму и смотрим свойства. UIN и Password. Как вы уже наверное поняли, это ваш уин и пароль ICQServer: String ­ ICQ сервер, следует использовать: 'login.icq.com'

ICQPort: Word ­ ICQ port, следует vr­online | июль 2010


18

Кодинг

использовать: '5190'

ContactList: Tstrings ­ Контакт лист пользователя, *посылается только при логине*. Каждая строчка ­­ UIN номер.

ConvertToPlaintext: Boolean ­ Если это свойство установить в TRUE, тогда сообщения, приходящие в RTF(Rich Text Format) формате, автоматически будут сконвертированы в простой текст(plain text). AutoAwayMessage: String ­ Авто­ответ пользователя. В обычной ICQ это ответ на 'Read Away­message'. VisibleList: Tstrings ­ Visible лист пользователя. Каждая строка ­­ UIN номер. Посылается, когда вы переходите в invisible статус. Добавлять пользователя можно в любое время.

InvisibleList: Tstrings ­ Invisible лист пользователя. Каждая строка ­­ UIN номер. Посылается, когда вы переходите в статус отличный от invisible. Добавлять пользователя можно в любое время. Вот эти основные свойства с которыми нам предстоит работать. Теперь взглянем на события:

Login(Status: LongWord = S_ONLINE) ­ Процедура устанавливает соединение с сервером, вы сразу переходите в статус Status, который по умолчанию S_ONLINE procedure Disconnect ­ Отсоединиться от сервера.

SendMessage(UIN: LongWord; Msg: String) ­ Послать сообщение UIN'у.

AddContact(UIN: LongWord): Boolean ­ Добавление UIN'а в ваш контакт лист после логина. UIN автоматически добавляется в ContactList TStrings. RemoveContact(UIN: LongWord) procedure ­ Удаляет UIN из вашего контакт листа. Используйте пока вы в онлайне.

С мат частью немного разобрались. Приступим к программировании ICQ bot. Открываем Delphi и создаем новый проект. Голую форму приводим примерно вот к такому виду: Я добавил Edit для уина и MaskEdit для пароля. Две Button для коннекта и дисконекта. ListBox для ответов и Memo для событий. Теперь начинаем кодить. По нажатию на кнопку коннект пишем следующий код

begin IcqClient1.UIN:=StrToint(Edit1.Text); ICqClient1.Password:=MaskEdit1.Text; IcqClient1.Login(0); Memo1.Lines.Add('Подключение...'); SpeedButton1.Enabled:=False; SpeedButton2.Enabled:=True; end;

В первой и во второй строке мы читаем Уин и пароль, далее мы начинаем коннектится к серверу после чего добавляем события в Memo. Активируем кнопку дисконекта , а кнопку коннекта деактивируем чтобы не было повторного коннекта. Далее пишем что будет делать бот после коннекта: procedure TForm1.ICQClient1Login(Sender: TObject); begin Image1.Picture.LoadFromFile('1.png'); StatusBar1.Panels[0].Text:='Онлайн'; Memo1.Lines.Add('Онлайн'); end;

Здесь все просто, загружаем фото в Image, добавляем сообщение в статус бар и мемо.

Дальше самое интересное. Что будет делать бот после получения сообщения от пользователя. Конечно же он должен ему ответить, а отвечать мы будем сообщениями из листбокса, взятые рандомным образом: procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String); Var Message_s:String; begin Message_s:=ListBox1.Items.Strings[Random(4)]; Memo1.Lines.Add('От - '+UIN+' '+ Msg); Memo1.Lines.Add('Кому - '+Uin+' ' + '('+'Я '+Message_S+')'); IcqClient1.SendMessage(StrToInt(Uin),'Я '+Message_S); end;

Что делает первая строчка ­ я уже говорил. Далее мы банально добавляем событие в мемо и в конце отправляем пользователю сообщение. Осталось запрограммировать кнопку дисконнекта. Пожалуй, это самый простой код: procedure TForm1.SpeedButton2Click(Sender: TObject); begin IcqClient1.Disconnect; SpeedButton1.Enabled:=True; SpeedButton2.Enabled:=False; Image1.Picture.LoadFromFile('2.png'); StatusBar1.Panels[0].Text:='Офлайн'; Memo1.Lines.Add('Отключен'); end;

На этом первый урок асечных страстей подошел к концу. Увидимся в следующем номере!

procedure TForm1.SpeedButton1Click(Se nder: TObject);

vr­online | июль 2010


Автор: Крылов Егор E­mail: krilov­egor@yandex.ru

19

Кодинг

Java

Android OS

Пишем первое приложение

Android OS ­ операционная система для мобильных устройств, основанная на ядре Linux. Первая версия датируется октябрем 2008 года. Сегодня довольно много производителей представили свои модели на базе именно этой ОС. Вот недавно и я купил себе один из них, а именно HTC Tattoo. Естественно я загорелся идеей написание собственных программ для этой платформы. В этой статье я расскажу тебе, как написать свое первое приложение для современной мобильной ОС.

и выбираем версию SDK. Далее нужно заполнить 3 поля с неочевидным смыслом. Я заполнил их следующими значениями:

Прежде чем что­то писать, надо понять на каком языке, и в какой среде это делать. В качестве среды проще всего использовать Eclipse. Кроме него нам понадобится JDK, Android SDK, и специальный плагин для Eclipse который значительно упростит нам жизнь. О том, как все это устанавливать я писать не буду. При минимальных знаниях английского об этом можно прочитать на http://developer.android.com/sdk/installing.html.

gen – файлы сгенерированные самой Java

Инструментарий

Для каждой версии ОС, а их уже достаточно много, SDK свой, и качать все их не стоит (они весят больше 1 Гб). Лучше скачать лишь ту версию, под которую пишется программа, естественно, если она создается для распространения в массы, стоит подумать о работоспособности под всеми основными версиями платформы. В качестве языка программирования (для основного кода) применяется Java, а для создания пользовательского интерфейса используется и XML. Кроме того интерфейс можно создавать интерактивно, перемещая компоненты мышкой на форму.

Hello, World!

Сегодня мы не будем нарушать традицию и начнем наше изучение с приложения «Привет, Мир!», точнее даже с двух его версий.

В Eclipse наживаем File­>New­>Project, в списке выбираем Android­>Android Project и жмем Next. Далее вводим имя проекта например HelloWorld,

Application name: Hello, World! Package name: com.example.helloworld Create Activity: HelloWorld

Об их смысле я скажу чуть позже, а сейчас жмем Finish. Проект состоит из нескольких папок: src – исходный код

Android 1.6 – у вас может быть другая версия, часть SDK res – файлы ресурсов, содержит несколько подкаталогов, сейчас самым важным для нас будет layout. В файле HelloWorld.java уже есть какой­то минимальный код. Давайте немного модифицируем его. Модифицируете его так, чтобы он имел следующий вид.

package com.example.helloworld; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello World!"); setContentView(tv); } }

Мы добавили в наше приложение возможность доступа к TextView – компоненту для отображения текста. Программирование осуществляется через обработку событий. Событие onCreate вызывается при первом запуске приложения. Там мы создаем текстовое поле, и устанавливаем для него текст.

vr­online | июль 2010


20

Кодинг

Вызовом setContentView(tv) мы отображаем наше поле на экране. Попробуем запустить проект, но тут выскакивает сообщение о том, что нет совместимого девайса и нужно его создать. Другими словами нужно создать виртуальную машину­телефон на котором запустится наше приложение.

Для того чтобы его создать жмем New, в окне вводим любое имя, а так же выбираем версию ОС, остальные поля можно не заполнять. Как видно можно создать по виртуальному девайсу на каждую версию ОС и проверять программу на работоспособность. Единственный минус это то, что виртуальные девайсы по умолчанию сохраняются в папке пользователя, и в пути к ней не должно быть русских букв. Пробуем еще раз и ждем порядка минуты пока загрузится эмулятор, и видим наше приложение на экране. На серой полосе в верхней части экрана мы видим надпись Hello, World! – это значение поля Application name, заполняемое при создании проекта, а далее на черном фоне видим надпись Hello World! – как раз тот текст который мы установили для нашего TextView. К сожалению, таким образом, мы не сможем отобразить на экране больше одного компонента, а это совсем не то, что нам нужно, поэтому придется еще немного модифицировать код. А точнее вернуться к его первоначальному виду.

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" />

Два первых свойства нам знакомы. Значение второго означает то, что компонент будет такой высоты которая нужна, и будет ее менять если это нужно. А вот значением третьего свойства является какое­то странное. Это ссылка на строку которая определена в ресурсах, а именно в файле strings.xml и имеет имя hello. В моем случае оно имеет значение Hello World, HelloWorld!. Запустив приложение, мы и увидим его в окне эмулятора.

Заключение

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

Вместо создания TextView там была всего одна строка setContentView(R.layout.main). Но что же такое R.layout.main? R – это служебный класс, который находится в папке gen, да и layout тоже. Ну а если проще то на экране будет отображен файл main.xml из папки layout. Откройте его. Судя по первой строке это обычный xml файл. В нем содержится описания компонентов и их свойств. Некоторые компоненты являются контейнерами и содержат в себе другие компоненты. Пример такого уже приведен во второй строке. Это LinearLayout. Он определяет способ расположения других компонентов друг относительно друга, наряду с ним существует несколько других таких компонентов. Поговорим о его свойствах, установленных по умолчанию. android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"

Первое означает, что компоненты будут располагаться вертикально друг под другом, а два других то, что LinearLayout будет занимать все место, которое для него предназначено, в данном случае весь экран. У него есть еще множество других свойств, но это выходит за рамки данной статьи. Далее в нем содержится уже знакомый нам TextView. vr­online | июль 2010


Автор: Поротников Андрей aka wwwnet

21

Кодинг

C#

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

Как видно, на ней расположено четыре компонента – три кнопки и одна метка. Метка как раз нужна для вывода данных, введенных пользователем. Первая кнопка использует уже существующий код. Для его использования необходимо подключить к проекту сборку Microsoft.VisualBasic:

Как видно, метод InputBox принимает пять параметров. Первый из них – это приглашение к вводу, второй – заголовок окна, третий – значение по умолчанию (вполне можно использовать и string.Empty), четвертый и пятый – это координаты верхнего левого угла (оба параметра имеют тип int). Вызывая таким способом InputBox, мы получаем окно такого вида:

Если пользователь нажал кнопку Ok, то InputBox вернет введенное значение, а если кнопку Отмена или просто закрыл окно – то пустую строку (т.е. исключения в приведенной выше строке кода мы в любом случае не получим).

Но что делать, если от пользователя нужно получить два или более значений? Вызывать InputBox подряд несколько раз – наверно, наихудшее решение в плане юзабилити, которое можно придумать. Я предлагаю создать в проекте новую форму примерно такого вида:

Теперь в проекте мы можем использовать следующий код: label1.Text = Microsoft.VisualBasic.Interaction.InputBox("Inp ut new value", "Interaction", "value", this.Left, this.Top);

Для того чтобы окно напоминало диалог, следует изменить следующие параметры формы: • Назначить свойствам AcceptButton и CancelButton соответствующие кнопки.

vr­online | июль 2010


22

Кодинг

• Свойству FormBorderStyle – значение FixedDialog.

• Свойствам MaximizeBox и MinimizeBox – значении false. • Также назначить свойствам ShowIcon и ShowInTaskbar значение false. В классе формы объявим две статические переменные: private static string value1 = null; private static string value2 = null;

Form2 frmNew = new Form2(); if (DialogResult.OK == frmNew.ShowDialog()) label1.Text = Form2.GetValue1 + Environment.NewLine + Form2.GetValue2;

В этом куске кода мы проверяем DialogResult, возвращаемый второй формой. Если он равен DialogResult.OK, то значения value1 и value2 обязательно заданы и исключения мы не получим.

Так как нам потребуется извлекать значения этих переменных из другой формы, зададим еще пару методов­аксессоров: public static string GetValue1 { get { if (null == value1) throw new NullReferenceException(); else return value1; } } public static string GetValue2 { get { if (null == value2) throw new NullReferenceException(); else return value2; } }

Если форма ни разу не вызывалась и переменным не задавались значения, будет выброшено исключение NullReferenceException. Чтобы избежать падения приложения из­за исключения, в коде обработки события нажатия кнопки Ok напишем следующее: value1 = textBox1.Text; value2 = textBox2.Text; this.DialogResult = DialogResult.OK;

Соответственно, в коде обработчика нажатия кнопки отмены вставим такой код: value1 = value2 = null; this.DialogResult = DialogResult.Cancel;

Если форму закроют, то свойству DialogResult также будет присвоено значение DialogRsult.Cancel.

Таким образом, можем воспользоваться данной формой следующим образом: vr­online | июль 2010


Перевод: Игорь Антонов aka Spider_NET E­mail: antonov.igor.khv@gmail.com

23

Кодинг

С# Простая база данных фильмов на C#

В этой небольшой статье я хочу рассказать тебе про написание простейшей база данных фильмов, или проще говоря, видео каталога, при помощи C# и Microsoft Access. В статье я рассмотрю все необходимые моменты: подключение к программе mdb файла, чтение/запись данных с использованием dataGridView и т.д.

Лепим приложение

Первым делом, тебе необходимо создать базу данных в Microsoft Access. База данных очень проста, поэтому у тебя есть непаханое поле для экспериментов и совершенствования. // Первая таблица будет содержать фильмы // где movieID является авто-увеличивающимся значением, также primary key //(главным ключом), и typeID вторичным ключом (foreign key) // movies (movieID, Title, Publisher, Previewed, Year, typeID) // -------------------------------------------------------------// Вторая таблица будет хранить жанры фильмов // movietypes (typeID, Type)

Если ты сразу планируешь создать большую базу, то воспользуйся каким­нибудь генератором базы данных. Для небольшого проекта, такого как этот, в применение таких инструментов нет необходимости. Ok, теперь у нас есть база данных. Можно двигаться дальше. Microsoft Access позволяет добавлять записи, но мы хотим создавать их из

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

public Form1() { InitializeComponent(); // initiate DB connection string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=moviedb.mdb"; try { database = new OleDbConnection(connectionString); database.Open(); //SQL query to list movies string queryString = "SELECT movieID, Title, Publisher, Previewed, Year, Type FROM movie,movieType WHERE movietype.typeID = movie.typeID"; loadDataGrid(queryString); } catch (Exception ex) { MessageBox.Show(ex.Message); return; } }

Метод loadDataGrid загружает данные из базы данных в компонент dataGridView, при помощи SQL запроса, записанного в строковой переменной queryString. Реализация ниже: public void loadDataGrid(string sqlQueryString) { OleDbCommand SQLQuery = new OleDbCommand(); DataTable data = null; dataGridView1.DataSource = null; SQLQuery.Connection = null; OleDbDataAdapter dataAdapter = null; dataGridView1.Columns.Clear(); // <-- clear columns

vr­online | июль 2010


24

Кодинг SQLQuery.CommandText = sqlQueryString; SQLQuery.Connection = database; data = new DataTable(); dataAdapter = new OleDbDataAdapter(SQLQuery); dataAdapter.Fill(data); dataGridView1.DataSource = data; dataGridView1.AllowUserToAddRows = false; // <-- remove the null line dataGridView1.ReadOnly = true; // <-- so the user cannot type sizes

false; 340; 55; 50; 80; datagridview

// following code defines column

dataGridView1.Columns[0].Visible = dataGridView1.Columns[1].Width = dataGridView1.Columns[3].Width = dataGridView1.Columns[4].Width = dataGridView1.Columns[5].Width = // insert edit button into

editButton = new DataGridViewButtonColumn(); editButton.HeaderText = "Edit"; editButton.Text = "Edit";

string queryString = "SELECT movieID, Title, Publisher, Previewed, Year, Type FROM movie, movieType WHERE movietype.typeID = movie.typeID"; int currentRow = int.Parse(e.RowIndex.ToString()); try { string movieIDString = dataGridView1[0, currentRow].Value.ToString(); movieIDInt = int.Parse(movieIDString); } catch (Exception ex) { } // edit button if (dataGridView1.Columns[e.ColumnIndex] == editButton && currentRow >= 0) { string title = dataGridView1[1, currentRow].Value.ToString(); string publisher = dataGridView1[2, currentRow].Value.ToString(); string previewed = dataGridView1[3, currentRow].Value.ToString(); string year = dataGridView1[4, currentRow].Value.ToString(); string type = dataGridView1[5, currentRow].Value.ToString();

editButton.UseColumnTextForButtonValue = true; editButton.Width = 80; dataGridView1.Columns.Add(editButton); datagridview

// insert delete button to

deleteButton = new DataGridViewButtonColumn(); deleteButton.HeaderText = "Delete"; deleteButton.Text = "Delete"; deleteButton.UseColumnTextForButtonValue = true; deleteButton.Width = 80; dataGridView1.Columns.Add(deleteButton); }

Интересной частью этого кода является добавление кнопок в ячейки dataGridView. При помощи этих кнопок, ты сможешь обновлять или изменять выделенные строки. Если тебе не нравится вариант с кнопками для каждой строки, то можешь создать всего лишь две кнопки (вне компонента dataGridView) и забиндить на них редактирование и удаление записей для выделенной строки. Для своего примера я использую первый способ. Теперь нам нужно найти ответ на один интересный вопрос: «Как узнать когда нажали кнопку в определенной ячейке и собственно как повесить на эти кнопки код обработчика событий?». Мой пример решения ниже: private void dataGridView1_CellContentClick (object sender, DataGridViewCellEventArgs e) {

...

}

Form2 f2 = new Form2(); f2.title = title; f2.publisher = publisher; f2.previewed = previewed; f2.year = year; f2.type = type; f2.movieID = movieIDInt; f2.Show(); dataGridView1.Update();

Как видишь, я использую событие CellContentClick. После того как выполнено нажатие кнопки, мне необходимо узнать выделенную строку. Я получаю индекс это на основании e.RowIndex. Используя эту переменную, ты можешь получить значение любой колонки выделенной строки. Как и было показано, первый параметр – это номер колонки, а второй – номер строки. Когда обновление выделенной строки завершается в Form2, я вызываю метод Update() на объекте dataGridView1, тем позволяя сразу увидеть изменения, которые были сделаны. Кнопка «Удалить» работает по такому же принципу:

// delete button else if (dataGridView1.Columns[e.ColumnIndex] == deleteButton && currentRow >= 0) { // delete SQL query string queryDeleteString = "DELETE FROM movie WHERE movieID = "+movieIDInt+""; OleDbCommand sqlDelete = new OleDbCommand(); sqlDelete.CommandText = queryDeleteString; sqlDelete.Connection = database; sqlDelete.ExecuteNonQuery();

vr­online | июль 2010


25

Кодинг }

loadDataGrid(queryString);

Mission Complete

Пример, рассмотренный в статье достаточно прост. Все остальные доработки и совершенствования ложатся на твои могучие плечи. Если после прочтения у тебя возникли трудности с реализацией примера, то обязательно скачай мои исходники и хорошенько их изучи. Автор: Ivan Svogor Оригинал статьи: http://www.codeproject.com/KB/cs/simple_movie_databa se.aspx

vr­online | июль 2010


Перевод: Игорь Антонов aka Spider_NET E­mail: antonov.igor.khv@gmail.com

26

Кодинг

С# Простой телефонный справочник на C#

Несколько дней назад я потерял свой мобильник. Все мои контакты были сохранены в телефоне и само собой были утеряны вместе с ним. К счастью, в скором времени я нашел свой телефон, но перед находкой, я решил создать простенькое приложение для хранения контактов аля телефонный справочник. В качестве языка программирования я выбрал C#, а также задействовал технологию LINQ. Хранилищем всех контактов будет зашифрованный 3DES алгоритмом XML­файл.

вводятся в Forgets the password region модуля UserForm.cs.

try {

Что умеет мой справочник

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

Любой контакт можно найти при помощи встроенного поискового механизма. Вводим первые буквы имени контакта и сразу же видим результат. 2. Многопользовательский режим

С моим приложением могут работать несколько пользователей. Каждый пользователь будет видеть лишь свои контакты. 3. Вспоминалка паролей

Если ты хочешь заюзать эту функцию, то тебе необходимо ввести валидное имя пользователя и пароль своего SmtpClient в коде C#. Кроме того, ты можешь ввести имя пользователя и пароль своего Gmail аккаунта. Все данные

NetworkCredential loginInfo = new NetworkCredential("username", "password"); MailMessage msg = new MailMessage(); msg.From = new MailAddress("sth@gmail.com"); msg.To.Add(new MailAddress(user.First().Attribute("Email").Va lue)); msg.Subject = "Phonebook Password"; msg.Body = "Yours Password = " + password; msg.IsBodyHtml = true; SmtpClient client = new SmtpClient("smtp.gmail.com"); client.EnableSsl = true; client.UseDefaultCredentials = false; client.Credentials = loginInfo; client.Send(msg); MessageBox.Show("Your password has been sent to your email", "Email sent", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }

После внесения изменений не забудь выполнить компилирование проекта. 4. Безопасность

Для обеспечения безопасности контактов я применяю классы .NET 3DES

//Base on : http://msdn.microsoft.com/enus/library/system.security.cryptography. //tripledescryptoserviceprovider.aspx public static void EncryptToFile(String Data,

vr­online | июль 2010


27

Кодинг String FileName, byte[] Key, byte[] IV) { try { //Создаем или открываем определенный файл FileStream fStream = File.Open(FileName, FileMode.Create); // Создаем a CryptoStream использую FileStream // и передаем ключ с вектор инициализации (IV). CryptoStream cStream = new CryptoStream (fStream, new TripleDESCryptoServiceProvider(). CreateEncryptor(Key, IV), CryptoStreamMode.Write); // Создаем StreamWriter используя CryptoStream. StreamWriter sWriter = new StreamWriter(cStream); // Записываем данные в поток // и зашифровываем их. sWriter.WriteLine(Data); // Закрываем поток // и закрываем файл. sWriter.Close(); cStream.Close(); fStream.Close();

} catch (CryptographicException e) { Console.WriteLine("A Cryptographic error occurred: {0}", e.Message); } catch (UnauthorizedAccessException e) { Console.WriteLine("A file access error occurred: {0}", e.Message); } } public static string DecryptFromFile(String FileName, byte[] Key, byte[] IV) { try { // Создаем или открываем файл. FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate); // Создаем CryptoStream используя FileStream // и ключ с вектором инициализации(IV). CryptoStream cStream = new CryptoStream (fStream, new TripleDESCryptoServiceProvider(). CreateDecryptor(Key, IV), CryptoStreamMode.Read); // Создаем StreamReader используя CryptoStream. StreamReader sReader = new StreamReader(cStream); // Читаем данные из потока // и расшифровываем их. string val = sReader.ReadToEnd(); // Закрываем потоки // и закрываем файл. sReader.Close(); cStream.Close(); fStream.Close();

// Возвращает строку return val;

} catch (CryptographicException e) { Console.WriteLine("A Cryptographic error occurred: {0}", e.Message); return null; } catch (UnauthorizedAccessException e) { Console.WriteLine("A file access error occurred: {0}", e.Message); return null; } }

Если кто­то откроет XML файл, то контактов он не увидит, т.к. они все данные зашифрованы. Я предлагаю тебе изменить Ключ и Вектор на свои собственные (см. TripleDES.cs). По умолчанию в качестве ключа и вектора используются: public static byte[] ByteKey = new byte[] { 65, 20, 35, 105, 249, 97, 242, 87, 163, 127, 124, 121, 73, 225, 209, 103, 5, 198, 68, 221, 122, 14, 224, 2 }; public static byte[] IV = new byte[] { 160, 175, 98, 111, 208, 167, 177, 23 };

В случае если ты новичок в 3DES или вообще ни разу с ним не сталкивался, то воспользуйся приложением TripleDES Key, IV Creator (программа прилеплена к статье). С его помощью ты сможешь сгенерировать новый вектор и ключ.

5. Настройки

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

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

Автор статьи: Mohammad Dayyan Оригинал статьи: http://www.codeproject.com/KB/cs/CSharpPhoneBook.as px

vr­online | июль 2010


Автор: Toly WWW: http://toly­blog.ru

28

Кодинг

Python

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

Массивы

Сейчас мы узнаем о том, как работать с массивами. # создаем пустой массив a = [] # различными способами добавляем к нему три элемента: 5, 6 и 7 a.append(5) a = a + [6] a += [7] # создаем массив из трех элементов b = [1, 2, 3] # объединяем массивы a и b c = a + b # теперь массив c выглядит так: [5, 6, 7, 1, 2, 3] c = b + a # а теперь так: [1, 2, 3, 5, 6, 7] # выведет 6 - четвертый эелемент массива (нумерация начинается с нуля) print c[4] # выведет последний и предпоследний элементы массива print c[-1], c[-2] # выведет все элементы массива кроме первых двух print c[2:] # выведет последние два элемента массива print c[-2:] # выведет первые два элемента print c[:2] # выведет все элементы кроме последних двух print c[:-2] # выведет весь массив кроме первых двух и последних трех элементов print c[2:-3] # выведет количество элементов в массиве print len(c)

Ветвления и циклы

Теперь рассмотрим, как организовать на python циклы и ветвления (обработка массивов в цикле, использование break и continue). В статье приведен необходимый минимум материала, поэтому если кто­то считает список примеров кода неполным – оставляйте в комментариях предложения. Прочитав варианты использования циклов и ветвлений обязательно поэкспериментируйте в PyScripter, и Ваши волосы будут мягкими и шелковистыми ). Уже скоро будем применять полученные знания на практике. ## условия - if # простейшее условие a = 1 if a == 1: print u'один' # используем else a = 1 if a == 1: print u'один' else: print u'не один' # усложняем ветвление - несколько вариантов if a == 1: print u'один' elif a==0: print u'ноль' else: print u'не один и не ноль' # краткая форма записи x = u'один' if a == 1 else u'не один' print x # наличие элемента в массиве a = [1, 2, 3] x = 5 if x in a: print u'5 присутствует в массиве' else: print u'5 не присутствует в массиве' # отсутствие элемента в массиве if x not in a: print u'в массиве пятерки не обнаружено' ## цикл - for # i поочередно принимает значения от 0 до 9 for i in xrange(10): print i # i принимает значения от 10 до 19 for i in range(10,20): print i # формирования массива при помощи цикла

vr­online | июль 2010


29

Кодинг # в массиве будут квадраты чисел от 0 до 9 c = [ i*i for i in xrange(10) ] # пройтись по элемента массива for i in xrange(len(c)): print c[i] # второй способ for q in c: print q ## цикл while # не забываем увеличивать значение счетчика в теле цикла i = 0 while i<10: print i i += 1 # можно и так # цикл выполняется пока i не равно 10 i = 0 while i != 10: print c[i] i += 1 ## использование break и continue в циклах ## continue - переход к следующей итерации цикла ## break - останов цикла # суммирование положительных эелемента массива a = [1, 3, -9, 2, 3, -3] sum = 0 for x in a: if x < 0: continue sum += x print sum # будет выводить элементы массива # до появления первого отрицательного числа for x in a: if x < 0: break print x

Функции и модули

Пришло время рассмотреть определение функций на python, их вызов, а так же написание и использование отдельных модулей для дальнейшего использования. В качестве примера напишем модуль для простейших статистических расчетов (вычисление суммы элементов массива, среднего арифметического и дисперсии) и научимся его использовать. Итак, вначале функции.

# пример определения ничего не делающей функции # (pass означает ничего не делать) def simpleFunction(): u""" Справка (помощь, F1 и т.д.) для функции simpleFunction(): эта функция абсолютно ничего не делает""" pass # вызываем функцию simpleFunction() # вызываем справку по функции print simpleFunction.__doc__ # функция сложения # если второй аргумент не задан, # то по умолчанию b = 1 def funcAdd(a, b=1): # то, что возвращает функция return a + b # можно определить эту же функцию как лямбдавыражение funcAdd = lambda a, b=1: a+b

# выведет сумму чисел 3 и 8 print funcAdd(3, 8) # выведет 6, второй аргумент не задан # и его значение принимается по умолчанию единице print funcAdd(5) # можно сразу сделать вывод, # а результат вычислений не возвращать def printFuncAdd(a, b=1): print a + b # возвращает None, а выводит 11 printFuncAdd(10) # используем глобальные переменные def printA(): global a print a a += 1 # после вывода внешней переменной 'a' # увеличивает ее значение на 1 a = 10 printA() print a

Теперь перейдем к практической части. Сохраним файл на диск со следующим содержимым. Назовем его “stat.py”. Это будет наш модуль. # функция суммирования элементов массива def summas(a): s = 0 for x in a: s += x return s # функция вычисления среднего арафиметического def average(a): # используем определенную выше # функцию суммирования элементов массива return summas(a)/len(a) # функция вычисления дисперсии def dispersion(a): av = average(a) s = 0 for x in a: s += (x - av) * (x - av) return s/len(a)

В той же папке сохраняем файл (под названием “test.py”) следующего содержания. # импортируем модуль stat.py import stat # "придумываем" массив для обработки a = [1,3,4,2,3,4] print u'Исходный массив: ', a print u'Сумма элементов массива: ', stat.summas(a) print u'Среднее арифметическое: ', stat.average(a) print u'Дисперсия: ', stat.dispersion(a) # а можно подключить модуль так: import stat as st print u'Исходный массив: ', a print u'Сумма элементов массива: ', st.summas(a) print u'Среднее арифметическое: ', st.average(a) print u'Дисперсия: ', st.dispersion(a) # или так: from stat import * print u'Исходный массив: ', a print u'Сумма элементов массива: ', summas(a) print u'Среднее арифметическое: ', average(a)

vr­online | июль 2010


30

Кодинг print u'Дисперсия: ', dispersion(a)

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

# при выводе массива наблюдаем вместо обычных символов их коды print u'\n===> массив строк файла' print lines # выведем каждую строку массива по отдельности print u'\n===> выведем каждую строку массива по отдельности' for line in lines: print line.decode('utf-8')

В результате должно получиться что­то вроде этого:

Файлы и www

Здесь мы разберемся, как работать с файлами и принимать информацию из интернета. Читаем и просвещаемся потому, как данный материал будет использоваться на практике для прогнозирования временных рядов в следующем цикле статей. Предоставленная информация не отражает всех возможностей python, тем не менее, для работы с онлайн­котировками приведенных примеров будет достаточно. Работа с файлами

# -*- coding: UTF-8 -*## создаем файл и записываем в него 2-е строки # режим работы "w" - если файла нет, то он создается # если есть - перезаписывается f = open('1.txt', 'w') # \n - перевод на новую строку f.write('Текст первой строки\n') f.write('Текст второй строки\n') # сохраняем изменения в файле f.close() ## дописываем в конец файла дополнительные строки # если бы файла не было - он бы создался # параметр 'a+' - дописываем в конец файла f = open('1.txt', 'a+') f.write('Новая строка (добавочная)') f.close() ## открываем файл для чтения и выводим его содержимое # 'r' - режим чтения f = open('1.txt', 'r') # в переменную line передается текст файла как одна строка line = f.read() # выводим содержимое print u'===> содержимое файла' print line print u'===> содержимое файла в нормальной кодировке' print line.decode('utf-8') print u'===> количество символов', len(line) f.close() ## считываем файл как массив строк f = open('1.txt', 'r') # в переменную lines передается массив срок файла lines = f.readlines() f.close()

Работа с интернетом

В качестве иллюстрации работы с интернетом рассмотрим небольшой скрипт, приведенный ниже. # -*- coding: UTF-8 -*# python-рецепты (интернет и urllib) # импортируем модуль для работы с интернетом import urllib site = urllib.urlopen('http://ya.ru') page = site.read() # те же проблемы с кодировкой print page # исправляемся print page.decode('utf-8')

Запустив все это в PyScripter увидим html­код облегченной страницы Яндекса:

Для работы с www в контексте работы с онлайн котировками нам больше знать и ненужно. Во избежание проблем с кодировками решил написать сетевое приложение в линуксе. Как оказалось там свои тонкости работы с www: например строчка page = site.read()

в Ubuntu 9 работать не будет (а в десятой, например, работает). Поэтому иногда лучше сразу использовать модуль urllib2.

Обработка текста

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

vr­online | июль 2010


31

Кодинг

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

есть библиотека math. Модуль matplotlib в стандартный набор не входит, но является стандартом де­факто при визуализации числовой информации: с его помощью можно легко строить диаграммы, а так, же 2D и 3D графики.

Модуль string

модули math и cmath:

# подключаем модуль string import string # определяем строку (одинарные или двойные кавычки) st = 'aa1 ab2 aa3 ab4' st1 = "word1,word2,word3,word_N" # определяем многострочную строку (тройные кавычки) st2 = '''string 1 string 2 string n''' # суммирование строк print st + st1 # count - возвращает количество вхождений подстроки в строку # (строки 'ab' в строку st) print string.count(st, 'ab') # можно работать со строкой как с массивом символов # выведет ab2 print st[4:7] # find - возвращает номер символа в строке с которого начинается подстрока # выведет 4 print string.find(st, 'ab') # выведет -1, так как в строке нет подстроки 'aaa' print string.find(st, 'aaa') # возвращает строку в верхнем регистре print string.upper('fgfHLKJ') # возвращает строку в нижнем регистре print string.lower('fgfHLKJ') # разделителем ',' разбиваем строку на массив строк print string.split(st1, ',') # зная, что символ новой строки это '\n', # преобразуем многострочную строку в массива строк lines = string.split(st2, '\n') print lines # теперь обратная операция - из массива строк # делаем одну, добавляя между ними разделитель '==' new_str = string.join(lines, '==') # выведет 'string 1==string 2==string n' print new_str # replace - замена подстрок в строке # меняем '==' на '=>>' print string.replace(new_str, '==', '=>>')

Модули math и matplotlib

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

Уже собирался было приниматься за статью, как вспомнил об удобном ресурсе, которым сам часто пользуюсь. Именно там наиболее удобная справка к модулю math – ни убавить, ни прибавить. Поэтому не буду изобретать велосипед и предоставлю ссылку на источник: http://ru.wikiversity.org/wiki/Программирование_и_ научные_вычисления_на_языке_Python/§2/Прил ожение строим графики:

http://ru.wikiversity.org/wiki/Программирование_и_ научные_вычисления_на_языке_Python/§9 диаграммы:

http://ru.wikiversity.org/wiki/Программирование_и_ научные_вычисления_на_языке_Python/§10 На этом свою миссию по предоставлению начальных сведений о python считаю выполненной.

Пакеты и ООП

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

Организация python-пакетов

Пакетом в питоне называется группа модулей, объединенные по какому­либо признаку. Питоновские пакеты делать неудобно, а очень удобно: для этого создается каталог с именем пакета, например testpak, затем в него помещаются модули, которые нужно сгруппировать, например module1.py и module2.py, а так же инициализирующий модуль __init__.py, который “сообщает” интерпретатору python, что каталог, в котором он находится, является пакетом. Допустим в модуле module1.py определена функция func(). Следующий фрагмент кода показывает, как получить к ней доступ. # импортируем необходимый модуль из пакета # и задаем для него псевдоним - mod import testpak.module1 as mod # вызываем требуемую функцию mod.func()

vr­online | июль 2010


32

Кодинг

Пакеты могут быть вложенными. Так что если бы функция func() была бы определена в модуле module3.py пакета podpaket, сохраненного в свою очередь в каталоге пакета testpak, то доступ к ней осуществлялся бы следующим образом: # импортируем необходимый модуль из пакета # и задаем для него псевдоним - mod import testpak.podpaket.module3 as mod # вызываем требуемую функцию mod.func()

Организация пакетов:

Предположу, что суть объектно­ ориентированного программирования читателю ясна, и с места в карьер предлагаю ознакомиться с практической реализацией класса auto на python. Думаю, из комментариев все предельно ясно.

"литров бензина" # процедура поездки # в качестве параметра передаем сколько нужно проехать def ride(self, lenght=100): maxride = self.petrol * 100 / self.rate if maxride >= lenght: spend = self.rate * lenght / 100 self.petrol -= spend print "Проехали", lenght,"км" else: print "не доедем!" # сколько бензина осталось? def petrol_level(self): print "В баке", self.petrol, "литров" # машина с параметрами по умолчанию x = auto() print " -> смотрим в бензобак" x.petrol_level() print " -> пробуем проехать 5 км с пустым баком" x.ride(5) print " -> заправляем 20 литров" x.fill(20) print " -> заправляем еще 30" x.fill(30) print " -> едем на дачу (220 км)" x.ride(220) print " -> едем обратно (тоже 220 км)" x.ride(220) print "-> а можно посмотреть в бензобак так:" print x.petrol print "-> и изменить его" x.petrol += 20 x.petrol_level()

# -*- coding: utf-8 # класс автомобиля auto class auto(object): # функция инициализации объекта класса (заодно передаем параметры) # ключевое слово self указывает на экземпляр объекта # и всегда передается первым как параметр def __init__(self, rate=10, volume=40): # свойство обекта - расход топлива self.rate = rate # свойство объекта - емкость бака self.volume = volume # сколько бензина self.petrol = 0 # для демонстрации выводим параметры print "Параметры автомобиля:" print "Расход", self.rate, "литров на сотку" print "Бензобак -", self.volume, "литров" print "---------------------------------" # процедура наполнения бака def fill(self, add_petrol): self.petrol += add_petrol if self.petrol > self.volume: print "В бак не поместилось ", self.petrol - self.volume, "литров" self.petrol = self.volume else: print "Успешно залито", add_petrol,

vr­online | июль 2010


VR­Crew

33

Я прусь!

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

JimmyJonezz: Когда в жизни каждого, что­то исполняется, и исполняется согласно задуманному, состояние в котором пребывает человек сложно описать. На данный момент у меня схожая ситуация ­ я удачно реализую свои замыслы и запросы и поэтому я прусь от этого. Некоторые задумки реализуются дольше, некоторые меньше (по временному промежутку), но всегда один результат. Когда прилагаешь усилия и видишь как они реализовываются, пребываешь в некотором восхищении и внутреннем "подъеме". Стоит понимать, что запросы должны быть пропорциональны возможности их реализации, и это маленькое правило помогает мне получать удовольствие от жизни в целом. zahod5277: В этом месяце я прусь от перемен. Я переехал в город. Наконец­то у меня будет нормальный интернет, завяжется куча новых знакомств, будет интересно. А еще, я кое­где добыл два старых системных блока, годов эдак 2002­2003. Один системник я планирую использовать как сервер, небольшое файлохранилище, а на второй у меня более грандиозные планы ­ модинг. Хочу покрасить его, понавтыкать кучу светодиодов, чтоб мерцал как новогодняя елка, хочу... Много чего я хочу с ним сделать, если получится ­ обязательно ждите фотографии на сайте.

Va­Bank: Да не прет меня. На работе завал, напарник уехал отдыхать в горы, так что я один отдуваюсь за всё. Настроения нет.

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

том году.

wwwnet: Мне нравится, что IT­ индустрия в наше время развивается быстрым темпом. Не так давно вышел Android, а уже одна из популярных платформ. Скоро выйдут в свет Windows Phone'ы. В Интернете появляются новые сервисы, старые и хорошо зарекомендовавшие себя сайты развиваются и некоторые даже в правильном направлении. И самое приятное ­ что ты тоже в этом участвуешь, внося хоть небольшой, но тоже вклад.

Spider_NET: Перед самой сдачей номера я умудрился серьезно заболеть. Ни с того ни с сего поднялась высокая температура и появилась головная боль. Как я только не пытался с ней бороться. Попробовал всевозможные таблетки, но результата так и не было. Жена предлагала вызвать врача скорой помощи (все таки два дня подряд лежать с температурой 39,6 не айс), но я отказался. У меня печальный опыт общения с врачами скорой помощи, поэтому нет никого желания к ним обращаться по «мелочам». В итоге, жена сходила в аптеку и там ей посоветовали как можно качественно сбить температуру. Правда нужно было ставить себе укол. Супруга ни разу не ставила уколы, а я как­то смотрел теоретическое видео по этой теме на YouTube. Одним словом я решился себя уколоть :­) Как говорит мой друг

vr­online | июль 2010


34

Я прусь!

lord_of_fear: «У тебя ганстерский подход к лечению!». Оказалось, что поставить себе укол ни такая уж большая проблема. Все просто и быстро, а главная я добился нужного эффекта. Температура немного спала, а ее остатки я добил вторым уколом. Так, вот, я прусь от полезности видео на YouTube и безграничных человеческих возможностях :­)

vr­online | июль 2010


Автор: Игорь Антонов aka Spider_NET E­mail: Antonov.igor.khv@gmail.com

35

Обзоры от VR

English Grammar In Use Осваиваем грамматику английского

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

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

Постоянные посетители нашего сайта знают, что с прошлого года я серьезно занялся изучением языка. У меня есть конкретная цель, и отступать уже некуда. Следовательно, грамматику придется как­то побеждать. К счастью у меня очень хороший преподаватель, который дает очень много полезной информации. Именно у него я и увидел следующую книгу – Raymond Murphy “English Grammar in Use”. Впервые попробовав позаниматься по этой книге, я буквально влюбился в нее! Такого простого изложения грамматики английского мне видеть еще не приходилось. Все настолько просто и понятно, что аж хочется заниматься вновь и вновь. Думаю, ты уже догадался, что я не смог отказать себе в покупке этой книги и сейчас я расскажу о ней подробнее. Итак, для начала сразу освещу один маленький нюанс. Книга от корки до корки написана на

английском языке. Ни одного слова на Великом и Могучем языке ты не найдешь. На мой взгляд, в этом большой плюс книги, т.к. параллельно ты научишься пользоваться словарем, да и не хило пополнишь свой словарный запас. По началу будет тяжело ее читать, но со временем привыкнешь (а куда ты денешься с подводной лодке?). Структура книге не требует последовательного чтения. Ты можешь выбрать интересующую тебя тему и изучать лишь ее. Если темы изучаемой главы переплетается с другими главами, то об этом будет сообщено в сносках, т.е. заблудиться и что­то упустить у тебя вряд ли получится.

Весь теоретический материал подкреплен практическими упражнениями. Их обязательно нужно выполнять и сверяться с ответами в конце книге. Упражнения интересные, но жаль, что их не очень много. В среднем, на одну тему приводится 4­6 упражнений. Если хочется тренироваться большое, то придется пошурстить инет и найти всякого рода задачники по английскому. Благо проблем с поиском нет.

Книга продается в двух варианта – с компакт­ диском и без него. К сожалению, мне достался вариант второй, т.е. без диска. Когда я заказывал книгу в books.ru у них была только бездисковая версия. Если у тебя будет выбор, то обязательно покупай ту, что с диском. Она стоит немного дороже, но зато у тебя будут дополнительные бонусы. На компашке тебя будут ждать дополнительные упражнения (судя по описанию диска их там много), а также всевозможные тесты. Не могу не сказать об изложении теории. На мой взгляд, автор преподносит ее очень хорошо. Вроде теоретического материала немного (в рамках одной темы), но для понимания хватает за глаза. Конечно, будут попадаться (во всяком случае, для меня) тяжело усваиваемы темы, но бояться не нужно. К твоим услугам всегда инет с сайтами вроде glish.ru, а в моем случае еще и преподаватель.

vr­online | июль 2010


36

Обзоры от VR

После прочтения книги, ты:

1. Познаешь грамматику. Только не обольщайся! От одной книги гуру ты не станешь, а вот поднять свои знания сможешь запросто. Главное потом не останавливаться на достигнутом, а продолжать учиться дальше. 2. Пополнишь словарный запас. Поскольку книга полностью написана на английском тебе придется заглядывать в словарь для поиска значения нужных слов. Это очень положительно отразится на запоминании нужных слов. 3. Найдешь интересные фразы и выражения.

А где купить?

Все книги, которые попадают в наши обзоры, ты можешь приобрести в интерент­магазинах Books.RU (http://books.ru) и Ozone.RU (http://ozon.ru).

vr­online | июль 2010


Автор: Jimmy Jonezz Email: jimmyjonezz@bk.ru

37

Обзоры от VR

Opera unite Удобный доступ к содержимому

Счастливые обладатели веб­браузера Opera, могут похвастаться тем, что (начиная с 10 версии – прим. автора) присутствует дополнение, которое обеспечивает этому браузеру дополнительный широкий набор функциональных возможностей. Речь пойдет о такой технологии, как Opera Unite. Благодаря Opera Unite, есть возможность сделать любой компьютер не только клиентским устройством, но и использовать его в качестве сервера, что позволяет пользователям, связываться с соседними компьютерами знакомых или друзей и напрямую делиться информацией без использования онлайн­ сервисов и каких­либо других приложений.

Рассмотрим самую простую ситуацию – есть некая локальная сеть (данная технология работает не только в локальной сети – прим. автора) и пользователь, который юзает Opera Unite (учётная запись в социальной сети «My Opera» и лабораторный релиз Opera Unite). Этот же пользователь, к примеру, устанавливает виджет Media Player, загружает любимые треки в плейлист, а также предоставляет к этому приложению общий доступ. Остальные пользователи, теперь смогут свободно пользоваться приложением Media Player, имея при этом любой веб­браузер, отличный от Opera. Важно помнить, чтобы активировать Opera Unite на своём компьютере и предоставить доступ к его содержимому, пользователь должен использовать браузер Opera. Думаю, ход мысли ясен. Доступны следующие сервисы:

Доступ к файлам (File Sharing): с помощью этого приложения можно предоставить доступ к файлам на своём компьютере другим пользователям. В данном случае не требуется предварительно загружать эти файлы на специализированные онлайновые сервисы. Достаточно лишь выбрать на своём локальном диске папку, доступ к которой вы хотите предоставить. Opera Unite сгенерирует прямую ссылку на эту папку. Её можно разослать

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

Веб­сервер (Web Server): данный сервис позволяет запустить полноценный веб­сайт с компьютера. Достаточно выбрать на локальном диске папку с файлами веб­сайта и разрешить доступ к ней извне. Всё содержимое при этом останется на вашем компьютере, который будет выступать одновременно и хранилищем информации. Opera Unite автоматически распознаёт и запускает индексные файлы, так что ваш веб­сайт будет отображаться в том виде, в котором он разработан.

Медиа­проигрыватель (Media­Player): доступ к вашей музыке, где бы вы ни находились и с любого компьютера. Для этого нужно выбрать папку с музыкальной коллекцией в формате MP3 и разрешить доступ к ней, а затем использовать прямую ссылку Opera Unite, открыв её в любом браузере и начав прослушивание композиций с помощью встроенного в Opera Медиа­ проигрывателя. Доступ к фото (Photo Sharing): теперь можно поделиться фотографиями с друзьями и родственниками прямо со своего компьютера, не отправляя файлы на онлайновые сервисы. Для этого достаточно выбрать папку с фотографиями на локальном диске компьютера, и приложение сформирует галерею их миниатюр. Полноразмерное фото загружается нажатием на миниатюру. Гостиная (The Lounge): данный сервис даёт возможность организовывать чат с друзьями прямо на своём компьютере. Ваши друзья могут присоединяться к разговору нажатием на прямую ссылку, без необходимости регистрироваться в каких­либо онлайновых сервисах. В зависимости от установок, вам достаточно только сообщить им пароль для входа в чат.

«Холодильник» (The Fridge): прикрепите записки к виртуальным холодильникам ваших друзей. Теперь вы можете обмениваться с ними сообщениями в безопасном режиме и в

vr­online | июль 2010


38

Обзоры от VR

реальном времени. Не забудьте сообщить им прямую ссылку на ваш «холодильник». Это только часть приложений, кроме этого, приложения, предоставляемые сторонними разработчиками, также могут быть доступны друзьям, к примеру, любимый мной виджет Artist's Sketchbook 1.65., давно прижился на одном из моих браузеров.

Особо важно отметить, что Opera Unite создана с соблюдением общепринятых и открытых стандартов, таких как HTML, CSS, JavaScript, SVG, AJAX. Много разговоров шло, по поводу безопасности этой технологии; на данный момент, я не имею подробной информации по данному поводу, но могу сказать, что сейчас в Opera Unite предусмотрено три уровня доступа для сервисов: 1. Открытый (публичный): Каждый, у кого есть прямая ссылка на файл или сервис, может получить доступ к нему. 2. По паролю: Доступ к файлам и сервисам получат только пользователи, которым вы передадите специально сгенерированный пароль 3. Частный: Файлы доступны только пользователю данного компьютера.

На официальном блоге компании Opera, был выдвинут некий лозунг, значение, которого предполагало следующее определение: «Opera Unite заново открывает Web». Opera Unite определенно интересная технология, как для разработчика, так и для конечного пользователя, предлагающая сервисы, которые действительно пригодятся многим, но она скорее дополняет веб, но никак не открывает его заново.

Дополнительные ссылки: Ссылка на страницу Unite: http://unite.opera.com/ Русскоязычное сообщество и официальный Блог компании Opera: my.opera.com/russian Блог компании Opera на Habrahabr.ru: habrahabr.ru/company/opera

vr­online | июль 2010


Автор: Крылов Егор Email krilov­egor@yandex.ru

39

Обзоры от VR

Обзор HTC Tattoo

Недавно у меня встал вопрос о приобретении нового телефона. Обычную звонилку покупать не хотелось, поэтому я сразу стал смотреть на коммуникаторы. Устройство с Symbian покупать не хотелось категорически. Да и хотелось посмотреть, что из себя представляет мобильная ОС от Google. Поэтому мой взор пал в строну коммуникатора от HTC.

Tattoo работает под управлением Android 1.6. Версия не самая свежая, но лучшего за такие деньги я найти не смог. Сразу скажу, что стоит он не очень много – порядка 10 тысяч рублей. Но при этом железо в нем очень даже ничего. Процессор 528 Мгц, 256 Мб ОЗУ, а вот экран не велик 2.8“ при разрешении 320х240. Вес устройства составляет 113 г. В кармане носить удобно, почти не чувствуется. Аккумулятор достаточно емкий. 340 часов в режиме ожидания, заявленные производителем это конечно перебор, но дней 5 он протягивает легко, при небольшом использовании.

Комплектация

Помимо коммуникатора в коробке лежит аккумулятор, USB кабель, с возможностью зарядки от ПК, адаптер для зарядки от сети 220 вольт, карта памяти на 2 Гб, а также наушники с 3,5 мм штекером. Да вы ничего не пропустили стилуса в этом списке нет, да он и не нужен. За 3 недели использования он мне ни разу не понадобился, размер всех элементов достаточен, чтобы спокойно нажимать на них пальцем, что не скажешь о проводнике в WM, где без стилуса просто нечего делать. Привычной для WM устройств кнопки включения/выключения на верхней части устройства нет. Там лишь гнездо для наушников, и крепление для ремешка. Включение/выключение, как и в старые добрые времена, осуществляется долгим нажатием красной кнопки, также осуществляется переключение режимов (вибрация, бесшумный и т. д). На нижней панели находится микрофон и USB гнездо. Единственный минус это чрезвычайно тугая

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

Дизайн и интерфейс

Дизайнеры HTC не отличаются разнообразием, поэтому многие их коммуникаторы похожи друг на друга, но при этом они смотрятся симпатично. Держать телефон в руке удобно – он не большой и не маленький. Сенсор очень даже чувствительный, все понимает с легкого нажатия и со всей силы давить не надо. Первое что меня порадовало в интерфейсе это аж целых 7 рабочих столов. Центральный и по 3 слева и справа от него. Любой из них настраивается по вашему желанию благодаря большому количеству виджетов, некоторые из которых даже имеют несколько вариантов. Например, часы, они бывают одно­ и двух­циферблатные. Есть встроенный виджет для отображения погоды, входящих сообщений, и почты. Но в них есть и свои минусы – лучше не держать постоянно интернет включенным, а то деньги на счету быстро будут уменьшатся. Помимо виджетов можно добавлять ярлыки для программ, а также ярлыки можно помещать в папки, чтобы все это занимало меньше места. Также есть 6 встроенных тем оформления для рабочих столов, но их количество можно пополнять, сохраняя свои варианты. На работе вы или на отдыхе у вас всегда все будет под рукой. В ОС уже встроены сервисы от гугл: GTalk, Gmail, YouTube и карты.

Программное обеспечение

Вот тут я немного разочаровался. Ничего кроме вышеперечисленного, а также плеера, FM­ радио, калькулятора и средства для просмотра изображений я не обнаружил. Нет встроенного файлового менеджера, но сразу несколько его реализаций можно найти в интернете. Накачать программ не является большой проблемой. В ОС встроено приложение для работы с Android Market, да и на 4pda.ru программ много. Так, что идем в ближайший макдональдс и начинаем качать, заодно и вай­фай можно протестировать. vr­online | июль 2010


40

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

Заключение

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

vr­online | июль 2010


Автор: Редькин Дмитрий aka zahod5277 E­mail: zahod5277@gmail.com

41

Обзоры от VR

Желанный андроид Обзор HTC Desire.

Вот и сбылась мечта …, хм, моя мечта. Наконец­ то в моих руках оказался аппарат под управлением мега­популярной в последнее время операционной системой Google Android. Нескромно названный Desire, что в переводе означает “желанный”, “вожделенный”, этот аппарат является самым топовым на данный момент андроид­коммуникатором. Здесь есть чему позавидовать: процессор Qualcomm Snapdragon с частотой 1 (!) гигагерц, 512 (!) мегабайт оперативной памяти, емкостный AMOLED дисплей диагональю 3.7 (!) дюйма и разрешением 800*480px, 5­ти мегапиксельная камера, GPS, компас, при всем при этом небольшой вес и неплохой аккумулятор (1400 мА/ч). Ну это вкратце. Давайте заглянем поглубже и определим все его преимущества и недостатки. Так как я являюсь счастливым обладателем Nokia N900 и не имею возможности найти еще хотя бы один топовый аппарат, вести обзор я буду объективно сравнивая Desire и N900. Let’s go!

Комплектация.

Увидев коробку, я честное слово, был удивлен. Если описать ее размеры формулой, это будет выглядеть примерно так ­ высота коробки: толщина Desire + 7 см/длина: длина Desire + 5 см/ширина: ширина Desire + 5 см. Да да, габариты коробки совсем не большие, а совсем наоборот. Из габаритов коробки соответственно можно описать и комплектацию: сам аппарат, USB, зарядчик, мануал, наушники. Стандартный набор. (на N900 мы получаем еще две пары резиночек для наушников, кабель TV­out, платок для протирки экрана – прим. автора).

Внешний вид и эргономика. HTC Desire – моноблок с четырьмя функциональными клавишами, оптическим трекпадом (непонятная и неудобная штука как по моему),

качелькой для регулировки громкости и кнопой блокировкой/включения/ выключения. Габариты аппарата: 12*6*1.2см. Вес: 135г. Как я уже сказал, к трекпаду надо долго привыкать, уж очень непонятный он, а в остальном все клавиши легко нажимаются, легко доступны. Аппарат очень тонкий, что плюс, хотя отсутствие физической клавиатуры это минус. Но, будь он наделен клавиатурой, пользоватся им было бы невозможно. Desire очень широкий и длинный(чуть длиннее и шире N900), и комфортно пользоватся им в портретной ориентации возможно только благодаря толщине. Покрытие экрана стеклянное, все остальное выполнено из софттач­пластика, хорошо противостоящему пыли и отпечаткам пальцев. Внизу аппарата расположен вход micro­USB, вверху, помимо кнопки блокировки/включения/выключения имеется 3.5 разьем для наушников. Зерр гут. Динамик расположен в задней части аппарата, рядом со вспышкой и камерой. Не могу не обсудить емкостный экран. По моему мнению резистивные экраны куда круче емкостных, и никто меня не переубедит. Почему я так считаю? Емкостный экран исключает возможность управления устройством стилусом/ногтем/брелком, любым предметом в общем. Только пальцем. А если допустим вы девушка с длинными ногтями? Как тогда набирать текст? Или как рисовать в программах­ рисовалках? Пальцем? Не смешите. Я пробовал на Desire это сделать. Что что? Емкостные экраны лучше реагируют на нажатие пальцем чем резистивные? Есть немного, но, мой N900 еще ни разу не вызывал у меня негативных высказываний по этому поводу, дело привычки. Что­то я разошелся, извиняюсь, идем дальше. Итого: компания HTC не собирается увольнять своего дизайнера и довольна его однообразной

vr­online | июль 2010


42

Обзоры от VR

работой (а уж как он доволен, нифига не делать­ то :D). Начиная с HTC Hero все андроид­ коммуникаторы имеют практически идентичный дизайн: слегка подогнутый снизу аппарат, не имеющий физической клавиатуры с огромным дисплеем, четырьмя функциональными кнопками и трекбол/трекпад, положение камеры и вспышки тоже почти не меняется. Переходим к десерту – к ОС и программной начинке.

сравнимо, но еще более слабая вспышка (всего один светодиод против двух у N900), отстутствие нужных настроек и режимов делают невозможным использовать камеру HTC Desire в макро­съемке, вечером, при искусственном освещении, в помещении. Одно понравилось – можно устанавливать фокус в любом месте, достаточно тапа по экрану. Немногие мобильные камеры так умеют. Пара фоток для сравенения:

На HTC Desire установлена Google Android 2.1 Eclare. По сравнению с предыдущими версиями андроида нововведений в 2.1 немного, главное из них это мультитач. Так что мы имеем вполне себе обычный андроид, расширить возможности которого возможно лишь благодаря маркету. Но HTC относится с заботой и любовью к своим клиентам, поэтому специально к выпуску Desire выпустила новую версию своей программной оболочки HTC Sense. Что это такое? HTC Sense это надстройка над ОС, включающая в себя дополнительные виджеты, красивые визуальные эффекты, собственный плеер, собственный интерфейс (получше стандартного гугловского), в новой версии появилось дополненение, позволяющее установить на своем Desire до семи (!) рабочих столов. Единственное, что мне не понравилось при беглом осмотре всяких менюшек и настроечек, это неудобное меню. Как и в Windows Mobile 6.5, при открытии меню нам вываливают всю имеющуюся кучу программ и приходится скролить, скролить, скролить. Для сравнения – на N900 такого нет. Хотя в новой прошивке PR 1.2 все­таки испоганили меню и сделали так же, но при установке дополнительной программки его можно настроить как душе угодно. Каких­то совсем необычных программ в почти стандартном наборе софта нет, все стандартненько, согласно моде. Порадовал GPS. Карты загружаются раз в пятнадцать быстрее чем на N900, это если использовать только GPS, без подключения к интернету. Ну куда Nokia тягатся с Google в картографии, у гугла Google Maps и десятки спутников на орбите. Итого: нечего присваивать Андроиду статус мега­крутой ОС, без доп. приложений и доп. оболочки она ничем не лучше чистых WM и Maemo, все дело в софте ­ где его больше, та ось и рулит. Кстати о приложениях – прошу прощения, но не имел возможности заценить Android Market и качество имеющихся в нем программ. Так что буду и дальше верить слухам что софт в маркете – отстой :).

HTC Desire – единственный на сегодняшний день коммуникатор, имеющий настолько мощные характеристики под управлением Google Android. Ставший уже стандартом для HTC дизайн не дает возможности выделится этому флагману из линейки своих андроид­ собратьев. Большой и яркий дисплей, красивые эффекты и дополнительные виджеты благодаря HTC Sense делают этот аппарат не только мощным, но и сногсшибательно красивым. Огорчает средненькая камера, трекпад. Если у вас имеется 25­28 тысяч рублей, и вы следуете технологической моде ( считаете Android операционкой будущего), то лучшего устройства просто не сыскать. Тем более, ходят слухи, что бывшие пользователи iPhone приобретают себе именно эту модель.

Операционная система и софт.

Вердикт.

Камера.

Переходим к моему любимому разделу – тесту камеры. Сколько не читал обзоров N900 – везде пишут мол, камера фигня, сойдет, средненько. Поверьте, камера Nokia N900 крута и непобедима. Камера же Desire заметно уступает. Нет, днем, при солнечной погоде качество vr­online | июль 2010


Автор: Jimmy Jonezz e­mail: jimmyjonezz@bk.ru

43

Без рамки

Processing: Введение.

Интерактивная визуализация.

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

Procesing 1.2.1 (на данный момент это последняя версия) является бесплатным, открытым, кроссплатформенным программным обеспечением, с большим количеством возможностей: широкий набор «команд» для построения графических примитивов, 3D­ объектов, работа со светом, текстом, инструментами трансформации, возможность импортировать файлы аудио/видео/звуковых форматов, обрабатывать события мыши/клавиатуры, работать со сторонними библиотеками (OpenGL, PDF, DXF), а также работать с сетью. Как вы уже, наверное, поняли, нам ничего не мешает создавать 3D­аппликации (сюда можно отнести и игры), т.к. имеется средства поддержки OpenGL, ничуть не хуже тех, что демонстрируются на «Chaos Constructions» или других демопати. Все эти возможности, вкупе с большим количеством функций и очень логичным синтаксисом, делают этот язык идеальным для обучения и прививания интереса к программированию. Установочный файл данной среды программирования лежит на processing.org (доступны версии для Windows, Mac и Linux). На этом же ресурсе есть подробный туториал, но на английском языке. Основная «сила» Processing, заключается в коде, на первый взгляд простое IDE, может оттолкнуть начинающего кодера, избалованного объектно­ориентированным программированием, но если присмотреться более внимательно, то PDE (Processing Development Environment) – среда разработки, покажется достаточно удобным инструментом. Кроме того, есть реализация на JavaScript – processingjs.org, и стоит выделить еще один немаловажный момент, дело в том, что

Processing позволяет экспортировать ваш скетч (так называется файл проекта – прим. автора) как java­апплет, а его уже можно внедрить в любую веб­страницу, тем самым, повысив ее красоту. Я думаю, вы теперь представляете, как легко можно оживить скучное видео, или например, получить изображение неслыханной красоты, которое не просто будет радовать глаз, а приводить в оцепенение и в дикий восторг. Думаю, многим уже не терпится опробовать специфику кодинга в Processing, а заодно и посмотреть, как легко можно создавать визуалицию с помощью данного программного обеспечения. Хочу предупредить, мое объяснение данного материала предполагает, что пользователь знаком с императивным способом программирования, а также знаком с основами языка С/С++. Для первого ознакомления и так сказать, вступительного урока, я взял, образец примера реализации «шапки» с сайта processingjs.org.

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

2. Возможность собирания кругов воедино, с помощью мыши;

3. Соединение ближайших друг к другу кругов, линиями (точкой соединения служит центр круга – прим. автора); 4. Возможность кругов «расходиться» в разные стороны, с последующим отсоединением. К данной статье прилагается скетч, который ты можешь скачать вместе с журналом, а пока ты его открываешь, я объясню, поэтапно каждый шаг. Первое, с его нужно начать – задать

vr­online | июль 2010


44

Без рамки

глобальные переменные и провести их инициализацию: количество кругов, их максимальный и минимальный размер, определить контейнер (массив) для хранения свойств круга. // количество кругов int count = 20; // определяем максимальный и минимальный // размеры круга int maxSize = 100; int minSize = 20; // создание массива для хранения свойств круга float[][] e = new float[count][5]; // определяем размер точки в центре круга float ds=2; // некий переключатель int sel = 0; // запрет возможности «переноса» объектов boolean dragging=false;

Определим две функции, которые понадобятся при использовании манипулятора мышь: нажатие кнопки мыши и ее отпускание. С помощью них будем присваивать значение «истина» или «ложь» переменной dragging, значение которой будет играть главную роль при перетаскивании объектов (кругов). void mouseDragged(){ // переключаем возможность переноса на «истину» dragging=true; } // пользователь отпустил кнопку мыши void mouseReleased(){ dragging=false; }

Инициализация «canvas» (холста), а также запуск программы, происходит путем использования служебной функции void setup(). Она используется для определения начальных свойств окружающей среды, таких как размер экрана, цвет фона, загрузка изображения, фреймовый показатель (определяет количество кадров, которое будет отображаться за секунду времени ­ прим. автора) и т.д. Стоит отметить, что при заполнении массива необходимо воспользоваться некими ограничителями (размеры холста, радиус круга, скорость), а не ставить первые значения, что придут в голову. void setup(){ // фреймовый показатель frameRate(10); // размеры холста size(900,74); // толщина линий strokeWeight(1); // заполнения массива произвольными величинами for(int j=0;j< count;j++){ e[j][0]=random(width); // ширина окна e[j][1]=random(height); // высота окна

e[j][2]=random(minSize,maxSize); // радиус // случайное значение от -5 до 5 e[j][3]=random(-.5,.5); // скорость передвижения по X // случайное значение от -5 до 5 e[j][4]=random(-.5,.5); // скорость передвижения по Y } }

Следующая, обязательная, служебная функция ­ void draw(), вызывается сразу после void setup(). Эта функция является основой для построения любой анимации. Её особенностью является то, что она автоматически вызывается при каждом обновлении «фреймбуфера», последнее связано с позиционированием объектов на координатной плоскости, но она может быть остановлена командой ­ noloop(). Рассмотрим наиболее важные функции: fill(64,187,128,100) ­ устанавливает цвет для заполнения форм, в данном случае зеленый.

Цвет можно указывать как в формате RGB, так и HSB. При использовании шестнадцатеричного указания цвета, используйте "#" или "0x" до шестнадцатеричных значений (например, # CCFFAA, 0xFFCCFFAA); background(0) – устанавливает цвет фона, но также можно использовать градиент или использование изображения. С помощью функции ellipse(), можно нарисовать эллипс (овал) в окошке дисплея, или с помощью этой же функции можно нарисовать круг, задав одинаковую ширину и высоту. Первые два параметра устанавливают местонахождение, третий задает ширину, а четвертая задает высоту. stroke(128,255,0,100) – позволить определить цвет линий и ее обратная функция: noStroke() – отключает прежде заданное окрашивание линий. void draw(){ // наполнение фона черным цветом background(0); // начинаем циклично заполнять массив круга for (int j=0;j< count;j++){ // отключаем цвет для линий noStroke(); // сохраняем диаметр и радиус текущего круга float radi=e[j][2]; float diam=radi/2; // Если курсор - в пределах 2-x радиусов текущего круга, то… if( dist(e[j][0],e[j][1],mouseX,mouseY) < radi ){ // заполняем зеленым цветом fill(64,187,128,100); // запоминаем, что пользователь щелкнул на круг sel=1; // Если пользователь перетаскивает мышь, // круг перемещаем вслед за курсором if(dragging){ // определяем позицию курсора e[j][0]=mouseX; e[j][1]=mouseY;

vr­online | июль 2010


45

Без рамки } } else { // заполняем круг голубым цветом fill(64,128,187,100); // пользователь ничего не выбрал sel=0; } // рисуем круги (эллипс) ellipse(e[j][0],e[j][1],radi,radi); // перемещение кругов e[j][0]+=e[j][3]; e[j][1]+=e[j][4]; // применяем эффект «титров»: если круг уходит // за границу окна вверх, то начнет появляться снизу // и наоборот if( e[j][0] < -diam ){ e[j][0] = width+diam; } if( e[j][0] > width+diam ){ e[j][0] = -diam; } if( e[j][1] < 0-diam ){ e[j][1] = height+diam; } if( e[j][1] > height+diam){ e[j][1] = -diam; } // если круг был выделен if(sel==1){ // центр точки закрашиваем белым цветом fill(255,255,255,255); // устанавливаем цвет линии на зеленый stroke(128,255,0,100); } else { // в противном случае цвет центра меняем на черный fill(0,0,0,255); // устанавливаем цвет линии в бирюзовый stroke(64,128,128,255); } // соединяем соседние круги линией for(int k=0;k< count;k++){ // если соседний круг находится близко if( dist(e[j][0],e[j][1],e[k][0],e[k][1]) < radi){ // проводим линию от текущего до ближайшего круга line(e[j][0],e[j][1],e[k][0],e[k][1]); } } // выключаем закрашивание линий noStroke(); // Рисуем точку (черный квадрат) в центре круга rect(e[j][0]-ds,e[j][1]-ds,ds*2,ds*2); } }

Дополнительные ссылки: API: http://processing.org/reference/ Примеры: http://proxyarch.com/kaizen/#Karigianni Туторил (англ.): http://processing.org/learning/ Реализация на JavaScript: http://processingjs.org Google­группа: http://groups.google.com/group/processingjs

Напоследок, хочу добавить, что внутри функции setup() можно использовать команду smooth(), она даст эффект сглаживания объектов.

Многое в этой статье не рассмотрено, а также, я намеренно не стал вести подробное объяснение. т.к. надеюсь, данная статья лишь разожжет у тебя жгучее любопытство к Processing и ты сам, в дальнейшем, проявишь интерес к его изучению. В следующем журнале обязательно жди продолжения, а если у тебя возникли вопросы или предложения, по поводу данной статьи, то не стесняйся, присылай мне свои «message» или заходи на наш форум и выкладывай наболевшее ;).

vr­online | июнь 2010


Автор: Корчагин Анатолий aka AnK0r E­mail: Anatoliy.Korchagin@gmail.com

46

Без рамки

Операция «Щит и Меч»

Многие считают, что Windows – это самая дырявая система, туева хуча дырок, через которые проникают вирусы и хакеры. Их закрывают, но на месте закрытых дыр появляются десять новых. Спорить не буду, отчасти это так, но только потому, что Windows самая попсовая ОСь. Если бы такое же количество пользователей сидело на маках или линуксе, то и там дыр нашли бы не меньше. Примером тому служит хотя бы то, что в рамках конференции по вопросам безопасности – CanSecWest, устроенной компанией Independent Security Evaluators, проводилось соревнование на самый быстрый хак.

Хакер Чарли Миллер (Charlie Miller) используя уязвимость Apple Safari 4 получил полный доступ над ноутом Apple всего за десять секунд. Компьютер с Windows продержался под натиском дольше и это при всей уверенности яблочников о якобы высокой степени защищенности их продуктов. Отсюда следует вывод, что не существует абсолютно защищенной системы способной противостоять злоумышленникам. Но к этому нужно стремиться и не надо думать, что у тебя брать нечего и тебя уж точно никто не взломает. А вирусы? Мысли вроде «да и ладно, с моими 500 гигами на диске я перекантуюсь с малюткой, файлы он мне не портит, работать с сетью не мешает, не перекидывает на XXX­сайты и не требует отправить sms».

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

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

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

Наша цель — безопасная ОС

Основным элементом нашей системы будет комплекс Comodo Internet Security 4.1. Выбрал я его по тому, что это реальный барьер для паразитов и хакеров. К примеру, в тестировании Proactive Security Challenge проводимой matousec.com, он прошел «на ура» все 148 тестов и занял первое место. К тому же, он не загружает систему, прост в использовании и, что немаловажно – он бесплатный. Комплекс CIS состоит из 3­х компонентов: Comodo Antivirus (защита от вирусов и троянов), Comodo Firewall (защита от интернет­атак) и

vr­online | июль 2010


47

Без рамки

модуль защиты Comodo Defense+ (система предотвращения вторжения уровня хоста). Инсталляция продукта не должна вызвать вопросов, оговорюсь только сразу, что при выборе пакетов для загрузки стоит отказаться от антивируса, просто по тому, что он нам со своей функцией сканирования на лету не понадобится, только лишняя нагрузка на систему. Ну и про настройку тоже не будем говорить, сам для себя решишь, какая степень защиты тебе более приемлема, стоит ли использовать защищенный DNS сервис, каким приложениям доверять, а какие закрыть напрочь. Единственное, о чем хочу упомянуть, так это о новой возможности CIS – Sendbox. Sendbox или «песочница», представляет собой виртуальную файловую систему и реестр. Нужна нам эта радость для запуска потенциально опасных приложений.

Рис. 1. Настройка Sendbox в Comodo Internet Security 4.1

Добавляем в песочницу приложения и радуемся, теперь если например, серфя инет, юзая браузер в sendbox, напороться на нехороший сайт с которого тонами обрушатся вирусы, можно не переживать, дальше виртуалки они не уйдут. После того как фаервол и песочница настроены нужно подумать и о человеческом факторе. Остается большая доля вероятности, что можно заполучить ВПО через почтовые рассылки или с флешку друга. Чтобы обезопасить себя и тут, воспользуемся версией антивируса ClamAV распространяемой для окошек – ClamWin Free Antivirus 0.96.1. ClamAV – антивирус, изначально разработанный для почтовых серверов, поднятых на Unix Like OS. Антивирус не имеет монитора, прекрасно справляется с ВПО, распространяемого через почтовые рассылки и выпускается под лицензией GNU/GPL v.2.

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

Теперь создадим виртуальный диск в оперативной памяти. Использовать его можно и для хранения не долгосрочной информации и для установки тяжелых программ вроде Photoshop, создавая образ RAM­диска на HDD, при завершении работы, что заметно увеличивает скорость работы с программой. Но с точки зрения безопасности, целесообразнее использовать его в первом варианте – в качестве контейнера для хранения временных файлов. Делается это для того, что бы обезопасить данные от несанкционированной утечки. Так как ОС и программы используют временные файлы для хранения промежуточных данных во время своей работы, в которых нередко заносится точная копия открытого программой файла. С одной стороны это дает возможность восстановить данные после сбоя, но с другой стороны такие файлы несут прямую угрозу секретам. Инсайдер – внутренний злоумышленник, получивший физический доступ к компьютеру, может проанализировать временные файлы и получить информацию об установленном ПО, имеющихся документах и их содержании, просмотреть какие сайты посещались и прочее. Для организации защиты файлов подобного рода, можно конечно воспользоваться средствами шифрования, например всем известной программой PGP. Но думаю, для защиты данных на домашнем компьютере вполне хватит RAM­диска. Да и нашей целью является не только сохранность данных, но и быстродействие системы, а пользование виртуального диска, позволит не только затруднить доступ инсайдеру к темпам, но и нарастить производительность некоторых приложений, активно работающих с жестким диском, сохраняя на нем временные файлы, а так же увеличить срок жизни жесткого диска, т.к. уменьшается количество обращений к нему.

Рис. 3. Настройка RAMDisk Enterprise Рис. 2. ClamWin Free Antivirus 0.96.1

Конечно, у него есть небольшой недостаток – он

Используя RAMDisk «Enterprise» можно vr­online | июль 2010


48

Без рамки

добиться нужного результата. Создание виртуального диска с помощью RAMDisk «Enterprise» осуществляется через добавление нового оборудования и не вызовет затруднений. Процесс инсталляции и последующая настройка подробно описанный по адресу http://ramdisk.nm.ru/ramdiskent­rus.htm. Хочу лишь отметить, что русифицированная версия программы распространяется бесплатно, что нам на руку.

Бонус

Существует еще одна замечательная программа – KeePass. Используя эту утилиту не придется запоминать десятки паролей или записывать в файл типо passwords.txt. Для шифрования базы паролей KeePass поддерживает алгоритмы Advanced Encryption Standard (AES, Rijndael) и Twofish. Так же помимо паролей в базе KeePass можно хранить в шифрованном виде и другие данные. На данный момент существуют две версии программы: Classic Edition – портативная версия и Professional Edition – более функциональная версия, требующая .NET Framework. Доступ к базе можно закрыть либо пользуясь обычным паролем, либо с помощью USB­накопителя на который сохраняется ключ.

Так же для полного удовлетворения, можно пользоваться различными плагинами для браузера. Например, для Firefox, я порекомендовал бы AdBlock Plus – для блокировки рекламы на сайтах и NoScript – позволяющий блокировать исполнение JavaScript, апплетов Java, Flash и других потенциально опасных компонентов веб­страниц до тех пор, пока не разрешить их исполнение на данном узле или глобально и это далеко не полный перечень.

Стоп машина!

Итак, результатом проведенной работы является собранная по крупицам система защиты против ВПО, хакерских атак и несанкционированного съема информации, которая, причем не грузит ОС и является совершенно бесплатной. Думаю на этом можно, и остановиться, УДАЧИ!!!

vr­online | июль 2010


VR­Crew

49

Меня тошнит!

Меня тошнит! Выплескиваем негатив

JimmyJonezz: Я, точно не единственный кого тошнит от погоды. В связи с тем, что дождя давно нет и видимо не предвидится, а солнце все жарче и жарче окружающая атмосфера просто раскалена на столько, что невольно ощущаешь себя в бане. Мне приходится через каждые полчаса, а то и меньше бегать и умываться, ополаскивать голову. В кабинете настежь открыты окна, работает вентилятор, но это мероприятие нисколько не помогает, одним словом ­ мука страшная, а если учесть, что из­ за жары усиленно работают куллеры в "системниках", плюс к этому, как я говорил и вентилятор ­ шум стоит невыносимый. Меня уже тошнит от такой погоды, в прямом смысле этого слова. Va­Bank: Да не тошнит. Про начальство уже говорил. А больше и не про что.

Kastor: Не сказать, что меня прямо тошнит от этого, но один не очень приятный случай со мной все же произошел. Катался как­то вечером на скутере. Свернул на одну дорогу из города, где обычно мало машин и дал газу. Покрытие боле менее ровное, машин нет, по бокам мелькают густые деревья, а я наслаждаюсь скоростью и ветром, обдувающим в такую жару. Вдруг, за десяток метров от себя замечаю за деревьями движняк какой­то, а следом и машину ГАИшников.

Правильно, это чудо материализовалось из­за того же дерева и махнуло мне своей полосатой дубинкой. Начал тормозить и остановился метрах в 20­ти от него на обочине (он бы еще вслед мне махнул). Скорость не превышал, хотя бы потому, что знаков не было, ехал в шлеме, как положено. Прав на скутеры еще не надо и номеров тоже. Стало интересно, что мне предъявят. Жду, пока он подойдет ко мне. ­ Это что, такой тормозной путь? Давай сюда!

Прикинулся шлангом, жду дальше. Пусть сам подходит.

­ Я что ли идти к тебе должен?

Решил я его не драконить, встал, откатил задом скутер ближе к машине и сел обратно. Он чуть подошел ко мне: «Если это такой тормозной путь, то значит у тебя проблемы со скутером». Вау! Вот это мастер. Интересно, а он может мне сходу сказать уровень компрессии в цилиндре? Я ему ответил, что не вижу смысла резко тормозить. Он продолжал: «Моя фамилия «такая­то», ваши документы на скутер». Я попросил сначала предъявить его свое удостоверение. И тут начался цирк. Он сунул руку в грудной карман и завис: «мое удостоверение при мне, показывайте документы». Ага, с разбегу! Я ему напомнил, что он должен первый предъявить. Все же достал, открыл, я

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

­ Аптечка и правила дорожного движения (которых аж две книжки валялось).

­ Все­таки учат правила, ­ кивает он второму, который уже лексус тормознул. ­ На кого учишься?

­ На программиста.

­ Хм, надо было тебе на юриста идти, ­ ну давай, поуказывай мне. Он отдал документы и пошел к лексусу. ­ Я могу ехать? – спросил я вслед. Конечно, я могу, лексус поинтереснее какого­то скутера. Метров через двести, остановился за поворотом, записал его ФИО и номер машины. А через пятьсот метров, уже и забыл про него, катаясь дальше.

vr­online | июль 2010


50

Меня тошнит!

zahod5277: Все лето меня тошнит от каникул. Отдых отрицательно сказывается на моей продуктивности. Почему­ то не хочется рисовать, писать, кодить. Лень будто полностью завладела мной и не отпускает. Все пытаюсь что­нибудь сделать, да никак не получается. А в учебное время за неделю я рисовал пару коллажей, мог накодить пару скриптов для сайта, который уже год не могу запустить, было огромное желание писать для VR. Единственное что удерживает меня в колее ­ верстка журнала. Это занятие трудоемкое, долгое, нудное, и бросить его никак нельзя. Поскорее бы началась учеба, на занятиях параллельно буду рисовать наброски и выдумывать какие нибудь интересные темы для статей.

укакаться, но поднять проект «Сколково», а некоторые умники кошмарят провайдеров и требуют закрыть доступ к сайтам вроде YouTube, потому что там были найдены экстремистские материалы. А самое главное, что все просьбы и претензии предъявлены лишь к одному провайдеру. Наверное, у других комсомольских провайдеров YouTube выглядит по­другому.

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

Spider_NET: Уходящий месяц был особо не урожайным на идеи для этой рубрики. Сначала из­за отпуска, а потом из­за болезни я мало читал новости и любимые сайты. Соответственно найти, то от чего может затошнить было крайне проблематично. НО, мне все уже удалось это сделать. Как ни странно речь опять пойдет о наших добропорядочных чиновниках, а точнее судей. Помните, в середине июля в своем блоге, я рассказал про то, как Комсомольск­на­Амуре остался без YouTube? От такого решения суда и «понимании» сути проблемы меня конкретно подташнивает (а может я просто еще не выздоровел?). Наша страна собирается vr­online | июль 2010


Автор: Jimmy Jonezz Email: jimmyjonezz@bk.ru

51

Креатиff

Векторная графика Inkscape. Картонная коробка

Продолжая очередной экскурс, по векторному редактору Inkscape, я решил, остановится на одном интересном примере – созданию реалистичной картонной коробки. На этот раз, мое объяснение будет несколько сжато, но более иллюстрировано, т.к. с основными «моментами» Inkscape вы уже знакомы, осталось только умело применить их на практике. Перейдем непосредственно к самой теме, данного материала, т.е. статьи. В предыдущих выпусках журнала мы усвоили некоторые моменты при работе с инструментами Inkscape и сегодня продолжим то, что начали – пополняем свои знания и умения работы, непосредственно с векторным редактором и векторной графикой. Давайте начнем с создания нового документа, выберите инструмент ­ Кривая Безье, и рисуем три грубые грани куба, в перспективе просмотра (x,y,z).

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

Теперь мы будем «разрезать» верхнюю грань на две части. Выбираем верхнюю грань, нажимаем кнопку «Изменить путь» (F2), выбираем левый

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

Выбираем узлы, которые только что создали и нажимаем на кнопку «Контур – Разбить» (Shift+Ctrl+K), чтобы разбить его на два объекта. Теперь вы должны иметь четыре различных объекта, как показано на рисунке (я наполнил их случайными цветами для лучшего обзора – прим. автора).

Следующий этап – изменим сторону левой нижней грани, для того чтобы сымитировать старую картонную коробку. Нажмите клавишу F2 для редактирования пути. Выберите два узла и нажмите кнопку «Добавить узел». Теперь, трансформируйте ее в симметричный узел, поворачивая рычаги (Как их использовать? Читай предыдущие статьи по Inkscape — прим. автора). Откройте менеджер слоев. Если вы не знаете, как это сделать, даю подсказку ­ выбираем Слой ­ Слои... (Shift+Ctrl+L). У вас должен быть один слой, переименовываем его в «Box». Теперь дублируем его, перейдя в Слой ­ Продублировать активный слой. Переименовываем новый слой в "bg_Box" и размещаем его под слоем «Box». Теперь у вас

vr­online | июль 2010


52

Креатиff

имеются два одинаковых объекта на двух слоях. Так, на данный момент вы можете спрятать слой «Box».

Сейчас мы будем изменять форму "bg_Box" ­ создадим только один объект и придадим ему вид старой коробки, немного исказив края. Выделить все и применить Контур ­ Объединить. Эта форма будет находиться на заднем плане, и использоваться для текстурирования – имитация освещения и тени. Теперь блокируем "bg_box" чтобы обезопасить от случайного изменения этого слоя, и возвращаемся на «Box». Теперь мы будем «играть со светом» ­ используем градиентную заливку цвета для имитации света, идущего от верхнего левого угла. Открываем диалог ­ Заливка и обводка или нажимаем клавиш «Ctrl» + «Shift» + «F». Выбираем радиальный градиент, который подразумевает использование нескольких цветов, чтобы задать какие будем использовать жмем: «Изменить», и задаем светло­коричневый цвет (#c2aa99), выбираем второй пункт из списка и задаем для него темно­коричневый цвет (#926a4f). Повторите предыдущий шаг для каждой части картонной коробки. Каждой из них нужно настраивать особую заливку, т.к. свет падает из верхнего левого угла, что дает не равномерное освещение объекта.

Границы освещения должны быть более ярче, поэтому создадим эффект освещения для их подчеркивания. Для начала нужно создать объект – трехконечную звезду, и задать для нее цвет типа #b4a69e.

объекта, нужно преобразовать его в контур: контур – Оконтурировать объект ... (Ctrl + Shift + C). Теперь растяните кончики звезды по трем краям коробки и премините один из фильтров размытия, на свое усмотрение.

Следующим этапом будет имитация ударов по коробке, для этого выбираем инструмент Кривая Безье и рисуем темно­серые фигуры, похожие на уголки, в углу. В диалоге заливки и обводки устанавливаем для них размытие равное 10,0.

По замыслу, у нас будет старая коробка, а наличие подтеков и следов влажности, неизбежно, поэтому попробуем реализовать данный замысел, используя стиль грандж. Для этого нужно создать эллипс, желательно черного цвета и с помощью инструмента каллиграфическое перо, с установленными параметрами ширины 10, и сужения 25, нужно создать шероховатый эффект на одной из сторон формы эллипса. Не забудьте получившиеся два объекта объединить. Осталось удалить лишнее. Рисуем большой прямоугольник, который требуется удалить, и накладываем его на эллипс, оставив незакрытой оду часть, которую мы сделали неровной. Выделяем два объекта и применяем к ним Контур ­ Разность. Другой способ в создании грязных пятен и разводов, состоит в использовании расширений: рисуем простую форму, и применяем модификатор Расширения – Изменения контура – Фрактализация. Я советую вам самостоятельно поэкспериментировать с параметрами. Несколько раз продублируйте получившиеся объекты, по­разному измените их размеры и разместите на коробке.

Чтобы можно было начать трансформирование

vr­online | июль 2010


53

Креатиff

К каждому объекту примените градиентную заливку от черного цвета к прозрачному.

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

Выделяем текстуру и белую форму маски, жмем на правую кнопку мыши и используем пункт «Применить маску». Теперь в свойствах слоя устанавливаем Прозрачность на 25%. Теперь следует создать ленту на ящике, для этого нам понадобятся два прямоугольника имитирующие ленту.

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

Выделите ленту и залейте ее коричневым цветом (#625037). В верхней части ленты используйте вертикальный, линейный градиент. Добавьте третью опорную точку в градиент, используя редактор градиента, для достижения нужного эффекта; для среднего цвета выберете светло­коричневый (#a4804a).

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

Для повышения качества картинки добавим текстуру «Ржавчина», этот бесплатный экземпляр доступен на TextureZ.com (http://texturez.com/textures/rust/1547). Для того, чтобы создавать маску, при сохранении того же размера, что и наш ящик, используем форму фона, которая находится на слое bg_Box. Выбираем слой bg_Box , дублируем и переносим на отдельный слой, при этом дав ему имя – Texture.

vr­online | июль 2010


Автор: phan13

54

Креатиff

What is? Разбираемся с фракталами

Шляясь по просторам интернета, я наткнулся на программу Apophysis, которая помогает воплощать самые неуемные и необузданные фантазии воспаленного мозга в фракталах. Я заинтересовался этой программой и фракталами.

Перед тем как двигаться дальше, рассмотрим теоретическую часть. Привожу фразу из Википедии: «Фрактал (лат. fractus — дробленый, сломанный, разбитый) — сложная геометрическая фигура, обладающая свойством самоподобия, то есть составленная из нескольких частей, каждая из которых подобна всей фигуре целиком. В более широком смысле под фракталами понимают множества точек в евклидовом пространстве, имеющие дробную метрическую размерность (в смысле Минковского или Хаусдорфа), либо метрическую размерность, строго большую топологической. Фрактал — это бесконечно самоподобная геометрическая фигура, каждый фрагмент которой повторяется при уменьшении масштаба. Фрактал — самоподобное множество нецелой размерности». Не пугайся если после прочтения таких определений ты больше запутался, чем разобрался. После первых уроков в программе Apophysis все встанет на свои места.

Основная часть

Для начала познакомимся с интерфейсом APOPHYSIS.

1. Здесь вы можете выбрать флейм, с которым будете работать далее.

2. Это меню рендера. Когда вы создали свой фрактал, вам нужно сохранить его, задав размер изображения и его качество. Величина окна самой программы не влияет на величину конечного изображения. Если у вас медленный компьютер, лучше сделать окно Apophysis'a небольшим.

3. Здесь вы можете задать качество изображения фрактала в самом окне программы. Это не влияет на качество конечного изображения ­ оно задается в меню рендера. 4. Это редактор флеймов фрактала. Флейм представлен треугольником, с которым вам и придется работать, если вы того захотите. Любой треугольник вы можете переместить в пространстве, изменить его угол, дублировать, поменять его характеристики в меню variations, для чего в программе предусмотрены различные

vr­online | июль 2010


55

Креатиff

инструменты, приведенные в этом окне.

5. Здесь вы можете поработать над величиной и положением фрактала в пространстве.

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

6. Подбор цветовой гаммы.

Конец

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

7. Окно мутаций фрактала. Здесь вы меняете его внешний вид.

Оригинальная статья: http://www.demiart.ru/forum/index.php?showtopic=13070 3&st=0

8. Редактор скриптов, влияющих на общие принципы формирования фрактала. 9. Лупа, позволяющая вам выделить и приблизить какой­то участок фрактала.

10. Список трансформаций фрактала. Эти параметры в первую очередь влияют на внешний вид фрактала. В окне мутаций вы увидите только варианты на тему, заданную в этом меню. 11. Меню скриптов. Здесь вы можете

vr­online | июль 2010


Автор: Амирхан Хачабегов aka aka_Grad

56

Безопасность

NuCaptcha. Головоломка для спамеров.

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

По сути видеокапча представляет собой бегущую по искривлённой линии строку символов, из которых человеку предлагается распознать последние три, выполненных в красном цвете. Фон, по которому бегут буквы, настраивается. Количество и цвет ключевых букв — нет; эти параметры контролируются в NuCaptcha и могут быть в любой момент изменены, если разработчики решат, что так нужно для укрепления защиты от роботов, а также людей, распознающих капчи за плату. Впрочем, кое­какая дополнительная защита в системе уже существует. Так, если система заподозрит в пользователе капча ­ "негра" (способ не уточняется, но, скорее всего, анализируется частота ввода ответов на видеокапчи с одного IP­адреса), бег строки символов на следующих капчах будет замедляться всё больше и больше. Соответственно будет задерживаться и появление на экране ключевых красных букв, так что у профессионального капча­распознавателя будет уходить по 15 секунд на каждую видеокапчу. Очевидно, в NuCaptcha считают, что это сделает работу по распознаванию видеокапч экономически невыгодной даже для индийцев. NuCaptcha Player предпочитает использовать Adobe Flash Player для отображения видео. Он позволяет отображать видео самого высокого качества.

В настоящий момент существуют API для использования видеокапчи на PHP, .NET и Java. Имеется также Wordpress­плагин. Со временем обещают поддержку и других языков и платформ. О минусах. Бегущая строка состоит из английских слов, соответственно красные буквы

выбираются из латинского алфавита. Английский используется и в дополнительных элементах видеокапчи. В NuCaptcha сейчас работают над поддержкой других языков, однако не понятно, будет ли среди этих языков русский. Давайте теперь, для лучшей наглядности, рассмотрим небольшой примерчик. Пример будет на PHP. Он покажет минимальный код, необходимый для применения NuCaptcha на вашем сайте. Это минимальный пример, и не предназначен для полного обозрения. Общая настройка // Include the Leap Client library

require_once("./../leapmarketingclient.php"); // Your ClientKey is supplied by Leap and can be downloaded from the publisher dashboard Leap::SetClientKey("YOUR_CLIENT_KEY_HERE"); // The session is used in this example to store persistent data on the server session_start();

Шаг 1 ­ Инициализация NuCaptcha сделки // initialize the transaction $t = Leap::InitializeTransaction();

Шаг 2 ­ Показать NuCaptcha Виджет // and display the actual player code echo $t->GetWidget();

Вот и все!

Это все, что вам нужно, чтобы NuCaptcha работала на вашем сайте. Ну а теперь, конечно же, готовый пример. Прежде чем начать писать пример, набросаем маленький алгоритм. 1. 2.

Иницианализация NuCaptcha

Отображение виджетов NuCaptcha на vr­online | июнь 2010


57

Безопасность

веб­странице

3. Проверка пользовательского ввода в виджете NuCaptcha

Пример ниже делает два пункта, инициализация отображения виджетов для пользователей, а также проверку.

Общая настройка

// Include the Leap Client library

require_once("./../leapmarketingclient.php"); // Your ClientKey is supplied by Leap and can be downloaded from the publisher dashboard Leap::SetClientKey("YOUR_CLIENT_KEY_HERE"); // The session is used in this example to store persistent data on the server session_start();

<form method="post"> <?php echo $player_output; ?> <br> <!-- must supply your own submit button --> <button>Test Your Answer!</button> </form> <!-- Tell the user what happened last time through --> Transaction Status: <?php echo $transaction_status; ?> </body> </html>

Шаг 1: // Check if the persistent data was stored, and if the user actually submitted an answer if(true === array_key_exists('leap', $_SESSION) && true === Leap::WasSubmitted()) { // validate the transaction $valid = Leap::ValidateTransaction($_SESSION['leap']); // check the result if (true === $valid) { // We have a valid captcha $transaction_status = "Answer was correct."; // This is where you'd most likely redirect to the next page, or submit the results // of what you were trying to validate (forum post, picture submission, etc) } else { // validation failed; find out why. switch (Leap::GetErrorCode()) { case LMEC_WRONG: case LMEC_EMPTY: $transaction_status = "Answer was incorrect."; break; default: $transaction_status = sprintf('Error Code: %s Error Message: %s', Leap::GetErrorCode(), Leap::GetErrorString()); break; } } }

Шаг 2: Отображение виджетов NuCaptcha / HTML. <html>

<head> <title> NuCaptcha Minimal Demo Page </title> </head>

<body> <!-- Form must use post method -->

vr­online | июнь 2010


Автор: Jimmy Jonezz Email: jimmyjonezz@bk.ru

58

Безопасность

Tor.

Защита передачи данных

Как мы знаем, любой наш шаг в сети, отслеживается ­ будь то обычный серфинг интернета в поисках «сладкого» или простой разбор электронной почты. Подключаясь к глобальной сети интернет, мы получаем особый, уникальный идентификатор, который в дальнейшем играет большую роль, на протяжении всей сессии. Не трудно догадаться, что таким идентификатором служит обычный IP­ адрес (кроме этого, есть и другие идентификаторы – прим. автора). Каждое наше открытие того ли иного ресурса, записывается; и этот адрес оседает в логах, хотим мы того или нет. Если этот момент, можно решить, то возникает вопрос другом – анализ передачи данных. Вот об этом, мы и поговорим.

Я не хотел бы повторяться, но мне следует напомнить еще раз, про ситуацию вокруг The Pirate Bay. Этот torrent­трекер, который находился на краю от полного и окончательного уничтожения, все еще жив, и это благодаря пиринговым сетям, которые гарантируют практически 99% анонимность в сети (100% уверенность никто не даст!), и это подтверждает тот факт, что количество пользователей трекера, не смотря на недавно вышедший закон «трех запретов», лишь увеличивается.

Есть и другие нюансы этого громкого дела, но в эти подробности мы вдаваться не будет, т.к. тема данной статьи не включает смакование всякого рода подобной информации. Единственное отмечу, что благодаря способам, позволяющим находиться в сети анонимно, можно не переживать о том, что «жандармы» не придут к вам домой и не заберут твой сервер, битком набитый вареза (интересно, это слово еще в обиходе? =D – прим. автора). В предыдущем выпуске журнала, за июнь 2010 года, в статье «I2P: Анонимность в сети», мы затронули тему анономности в сети, рассмотрев возможность использования бесплатного программного обеспечения I2P, и посредством его настройки анонимно находиться в сети. Как оказалось, здесь имеются свои нюансы, а именно – среди русскоязычного населения I2P,

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

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

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

vr­online | июнь 2010


59

Безопасность

безопасности.

Сервис Tor работает с множеством используемых приложений: веб­браузеры (FireFox, IE8, Opera), клиенты служб обмена мгновенными сообщениями (ICQ, Jabber), программы удаленного входа в систему (RAdmin, Carbon Copy), а также всеми другими программами, использующими протокол TCP.

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

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

После выбора цепочки узлов, приложения могут использовать сеть Tor и можно передавать различные данные по сети. Благодаря тому, что каждый сервер в цепочке видит не больше одного шага, то ни сторонний наблюдатель, ни какой­либо «левый» сервер не смогут связать получателя и отправителя. Как упоминалось ранее, сеть Tor поддерживает работу только с TCP потоками и может быть использована любым приложением, поддерживающим SOCKS. Может возникнуть вопрос, что данная сеть будет работать медленно, т.к. скорость уменьшается пропорционально количеству узлов в цепочке, в виду этого, для повышения скорости Tor использует одну и ту же цепочку для соединений в примерно десять минут (+/­ 5 минут). После этого рассчитывается новая цепочка, чтобы не связывать ваши предыдущие действия с последующими узлами

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

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

Функционал системы Tor предполагает возможность использования скрытых сервисов. Будь то веб­доступ или сервер системы обмена мгновенными сообщениями, но и это еще не все ­ используя "rendezvous" (http://www.torproject.org/hidden­services.html.ru) точки пользователи системы Tor могут соединяться с этими скрытыми сервисами, причём ни одна из сторон не сможет узнать, кто находится на другом конце связи, это можно использовать, если мы хотим, например, разместить сайт, при этом, не беспокоясь о цензуре. Нельзя не затронуть и минусы данной системы.

vr­online | июль 2010


60

Безопасность

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

Дополнительные ссылки: Дополнение для FireFox: https://addons.mozilla.org/ru/firefox/addon/2275/ Официальный сайт: https://www.torproject.org/ Настройка Tor (I2P): http://www.mr­h1z.com/linux/171 Скрытые сервисы: https://www.torproject.org/docs/tor­ hidden­service.html.ru Настройка ретранслятора: https://www.torproject.org/docs/tor­doc­relay.html.ru

Что ж, попробуем настроить Tor и на своей «тачке». В качестве наглядности, я взял систему Ubuntu 10.4, поэтому без терминала не обойтись. Следует учесть, что для установки необходимы права суперпользователя, которые можно получить посредством выполнения команды: sudo su. Следующий этап действий таков — запрашиваем пакет для добавления его в репозиторий, добавляем ключ (это необходимо для идентификации), обновляем репозиторий. echo 'deb http://deb.torproject.org/torproject.org karmic main'>>/etc/apt/sources.list # Добавление репозитария

apt­key adv ­­keyserver keys.gnupg.net ­­recv 886DDD89 # Добавление gpg­ключа apt­get update

# Обновление репозиториев

apt­get install tor tor­geoipdb privoxy Выполним настройки: открываем файл конфигурации Privoxy “/etc/privoxy/config” и добавляем строку: "forward­socks4a / 127.0.0.1:9050 .". Перезапускам Privoxy, лезем в настройки веб­браузера и в поле Socks4­прокси, вбиваем адрес: 127.0.0.1:9050. Теперь, вбиваем в адресную строку адрес вида: https://check.torproject.org/ и смотрим, работает ли Tor или нет.

В этой статье я многое не затронул, как например, выступить в роли ретранслятора и стать частью цепочки для передачи трафика или, например, предоставлять пользователям скрытые сервисы, но я надеюсь, ты предпочтешь самостоятельно продолжить изучение данной темы, а я в свою очередь могу пожелать тебе лишь удачи. Если что­то не понятно, я специально приготовил несколько полезных ссылок, которые ты можешь увидеть в конце статьи, но кроме того ты всегда можешь спросить совет или задать свой вопрос на сайте vr­ online.ru. vr­online | июль 2010


VR­Crew

61

Мнение VR

Мнение VR Сколково

JimmyJonezz: Сколково ­ будущее. Определенно будущее, но вот светлое ли оно? Я полагаю, это основной вопрос. Дело в том, что я не согласен, с его будущим расположением. Строительство этого городка должно быть в восточной или в центральной полосе России. Европейская часть России и так уже хорошо развита, зачем скапливать все в одном месте ­ с экономической точки зрения это не правильно и стратегически тем более, последнее на мой взгляд куда важнее. По большому счету, Россия не дружит с высокими технологиями, и мы еще не готовы к таким масштабным проектам, т.к. у нас нет основы. Столковое ­ это проект для галочки, пародия на Силиконовую долину, но нужно оптимистически смотреть в будущее и верить, что это не очередное отмывание денег. Глядишь, что нибудь из этого и выйдет, полагаясь на старый добрый "авось". Kastor: Каюсь, только сегодня узнал, что у нас планируется своя кремниевая долина. Критики я достаточно прочитал, мол, строиться она будет на дорогой земле, слишком много надежд на нее возлагают и вообще в России все через одно место. Но меня эта новость порадовала. А почему бы и нет? Я уверен, что за технологиями будущее и будет вдвойне приятнее, если это будут наши технологии! Судите сами, сколько гениальных умов уехало за границу только

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

wwwnet: Много в интернетах написано про мега­проект Сколково. Очень мало положительных отзывов. Я тоже по данному поводу придерживаюсь скептического взгляда. Сколково ­ "Кремниевая долина" в Росиии. Бред. Отличий столько же, как между павлином и подъемным краном. Возможно, мы увидим отчеты об успешной деятельности этого русского IT­ центра, но будет ли эта деятельность на самом деле успешной? Хочется верить, но надежда мала. Spider_NET: Проект,

безусловно, интересный и теоретически полезный, да и однозначно может помочь пополнить без того пустую государственную казну. Однако, пока я отношусь к нему скептически. В России всегда были и останутся две проблемы: дураки и дороги. Государство будет выделять не хилое количество денег на финансирование проекта, но часть этих бабосов обязательно кто­нибудь захапает себе. Я даже не сомневаюсь, что это произойдет. В результате, придется экономить и как­то выкручиваться. При таких условиях, о качестве исполнения проекта уже помнить никто не будет. Так проект имеет все шансы сразу родиться «больным» и с одной лишь мыслью: «Авось, все будет хорошо!».

Если честно, то мне кажется, что пока России не нужен проект такого масштаба как Сколково. Да, на бумаге у него много преимуществ и вкусностей, но не стоит забывать, что это только на бумаге. В реале обязательно все будет по­другому. Лучше бы «башкавитые» люди сверху сначала разобрались бы с более мелкими проблемами (в области IT), а потом уже начинали бы сворачивать горы.

vr­online | июль 2010


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.