Спецвыпуск Xakep, Содержание номера # 028

Cover 028 |
Статья | Стр.
Intro | 002
Content | 004
SPEZial Delivery |
Soft | 006
Hard | 008
Web | 010
Hack Tools | 012
FAQ |
Движковый FAQ | 014
cover story |
DROP THE BASE! | 020
ASP.NET или все-таки есть? | 024
ASCII-дизайн | 026
Баблос в цифре | 028
RiSearch | 032
31337 двигало | 036
NoNaMe.ru | 040
Друг познается в БД | 042
Do you speak SQL? | 044
Движок, работающий с БД | 048
Пров отдыхает! | 054
Обнаженная теория об XML | 056
Служба знакомств | 060
Спам без конца | 064
МЕТАтельное оружие веб-мастера | 066
Берегите WAREZ! | 068
Боевые будни виртуального рынка | 070
Прибарахлись доменами | 074
Php-nuke v 2.0 | 076
Cтатистика посещений по-простому | 080
haX0rz4haX0rz |
Инфа по укреплению своего пристанища в Инете | 082
offtopic |
ВОРЧОКИНГ-2 | 086
PAYALNIK Доктора Добрянского | 090
WINformation |
"Операция ""противостояние""" | 092
Современная помощь | 094
Folder.htt | 098
M$-update: полезные и бесполезные | 102
Креатив |
Волшебная технология viewpoint | 104
Улыбнись в стиле аниме | 108
TIPS OF FLASH: продвинутый альбом с порнушкой | 110
TIPS OF WEB:грузим без динамы, динамим, чтобы не грузить! | 114
Стори |
Тайна исповеди | 116
Книжки |
Буки для web-разработчика | 124
e-mail |
e-mail | 126
4кома |
4кома | 128


Спецвыпуск Xakep, номер #028, стр. 028-002-1, Intro

Intro

Спецвыпуск Xakep, номер #028, стр. 028-002-1

Doporue 4uTATe/|u!

Hy BoT, npoIIIe/| MecSIU,, u Mb| c BAMu cHoBA BcTpe4AeMcSI HA cTpAHuU,Ax HAIIIeu` 3AMe4ATe/|bHou` py6puku "BcTynuTe/|bHoe c/|oBo r/|ABHoro peDAkTopA". U B o4epeDHou` pA3 SI c yDoBo/|bcTBueM roToB/|I-0cb coo6III,uTb BAM o6o Bcex 3HA4uTe/|bHb|x u He3HA4uTe/|bHb|x u3MeHeHuSIx, npou3oIIIeDIIIux 3A -)ToT MecSIU, B HAIIIeu`, no3Bo/|bTe TAk Bb|pA3uTbcSI, nepuoDuke.

nepBoe, HA 4eM SI xoTe/| 6b| ocTAHoBuTb u HA MrHoBeHue 3ADep}|{ATb BAIIIe BHuMAHue ceroDHSI, – -)To, koHe4Ho }|{e, HoBASI py6pukA SPEZial Delivery. Bb| HAu`DeTe ee B cAMoM HA4A/|e }|{ypHA/|A. HA ee cTpAHuU,Ax BAc }|{DeT yB/|ekATe/|bHb|u` Mup cAMb|x ropSI4ux HoBocTeu` nporpAMMHoro u AnnApATHoro o6ecne4eHuSI, ceTeBb|x pecypcoB u uHcTpyMeHTApuSI B3/|oMIII,ukoB. YDuBuTe/|bHo, 4To Mb| B Te4eHue cTo/|b npoDo/|}|{uTe/|bHoro npoMe}|{yTkA BpeMeHu o6De/|SI/|u BHuMAHueM uH(|)opMAU,uI-0 noDo6Horo poDA. 3ATo Tenepb HAIIIu 4uTATe/|u – To ecTb Bb| – 6yDyT onepATuBHo cHA6}|{ATbcSI cAMb|Mu noc/|eDHuMu HoBocTSIMu!

Co B3DoxoM o6/|er4eHuSI xo4y coo6III,uTb BAM, Doporue 4uTATe/|u, 4To koMukc, koTopb|u` Mb| ny6/|ukoBA/|u B Te4eHue noc/|eDHux IIIecTu-ceMu MecSIU,eB, HAkoHeU,-To 3ABepIIIu/|cSI. Ko/|/|ekTuB HAIIIero u3DAHuSI npuIIIe/| k Bb|BoDy, 4To cTo/|b r/|o6A/|bHb|e npoekTb| He onpABDb|BAI-0T Bo3/|o}|{eHHb|x HA Hux o}|{uDAHuu`, TAk 4To TpADuU,uoHHb|u` koMukc HA4uHASI c -)Toro HoMepA 3AMeHuT 6o/|ee cBe}|{ASI uDeSI. O3HAkoMbTecb c (|)opMou`, B koTopou` oHA 6b|/|A Bon/|oIII,eHA HA cAMou` noc/|eDHeu` cTpAHuU,e }|{ypHA/|A.

Hy u, koHe4Ho, He Mory no3Bo/|uTb ce6e He ynoMSIHyTb o HAIIIeu` TeMe HoMepA. CepuSI u3 4eTb|pex }|{ypHA/|oB, nocBSIIII,eHHASI co3DAHuI-0 u noDDep}|{AHuI-0 ceTeBb|x pecypcoB npoDo/|}|{AeTcSI. Ceu`4Ac Bb| Dep}|{uTe B pykAx BTopou` HoMep u3 -)Tou` cepuu. HoMep nocBSIIII,eH npeuMyIII,ecTBeHHo nopTA/|bHb|M TexHo/|oruSIM. OcHoBHASI koHU,enU,uSI – -)To co3DAHue co6cTBeHHb|x nopTA/|bHb|x pecypcoB HA ocHoBe y}|{e roToBb|x nporpAMMHb|x MoDy/|eu`. O4eHb HADeeMcSI, 4To npo4TeHue -)Toro HoMepA no3Bo/|uT BAM oIII,yTuTb npu/|uB cu/| u TBop4eckou` -)Hepruu, DocTATo4Hb|x D/|SI co3DAHuSI cBoero co6cTBeHHoro nopTA/|bHoro pecypcA B ceTu!

}|{DuTe ocTABIIIuxcSI DByx HoMepoB u3 -)Tou` cepu – yBepeH, Bb| oU,eHuTe ux no DocTouHcTBy!

C yBA}|{eHueM,

n0ah

Содержание


Спецвыпуск Xakep, номер #028, стр. 028-006-1, SPEZial Delivery - SOFT

SPEZial Delivery - SOFT

Kirion (kkr@mailru.com)

Спецвыпуск Xakep, номер #028, стр. 028-006-1

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

Аккурат после зимней сессии зафиналило Opera 7. Столь эпохальное событие не могло не остаться незамеченным большинством софтовых порталов рунета. Как очень давний фанат этого браузера могу сказать любителем ослов: пусть в твоем браузере правильно отображается любая страница, такой скорости тебе все равно никогда не познать :). Движок седьмой версии был написан с нуля и не потерял своей знаменитой скорости (хотя я лично этого уже давно не замечаю - выделенка расслабляет :)). Старались повысить совместимость оперы с различными стандартами, но тут сложно сказать, добились ли они успеха. Нет, странички все же стали отображаться корректнее, но... Несколько тестовых линков, которые неправильно отображала Opera 6.05, неправильно отображает и Opera 7. Дело, наверное, в том, что на стандарты W3C плевать Microsoft, и то, что нормально работает в осле, - не работает в других браузерах (и даже в хваленой Mozilla). Приходится все-таки ставить какой-нить Netcaptor (кстати, после годовалого затишья вышла версия 7.1, www.netcaptor.com) или MyIE2 (www.ruihehang.com/myie2/html_en/home.htm), а то от первозданного вида IE уже начинает тошнить. Но вернемся к Опере. Наконец-то разработчики заменили убогий почтовый клиент на новенький M2. Хотя лучше бы его убрали совсем: все равно летучей мыши никто не изменит :). Появился менеджер паролей для ленивых и безответственных (а я все равно все буду вводить руками, и не говорите, что у меня мания преследования). Также разработчики добавили пару технологий из своих других разработок: из браузера опера для телевизоров (может видели рекламу чего-то подобного) взяли систему навигации с использованием только клавиатуры (офигенно удобно), а из браузеров для карманников появилась функция развертки на малый экран. На фиг это нужно в обычном компе - непонятно, но сделано хорошо. Из остального - различные улучшение фейса вроде полной кастомизации панелей, кучи хоткеев и рисунков мышью и улучшенной поддержки скинов. Для скачивания, как обычно, доступны две версии: с явой (12.6 мегов) и без явы (3.2 мега). Советую качать без явы, а потом слить ее с официального сайта Sun, там всегда более свежая версия.

Не покладая рук, работали эту зиму программисты из Mirabilis. Чтобы выпустить сразу два билда на одной неделе - это ж какой баг надо было забыть\внести. А бедные составители патчей, о них подумали :)? Следуя новой традиции, Mirabilis выпускает крупный билд, а затем раз в месяц делает мелкие исправления ошибок. Только вот я не понимаю, как можно до сих пор пользоваться аськой? Без пропатчивания - так это просто неудобно. Да и после пропатчивания остается ощущение дискомфорта. Я все же предпочитаю Trillian pro (www.trillian.cc). А вот некоторые используют Miranda, финальная версия которой появилась совсем недавно. Это очень маленький, немного невзрачный клон аськи. В начале Miranda кажется совершенно нефункциональной, но это если не знать, что к ней существует куча плагинов. Хочешь посылать SMS, смотреть погоду, заставить работать Миранду с другими сетями, получать погоду и почту - загляни на miranda-icq.sourceforge.net в раздел плагины. Там их порядка сотни, найдешь себе по вкусу :). Если же Миранда кажется тебе недостаточно маленькой - топай на www.avtlab.ru и качай свежую версию TheBee. Прелесть этой маленькой проги в том, что она сочетает в себе клиент аськи, почтовик, ньюсридер, а весит всего 400 кило. Так как она не требует инсталляции и не сохраняет данных о пользователе в системе, пчела быстро получила распространение среди завсегдатаев Интернет-кафе: принес на дискетке, пообщался, ушел :).


Спецвыпуск Xakep, номер #028, стр. 028-006-2, SPEZial Delivery - SOFT

SPEZial Delivery - SOFT

Kirion (kkr@mailru.com)

Спецвыпуск Xakep, номер #028, стр. 028-006-2

Кстати, я тут заметил, что у меня появилась интересная привычка: после скачи нового софта проверять его не только на вири, но и на шпионские модули. Теперь это еще проще с новым AdAware 6 pro (lavasoft3.element5.com). Кроме обновлений базы, нового интерфейса и значительного ускорения и улучшения, он содержит модуль AdWatch. Это что-то вроде сканера и диспетчера процессов, который блокирует запрещенные действия. Не могу пока что оценить эффективность этого дополнения, но эффективность основного сканера известна давно, так что качаем! Тем более что подозрительные процессы можно мониторить и с помощью Starter (codestuff.tripod.com), filemon и regmon (www.sysintrnals.com), они, кстати, все недавно обновились.

Сел я тут кино новое посмотреть, на своем любимом Bsplayer (отличная вещь, хотя и немного глючная, совсем недавно обновился до 0.86 версии, www.bsplayer.org), а он ругаться стал, мол, формата не понимает. Как-то странно получилось, что я не заметил выхода нового DivX 5.03. Давненько он не обновлялся... Много воды утекло со времени выхода полулегальной версии 3.1. Теперь это коммерческий продукт с хорошей технической поддержкой и... платный. Нет, для просмотра ничего платить не надо, равно как и для кодировки обычной версией. Но версия Pro, несущая в себе новые алгоритмы и фишки вроде интерлейсинга, является шароварной. Правда, учитывая популярность продукта, это можно не считать преградой :). Также одним из главных нововведений является система сертификатов DivX, предназначенных для совместимости закодированного видео с бытовыми DivX-плеерами. Ни разу еще о таких не слышал, но, по-моему, это супер. На фига мне тогда обычный видюшник (может только с телевизора чего-то писать) или дорогущий домашний кинотеатр. Даешь DivX-плеер в каждый дом :).

Знаешь, что меня раздражает в моей локалке? Она очень большая (порядка 1000 компов), и сетевое окружение просто не работает. Виснет. А еще очень бесит, что в WinXP нет нормального аналога Netwatch. Так что я был очень рад, когда обнаружил прогу NetView (killprog.narod.ru). Любительский и немного кривоватый проект, но ошибки постоянно исправляются, хотя я бы еще поработал над интерфейсом. Прога ведет поиск компьютеров в локальной сети и занимается постоянным мониторингом их состояния. Естественно, имеется сканер шаров и поиск файлов по сети. И еще очень удобный монитор подключений, вылезающий по комбинации win+w. Прога тихонько сидит себе в трее, но во время поиска компьютеров в сети жрет многовато памяти, так что рекомендую это отключить и запускать только ручками.


Спецвыпуск Xakep, номер #028, стр. 028-006-3, SPEZial Delivery - SOFT

SPEZial Delivery - SOFT

Kirion (kkr@mailru.com)

Спецвыпуск Xakep, номер #028, стр. 028-006-3

Недавно в поисках лекарства к свежему CuteFTP наткнулся на очень неплохой Ftp-клиент FlashFXP. Интерфейс достаточно удобен, выполнен в виде проводника, присутствуют все необходимые функции. Но главная фишка проги - возможность перекачки файлов с одного сервера на другой. При соответствующей настройке выполняется простым Drag'n'Drop. Прога платная, но нормально ее крякнуть проще, чем CuteFTP :).


Спецвыпуск Xakep, номер #028, стр. 028-008-1, SPEZial Delivery - HARD

SPEZial Delivery - HARD

test_lab

Спецвыпуск Xakep, номер #028, стр. 028-008-1

(test_lab@gameland.ru)

Gigabyte смотрит в будущее

Компания Gigabyte Technology выпустила новую материнскую плату на чипсете Intel 845PE. Новинка получила название GA-8PE800 Ultra и является первой в новой же линейке плат - P4 Titan 800. GA-8PE800 Ultra примечательна тем, что полностью обеспечивает поддержку процессора Intel нового поколения (на ядре Prescott).

Ознакомившись с характеристиками платы, мы заметили очевидную тенденцию - большинство решений, реализованных в GA-8PE800 Ultra ориентированны на технологии, которые получат широкое распространение только в ближайшем будущем. О поддержке процессоров Intel P4 на ядре Prescott мы уже упомянули. Из "технологий будущего" хотелось бы также отметить встроенный сетевой контроллер Gigabit Ethernet Intel 82540EM, обеспечивающий пропускную способность 1000 Мбит/с.

Спецификации платы:

- Разъем Socket 478 для процессоров Intel Pentium 4 с технологией Hyper Threading;

- Чипсет Intel 845PE;

- Частота системной шины 533/400 МГц;

- Поддержка памяти DDR 266/333;

- Контроллер Serial ATA компании Silicon Image;

- Контроллер Gigabit Ethernet Intel 82540EM;

- Интерфейс IEEE 1394;

- Контроллер Promise IDE RAID (RAID 0, 1) + ATA-133;

- 6 портов USB 2.0;

- 6-канальный аудиокодек AC'97;

- 5 разъемов PCI, отвечающих спецификации PCI 2.2;

- Формфактор ATX.

Четырехгиговые планки Samsung

Samsung анонсировал первый модуль памяти DDR DIMM 4 гигабайта. Напомним, что Double Data Rate (DDR) - память способная дважды передавать данные за один такт синхросигнала. Dual In-line Memory Module (DIMM) - модуль памяти, на котором контакты расположены с обеих сторон. Такие модули используются во многих современных ПК.

Планка памяти DDR DIMM 512 мегабайт уже давно доступна простому смертному. А теперь представь, что сможешь воткнуть в свой комп сразу ЧЕТЫРЕ Гигабайта оперативки. Правда, чипсет материнской платы должен уметь поддерживать столько. По началу такими модулями обзаведутся владельцы серверов, рабочих станций, суперкомпьютеров. Но близок день, когда рядовой домашний юзер будет брать на рынке четырехгиговую планку для работы нового Windows. Тенденция очевидна: объем винчестеров увеличивается, частота, производительность и кэш процессоров тоже растут, видеочипы наращивают производительность, появляются внешние высокоскоростные интерфейсы. Памяти никак нельзя отставать как по частоте, так и по объему.

Кстати, чипы памяти производятся по передовым технологиям 100 нанометров (0,1 микрон), это позволит им с запасом удовлетворить современным требованием к частоте работы памяти.

Суперматрица Fujifilm для цифровиков

Fujifilm анонсировала новую матрицу по технологии SuperCCD SR (Super Dynamic Range) с супердинамическим диапазоном. Напомним, что матрица SuperCCD III позволила 3-х мегапиксельной камере Fujifilm FinePix S602 Zoom тягаться с четырехмегапиксельными конкурентами, по данным http://www.dpreview.com/.

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


Спецвыпуск Xakep, номер #028, стр. 028-008-2, SPEZial Delivery - HARD

SPEZial Delivery - HARD

test_lab

Спецвыпуск Xakep, номер #028, стр. 028-008-2

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

Новая матрица SuperCCD SR сохранила свойства старой, с тем отличием, что каждый пиксель стал двойным. Маленький фотодиод рассчитан на источники света, а большой на объекты плохо и средне освещенные. Любой фотограф постоянно сталкивается с проблемой, когда на фотографии выпадают светлые или темные объекты. Если пленку (матрицу) пересветить, то выпадут светлые, а если недосветить, то темные. SuperCCD SR снимает в режиме недосветки маленькими фотодиодами, а в режиме пересветки - большими, изображение компилируется и избавляется от традиционных изъянов. Появляется возможность различить на одном снимке и светлые и темные детали. Увеличение динамического диапазона на 400% - серьезный шаг к победе цифровой фотографии над пленочным конкурентом!

Очень приятно, Barton!

AMD презентовала серию процессоров на ядре Barton: AMD Athlon XP2500+, XP2800+ и XP3000+. Фанатам осталось ждать уже недолго, потому что журналистам показали готовые компьютеры отечественной сборки на базе этих процессоров: Formoza, NT Computer, КИТ, Ф-ЦЕНТР. Создается впечатление, что все готово к массированному наступлению новых процессоров AMD на наш рынок, как домашний, так и офисный.

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

Процессоры на ядре Barton производятся по технологии 0,13 микрон. Кэш второго уровня увеличили до 512 килобайт, за счет увеличения площади кристалла, при этом степень интеграции возросла с 38 миллионов до 54-х. Производительность нового процессора вместе с другими новинками компьютерного мира, откроют, по мнению представителей AMD, пользователям ПК новые возможности, например, такие, как профессиональный видеомонтаж.


Спецвыпуск Xakep, номер #028, стр. 028-008-3, SPEZial Delivery - HARD

SPEZial Delivery - HARD

test_lab

Спецвыпуск Xakep, номер #028, стр. 028-008-3

Цветная печать на лазерном принтере, дешево!

Радуются фанаты лазерной печати: EPSON продает принтер EPSON AcuLaser C900. Устройство предназначено для цветной печати 2400 dpi. EPSON обещает, что расходы на цветную печать будут такими же как и на черно-белую. Сам принтер стоит 879 долларов. Если вспомнить, сколько стоили первые черно-белые модели, то можно предположить, что в скором времени цветные лазерники начнут теснить струйники. Как это случилось прежде с черно-белыми моделями.


Спецвыпуск Xakep, номер #028, стр. 028-010-1, SPEZial Delivery-WEB

SPEZial Delivery-WEB

Krava

Спецвыпуск Xakep, номер #028, стр. 028-010-1

(krava@nnm.ru), http://www.nnm.ru

Приветствую своих новых бумажных читателей :)! Многие, наверно, уже меня знают по рассылке NoNaMe, но теперь я буду вещать тебе о вебе именно отсюда :). В новой колонке будут обсуждаться новые и старые (но не всем известные) лучшие сайты Рунета. В основном, естественно, будут рассматриваться сайты направлений безопасности, хакерские, каталоги программ, примеры качественного дизайна, содержащие интересные, неординарные, дискуссионные материалы and so on.

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

Софт. Раздел включает краткие статьи о программах, регулярные обзоры свежевышедших программ, а также программы, признанные самыми лучшими среди аналогов. В каталоге лучших программ представлены краткие описания с указанием версий, статуса (freeware, shareware) и прямые ссылки на скачивание.

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

Игры. В этом разделе рассматриваются игры компьютерные и приставочные (Sega Dreamcast и Sony Playstation). В отдельные подразделы по праву вынесены Diablo2 и FinalFantasy :). По каждой игре вседоступны авторские обзоры, статистика, тактика игры, секреты и другая полезная инфа. Кроме того, здесь можно по прямым ссылкам скачать проги для взлома, просмотра, редактирования ресурсов игр, а также дополнительные карты, персонажи для игр и тому подобное.

В разделе книг представлены ссылки на электронные их варианты, большей частью по тематике фэнтези и фантастики, особо популярной среди кулхацкеров. Здесь же представлены Top'ы - рейтинги лучших книг. Также в разделе можно увидеть портреты некоторых писателей и их дни рождения (типа - поздравить :)).

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

Сайт отличается удобной системой навигации, имеет свою гостевую книгу, форум, рассылку.

Сайт Spying.by.ru - для настоящих Джеймсов Бондов!

Основные направления, рассматриваемые на сайте, - spying (шпионаж и средства шпионажа), antispying (борьба с шпионажем), фрикинг, юмор и "задумки".

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


Спецвыпуск Xakep, номер #028, стр. 028-010-2, SPEZial Delivery-WEB

SPEZial Delivery-WEB

Krava

Спецвыпуск Xakep, номер #028, стр. 028-010-2

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

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

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

Всем известен еще с времен зарождения Рунета портал "Кулички", но менее известен интересный проект в рамках портала. Это Clubrus.kulichki.net - лучшие программы, утилиты с русификаторами в одном флаконе.

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

Раздел программ дает юзерам возможность скачать лучшие программы из различных областей. Своего рода раздел must have. Здесь также представлены и мелкие, но полезные утилиты.

Информация из раздела "Учимся вместе" будет полезна не только начинающим пользователям, но и профи, не имеющим возможности (или не желающим) углубляться в конкретные области. Здесь находятся статьи, доходчивым языком рассказывающие о насущных проблемах компьютерщиков с приведением обзора программ для решения их. Чтобы не быть голословным, приведу несколько примеров тем статей: "Как спрятать информацию на компьютере", "Увеличение скорости коннекта", "Создание инсталляций".

На сайте имеются форум и гостевая книга для любителей поболтать.

Серфинг в Интернете анонимен? Этот миф развеян уже давно. Даже при правильно настроенном фаерволле и cookies владельцы сайтов, на которых ты бываешь, могут много о тебе узнать... Сервисы по анонимному серфингу в англоязычном Интернете многочисленны, но не бесплатны. Во всяком случае, большинство функций для не платящих пользователей урезаны до предела. Что же делать?

3 месяца назад в Рунете возобновил свою работу сервер Anonymizer.ru! Простой серфинг доступен и без регистрации абсолютно бесплатно. Регистрация также пока бесплатна и дает возможность по обработке java-скриптов, cookies, управления Интернет-протоколами и многое другое.

Объявлен набор бета-тестеров новой версии движка Anonymizer.ru. Так что у тебя есть реальный шанс скрыться от чужих глаз! Это отнюдь не паранойя, соблюдай privacy! И что приятно - пока for free.


Спецвыпуск Xakep, номер #028, стр. 028-010-3, SPEZial Delivery-WEB

SPEZial Delivery-WEB

Krava

Спецвыпуск Xakep, номер #028, стр. 028-010-3

Портал Soundcoder.com - один из самых лучших русскоязычных проектов в Интернете, связанных со звуком. Обновляется портал ежедневно, здесь всегда посетителя ждут лучшие статьи о звуке, обработке звука, технических аспектах, программах работы со звуком и многое другое.

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

На сайте доступен форум, ведется рейтинг самых популярных статей.

Одна из наиболее популярных, интересных статей - о возможности организации онлайнового вещания в Интернет или локальной сети - что-то наподобие Интернет-радио. (http://www.soundcoder.com/sections.php?op=viewarticle&artid=22)

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

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

На сайте МГУ в разделе факультета психологии размещена очень интересная страничка, на которой представлена для изучения масса явлений зрительных иллюзий.

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

Кроме изображений, вызывающих иллюзии, на сайте можно скачать специальные программы, создающие явления иллюзий; программы для создания стереограмм (своего рода иллюзии - простым языком "объемные картинки", иногда движущиеся). Тут же можно найти более опасные программы "для изменения состояния сознания", которые используются только на свой страх и риск и категорически не рекомендуются людям со слабыми нервами и страдающим психическими болезнями.

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


Спецвыпуск Xakep, номер #028, стр. 028-012-1, SPEZial Delivery - HACK-SOFT

SPEZial Delivery - HACK-SOFT

ХрымZ (hrimz@xyligan.ru)

Спецвыпуск Xakep, номер #028, стр. 028-012-1

Уже нашел нашу новую рубрику SPEZial Delivery? Вот и отлично, с радостью сообщаю, что за эту ее часть отвечаю как раз таки я :). То есть в каждом выпуске ты теперь сможешь заценивать новинки хакерского софта. Первый выпуск какой-то "сканерский" получился, знакомься.

Я просто не смог бы не поместить эту софтину в начало обзора. Легендарный nmap сменил номер версии, получил новые функции, а судя по тому, что около номера версии затесалось слово "Alpha", еще и новые баги. Из заметных улучшений - скорость работы версии nmap`а под винды. Но глюков там еще предостаточно. Во-первых, нельзя сканировать localhost (себя то есть), с 2000 виндами он будет корректно работать только под Администратором. И еще. Виндовая версия может работать только на выделенном канале. Так что можешь смело выкидывать свой мопед :).

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

Имя: IP tools 2.08

Платформа: win (все)

Политика: Freeware

Весит: 1.12Кб

Веб: http://www.ks-soft.net/ip-tools.eng/index.htm

IP tools - это просто боекомплект win32-хацкера. 15 тулз для души и тела, так сказать :). В новой версии изменения коснулись дизайна - кнопочки перерисовали. Вообще он стал дружелюбнее. Зато почему такая убогая установка сохранилась до сих пор - загадка. Ну как можно на протяжении десяти версий программы заставлять юзверя вводить полный путь к месту установки вручную?

Теперь немного о хорошем. Скорость стандартного сканера портов сильно увеличилась, но по сравнению с nmap Tools`ы сосут петушки. Еще хочется отметить, что авторы добавили настроек для изменения текущих соединений. Примитивный фаерволл и все такое:). А вообще - хороший релиз. Тулзы стали надежнее, быстрее, красивее и веселее. Чего еще можно требовать? Однозначно качать.

Имя: Nessus Security Scanner 1.2.7

Платформа: *nix, win (другие версии)

Политика: Freeware

Весит: ~120Кб

Веб: http://www.nessus.org

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

В новой версии улучшен и дополнен встроенный язык сценариев для программирования процесса взлома NASL (Nessus Attack Scripting Language). Так что если юзаешь в работе этот мощный инструмент - не поленись слить новую версию, благо бесплатно.

Имя: Visual Route 7.0g

Платформа: win (все), Linux, MacOS (практически все)

Политика: Freeware

Весит: 1.49Мб

Веб: http://www.visualware.com

Суперпрограмма. Графический traceroute, выводящий всю инфу на карту мира. В последней версии пропали глюки при работе с картой. Теперь можно корректно делать zoom и другие суперфишки :). В общем, работает быстро и надежно. А главное - пользы по самое не балуй. Думаешь, почему тогда на скрине что-то черными линиями скрыто :).


Спецвыпуск Xakep, номер #028, стр. 028-012-2, SPEZial Delivery - HACK-SOFT

SPEZial Delivery - HACK-SOFT

ХрымZ (hrimz@xyligan.ru)

Спецвыпуск Xakep, номер #028, стр. 028-012-2

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

Имя: rnmap 0.9

Платформа: Linux, ***BSD

Политика: Freeware

Весит: 28.7Кб

Веб: http://www.rnmap.sourceforge.net

Remote nmap (Rnamp) - программа, позволяющая удаленно просматривать порты, используя централизованный сервер. Написана на ядре nmap, из этого следует, что скорость работы просто космическая. Плюс приятный графический интерфейс - пора вылезать из консоли. Ну хоть иногда :). Версия еще не доросла до единички, но 0.9 самая стабильная и работает без багов. В общем, банальное must have :).

Имя: iptables 1.2.7a

Платформа: Linux

Политика: Freeware

Весит: 340Кб

Веб: http://www.iptables.org

Продвинутый пакетный фильтр, использующийся в Линуксе с версией ядра 2.4 и выше. Пришел на смену ipchains. В Спеце о нем не раз писали, так что советую найти номер по фаерволлам и прочитать, как все это настраивается. Вообще, если у тебя линукс, то для защиты это самое оно. В этой версии добавлены новые возможности для создания управляющих цепочек, что способствует более гибкому анализу нападения и выбора средств защиты. Смущает только, что версия "Alpha", то есть ее советуют качать только девелоперам и при нахождении багов высылать репорт. Если ты кодер, то вперед. И последнее. Единственный минус (а может, все-таки плюс?) это консольность проги - черный экран и мигающий курсор нам друзья :). Но для решения этой траблы - читай дальше.

Имя: iptables log analyzer 0.3

Платформа: Linux

Политика: Freeware

Весит: ~250Кб

Веб: http://www.gege.org/iptables/

Log Analyzer - совсем новое программерское творение, предназначенное для удобной работы iptables, а особенно с его логами. После непродолжительного анализа прога выдает красивый html-документ, где все расписано по пунктам. Кто, когда и сколько :). Утилита совсем новая, но со своей задачей справляется замечательно. Правда, при тестировании пару раз были баги - не хотела корректно ставиться. Но, как и все в линуксе, - это зависит от дистрибутива и кривости рук :).

Имя: TcpDump 3.7.1

Платформа: *nix, win

Политика: Freeware

Весит: ~300Кб

Веб: http://www.tcpdump.org

TCpDump позволяет делать дамп траффика в сети. TcpDump может использоваться для отображения заголовков пакетов на сетевом интерфейсе, которые соответствуют определенному критерию. Также ты спокойно можешь использовать TcpDump для обнаружения сетевых проблем, некоторых типов нападений и общего контроля сетевых действии. Если ты только первый раз слышишь об этой утилите, то, считай, прожил жизнь зря :). Шучу.


Спецвыпуск Xakep, номер #028, стр. 028-014-1, Движковый FAQ

Движковый FAQ

Матушка Лень

Спецвыпуск Xakep, номер #028, стр. 028-014-1

(Mlen@mail.ru)

Что такое движок?

Для того чтобы намонстрить модную автоматизированную страничку, совсем необязательно все писать с нуля. Конечно, в воспитательных целях это будет полезно, но если ты не фанат изобретения велосипедов, то можешь заюзать готовые куски. И правда! Ведь ты хочешь от своей паги самых обычных функций: поиска, скачки/закачки, рейтингов, статистики, связи с БД и так далее. Проще найти модуль, который все это умеет. Такой модуль может быть в виде готовой откомпиленной программы либо в виде куска кода, который предстоит скомпилить. Чтобы заюзать такой движок под свои нужды, тебе придется воспользоваться настройками либо через простенький скрипт получить доступ к нужным функциям двигла.

Что такое CGI-директория?

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

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

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

Про создание CGI с нуля можешь почитать на http://ucantake.narod.ru/l_cgi.htm и на http://www.cetis.ru/library/cgi/cgiv.html.

Что такое компиленный движок?

Движок может быть написан на любом подходящем языке и скомпилирован. Это значит, что он скомпилирован под определенную ось (операционную систему). Не сложно догадаться, что движок чата, скомпиленный под WIN, под Unix уже работать не захочет. Даже разные клоны Юниксов не обещают совместимости для уже откомпиленного файла. В таком движке ты ничего не изменишь, кроме настроек в текстовом файле; количество этих настроек бывает разное. Нормальные движки бывают заранее скомпилены под наиболее популярные оси.

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

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

Что делать, если админ запретил все?

Не буду поднимать толпы народа на войну с админом. Если на хостинге запрещены CGI и другие автоматические технологии, то не все кончено. Ты можешь использовать готовые движки JavaScript и Flash, которые выполняются в браузере пользователя. Правда, некоторые пользователи (такие как я) отключают эти технологии в своих браузерах. Для JS и Flash тоже есть много готовых примеров (движков), которые ты можешь немного переделать и заюзать в своей страничке.


Спецвыпуск Xakep, номер #028, стр. 028-014-2, Движковый FAQ

Движковый FAQ

Матушка Лень

Спецвыпуск Xakep, номер #028, стр. 028-014-2

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

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

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

Что такое некомпиленные движки?

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

А бывают движки, написанные на Perl, VBScript, JavaScript, с использованием PHP, ASP или JSP, которые вообще компилить не надо. То есть их интерпретирует сервер по мере надобности. Это значит, что сервер должен поддерживать соответствующие технологии.

То есть если ты где-то надыбал заготовку интернет-магазина на PHP, тебе нужен хостинг с поддержкой PHP. А если у тебя хостинг с ASP, то придется искать магазин на ASP. Однако никто тебе не мешает загеморроиться и переписать ASP на PHP, технологии ведь похожи.

Что такое хостинг?

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

А бывают ли конструкторы движков?

Как ты уже разобрался, обычно от движка требуется стандартный набор каких-то свойств, и еще нужно легко эти свойства применять в твоих проектах, особо не запариваясь скриптописанием и прочим программированием. Поскольку нужные свойства можно пересчитать по пальцам, то нет ничего удивительного, что появились конструкторы движков. Ты можешь играть в советский конструктор: искать детали в интернет-помойке, а потом их дописывать и подгонять друг к другу - этому и учит тебя наш номер. Однако есть еще буржуйский метод: купить уже готовый движок под конкретные цели, а можно по пролетарским традициям его экспроприировать (слямзить). А для творческих буржуйских личностей имеются полноценные WEB-конструкторы Could Fusion и Front Page. Наш человек пока еще может бросить вызов мировой буржуазии и купить себе это дорогое удовольствие на пиратском диске по цене жевательной резинки.


Спецвыпуск Xakep, номер #028, стр. 028-014-3, Движковый FAQ

Движковый FAQ

Матушка Лень

Спецвыпуск Xakep, номер #028, стр. 028-014-3

Эти WEB-конструкторы - не просто набор готовых отлаженных движков на все случаи жизни. Все это имеет визуальный интерфейс, то есть скриптописание превращается в увлекательное визуальное программирование (по-нашему - рисование). Причем с настройками сервера тоже сильно париться не приходится. Пока "программист-скриптолог" занят "скриптописанием", скриптописалка настраивает сервер. Точнее сервер уже настроен. Такой конструктор состоит из нескольких готовых частей: сервера, визуального редактора проектов, набора готовых проектов на все случаи жизни (настоящий программист никогда не пишет все с нуля даже визуально, он предпочитает использовать готовые шаблоны), закачивалки проекта, управлялки проектом. То есть остается найти хостинг с поддержкой Could Fusion либо с поддержкой Front Page. Естественно, такой хостинг скорее всего будет платным.

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

Что такое переменные среды (окружения)?

Через эти переменные (environment variables) сервер передает своему CGI-скрипту разные важные параметры, необходимые или полезные для его работы. Через эти переменные CGI-скрипт может узнать, с какого сервера пользователь пришел, какой у него браузер, какая операционная система. То есть эти переменные могут использоваться для ведения статистики.

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

Ты хочешь, чтобы страничка была живой, то есть чтобы она обрабатывала информацию, полученную от пользователя? Это может быть сообщение на форум, новая картинка, новая статья, новая анкета на сервер знакомств, заказ в интернет-магазин, поисковый запрос. Чтобы соответствующий WEB-движок мог обработать такой запрос, нужно его сначала передать по протоколу HTTP. Такой запрос можно передать методом GET, через переменную окружения QUERY_STRING. Метод POST может передавать данные в поток ввода (STDIN) скрипта. Методы POST и GET определяются переменной окружения REQUEST_METHOD. А через переменную окружения HTTP_COOKIE передаются пользовательские настройки сервера (COOKIE), которые пользователь использовал в прошлом соединении.

Если ты собрался что-то передавать своему web-движку от пользователя, то разбирайся в переменных окружения: http://spravkaweb.h1.ru/pril.php?ss=1, подробнее о применении в CGI читай на: http://ucantake.narod.ru/l_cgi.htm#vars. Чтобы заточить готовый движок под свои нужды, тебе неминуемо придется иметь дело с переменными среды.


Спецвыпуск Xakep, номер #028, стр. 028-014-4, Движковый FAQ

Движковый FAQ

Матушка Лень

Спецвыпуск Xakep, номер #028, стр. 028-014-4

Переменные окружения доступны и в PHP, пример здесь: http://www.alesh.ru/issues/25, и в ASP http://www.ru-board.com/new/article.php?sid=52. Ну и в JSP есть способы доступа к переменным среды: http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-CGI-Variables.html

Что такое STDIN и STDOUT?

Standard Input и Standard Output - стандартные ввод и вывод приложения. Обычно у приложения, запущенного в Unix или в DOS, стандартный ввод (STDIN) с клавиатуры, а стандартный вывод (STDOUT) на дисплей. Однако мы можем перенаправить вывод одной программы на ввод другой программы ординарной или двойной стрелочкой (">" либо ">>") как в DOS, так и в UNIX. Похожая история с Windows.

В WEB-программировании потоки STDIN и STDOUT часто используются, чтобы принять инфу от пользователя или чтобы передать инфу пользователю. Подробнее, как это делается на Perl, можешь глянуть здесь: http://perl.artil.ru/docs/lama/g6.shtml. А вот пример перенаправления чтения файла в стандартный выходной поток (STDOUT) на http://virusdem.narod.ru/webdesign/php4/Chapter7/1.htm#g, чтобы увидеть содержимое файла в окне браузера.

В большинстве программ на любом языке программирования потоки STDIN и STDOUT присутствуют не явно, например, в виде функций read(), write(), print() или похожих.

Что такое сессия?

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

Идея сессии в присвоении каждому пользователю уникального номера, благодаря этому номеру сервер хранит память о каждом пользователе. Целый трактат об этом удобном для WEB-программистов механизме читай на: http://php.spb.ru/php/session.html

Что такое регулярные выражения?

Это выражения для работы с текстовыми строками. Ты хочешь сделать свою страничку интеллектуальной? То есть нужно, чтобы она понимала и анализировала инфу; это значит, что движок должен обрабатывать строки данных: конвертировать их, преобразовывать, сортировать, искать слова, фразы, данные.

Регулярные выражения многие помнят еще с языка командной строки MSDOS. Где, например, можно было неизвестный символ заменить вопросом, а группу неизвестных символов звездочкой. В языках запросов баз данных, таких как SQL, без регулярных выражений уже просто не обойтись. Ну и, конечно, верх совершенства работы со строками - это Perl. Возможности со времен MSDOS сильно расширились, теперь, чтобы найти предложение с тремя трехзначными словами с одной маленькой и одной большой буквой "у", легко можно записать в одну строчку.


Спецвыпуск Xakep, номер #028, стр. 028-014-5, Движковый FAQ

Движковый FAQ

Матушка Лень

Спецвыпуск Xakep, номер #028, стр. 028-014-5

Подробнее о регулярных выражениях Perl читай здесь: http://www.citforum.ru/internet/perl_tut/re.shtml. И вообще о пользе регулярных выражений: http://ods.com.ua/koi/unix/regular.html.

Что такое SSI?

Server Side Include - включения на стороне сервера. Это включения (вставки) в HTML код, лежащий на сервере. Действуют они также как вставки-скрипты в технологиях ASP, PHP и JSP. Когда сервер загружает HTML-документ с такими вставками, скрипты обрабатываются, и вместо них подставляются дополнительные куски HTML кода (текст, картинки, таблички, данные). В результате можно, имея один HTML-шаблон дизайна странички, подгружать туда разные данные. Пользователь при этом будет получать разные HTML странички, склеенные из результатов работы вставок и исходного шаблона HTML.

Технологии ASP, PHP, JSP дают большие возможности, но и геморроя с ними тоже много. А SSI - это ограниченный набор простых полезных функций, с которыми по силам разобраться новичку или человеку, у которого не очень много времени и денег. С помощью SSI можно запустить нужную программу на сервере, организовать ее вывод в HTML, можно работать с переменными окружения, использовать COOKIE и шаблоны HTML. По сути SSI - это готовый к использованию движок, подробности и примеры найдешь на: http://www.citforum.ru/internet/html/ssi_exmpl.shtml и http://www.citforum.ru/internet/html/ssi.shtml.

Кто такой GREP?

Надеюсь, ты уже понял, что практически любая серверная технология, как правило, умеет по запросу из браузера запускать любое приложение на сервере, передавать ему данные, параметры и потом возвращать результаты в браузер в виде HTML странички. Причем во многих технологиях это сделать достаточно просто (если правильно настроены права на запуск приложений). То есть ты можешь намутить WEB-интерфейс для управления: сервером, принтером, маршрутизатором, стартом межконтинентальных ракет, движением марсоходов, вибраторов, летающих тарелок и вообще чем угодно, что подключено к компу, с интернетом и WEB-сервером с поддержкой CGI, Perl, SSI, ASP, JSP, PHP или другой похожей технологии.

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

Один из ярких примеров GREP - самая популярная искалка для большинства клонов UNIX. Есть возможность задания регулярными выражениями шаблонов поиска. Те, кто работает не с графическими оболочками, а с нормальными текстовыми консолями UNIX, очень хорошо знают GREP. Его используют для поиска в директориях, для поиска в файлах, для поиска в исходниках, в оперативной памяти, вообще где угодно. Он не только ищет, но и неплохо сортирует. Например, чтобы слямзить пароль с клавиатурного шпиона, его еще надо найти, с GREP это дело нескольких секунд. Вот подробное описание искалки GREP: http://delph.sitc.ru/man/MAN/GREP.htm. А тут простенький пример использования GREP и PHP в качестве поискового двигла: http://www.bothrops.com/training/php/section.php?lesson=5§ion=3


Спецвыпуск Xakep, номер #028, стр. 028-014-6, Движковый FAQ

Движковый FAQ

Матушка Лень

Спецвыпуск Xakep, номер #028, стр. 028-014-6

Что такое база данных?

Ответ очевиден - это готовый движок. Конечно, каждый может написать скрипт, который будет рыться в текстовых файлах на сервере. Любая автоматическая страничка, где разные куски подгружаются в готовый шаблон, имеет свойства базы данных. Однако существует масса специальных движков для баз данных, почему? Да потому что скрипт, учитывающий все требования к базе данных, будет мегапрограммой, по размерам сравнимой с операционной системой. А требования такие: обрабатывать запросы десятков, тысяч и даже миллионов пользователей одновременно, быть распределенной по нескольким серверам, дублироваться, быстро выдавать ответы на запросы, распределять права для различных пользователей, защищать файлы от одновременной записи несколькими пользователями, иметь язык запросов. Вот и получается, что базу данных приходится еще дополнительно программировать для того чтобы настроить все ее свойства. Но не пугайся, прикрутить движок базы данных к WEB не сложнее, чем прикрутить к нему любую другую программу, запущенную на сервере. Для начала можешь почитать несколько способов здесь: http://emanual.ru/download/175.html


Спецвыпуск Xakep, номер #028, стр. 028-020-1, DROP THE BASE! ADO И БАЗЫ БАННЫХ

DROP THE BASE! ADO И БАЗЫ БАННЫХ

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-020-1

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

ПОЧЕМУ ASP?

ASP использует для доступа к данным объекты ADO (ActiveX Data Object). ADO можно юзать для доступа к таблицам Excel, базам данных Access или текстовым файлам. Вообще, любой источник данных, который имеет ODBC драйвер и может быть использован в качестве ODBC базы данных в винде, также можно юзать для доступа через ADO. Общая логика работы с ADO такова: устанавливаем соединение с источником данных, считываем данные, выводим их в html-файл, закрываем соединение. И на каждом шаге работаем с объектами: создаем, наполняем, уничтожаем. И самое главное, при изменении источников данных не надо полностью переписывать код, вполне достаточно изменить строку, где описывается соединение.

КОННЕКТИМСЯ

ADO имеет простую объектную модель. И выше всех у нас тусует объект Connection. Создается он так:

Set soska = Server.CreateObject("ADODB.Connection").

Создать Connection еще не значит открыть это самое соединение. Сперва нужно намутить описалово соединения, для чего юзают свойство ConnectionString. Тут сидит вся инфа о Connection. Например, строка:

connection.ConnectionString = "Provider=SQLOLEDB;Source=local;UID=sa;PWD=;Database=pubs"

описывает соединение с SQL сервантом. Вместо connection, естественно, надо писать имя экземпляра объекта, который был создан (soska - в примере выше).

Описав соединение, его можно открывать:

connection.Open.

В общем случае синтаксис имеет вид:

connection.Open ConnectionString, UserID, Password, OpenOptions.

Все параметры можно явно не указывать и положить на них с высокой горы (типа - идите вы все по дефолту!). Но в таком виде код будет компактнее: не надо отдельной строкой указывать строку соединения. OpenOptions задает, в каком режиме будет открыто соединение. Этот режим описывают константы ConnectModeEnum:

adModeUnknown - по умолчанию;

adModeRead - соединение только для чтения;

adModeWrite - соединение только для записи;

adModeReadWrite - соединение для записи и чтения;

adModeShareDenyRead - запрещает открытие соединений на чтение, пока текущее соединение открыто;

adModeShareDenyWrite - запрещает открытие соединений на запись, пока текущее соединение открыто;

adModeShareExclusive - запрещает открытие соединений, пока текущее соединение открыто;

adModeShareDenyNone - запрещает открытие любых соединений, пока текущее соединение открыто.

То же самое можно зафигачить через свойство Mode объекта Connection еще до открытия соединения:

connection.Mode = adModeShareExclusive

ЭКОНОМЬ СЕРВАКИ!

Знаешь, как контачат ADO и IIS с соединениями? ADO видит соединение с базой как набор свойств, собранных в строку соединения. IIS создает пул соединений, куда складирует разные connection'ы, каждый из которых можно заюзать сколько угодно раз. Когда приложение запрашивает соединение, IIS проверяет, а не тусует ли уже в пуле свободный connection с такой же строкой соединения. Если нужное соединение удается найти, оно используется, если нет - создается новое. Таким образом, если в пуле удается нарыть открытое соединение с нужными свойствами, хитрый IIS просто возвращает линку на него и ни хрена не открывает. Так что пул ускоряет процесс установки соединений, ведь обычно юзают один источник данных и 2-3 типа доступа с разными паролями. Именно из-за организации пула запись объекта Connection в переменную Session замедляет работу сервака. Поэтому никогда так не делай.


Спецвыпуск Xakep, номер #028, стр. 028-020-2, DROP THE BASE! ADO И БАЗЫ БАННЫХ

DROP THE BASE! ADO И БАЗЫ БАННЫХ

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-020-2

СЛЕДИ ЗА ВРЕМЕНЕМ!

Какими еще свойствами и методами Connection'а ты можешь воспользоваться? Начнем со свойств.

Самое простое - ConnectionTimeout. Оно определяет, на какое время устанавливается соединение с серваком. По истечении этого времени соединение рвется и генерируется мессага об ошибке. По умолчанию значение свойства ConnectionTimeout равно 15 секундам.

CursorLocation - позволяет установить курсор в нужное место (нет, не в то :)) на сервере (по умолчанию) или на клиенте. Эта фишка определяет поведение объекта Recordset. Установка курсора на клиенте позволяет вырубить на фиг объект Recordset и открывать соединение совсем ненадолго: данные лопатятся уже после закрытия соединения.

DefaultDatabase - ставит дефолтную базу данных для коннекта.

Provider - это, кто бы мог подумать, имя провайдера для соединения. По умолчанию тут торчит пров MSDASQL (Microsoft OLE DB Provider for ODBC).

Есть еще несколько свойств, узнать о которых ты можешь, скачав ADO Help с сайта Micro$oft.

ВЫПОЛНИТЬ!

Теперь потрем о методах Connection. С Open и Close ты уже познакомился. Еще один важный метод - Execute. Он позволяет выполнять определенные действия с базами данных:

connection.Execute CommandText, RecordsAffected, Options

или

Set recordset = connection.Execute (CommandText, RecordsAffected, Options).

Эти синтаксисы отличаются тем, что в первом объект Recordset не нужен (Скрипач не нужен!). Например, юзается запрос на удаление или модификацию записей. Во втором случае, скорее, идет запрос на выборку данных. Курсор объекта Recordset, заполненного таким образом, разрешает только считывание и прокрутку вперед. Аргумент CommandText содержит строку SQL запроса, RecordsAffected - переменная, которая возвращает число записей, обработанных за время выполнения метода Execute. Указывать ее необязательно. А вот аргумент Options забывать нельзя. Правильно указанная константа в аргументе Options способна резко срезать тормоззза при выполнении команды. Options - одна из констант CommandTypeEnum, по которым определяется тип выполняемого оператора или запроса, а также нужно ли возвращать объект Recordset.

adCmdText - указывает, что провайдер должен интерпретировать CommandText SQL запрос;


Спецвыпуск Xakep, номер #028, стр. 028-020-3, DROP THE BASE! ADO И БАЗЫ БАННЫХ

DROP THE BASE! ADO И БАЗЫ БАННЫХ

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-020-3

adCmdTable - указывает, что ADO должен сгенерить SQL запрос, который возвращает все строки из таблицы, обозначенной в CommandText;

adCmdTableDirect - указывает, что провайдер должен возвратить все строки из таблицы, обозначенной в CommandText;

adCmdStoredProc - указывает, что провайдер должен интерпретировать CommandText как хранимую процедуру;

AdCmdUnknown - указывает на то, что тип команды, описанной в строке CommandText, неизвестен.

ПОЛУЧАЕМ ДАННЫЕ

Немного выше мы зацепили еще один объект - Recordset. Юзать его легко, если знать, что он собой представляет. Recordset - это таблица значений, разделенных на строки и столбцы. Значения в этой таблице могут быть взяты из разных таблиц в базе данных. И даже быть результатом вычисления нескольких полей разных таблиц. Объект Recordset можно сортировать, просматривать в поисках нужных данных, преобразовывать в строки или массивы и даже записывать на диск и считывать как объекты. Как же с ним работать?

Сначала его нужно создать:

Set Pomoi = Server.CreateObject("ADODB.Recordset")

Вот, мы замутили объект Recordset с именем Pomoi. Как теперь его забить данными по самое не балуйся? Легко!

Pomoi.Open CommandText, Connection/ConnectionString, CursorType, LockType, Options

Можешь выкинуть все аргументы в помойку, но для увеличения скорости работы лучше потрудиться и заполнить все, что движется. Например, если не указана строка соединения, то сервак начинает обсасывать строку CommandText, чтобы выяснить, какое из открытых соединений можно заюзать для заполнения объекта Recordset. Если аргумент Options (которые принимает точно такие же значения, что и аргумент Options метода Connection.Execute) не указан, то сервант опять начинает тупить над строкой CommandText и пытается определить, какой тип команды она содержит. Итак, ты уже воткнул, что все аргументы нужно указать. ADO очень гибкая технология и может очень быстро работать, но дефолтные значения для необязательных аргументов - не всегда самое шустрое решение.

ДЛИННЫЙ КОД - ЛУЧШЕ!

Итак, аргумент CommandText может содержать динамический SQL оператор, имя таблицы или представления или имя хранимой процедуры. Чаще всего используют SQL операторы, благодаря их простоте и наглядности. Юзать оператор типа "Select * from Имя_Таблицы Where Условия" фиговое лентяйское решение. И вот почему:

1) Явно задавай все имена полей, даже если тебе нужны все поля таблицы. При анализе операторов типа Select * сервер сначала запрашивает все имена полей, а если они явно заданы, то он не будет грузить мусор.

2) Всегда выбирай только те данные, которые тебе нужны. Памяти на сервере всегда не хватает, особенно когда таких деятелей, как ты, много.

Аргумент Connection/ConnectionString содержит ссылку на открытый объект Connection или строку соединения. В последнем случае создание объекта Connection явно не требуется. Общее правило такое: если для генерации страницы используется больше одного обращения к базе данных - создавай объект Connection и юзай ссылку на него.

КУРСОР ТЕБЕ В РЕБРО!


Спецвыпуск Xakep, номер #028, стр. 028-020-4, DROP THE BASE! ADO И БАЗЫ БАННЫХ

DROP THE BASE! ADO И БАЗЫ БАННЫХ

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-020-4

Теперь один из самых тонких вопросов - использование курсора. Итак, значение аргумента CursorType определяется константой adCursorTypeEnum:

adOpenForwardOnly - значение по умолчанию. Возвращает курсор только для чтения с прокруткой только вперед;

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

adOpenDynamic - динамический курсор, самый прожорливый до ресурсов из всего набора. Он в точности повторяет символьный, но позволяет видеть записи, вводимые другими юзерами;

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

Один из самых распространенных багов - открытие объекта Recordset с курсором по умолчанию (adOpenForwardOnly) и попытка последующего его обновления. В результате лови error и матюки.

БЛОКИРОВКА

Следующий аргумент - LockType. Он сообщает ADO, как блокировать базу. Блокировка важна. Например, представь, что два дятла одновременно дернули одну и ту же запись на обновление/запись данных. Фигня получится! Константы такие:

adLockReadOnly - значение по умолчанию. Доступ только для чтения;

adLockPessimistic - пессимистическая блокировка, наиболее жесткая. Блокированные записи остаются недоступными для других пользователей приложения до тех пор, пока объект Recordset не закроется. Устанавливается в момент доставки записи серваком. Исключает получение юзерами устаревших данных;

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

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

ВЫВОДИМ

Ну вот, Recordset открыт, заполнен. Как же вывести данные?

Для вывода данных юзают два метода объекта Recordset: MoveNext - для перемещения к следующей записи, и MovePrevious - для перемещения к предыдущей. Как узнать, что Recordset не пустой? Для этого есть свойство RecordCount, которое возвращает количество записей в Recordset'е. Но можно сделать по-другому: свойства Recordset.BOF (которое указывает на начало записей) и Recordset.EOF (которое указывает на конец записей) в пустом Recordset'е оба имеют значение true. Итак, код:

pomoi.Open "SELECT NAME FROM TRASHCAN"

if pomoi.EOF and pomoi.BOF then

Response.Write("Не найдено ни одной записи")

else

do while not pomoi.EOF

Response.Write (pomoi("ZAPAH") & "<br>")

pomoi.MoveNext

loop

end if

pomoi.Close

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

Из навигационных методов есть еще Recordset.MoveFirst и Recordset.MoveLast, которые пинают курсор к первой и последней записям.


Спецвыпуск Xakep, номер #028, стр. 028-020-5, DROP THE BASE! ADO И БАЗЫ БАННЫХ

DROP THE BASE! ADO И БАЗЫ БАННЫХ

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-020-5

Что еще можно делать с объектом Recordset?

1) искать, фильтровать и сортировать записи (есть методы Recordset.Sort и Recordset.Find). Но лучше сортировать и фильтровать мусор еще на стадии открытия объекта Recordset;

2) Обновлять и добавлять записи, используя методы Recordset.AddNew и Recordset.Update.

ДЛЯ СКОРОСТИ

Есть еще один способ выдрать данные через ADO: используя объект Command. Зачем нужна еще одна фиговина, если можно выгрести данные и так? А для выполнения хранимых процедур с входными и выходными параметрами. Без подробностей, хранимая процедура - это откомпиленный SQL-запрос, который валяется на сервере. Процедура имеет входные и выходные параметры и выполняется сильно шустрее обычного запроса. Итак, замутим объект:

Set cmd = Server.CreateObject("ADODB.Command").

Определяем активное соединение (к этому времени оно должно быть открыто):

Set cmd.ActiveConnection = cnn

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

Set param = cmd.CreateParameter (Name, Type, Direction, Size, Value)

Все аргументы - необязательные, но для любопытных: аргумент Name - задает имя, аргумент Size - размер, аргумент Value - значение, а Type - тип параметра (ниже я дал только самые распространенные):

adBigInt - 8-байтовое целое;

adBinary - поле фиксированной длины для записи двоичных данных;

adBoolean - булев тип. Значение True или False (1 или 0);

adChar - строковая переменная до 255 символов длиной;

adCurrency - поле валюты. 8 байт, 4 знака после запятой;

adDate - поле даты. 8 байт. Содержит количество дней, прошедших с 30 декабря 1899 г;

adDBDate - дата в формате (yyyymmdd);

adDBTime - время в формате (hhmmss);

adDBTimeStamp - поле даты и времени в формате (yyyymmddhhmmss) плюс доли секунды с точностью до одной миллиардной (во как!);

adDecimal - численное значение с фиксированной точностью и размером;

adDouble - 8-байтовое действительное значение с плавающей запятой;

adGUID - глобальный идентификатор GUID;

adInteger - 4-байтовое целое;

adSingle - действительное значение с плавающей запятой.

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

adParamUnknown - направление неизвестно (лучше не использовать);

adParamInput - входной параметр (значение по умолчанию);

adParamOutput - выходной параметр;

adParamInputOutput - одновременно входной и выходной параметры;

adParamReturnValue - возвращаемое значение.

Перед выполнением надо задать тип выполняемой команды:

cmd.CommandType = adCmdStoredProc

и имя выполняемой хранимой процедуры:

cmd.CommandText = Имя_Хранимой_Процедуры

И, наконец, выполняем команду:

Set recordset = command.Execute( RecordsAffected, Parameters, Options )

или

command.Execute RecordsAffected, Parameters, Options

И опять все аргументы не обязательны.

КОНЧАЙ РАБОТУ!

Когда закрывается соединение? В нескольких случаях:

1) если прямо убить соединение методом Close;

2) если ссылке на объект Connection присвоить значение nothing;


Спецвыпуск Xakep, номер #028, стр. 028-020-6, DROP THE BASE! ADO И БАЗЫ БАННЫХ

DROP THE BASE! ADO И БАЗЫ БАННЫХ

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-020-6

3) если завершается выполнение страницы, на которой был создан объект Connection;

4) если переменная Session, в которую был записан объект Connection, уничтожается по времени;

5) если вырубилось приложение, в котором был создан объект Connection.

Только два первых способа не жрут дополнительные ресурсы сервера для закрытия соединения, поэтому не забывай после окончания закрыть соединение через Connection.Close. А заодно замочи nothing'ом ссылкам на все объекты (Recordset, Command), которые ты насоздавал во время работы.

И три последних замечания: Во-первых, не используй объект Recordset для обновления базы данных. При выполнении метода Recordset.Open задействуются дополнительные ресурсы сервера. Во-вторых, для разных объектов Recordset и Command можно (и нужно) юзать одно соединение с базой данных (если дело происходит в одной и той же БД). В-третьих, всегда указывай все необязательные аргументы. Не ленись работать с клавиатурой! Длинный код работает быстрее.

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


Спецвыпуск Xakep, номер #028, стр. 028-024-1, ASP.NET ИЛИ ВСЕ-ТАКИ ЕСТЬ? - Что ждать от M$?

ASP.NET ИЛИ ВСЕ-ТАКИ ЕСТЬ? - Что ждать от M$?

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-024-1

Шубись, народ! В середине 2003 года Micro$oft собирается презентовать миру новую серверную ось - Windows.NET. Эта оса слеплена на ядре WindowsXP. Но только WindowsXP чего-то уже год как глючит на наших компах, а в серверной операционке продолжается отлов багов... Ну, да не суть. Ведь с дот нетом на горизонте замаячили кое-какие интересные фичи для веб-строительства. Что же даст web-кодеру ASP.NET?

Во-первых, поддержку разных языков: VisualBasic.NET и C# (читается как си-шарп). И если VisualBasic.NET просто новая версия (пусть и существенно переколбашенная) задолбавшего всех глюкозавра VB, то C# - совершенно новый язык. И кодить на нем можно не только web-приложения, но и обычные проги для Windows (правда, с небольшими оговорками). По синтаксису и возможностям C# очень близок к C++, который так любят квел программеры.

Во-вторых, ASP.NET даст нам web-формы с новыми возможностями проверки кода на сервере.

В-третьих, у нас будет новая модель доступа к данным - ADO.NET. Полная интеграция с XML и возможность создания web-сервисов. Ну а теперь обо всем по порядку.

НОВЫЕ ЯЗЫКИ

Сначала глянем, что там случилось со старым добрым Васиком, попрыгаем на недостатках VB Scripting Edition по сравнению с другими (старыми или новыми) языками. Первая и самая большая лажа - отсутствие поддержки типов переменных. Все переменные имеют один тип - Variant. Для ламаботов - это гуд: не надо следить за типом переменной, в одну и ту же переменную можно запихивать разные данные. А уж если не использовать команду option explicit, то вообще не жизнь, а сказка: переменные не надо объявлять - они создаются при первом упоминании.

Но расплата за бакланизм суровая: При работе с SQL серваком лезут непонятные ошибки - это ты пытаешься в поле int засунуть строковую переменную. Сервант тормозит, как ржавый якорь, - это под все переменные бухается одинаковое количество места, и под логическую (0 или 1) и под строковую. Ограниченные возможности самого языка: например, поддержка регулярных выражений осуществляется с помощью COM объекта. А теперь, юмор от M$, в VBScript есть поддержка классов (ООП, елки-палки!), но нет поддержки наследования :). И, наконец, самая большая лажа: asp-код и html-код свалены в один файл. Если хочешь более или менее структурировать свой сайт, то приходится извращаться. Например, на xakep.ru заюзали сложную систему инклудов (около 30 файлов и 4 уровня вложенности).

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

Новые языки от M$ C# и VB.NET пашут более грамотно. И все благодаря .NET Framework. Как же будет работать код в этой среде? При компиляции кода в .NET Framework код, написанный на языке программирования, колбасится в MSIL (Microsoft Intermediate Language) - промежуточный псевдокод. Он содержит набор инструкций, не зависимых от конкретного процессора. То есть, можно сказать, что MSIL - это переносимый ассемблер. А исполняется он в CLR (Common Runtime Language) - независящая от языка среда исполнения. CLR транслирует промежуточный код в исполняемый непосредственно при запуске приложения - JIT (just in time компиляция). В общем, не грузись. Главное, что при открытии паги, написанной на ASP.NET, в первый раз происходит компиляция кода. Причем, чтобы сэкономить время, компилируется только та часть кода, которая будет непосредственно заюзана в генерации страницы. Откомпиленный код валяется в кэше и при необходимости может быть оттуда повторно вызван. Но можно откомпилировать код и в принудительном порядке. В любом случае, такой подход обставит в производительности и с классическими asp-приложениями (выполняется уже откомпилированный код), и с CGI-приложениями (не надо тратить ресурсы на создание процесса).


Спецвыпуск Xakep, номер #028, стр. 028-024-2, ASP.NET ИЛИ ВСЕ-ТАКИ ЕСТЬ? - Что ждать от M$?

ASP.NET ИЛИ ВСЕ-ТАКИ ЕСТЬ? - Что ждать от M$?

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-024-2

В ASP.NET исполняемый код и html-код разделены - они находятся в двух разных файлах. Файл представления (там, где лежит html-код) имеет расширение aspx. В нем на первой строке обязательно присутствует ссылка на файл с исполняемым кодом: <%@ Page Language="vb" Codebehind="WebForm1.aspx.vb" %>.

Оба рекомендованных языка (C# и VB.NET) поддерживают принципы объектно-ориентированного программирования, оба они имеют развитую систему типов переменных. Но работать все же удобней на C#. Уже сейчас существует поддержка .NET Framework под W2Kserver, и многие программеры уже приступили к разработке ASP.NET приложений. Если судить по количеству мессаг на форумах об ASP.NET, то их количество по теме "C#" превышает количество сообщений по теме "VB.NET" в 10 раз. Так что тебе решать, на чем ты будешь кодить в будущем.

ADO.NET

Соединения с источником данных во многих web-прогах - самое тормозззное место. И золотым правилом здесь всегда было: открывай соединение как можно позже, а закрывай его как можно раньше. Но в классической модели ADO получалось как раз наоборот: закрытие соединения происходит только после обработки всех полученных данных. Логика работы ADO такова: устанавливаем соединение с источником данных, считываем данные, выводим их в html-файл, закрываем соединение.

В новой версии ADO - в ADO.NET - почти все стало по-другому. Сначала устанавливается соединение. Причем классы (не забывай про ООП) для работы с ADO.NET делятся на классы для работы с ODBC, для работы с OLE DB и для работы с Microsoft SQL Server. Кстати, раньше отдельной поддержки MSSQL Server не было - в ADO поддержка MSSQL Server была реализована через OLE DB. Данные считываются в промежуточный объект DataSet (аналог набора записей в ADO - объект Recordset). Объект DataAdapter (SqlDataAdapter для MSSQL Server) играет роль посредника между объектом DataSet и источником данных в операциях выборки и сохранения данных. После заполнения объекта DataSet с помощью метода Fill объекта DataAdapter соединение можно закрывать. Все операции по выводу данных клиенту можно осуществлять после разрыва соединения. При доступе к данным, когда не требуется производить изменения записей, можно использовать еще один объект ADO.NET - DataReader. Можно сказать, что DataSet - это аналог статического курсора в ADO, а DataReader - аналог курсора только для чтения и прокрутки только вперед. Также в ADO.NET есть аналог объекта Command.


Спецвыпуск Xakep, номер #028, стр. 028-024-3, ASP.NET ИЛИ ВСЕ-ТАКИ ЕСТЬ? - Что ждать от M$?

ASP.NET ИЛИ ВСЕ-ТАКИ ЕСТЬ? - Что ждать от M$?

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-024-3

ФОРМЫ

Головная боль любого web-кодера - проверка данных, которые юзер пихает в форму. В целях безопасности такая проверка всегда мутится на стороне сервера. Исторически сложились две схемы:

1) ввод данных делается на первой странице, проверка на второй, и, если данные введены правильно, юзер попадает на третью страницу;

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

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

В ASP.NET Micro$oft позаботилась о разработчике (ура!): в теге <form> появился новый атрибут runat со значением server. Так обозначаются серверные элементы управления. Теперь, например, проверка корректности введенного e-mail'а займет одну строку:

<asp:RegularExpressionValidator id="comp1" runat="server" ErrorMessage="Ты что, тупой?!!!" ControlToValidate="txtEmail" ValidationExpression="(\n|.)*\@(\n|.)*\.(\n|.)*"/>

В случае, если юзер введет какую-нибудь туфту, он получит мессагу: "Ты что, тупой?!!"

Есть еще элементы управления:

* RequiredFielValidator - для проверки, заполнены ли поля;

* RangeValidator - для проверки, располагается ли значение в пределах заданных границ;

* CompareValidator - для сравнения двух полей формы;

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

ВМЕСТО ЗАКЛЮЧЕНИЯ

Вот ты и познакомился с ASP.NET. Эта очень перспективная фича. Так как ее суппортит M$ со всеми вытекающими, у нее, наверняка, есть будущее. Она нацелена не на создание ламовских домашних паг о любимом попугае (дятле, ослике, нужное зачеркнуть), а на разработку мощных web-приложений (в том числе b2b). M$ попыталась создать продукт, способный задвинуть в плане производительности серьезные UNIX сервера, использующие J2EE. И, похоже, ей это удалось.

Станет ли тебе легче жить, если ты решил изучить ASP.NET? Конечно, нет! Но если ты решил стать крутым web-девелопером, то ASP.NET для тебя. И хаксорам дремать тоже не рекомендуется - дырок будет море - это же M$, мэн!


Спецвыпуск Xakep, номер #028, стр. 028-026-1, ASCII символы - в современном веб-дизайне

ASCII символы - в современном веб-дизайне

Спецвыпуск Xakep, номер #028, стр. 028-026-1

Кодировка ASCII (American Standart Code for Information Interchange) появилась много лет назад. Всего она насчитывает 256 символов, первые 128 отданы под буквы латинского алфавита и различные служебные символы. Вот об этих символах и о том, как их можно использовать, мы и поговорим. На заре развития персональных компьютеров текст был практически единственно возможным видом отображения информации на экранах мониторов. Необходимость в наличии хоть каких-то графических элементов заставила пользователей создавать их с помощью обычных текстовых символов. То есть если учесть, что каждая буква или символ латинского алфавита имеет различную плотность (соотношения белого и черного), то выходит, что нужное изображение можно собрать как мозаику из разных символов. Такие картинки можно было сравнивать с работами художников-абстракционистов - вблизи ничего кроме крупных грубых мазков, но если отойти подальше, то можно увидеть какой-то образ. Были также более простые и действенные методы: использовались только специальные символы, реже буквы, с их помощью можно было организовать контур практически любой сложности и создать незатейливый фон. Такие «художества» часто встречались в качестве названий BBS, фирменных значков разработчиков ПО и хакерских команд или подписей пользователей ФИДО. Этот вид деятельности назывался ASCII-Art. Причем, как ни странно, история этого направления компьютерного искусства началась за много лет до появления компьютера. Пора расцвета ASCII-Art приходилась на эпоху печатных машинок.

Наряду с этим символы из ASCII служили для примитивного форматирования текста, выделения заголовков, подчеркивания, создания рамок и простых таблиц. Прошли годы, появились Интернет и MS Windows, скоростные каналы и мощные инструменты для работы с графикой. Сеть наполнилась огромным количеством доморощенных домашних страничек и красивых корпоративных сайтов. Графика стала доступной, графики стало много, это так просто! Можно сказать, что время текстового дизайна прошло. Но это не совсем так. Начнем с того, что Интернет был рожден как сеть для передачи и обмена данных, и даже на сегодняшний день большую часть информации пользователь получает с помощью текста. Идеология передачи текстовой информации в некоторых случаях делает лишним использование графики вообще. Итак, хороший веб-дизайн - это, в первую очередь, удобный дизайн! К сожалению, не все разработчики это понимают. Большинство сайтов делается по принципу чем больше картинок, тем красивее. Но это далеко не так. Очень много на эту тему пишет известный Интернет-деятель, руководитель компании «Nielsen Norman Group» Якоб Нильсен. Его сайт www.useit.com является ярким примером вполне удачного функционального текстового дизайна. Хотя я сам не приветствую полное торжество текста над графикой. И все же хороший текстовый дизайн обладает некоторым очарованием и шармом, красота в простоте! Для настоящих профессионалов не так важны инструменты, они добиваются превосходного результата любыми средствами. Итак, полностью или частично текстовый дизайн подразумевает использование символов из таблицы ASCII вместо некоторых графических элементов. В чем преимущество такого подхода? Во-первых, текст намного меньше занимает места, один текстовый символ это 2 байта, в то время как, например, нарисованная стрелочка в формате GIF может отнимать до 1 Кб. В сумме общий объем увеличивается, растет трафик и падает скорость загрузки сайта. Во-вторых, текстовые символы легче создавать, достаточно набрать его на клавиатуре, и он готов! Конечно, здесь есть и свои отрицательные стороны. Несмотря на современные средства CSS, которые предоставляют богатые возможности по работе с текстом, создавая сайт на своем компьютере, дизайнер не может быть окончательно уверен, что каждый конечный пользователь увидит его детище именно так, как он его задумал. Виной тому могут быть такие факторы, как отсутствие на компьютере пользователя какого-либо шрифта, измененный им размер шрифта в своей операционной системе и т.д. Все это может исказить изначально сбалансированный и продуманный дизайн.


Спецвыпуск Xakep, номер #028, стр. 028-026-2, ASCII символы - в современном веб-дизайне

ASCII символы - в современном веб-дизайне

Спецвыпуск Xakep, номер #028, стр. 028-026-2

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

«.,:,-» - знаки препинания;

«/\» - прямой и обратный слэш;

«|» - прямая вертикальная линия;

«+» - знак суммы;

«{}, [],(),<>» - разнообразные скобки;

«^» - знак степени;

«@» - знак at.

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

[О КОМПАНИИ] - [УСЛУГИ] - [КОНТАКТЫ]

{ О КОМПАНИИ } { УСЛУГИ } { КОНТАКТЫ }

О КОМПАНИИ / УСЛУГИ / КОНТАКТЫ

О КОМПАНИИ - УСЛУГИ - КОНТАКТЫ

О КОМПАНИИ | УСЛУГИ | КОНТАКТЫ

О КОМПАНИИ :: УСЛУГИ :: КОНТАКТЫ

За реальным примером далеко ходить не нужно - сайт Microsoft.

Не менее востребованным и нужным является символ «>», своим видом он в большинстве случаем может отлично заменять различные стрелочки и указатели. Его удачно используют для ссылок, которые нужно выделить, или в тех случаях, когда требуется более явно показать переход на другую страницу:

Далее >>

Подробнее ->

>> Интересно

Аналогом являются кавычки - французские елочки «». С подобной целью зачастую возле ссылок ставят знак «^», как правило, он показывает возврат на уровень выше в иерархической системе сайта или просто прокрутку страницы вверх. Для примера можно посмотреть один из разделов сайта известной студии дизайна SEGURA inc. (http://www.segura-inc.com). Намного реже дизайнеры прибегают к подчеркиванию линиями, образованными дефисами или знаками минуса:

«-------------------------------------------------»

Как правило, их предпочитают делать в качестве графических файлов GIF.

Но давай отвлечемся от утилитарной роли ASCII символов в веб-дизайне и обратимся к сетевому неформальному искусству. Мода, как известно циклична. Многие творческие люди часто обращаются к прошлому в поисках новых образов. Не исключение и веб-дизайнеры. Уже несколько лет существует тенденция использования различных текстовых специальных символов в графических композициях. Самые модные и актуальные сетевые дизайнеры используют в своих «альтернативных» творениях такие символы, как «/,*,+,_,&,@», причем смысловой нагрузки они чаще всего не несут никакой, просто их образы находят свежими и современными. Стильное звучание этим значкам также придает их принадлежность в сознании многих людей к такому культурному явлению, как «киберпанк» - черный экран, командная строка, беспорядочный набор символов и цифр, тайны проникновения в недра сети, культ хакерства, электронный андеграунд! Например, звездочка «*» в свое время уже стала чуть ли не обязательном атрибутом модного дизайна, причем я не могу объяснить столь высокую популярность этого элемента, думаю, он привлекает своей симметрией и одновременной сложностью и простотой форм. Звездочки используют и в качестве фона, и как основу всей композиции.


Спецвыпуск Xakep, номер #028, стр. 028-026-3, ASCII символы - в современном веб-дизайне

ASCII символы - в современном веб-дизайне

Спецвыпуск Xakep, номер #028, стр. 028-026-3

Точно так же в свое время был бум фигурных скобок «}». Интернет просто пестрил веб-сайтами с этими значками. Их использовали в качестве акцентирующего, объединяющего элемента. Крупные красивые скобки венчали собой навигационные меню и целые абзацы текста. Другой пример - прямой слэш «/». Этот символ сам по себе несет в себе идеологию иерархии, им отделяют поддиректорию от директории, с его помощью указывают путь. Неудивительно, что он приобрел более широкий смысл в дизайне.

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


Спецвыпуск Xakep, номер #028, стр. 028-028-1, БАБЛОС В ЦИФРЕ - cистемы электронных платежей

БАБЛОС В ЦИФРЕ - cистемы электронных платежей

ХрымZ (hrimz@xyligan.ru)

Спецвыпуск Xakep, номер #028, стр. 028-028-1

Шалом, Бруда! Вот мы и опять в эфире. Сейчас я поведу свой горячий рассказ об одной относительно новой технологии, без которой тебе будет очень сложно поднимать грины со своего веб-полигона. Да, я говорю о системах электронных платежей. Нет, креды - это другой разговор, а сейчас я буду рассказывать о веб-деньгах. А конкретно о технологиях Webmoney и Яndex.Деньги и о том, как все это заюзать во благо твоего мега-проекта.

В общем вся эта бодяга зародилась в уже далеком 2000 году. Тогда на западе уже практиковалась такая фишка, как оплата порнухи виртуальными убитыми енотами, а в рунете об этом практически никто не знал. И вот появляется webmoney.ru, сначала юзеры с опаской разглядывали новинку, но потом интерес перевесил страх потерять деньги, и первооткрыватели начали покорно сливать Web Money Keeper себе на винт... Страх был вполне обоснован, так как все уже наелись краденными кредами :).

Что это такое?

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

Во-первых, можно перевести баблос с обыкновенной креды или счета в Сбербанке. Если такового не имеется, то просто найди на сайте ближайшую точку продажи карт и затарься. Благо, сейчас у веб-мани и Денег Яндекса такие точки есть практически во всех регионах страны. Активировать карту надо практически так же, как Интернет-карты или карты для мобил. Теперь поговорим об анонимности и безопасности. Они практически полные. То есть ты можешь ввести любую лабуду в поля регистрации или ввести реальную инфу, но поставить галочку "Не доступная другим участникам информация", и, кроме номера счета, о тебе ничего не будет известно. Хочу тебя расстроить, веб-мани еще не поимели, в смысле нормального рабочего способа взлома пока нет, но ничего, до следующего ледникового периода еще далеко :). Для скрытия твоих идентификатора, пароля, файлов кошельков и остального стаффа юзается 1024-битное шифрование, а это тебе не на boom.ru паги дефейсить :). Плюс при передаче данных о транзакции через сеть все пакеты бегут через SSL с 128 бит.

WebMoney Keeper

Итак, вбивай в Address www.webmoney.ru и в разделе Download сливай последнюю версия WebMoney Keeper Classic (Далее WMK). 1.4 мега всего-то... Хотя кому как ;). С инсталлом, я думаю, проблем не будет, знай себе кликать "Далее" :). Покорно ребуть машину и запускай софтину - будем деньги делать :). Перед тобой появится окошко в виде монетки. Смело выбирай "Регистрация", приступай к нудному процессу ввода левой инфы о себе :). Да, чуть не забыл самое главное, сначала укажи адрес на винте, куда ты хочешь сохранить файл кошелька. Лучше всего на PGP-диск - так спать спокойнее будешь. Переходим к процессу сохранения файла ключей.


Спецвыпуск Xakep, номер #028, стр. 028-028-2, БАБЛОС В ЦИФРЕ - cистемы электронных платежей

БАБЛОС В ЦИФРЕ - cистемы электронных платежей

ХрымZ (hrimz@xyligan.ru)

Спецвыпуск Xakep, номер #028, стр. 028-028-2

Изначально предлагается все это добро закинуть на дискетку, но они имеют свойство часто ломаться, так что предлагаю писать сразу на сидюк (да не в обиду будет сказано тем, кто не обладает CD-R\CD-RW :). Все заполнил? Теперь проверь, есть ли коннект с глобальной сетью, и жми "Создать". Перед тобой будет появляться несколько окон для подтверждения авторизации - соглашайся со всем, и вот - твои кошельки готовы, также будет создан индивидуальный идентификатор, который очень желательно запомнить.

Кстати, тебе сразу предложат пройти аттестацию. Это такая хрень, которая нужна только если ты хочешь вести честный компьютерный образ жизни, если это не по тебе - просто Canсel`ни. Типа полное юридическое подтверждение, что ты честный гражданин и что с тобой может без страха иметь дело хоть Папа Римский.

Теперь, когда самое трудное позади, перед тобой предстанет главное окно WMK.

Как видишь, пока на счету нуль баблоса, ничего, сейчас расскажу, как это исправить. Интерфейс интуитивно понятный, поэтому подробно описывать не буду. Расскажу лишь о том, почему у тебя целых три кошелька. WMR, WMZ, WME - первый для рупий, второй для енотов, а третий для Евро (еще не придумали как их звать по-нашему :).

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

WebMoney Light

Выше я описывал установку WеbMoney Keeper Classic, а теперь стоит упомянуть WebMoney Light. Это версия клиента работает через браузер, соответственно главное условие для удачного коннекта - наличие версии бродилки постарше и поддержки SSL, а ОСь же значение не имеет. Допустим, пришел ты в компьютерный клуб, зашел на light.webmoney.ru, зарегил нового юзера, перевел баблос, и след твой простыл. В общем, для настоящих экстремалов :). Главное, не забудь файлы ключей и кошельков потереть потом, настоящие хакеры следов не оставляют...

Яndex.Деньги

Пара хвалебных слов в адрес всеми несправедливо засираемого Яндекса. Решив не отставать от жизни, они тоже замутили свою веб-валюту. Об этом даже несколько месяцев назад репортаж был по TV. Здесь все очень похоже на WM, тоже качаем клиента с dengi.yandex.ru, регистрируемся, получаем номер виртуального счета и т.д. Но с оплатой в онлайн-магазинах здесь вообще все просто.

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

Прикручиваем к сайту

Итак, ты читаешь уже второй Спец из серии веб, а это значит, что у тебя уже вагон знаний, сто свой сайт с кучей технологий ты уже замутил. И вот ты делаешь культурный шоп. Ну, там, порнухой, аськами или еще чем полезным торговать. Не надо геммороиться с настройкой скриптов для проверки валидности кред и постоянно трястись запалиться. Просто оставляешь на паге номера кошельков и все. Правда, очень не советую занимать надувательством, так как поплатиться можно не хило. Пример - печально известный "хостинг" www.mwhost.ru. Перцы предлагали ТАКИЕ условия всего за 6 баков, но сайт у них так никто и не смог разместить. Сразу же после того как их запалили, начались разбирательства, и теперь с ребятами никто в Сети не дружит :). В общем, идею понял - тогда дерзай. ВебДеньги - это очень современно, удобно, а главное практически анонимно (запомни - ПРАКТИЧЕСКИ!).


Спецвыпуск Xakep, номер #028, стр. 028-028-3, БАБЛОС В ЦИФРЕ - cистемы электронных платежей

БАБЛОС В ЦИФРЕ - cистемы электронных платежей

ХрымZ (hrimz@xyligan.ru)

Спецвыпуск Xakep, номер #028, стр. 028-028-3

Как взломать?

Я уже чувствую, как у тебя на лице заиграла нездоровая улыбка хацкера, наверно хочется узнать, насколько реально поживиться чужим лавандосом :)? Тут все далеко не просто, так как перцы, которые разрабатывали все эти чудо-технологии, далеко не лохи и о безопасности думали в первую очередь. Пока нет никакого реального варианта добраться до денег, кроме как прямым перебором пароля. Да, конечно, вполне реально еще нарваться на юзеров с пассвордом "мама", но таких все меньше и меньше... Хотя...

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

З.Ы. Никогда не ведись на всякие крякеры веб-мани и генераторы, которых сейчас развелось просто сотни. Всякие кулхацкеры выкладывают на свои кулпаги странные программки. Особенно в этом отличился хостинг narod.ru, там одни кулхацкеры обитают :). На сайте webmoney.ru даже есть список таких страниц, так что заранее предлагаю ознакомиться...

Outro

Как честный русский человек, советую не злоупотреблять незаконными махинациями с электронным стаффом, ведь можно честно заработать на баннерах и бежать за обновами в магаз :). Нет, я серьезно, ведь забыл сказать, что если ты платишь электронными деньгами, то практически везде получаешь хорошие скидки. Будь то обычные покупки продуктов или комплектующих к компу или оплата Инета и мобилы. В общем, удачи тебе и 100% скидку во всех шопах на свете!


Спецвыпуск Xakep, номер #028, стр. 028-032-1, RiSearch - замути свой поиск

RiSearch - замути свой поиск

Алексей Б. Беляев aka Alexys

Спецвыпуск Xakep, номер #028, стр. 028-032-1

(alex-sun@mtu.ru)

Помнишь ли свое первое появление в инете? Наверняка знал пару-тройку адресов любимых групп, теле- и радиоканалов и, может быть, www.xakep.ru. Но все равно не знал, куда тебе сунуться, чтобы найти реферат или скачать свеженькую софтину и крэк к ней. Единственным средством для узнавания, что и где лежит, были поисковые сайты. Но, даже зная нужные URL'и, не всегда легко найти нужный материал на сайте. Бывает, что горе-вебмастер сделал такую навигацию по информативному сайту, что там черт ногу сломает. А ведь хочется побыстрее все найти, ибо денежки на инетном эккаунте любят быстро исчезать. Ответ на вопрос о том, как бы пошустрее найти на сайте то, что тебе нужно, довольно однозначен - это поиск. Возможность устраивать поисковые запросы по сайту только поможет поднять его популярность, ибо пипл будет думать, что на таком-то сайте можно быстро все найти :).

Структура поисковиков

Если программишь под веб недавно, то следует узнать, как устроены поисковые движки. Допустим, объем твоего сайта без всякой графики и файла хотя бы метров 10 занимает. Прикинь, сколько ресурсов и времени будет занимать выдача ответа на запрос юзера. Поверь, не так уж мало. Поэтому вариант каждый раз отыскивать в куче файлов совпадений запроса и текста - не выход. Намного быстрее поиск будет проходить по одному файлу (хотя для таких монстров, как Yandex.ru и ему подобных, даже это не поможет - самому интересно, как у них все устроено :)). Поэтому поисковый движок должен состоять из двух частей - индексатора и искателя. В задачи индексатора входит пробежка по контенту сайта и создание базы данных (не бойся, SQL тут не требуется), в полях которых в простейшем варианте поиска содержатся ключевые слова и адреса или имена страниц, где они были найдены.

url1;;keywords1

url2;;keywords2

...

urln;;keywordsn

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

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

<FORM>

Строка поиска

<INPUT name="keywords" value="Ля фам">

<INPUT type="submit" name="query" value="Шерше">

</FORM>

Покупать, писать или поискать?

Скажу сразу, что написать самому реальный поисковый движок - задача не из легких, с которой могут справиться только те, кто программит уже не один месяц, а может и год. А если хочется поиск по сайту сделать сейчас? Тогда надо будет поюзать чужие скрипты, немного закастомайзив их под свои нужды и структуру своего хоста. Большие поисковые системы стоят хороших денег, которые тебе наверно даже не снились. Но ведь будет глупо вешать на 10-мегабайтный сайт 1000-баксовые скрипты. И не надо. Благо, есть программеры, которые помогают не настолько продвинутым собратьям и выкладывают свои скрипты на халяву (причем, это не только к поисковым движкам относится).


Спецвыпуск Xakep, номер #028, стр. 028-032-2, RiSearch - замути свой поиск

RiSearch - замути свой поиск

Алексей Б. Беляев aka Alexys

Спецвыпуск Xakep, номер #028, стр. 028-032-2

Среди бесплатных поисковых систем одной из самых известных и простых в настройке "под себя" является RiSearch (http://risearch.org). На сайте доступны поисковые скрипты как на перле, так и на пхп (кому что ближе). Лично мне ближе перл, к тому же это наиболее универсальный язык программирования, так что будем рассматривать именно его.

Кто есть ху в RiSearch'е

Перед разбирательством с тем, кто есть ху, надо бы скачать скрипты. Лезь на сайт risearch.org и прям на первой странице найдешь ссылку на скачивание скриптов. В зиповом архиве будут лежать сами скрипты для индексации и самого поиска, англоязычный манн (хотя автор-то наш) и несколько файлов, нужных для кастомайзинга внешнего вида поиска. Чем хорош данный поисковик, так это тем, что ничего кроме поддержки CGI не нужно ему от сервака! Так что даже на большинстве free-хостов, где CGI поддерживается, все должно работать.

Размещение и назначение файлов

Движок RiSearch реализован в нескольких файлах - в 5 скриптах (config.pl, index.pl, search.pl, spider.pl, stat.pl) и шаблоне template.htm. Все остальное из архива имеет чисто вспомогательный характер и на работе движка не сказывается.

Перед тем как все это хозяйство выкладывать на удаленный сервак, очень рекомендую покастомайзить его на localhost'е, если последний имеется :). А если не имеется, то тогда непонятно, как ты собираешься смотреть на работу скриптов (хотя если есть shell-доступ, то можешь редактировать скрипты прямо на серваке, но это не лучший выход, лучше поставь Apache). Тем более, разобравшись с настройкой RiSearch'а локально, не составит проблем поменять пару строчек и сделать его под любой другой хост. Для примера будет взят локальный эккаунт со следующей конфигурацией (в память о сайте winfo.org :( ):

урл эккаунта (локальный) - winfo;

имя папки, где находится эккаунт, - winfo;

папка для html-доков - html;

для скриптов - cgi-bin;

путь к перлу, указываемый в начале скрипта, - #!/usr/bin/perl

После разборок с серваком лезь в папку, где находится локальный эккаунт твоего сайта, и закидывай в папку cgi-bin все скрипты (*.pl). Здесь же создай папки db и log, в которые будут заноситься все результаты индексации и статистика запросов соответственно. После аплоуда на юниховый сервак надо будет задать права для скриптов 755, а для папок - 777. Для чего нужны файлы, входящие в состав движка:

config.pl - скрипт, в котором записаны настройки хоста, такие как URL, путь к файлам, что индексировать и т.д.;

index.pl - индексатор файлов, натравливаемый на нужную папку;

search.pl - скрипт обработки поисковых запросов, отыскивает введенную юзером инфу среди ключевых слов;

spider.pl - типа index.pl, только индексирует по http, пробегая по всем линкам со страниц;

stat.pl - скрипт для просмотра статистики запросов, сделанных пользователями сайта;


Спецвыпуск Xakep, номер #028, стр. 028-032-3, RiSearch - замути свой поиск

RiSearch - замути свой поиск

Алексей Б. Беляев aka Alexys

Спецвыпуск Xakep, номер #028, стр. 028-032-3

template.htm - шаблонная страница для выдачи результатов поиска;

searchbox - вариант поисковой формы.

Зная, что зачем, можно переходить к отдельным элементам. Начало тюнинга движка начинается с конфиг-файла - config.pl.

Настройка config.pl

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

$base_dir="../html" #путь к папке, файлы которой надо проиндексировать

$base_url="http://winfo/" #адрес стартовой страницы

Следующие переменные нужны только для тех случаев, когда будет использоваться spider.pl. О них немного ниже.

$file_ext = 'html txt htm shtml'; #расширения файлов, которые будут индексироваться

$no_index_files = 'robots.txt index.txt'; #файлы, которые надо скрыть от посторонних глаз

$use_selective_indexing = "YES"; #включается возможность опускания при индексировании строк

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

%no_index_strings = (

q[<!--] => q[<-->],

);

# метод отыскания совпадений в базе ключевых слов

# 1 - по целому слову

# 2 - по началу слова

# 3 - по строке

$INDEXING_SCHEME = 2; # из-за наличия падежей в русском языке предпочтительнее 2-ой метод

$res_num=10; #количество результатов поиска, выводимых на одной странице.

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

Доведение до ума index.pl

Скрипт index.pl вносит в базу адрес файла, который индексирует. Затем, после обработки запроса юзера, будет выдаваться ответ в виде "http://winfo/arts/diskandcache.txt". Если бы это были готовые html-страницы или просто текст (без картинок и прочего), то было бы достаточно. Но ведь твои текстовые файлы обрабатывает скрипт - перед тем как выдать в результате нормальные разметанные страницы с картинками и комментариями к ним (см. прошлый номер СПЕЦа). В таком случае надо просто немного довести до ума скрипт index.pl. В свое время самому пришлось раздумывать над тем, что можно сделать. И придумал вот что.

Как оказалось, index.pl заносит в файл "0_finfo" через 2 двоеточия (::) следующее: адрес::размер::заголовок (для html-страниц)::краткое описание. Это можно понять из строки "print FINFO $url,"::",$size,"::",$TITLE,"::",$descript,"\n";", которая как раз отвечает за запись в файл keyword'ов. Так как все заносимое может пригодиться, а проблема только в адресе, то надо только ее и решить. Благо перл могуч регулярными выражениями, так что преобразовать адрес текста во что-то ему подобное, но немного отличающееся не составит труда.

Если, к примеру, надо выдать результат запроса в виде "http://winfo/cgi-bin/arts.pl?art=somename&act=read" (см. СПЕЦ №2), то перед строкой "print FINFO $url,...." надо провести пару операций над $url, а еще лучше добавить еще одну переменную, которая и будет заноситься в БД. Положим, что все файлы, которые надо проиндексировать, находятся в папке "../html/arts/". Одним из адресов документов является "$url=http://winfo/arts/diskandcache.txt", т.е. путь к местоположению файла на хосте. При вводе в адресной строке этого адреса откроется в броузере текстовый файл. Вот этот адрес надо преобразовать.


Спецвыпуск Xakep, номер #028, стр. 028-032-4, RiSearch - замути свой поиск

RiSearch - замути свой поиск

Алексей Б. Беляев aka Alexys

Спецвыпуск Xakep, номер #028, стр. 028-032-4

$page_url=$url; #введенной переменной $page_url присваиваем как начальное значение значение $url (адреса файла)

$page_url =~s/http:\/\///g; #отрезание от адреса протокола (http://)

$page_url =~s/winfo//; #обрезаем winfo, остается "/arts/diskandcache.txt" (на месте winfo будет стоять домен твоего сайта)

substr ($page_url, 0, 1)=""; # удаление первого символа из строки (в данном случае слэша)

$page_url =~s/arts//; #аналогично удаляется arts

substr ($page_url, 0, 1)=""; #и еще один слэш

$page_url =~s/.txt/&act=read/; #отрезание расширения от имени файла (.txt)

$page_url='/cgi-bin/arts.pl?art='.$page_url; #генерация ссылки на нужный скрипт с нужными параметрами

Spider.pl

Spider ищет слова для базы не в тексте документов (статей, публикаций, текстов), а в тексте html-страниц, даже если они являются результатом работы cgi-скриптов. Но либо я чего-то не понимаю, но намного легче и быстрее подогнать под свои нужды index.pl, чем разобраться со спайдером. Хотя должно быть все наоборот. Для работы spidedr'а надо только в config.pl'е указать адреса, по каким надо пробегать паучку, а остальное он должен сделать сам.

# Стартовый УРЛ

@start_url = qw(

http://winfo

);

# Spider пройдется по адресам с этих серваков

@allow_url = qw(

http://winfo

);

Вроде можно бы даже не один, а 2-3 сайта проиндексировать. Но не все так просто и хорошо. Ошибок при индексации быть не должно. Но вот при наличии на сайте часто повторяемых слов (например, пункты меню) будет такая каша выдаваться, что кто угодно замучается ее разгребать. Поковырявшись с настройками, некоторые части html-кода можно выкинуть из строк индексации, но со всеми справиться не так легко. К примеру, будет на сайте всего одна статья, содержащая введенное юзером слово. А оно является пунктом меню, которое появляется на 100 страницах. Прям Иван Сусанин получается. Хотя таким образом можно хорошенько честным способом баннеропоказы накрутить :).

Что именно выбрать для своего сайта - index или spider - решать тебе, хотя мой совет очевиден. К тому же индексация index'ом проходит в несколько раз быстрее, чем spider'ом. Еще бы, ведь при spider'а сервак должен генерить кучу страниц, причем довольно быстро, а не просто по файлам пробегаться. Что для них общее, так это необходимость запускать их по мере пополнения материалов сайта. Но хранить их в том виде, как они есть, тоже не рекомендуется. Движок бесплатный, значит, знает про него не мало народу, ресурсов при индексации тратится много.... Повесить сервак или затормозить его работу проблем не составит никаких. Так что либо переименуй индексаторы, либо закачивай их, когда понадобится.


Спецвыпуск Xakep, номер #028, стр. 028-032-5, RiSearch - замути свой поиск

RiSearch - замути свой поиск

Алексей Б. Беляев aka Alexys

Спецвыпуск Xakep, номер #028, стр. 028-032-5

Вывод результатов

Отбор нужных URL'ей осуществляет скрипт search.pl. Могу обрадовать заранее - ничего в нем править не надо. Почти весь кастомайзинг вывода ответов реализовывается в файле template.htm (кроме указания количества ответов на странице - config.pl). Как ни странно, но находится template.htm должен в папке cgi-bin, а представляет он собой html-код с наличием перловых хэшей, через которые осуществляется вывод. К этому файлу обращается search.pl, когда наступает пора выводить результаты.

Файл template.htm разбит на 7 частей:

1. "header" - верхушка страницы

2. "results_header" - заголовок результатов

3. "results" - результаты

4. "results_footer" - подпись под результатами

5. "no_results" - в случае "ничего не найдено"

6. "empty_query" - забыли ввести, что искать

7. "footer" - окончание страницы

Вверху страницы (между тэгами <!-- RiSearch::header::start -->...<!-- RiSearch::header::end -->) надо разместить заголовочные html-тэги (<html>,<body>), линку на css-файл, а также форму для поиска (ее пример в файле searchbox). Остальное - на твое усмотрение.

Заголовок результатов (<!-- RiSearch::results_header::start -->....<!-- RiSearch::results_header::end -->). Поскольку в тему статьи не входит описание html (сам должен знать), то лучше будет рассказать о том, какой хэш за что отвечает:

%query% - строка поиска, введенная юзером;

%search_time% - время, затраченное на поиск;

%query_statistics% - статистика о запросе - что из введенного сколько раз найдено;

%stpos% - порядковый номер результата запроса.

В пункте результаты (<!-- RiSearch::results::start -->...<!-- RiSearch::results::end -->):

%url% - линк на результат запроса;

%description% - первые 256 (по дефолту) символов из соответствующего файла.

<!-- RiSearch::results_footer::start -->...<!-- RiSearch::results_footer::end -->

%rescount% - число найденных страниц;

%next_results% - ссылка на следующую порцию результатов поиска, если надо.

В пунктах "no_results" и "empty_query" можно вписать сообщения типа "Облом, не там ищешь" и "А что искать-то будем?". А в окончании страницы (<!-- RiSearch::footer::start --> <!-- RiSearch::footer::end -->) обязательно нужны закрывающие тэги (</body></html>). Кроме того, не помешает внизу страниц разместить ссылку на главную страницу, e-mail и т.п. Здесь же будет размещена плата за бесплатность движка. Нет, это не баннер, а просто линка на сайт разработчика (http://risearch.org). Конечно, убрать ее можно без проблем (нет ничего проще, чем удалить строку из текстового файла), но это уже будет просто некрасивый жест по отношению к создателю движка (С. Тарасов). Он же старался ради твоего блага :). Так что не наглей.

Плюсы от использования своего поиска

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


Спецвыпуск Xakep, номер #028, стр. 028-032-6, RiSearch - замути свой поиск

RiSearch - замути свой поиск

Алексей Б. Беляев aka Alexys

Спецвыпуск Xakep, номер #028, стр. 028-032-6

RiSearch - замечательный движок для установки на сайте. Конечно, его просто никак нельзя сравнивать с движками Yahoo, Google, Яndex и т.п., которые стоят таких бабок, что даже думать страшно. Да и ресурсы под них нужны намного бOльшие, чем для поддержания нескольких сотен (а то и тысяч) небольших сайтов.

Единственное, о чем стоит беспокоиться при использовании скриптов на сайте (не только поисковых), так это безопасность их использования. Запросто может найтись умник, который захочет поискать дырочки в твоих скриптах. А ведь это может и получиться :). Поэтому, если твои скрипты обрабатывают введенные в формах данные, то не поленись хотя бы сделать примитивную защиту от использования тэгов. Хоть от дураков поможет :). Правда, в случае с RiSearch'ем защита уже сделана, а о методах его взломов пока не слышал.


Спецвыпуск Xakep, номер #028, стр. 028-036-1, 31337 двигало - Лучшие енжайны для твоего мегапортала

31337 двигало - Лучшие енжайны для твоего мегапортала

НКВД aka Космос

Спецвыпуск Xakep, номер #028, стр. 028-036-1

(nkvd@zapisi.ru)

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

Require

Наполнитель. А иначе зачем все это затевать? Чтобы все работало нормально, рекомендую купить хостинг. Согласен, нужны деньги. Но поверь, это лучше, чем трепать халявные. У них там свои правила, да и mySQL, который необходим для двигала, они не дадут. Если есть знакомые - к ним. Но я им не завидую =). Ежели решился покупать, бери «пакет» с PHP/PERL, mySQL и энное количество мегабайт дискового пространства. В 100 грин за год уложишься точно. Обязательно скачай себе девелопмент-кит «Денвер2», так как оно тебе нужно будет для тестирования портала. Да и держать локальный миррор сайта у себя на машине очень удобно. Где скачать, смотри в предыдущем Спеце. Для заливки файлов на сервер CuteFTP - твоя лучшая подруга. Также крайне желательно хоть чуть-чуть знать язык, на котором написан тот или иной движок. Если ни фига не понимаешь, не лезь в код. В приличных енжайнах блоки с кодом комментируются.

Not 4 free

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

Если ты решил забить на халяву и купить код, то будешь огорчен. Циферка начинается от 100 грин. На самом деле это сугубо индивидуально. Если просить сделать на заказ (двигало будет заточено под твой проект), выйдет от 500 грин в зависимости от сложности. Походив по сайтам дизигн-студий, которые пишут енжайны, я обнаружил, что написание огроменной и удобной шестеренки выйдет от 2500 грин до 10000 их же.

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

PHP Nuke und Post Nuke

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

голосование - поддержка множественных опросов, редактирование их же и т.п.;

постинг статей/новостей с иконками по теме наполнителя;

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

файлоу-лист, архивы, разбивка по категориям, поддержка множества форумов;

распечатка и посылка другу статьи по почте;

«themes» - самая не нужная, на мой взгляд, функция.

Рассылка - заспамить мемберов не составит и труда. То есть каждый юзер может выбирать из предложенного, как будет смотреться сайт. Ты прикинь, сколько нужно настраивать шаблоны :). Также много полезных и не очень фенечек типа «страница сгенерирована за 3 часа» и «самый активный нигга: Вася Голум - 5 сообщений». Сами ссылки на материи, созданные Нюками, очень громоздки и непонятны. Можно накачать себе много модулей - всякие календари, калькуляторы (!!), адресные книги, галереи, крутилки баннеров и т.п.


Спецвыпуск Xakep, номер #028, стр. 028-036-2, 31337 двигало - Лучшие енжайны для твоего мегапортала

31337 двигало - Лучшие енжайны для твоего мегапортала

НКВД aka Космос

Спецвыпуск Xakep, номер #028, стр. 028-036-2

Качать: http://postnuke.ru, http://phpnuke.org

Плюсы: до фига подключаемых модулей, поддержка русского языка, шаблоны.

Минусы: громоздки, нету ЧПУ (Человеку Понятные УРЛ), дырявый, как сыр; пока настроишь, у тебя выпадут все волосы на заднице, а Шеповалов будет править миром.

Оценка: 3+

Резюме: огроменная система управления контентом. Есть практически все. Но администрировать, имхо, очень неудобно. Много ты сайтов знаешь с применением этих двигателей? А как они смотрятся? Чтобы все было кул, тебе надо будет долго мастурбировать языковые файлы и шаблоны. Да и сами Нюки большие по размеру. На дилапе хрен закачаешь. Есть системы поудобнее, поверь.

Sanitarium WebLog

Написано сие нашим человеком. Проект ведет небезызвестный всем webscript.ру. Системус представляет собой поддержку Блога. Для тех, кто совсем дурачок, поясню. Блог - сокращенное от WebLog. Ну, например, Глаз Муфа - типичный Блог. Чтобы оно все работало, нужны Перл на серваке и установленный туда же модуль DB_File. Разработчики уверяют, что такое дополнение должно обитать у продвинутых хостеров. Хотя если у твоего нет - ничего тебе не мешает попросить. И что самое интересное, ни фига не нужен mySQL. Но большой чести это ему не делает. Санитарка может делать очень даже многое. Создание категорий; многостраничные статьи (!) - только начало; можно выбрать, как будут генерироваться страницы - статически или динамически. Динамически - это когда страницы генерятся при обращении к ним. Ты можешь без проблем вставлять PHP код и SSI - система сгенерирует без проблем. Неплохая система комментов - сделать так, что сразу они не запостятся, пока ты не проверишь, тоже очень неплохо. Хотя советую такое дело отключать. Саппорт сразу нескольких шаблонов - то есть каждая категория использует отдельную тему. Версия для печати и «отправить другану», безусловно. Есть система авторов. Ты для каждого пепса можешь создать аккаунт, и он сам будет постить наполнитель. Поиск, постинг новостей/статей, естественно. Поуровневый доступ. Вообще, много там чего есть, ты скачай и посмотри. С Санитаром идет мощнейшая документация на русском (!) с подробной пошаговой установкой. Даже если ты полное ламье, установишь, не сцы.

Качать: http://webscript.ru/sanitarium/download.html

Плюсы: не нужен mySQL, много настроек, удобный админ-фейс, хороший ФАК на сайте разработчиков и форум.

Минусы: если не установлен перловский модуль DB_File - система работать не будет, обязательно нужна ссылка на разработчиков. Не надо недооценивать русских программистов - порвут через собственные дыры 8)).

Оценка: 4-, так как присутствует фраза «если модуль установлен...».

Резюме: довольно неплохое творение. Но слишком угнетает настырное указание на авторство. Еще один минус - ограниченность в употреблении. Ты, конечно, можешь извернуться, но Санитара делали для Веблога. Как правильно извернулись, можно посмотреть по ссылке: http://kino.themes.ru - советую. Если у тебя возникнут вопросы, ты имеешь право обратиться в форум и поубивать всех вопросами.


Спецвыпуск Xakep, номер #028, стр. 028-036-3, 31337 двигало - Лучшие енжайны для твоего мегапортала

31337 двигало - Лучшие енжайны для твоего мегапортала

НКВД aka Космос

Спецвыпуск Xakep, номер #028, стр. 028-036-3

MobilePublisherPHP

Тоже русское двигало, писалось неким Алимамедом на PHP. Похож на Санитариум, но написан не на Перле и требует mySQL. Имхо, именно из-за использования БД система делается намного универсальней. То есть можно делать какие угодно публикации. На сайте MP есть небольшой список сайтов, работающих на нем. Называть их не буду, но скажу, что с этой системой ты без проблем можешь сделать какой-нибудь новостной обозреватель. Ибо возможностей много. Вообще, у меня сложилось впечатление, что МП написан по подобию Санитара, так как функции очень похожи. Имеется: постинг, поиск, загрузка картинок и вставка их же в любое место текста прямо на лету, ЧПУ, языковые файлы, счетчики сколько раз смотрели статью. Другое дело - реализовано все по-другому.

Качать: http://mp.webscript.ru.

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

Минусы: привязка к БД - могут возникнуть сложности при смене движка. Оценка: 4.

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

Harpia

Сказал бы, мощная птица на пхп и треба БД. Немного похожа на Постнюки. Уж очень похожи система навигации и администрация контента. Есть ЧПУ, хотя оно очень кривовато реализовано. Конечно, вместо http://site.com/harpia?a=1&b=2 ты увидишь http://www.amalla.com/harpia/a/1/b/2/, но четких названий разделов не будет. Гарпия может делать хорошо по-всякому. Мало того, она имеет возможности предыдущих движков, так в нее вставили фишки типа «отослать статью, файло, ФАК», неограниченные топики - то есть тема обсуждения может быть такой: people/famous/journalist/vasya_golum/life/sex/ - и так до бесконечности. Из-за того, что двигало сделано из модулей, ты без проблем можешь удалить неиспользуемый и все будет работать. Также очень удобно фигачить МЕТА-теги для каждого топика и раздела, ибо шестеренка это позволяет. Помимо пресловутых комментариев вставлено голосование, что придает немного интерактивности. Регистрация пользователей - ноу камментариес. Пожалуй, это основные моменты Гарпии, которые могут тебя заинтересовать. Но основные - не значит «все». Пробуй.

Качать: http://www.amalla.com/harpia.

Плюсы: хорошее ядро и модульная система, отличная каморка админа.

Минусы: кривоватая система ЧПУ, могут возникнуть сложности при смене дизайна, так как придется копаться в коде, а через веб-интерфейс шаблонов нет.

Оценка: 5-

Резюме: отличная халявная CMS. С нею можно сделать все что угодно. Минус только за кривые ЧПУ.

DCP-Portal

Офигенный енжайн с большими возможностями! Писался буржуазией на всем любимом php. Имеет удобный календарик, комната админа просто побивает до слез - все удобно и красиво, работа с категориями, прямо из панели админа идет управление голосованиями, поиск, комментарии - полный набор. Поддержка языков - через языковые файлы без проблем можно сделать версии страниц для разноязычных людей. Зарегистрированный мембер на своем аккаунте может писать свою биографию и мемуары. У разработчиков висит подробный девелопмент-план, в котором они написали, чего достигли и чего хотят достичь в будущем. В сладких грезах девелопера ДСП есть пункт, где он пламенно клянется сделать мини homepage для мембера. Якобы зарегенный юзза может разместить свои фотографии, и к его учетной записи привязывается его собственная гостевая книга. На ДСП сайте присутствует куча мануалов и прочих саппортов. Они помогут, если ты знаешь английский. Советую, не прогадаешь. Только про mySQL не забудь.


Спецвыпуск Xakep, номер #028, стр. 028-036-4, 31337 двигало - Лучшие енжайны для твоего мегапортала

31337 двигало - Лучшие енжайны для твоего мегапортала

НКВД aka Космос

Спецвыпуск Xakep, номер #028, стр. 028-036-4

Качать: http://www.dcp-portal.org.

Плюсы: куча модулей и хороший саппорт. По крайней мере, на все мои вопросы они отвечали исправно.

Минусы: система большая, чтобы все настроить, нужно знать английский, как минимум - со словарем.

Оценка: 4+

Резюме: при помощи ДСП вполне реально сделать сайт дизайн-студии и новостного портала. Да много чего там еще. Зависит от фантазии. Смотри, что немцы сделали: http://www4.himlen.nu.

GeekLog

Как бы Россия халяву ни любила, а двигало for free она делать не будет. Конечно, есть люди, которые стараются на благо народа, но и те переходят на систему «плати-потом-качай». А вот европейцы клепают и клепают все новые и новые CMS. Такова и GeekLog. Несколько напоминает все те же Нюки, но конструкция и вид линков радуют глаз, пусть даже не ЧПУ. А в остальном он стандартен - пост новостей/статей, изберком ака голосование, категории, регистрация пользователей. Статистика вроде как неплохая - показывает, что больше нравится и куда больше всего народу ходит на сайте. Наполнитель можешь размещать хоть вверх ногами, хоть задом наперед - так как код состоит из блоков. Если захочешь - распечатаешь свой наполнитель и повесишь на стенку, поскольку функция «распечатать» стала очень модной. Поддержка скинхедов поможет мемберу разнообразить серф по твоему порталу. Существуют категории новостей - для каждой своя картинка, а календурь покажет, насколько часто ты обновляешься.

Качать: http://www.geeklog.net.

Плюсы: удобный администратор, блоки, хорошие саппорт и мануал.

Минусы: ограниченность.

Оценка: 4+

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

e107

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


Спецвыпуск Xakep, номер #028, стр. 028-036-5, 31337 двигало - Лучшие енжайны для твоего мегапортала

31337 двигало - Лучшие енжайны для твоего мегапортала

НКВД aka Космос

Спецвыпуск Xakep, номер #028, стр. 028-036-5

Скачать: http://www.e107.org.

Плюсы: легок (около 440 кб в архиве), хороший install.php, отличный хелп + огроменный форум поддержки.

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

Оценка: 5

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

Fin

В этом обзоре я описал самые, на мой взгляд, достойные двигательные системы. Их, конечно же, гораздо больше, но у всех одинаковые фишки и возможности. Дифферент только в реализации. Вообще, выбор CMS лучше проводить перебирая - нравится/не нравится. А еще лучше пойти и купить книжку по PHP/PERL и сделать свой, чтобы в следующем обзоре фигурировало твое двигало. Также можно купить енжайну или променять на дизайн - ты девелоперам сайт рисуешь, а они тебе код дают. Но самое оптимальное все сделать самому. Если возникнут какие-то вопросы - пиши.


Спецвыпуск Xakep, номер #028, стр. 028-040-1, NoNaMe.ru - интервью с d()c666

NoNaMe.ru - интервью с d()c666

Андрей "Дронич" Михайлюк

Спецвыпуск Xakep, номер #028, стр. 028-040-1

(dronich@real.xakep.ru)

Если ты ни разу в жизни не был на NoNaMe (http://www.nnm.ru), то срочно скармливай этот урл своей бродилке и ознакомься в обязательном порядке. Ведь таких проектов, как NoNaMe, в сети раз, два - и обчелся (тут некто Кирион толкает меня под ребра и настаивает на полной его уникальности :)). Не знаю, я по крайней мере не видел ничего подобного даже у буржуев - на сайт просто так выкладываются отличные проги с дельным описанием и ссылками на кряки ("лекарство" в местной терминологии :)), ссылки на варезные и МР3-архивы, прикольные картинки, аськины номера и многое другое. И, что самое интересное, обновляется NoNaMe ЕЖЕДНЕВНО! Так вот, поразившись очередному русскому феномену, мы решили вызвать его основателя, Дока, на откровенный разговор в пастельных тонах одной из московских кофеен. Что из этого получилось, ты можешь прочитать ниже.

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

X: Понимаю, что начинаю с банальщины, но все же: "Как появился ННМ?"

D: :) Как большинство некоммерческих проектов - сидели, пили пиво, придумали :). Было желание делиться с людьми разнообразной инфой, а им это понравилось. А тогда никто и не думал, что ННМ станет настолько популярным.

X: Настолько - это насколько?

D: Пятьдесят тысяч посещений в день, примерно так. Причем это совершенно реальные цифры, накруткой мы не балуемся :). Убедиться в этом просто - достаточно посмотреть на статистику, на том же Хотлоге.

X: Ого! Это притом, что сайт ведет один человек (ты)?

D: Практически :). Заглавная страничка с новостями, то есть то, что для многих и является ННМом, это моя стезя :). Хотя и за ее пределами у нас есть кучи интересных вещей, хотя бы тот же filez, music, ironz.

X: А каким образом ты лопатишь такие кучи линков и софта? Это же адская работа.

D: Я и сам далеко не ангел :). Мне ежедневно приходит 200-300 писем с линками и описаниями прог, из них выбираются те, что интересны лично мне, я качаю их, смотрю и, если софт реально неплохой, выкладываю линк на сайт. Конечно, выкачивать из сети все новые версии Нортон Утилит бывает проблематично, такие вещи часто выкладываются просто на доверии. Да и есть кому доверять, если ты заметил, под новостями в "by" часто повторяются одни и те же ники :).

Х: То есть у тебя есть почти постоянный набор пишущих внештатников?

D: Именно так. Люди начинают искать софт для себя, а потом заболевают этим :).

X: А аськины номера? По три штуки в день, а то и больше, причем иногда попадаются весьма неплохие. Кто шлет их?

D: Тоже совершенно посторонние люди. На самом деле они делают это вовсе не бескорыстно. Под каждым номером имеется линка на сайт (во все том же "by"), что сильно повышает его цитируемость. То есть если на твой сайт есть линк с проекта с кучей посещений, твой сайт тоже станет подниматься в поисковиках на верхние строки. Вот такая арифметика :).


Спецвыпуск Xakep, номер #028, стр. 028-040-2, NoNaMe.ru - интервью с d()c666

NoNaMe.ru - интервью с d()c666

Андрей "Дронич" Михайлюк

Спецвыпуск Xakep, номер #028, стр. 028-040-2

X: А как быть с серверами, на которых лежит отобранный тобой софт? Они тоже раскручиваются?

D: Хы, даже хуже. Очень много неплохих проектов было закрыто просто потому, что из-за нас у них резко поднялся траф :). Мне даже как-то пришло письмо от одного америкоса в стиле: "Док, теперь моим детям нечего есть, нехороший ты человек" :). Это такая обратная сторона популярности. Кстати, именно из-за этого мы не даем линки на софт, лежащий на бесплатных хостингах, - сайт взлетит в топе, а потом успешно прикроется хостером :(.

X: Раз уж заговорили об обратной стороне - проблемы с законом бывали?

D: Нет, а с какой стати? Мы не выкладываем на сайт никаких противозаконных вещей, все, что ты там видишь, - это только линки. А у линков нет хозяина, равно как нет и закона об их неправомерном использовании :). Листателя сайта никто не принуждает нажимать на ссылы - все зависит только от желания читателя. Ну, а если уж придираться, то любой поисковик даст фору, тот же Яндекс - вот где настоящий порно-варезный портал :). Попробуй ввести что-то вроде "+softname+crack" или "+sex+hardcore", и тогда посмотрим, кто из нас противозаконный :).

X: :) Ладно, согласен. А как обстоят дела с теми, кто этот софт делает? Им-то NoNaMe наносит заметный урон...

D: Мы? Мы что, пишем кряки? Или выкладываем на сайте нелицензионное ПО? :). Опять-таки ничего незаконного нету, абсолютно серьезно. Хотя один раз, в самом начале развития NoNaMe, было - я выложил в ленте серийник к одному из продуктов ElcomSoft'a, а они подняли бучу, что серийник - их собственность, и все такое. А когда я спросил, какие именно из букв латинского алфавита они запатентовали, на меня почему-то обиделись и стали бодаться :). Серийник убрал - зачем идти на принцип, мне проще удалить.

X: Ну, у Elcom'a у самого рыльце в пушку - законность их MailList Verifyer'a тоже под бо-о-ольшим вопросом :). А как у вас с хостингом? Больной вопрос, ибо нас недавно красиво прикрыли за порнуху, которая лежала в соседнем каталоге с файлами winfo.org :).

D: С хостингом пока вроде нормально. Мы нашли понимающих людей, тем более что большого трафика мы не создаем, а скрипты у нас на РНР - не сильно ресурсоемкие. Вообще, технической стороной вопроса занимается Antilopa aka Макс и достаточно успешно.

Х: И почем такие приятные условия проживания?

D: Недорого :). По крайней мере, доходами от рекламы хостинг как раз покрывается, а это уже хорошо.

Х: А не произойдет ли с NoNaMe'ом то же, что произошло с кучей других полезных сайтов? Я имею в виду распространившуюся в последнее время моду делать сайты полуплатными, где самое вкусное доступно только мемберам. Типа "накликай у нас двадцать баннеров и стань VIP-членом NNM"?

D: Нет. Такого не произойдет точно, потому что мы не стремимся выжать проект себе в кошелек. У нас как раз обратные планы :).

X: Например? Платить народу за заходы :)))?


Спецвыпуск Xakep, номер #028, стр. 028-040-3, NoNaMe.ru - интервью с d()c666

NoNaMe.ru - интервью с d()c666

Андрей "Дронич" Михайлюк

Спецвыпуск Xakep, номер #028, стр. 028-040-3

D: Конечно, нет :). Во-первых, в ближайшее время NoNaMe ждет глобальный редизайн. Во-вторых, мы хотим сделать сохраняемые профили для тех, кто часто нам что-то засылает, и дать им возможность самим добавлять линки. Естественно, сразу попасть в такие "рассыльщики" удастся немногим, но все же так мы сможем обозначить тех, кому доверяем :). Хотя поначалу инфа от них все равно будет модерироваться. Плюс ко всему, мы хотим перевести все наши подразделы в более самостоятельный режим, отдать им домены третьего уровня *.nnm.ru и развивать их отдельно от ядра NoNaMe. Так что проект растет, в идеале хотелось бы видеть его совсем народным - такое место тусовки, где все делятся друг с другом инфой, софтом, музыкой в массовом масштабе.

X: Судя по тому, как ты стараешься отдалиться от работы, она тебя достает... :) Или нет?

D: Как сказать... Я каждый день перелопачиваю сотни писем, скачиваю и смотрю десятки прог... Конечно, бывает, что хочется на все забить и заняться чем-нибудь другим, но через день-два это проходит :). Одно я знаю точно, я делаю NoNaMe для себя и очень рад, когда это нравится и другим.

X: Ты говоришь, что NoNaMe почти не приносит денег. А мобилка у тебя вона какая :). [Док прячет в карман одну из последних Нокий.] Чем Док зарабатывает на жизнь в реале?

D: Поймал :). Постоянной работы нет, но всегда находится способ срубить денежек поддержкой/разработкой сайтов, прочими подобными делами. На жизнь хватает, а больше и не надо...

Х: Ладно, последний вопрос: как отношения с коллегами по цеху (Frol.ru, Wzor.net, etc)?

D: Нормальные. Проблем ни с кем не было, я знаю многих, и многие знают меня. Такие дела.

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

D: Мы встретимся, мы обязательно встретимся :)!..

Док накинул куртку и исчез в толпе снующего по Якиманке народа. А мы с Кирионом тихо побрели к метро, обсуждая одно из интересных предложений Дока - возродить электронную версию WINfo на NNM.ru. Да, мы определенно еще встретимся :)...


Спецвыпуск Xakep, номер #028, стр. 028-042-1, ДРУГ ПОЗНАЕТСЯ В БД - теория баз данных

ДРУГ ПОЗНАЕТСЯ В БД - теория баз данных

GLAZъ (glazy@mail.ru) & Дронич

Спецвыпуск Xakep, номер #028, стр. 028-042-1

Работа таких сайтов, как Yandex, Yahoo!, Ebay, построена на БД и целиком зависит от их надежности. Так что правильно организованная база - залог твоего успеха. Если хорошо спланировать структуру базы, можно получить быстрые и гибкие возможности поиска данных, чего мы и добиваемся. Но это вода, перейдем к делу!

Классификация

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

В архитектуре файл-сервер есть сервак, который выполняет только роль хранилища самих данных, а есть компы, так называемые рабочие станции, на которых происходит собственно обработка данных. Т.е. сам сервер не участвует в обработке!

Случай, когда архитектура - клиент-сервер, нам ближе. Тут на сервак уже ложится обязанность обработки самих запросов, посылаемых ему на языке SQL, о котором я расскажу в следующей статье. А юзеру приходит уже готовый результат. Это гораздо удобнее, так как не приходится передавать файлы офигительного размера по сетке.

Еще один вид БДей - распределенные, когда БДя хранятся на разных компах, причем данные могут повторяться (сие зовется избыточным хранением, полезно в случае падения систем).

Вскрытие показало

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

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

Данные бывают разные: реляционные, зеленые, красные

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

Итак, основной моделью является реляционная модель. Фишка ее в том, что все данные представляются в виде таблиц. И именно эта модель используется в таких продуктах, как MS SQL, MySQL, мелкософтный Access.

Интимные связи

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


Спецвыпуск Xakep, номер #028, стр. 028-042-2, ДРУГ ПОЗНАЕТСЯ В БД - теория баз данных

ДРУГ ПОЗНАЕТСЯ В БД - теория баз данных

GLAZъ (glazy@mail.ru) & Дронич

Спецвыпуск Xakep, номер #028, стр. 028-042-2

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

Tip:

PK = Primary Key = Первичный ключ

FK = Foreign Key = Внешний ключ

Внимательно посмотри на рисунок. Это связь между таблицами "один-ко-многим", отображенная по древней методологии IDEF1X (ГОСТы, все дела :)). Содержимое этих таблиц ищи чуть ниже.

Суть дела: есть таблица АВТОРЫ, в которой хранятся основные данные на авторов Спеца. Для каждого из авторов мы заводим поля ИМЯ, НИК и АДРЕС. Первичный ключ - НИК, так как ники у наших авторов не повторяются. Для учета мыльников одного поля недостаточно - ведь у некоторых мыло не одно (в нашем случае у Хрымза). Да и вообще неплохо вести комментарии к мылу - вдруг оно какое особенное? Поэтому мы создаем новую таблицу E-MAIL с полями НИК, МЫЛО, КОММЕНТАРИИ, где первичным ключом будет МЫЛО (ибо оно тоже не повторяется). Внешний ключ этой таблицы - НИК, так как именно по нику проводится сопоставление записей этих таблиц.

Представь, что ты нашел в таблице Ильича и решил выяснить его мыло. По твоему запросу СУБД обратится к связанной таблице E-MAIL и будет просматривать поле НИК, пока не найдет там Ильича :). Тогда она и предоставит тебе его мыло. Если же ты захочешь выяснить мыло по косвенному признаку (например, мыло авторов из Власихи), то СУБД сначала найдет НИК автора, которому в поле АДРЕС соответствует "Власиха", а потом сделает то же самое, что и в первом случае.

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

Теперь поговорим о связях. Существуют три типа связей: один-к-одному, один-ко-многим, многие-ко-многим.

При связи один-к-одному каждой строке из главной таблицы соответствует одна или ни одной строки из зависимой. И в обратном порядке: каждая строка из зависимой таблицы связывается только с одной строкой из главной. Связанные один-к-одному таблицы можно вообще объединить в одну без ущерба здоровью :).

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

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

Теперь поговорим непосредственно о СУБДах, которые позволяют воплотить всю эту... хм, теорию на практике.

MySQL

Одна из самых распространенных систем управления БДями на базе языка SQL. Обусловлено это ее быстротой, надежностью и тем, что распространяется она на халяву по лицензии GNU. Все функции ее очень просты, и в комплекте поставки ты обнаружишь до фига полезных тулзов, которые тебе помогут в установке, настройке и использовании. Что является несомненным гудом! Плюс ее поддержка включена в PHP, что тоже есть хорошо, так как остается просто грамотно ее поставить.


Спецвыпуск Xakep, номер #028, стр. 028-042-3, ДРУГ ПОЗНАЕТСЯ В БД - теория баз данных

ДРУГ ПОЗНАЕТСЯ В БД - теория баз данных

GLAZъ (glazy@mail.ru) & Дронич

Спецвыпуск Xakep, номер #028, стр. 028-042-3

ODBС

Вот набацал ты клевую базу, а тебе надо подключиться и к MySQL, и к MS SQL, и еще к чему-нибудь... И в одном приложении! А? Как тебе задачка? Для этого применяется ODBС (открытая архитектура БД). Эта вещь позволяет тебе юзать набор абстрактных функций для работы с разными типами БДей. Но для того, чтобы тебе можно было работать с ней, сервер БДей нужно залить дровами, то есть он должен быть ODBC-совместимым. Кстати, эту тему набацали мелкомягкие, и пашет она в основном на МастДайевских платформах, хотя и под Линух можно найти дрова. Если очень захотеть, можно в космос полететь :).

Microsoft Access

Ее используют те, кому нравится графический интерфейс этой СУБД. Наваял базу у себя дома, в офисе, где все видно, и пихнул ее в инет. Очень удобно, но придется юзать вышеописанный интерфейс, если хочешь запустить все это хозяйство под какой-нибудь сервачок типа MySQL. Так что думай, нужно ли оно тебе?

На этом кончаю

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

Сначала были мамонты, потом были слоны, после них были большие ЭВМ, а после них, в 1970 году, была опубликована знойным IBMовским парнем, Dr. Э. Коддом (Добрянский! это был ты... черт!), статья, в которой впервые использован термин "реляционная модель данных". Хотя подобные работы появлялись еще в 60-х. Вот так и работали, не зная с чем, пока умный дядька все это не обозвал. Он предложил для обработки данных использовать теорию множеств и доказал, что данные можно представить в виде таблицы, которая называется в математике "отношением" (relation), откуда и пошло название модели. Вот так все гениальное опять просто.

Базы, грубо говоря, - это совокупность описаний какого-либо объекта.

Первичный ключ указывает на одну и только одну строку таблицы.


Спецвыпуск Xakep, номер #028, стр. 028-044-1, Do you speak SQL?

Do you speak SQL?

GLAZъ (glazy@mail.ru)

Спецвыпуск Xakep, номер #028, стр. 028-044-1

Любому разработчику БДей известен язык SQL. Следовательно, ты тоже должен быть с ним знаком. Этот язык является повсеместно распространенным. Он надежный, очень мощный, но иногда является довольно сложным. К сожалению, описать все его возможности я не смогу, но общее знакомство с ним постараюсь провести.

Итак, SQL - это язык структурированных запросов... Ну и все :). А ты думал, я сейчас разражусь получасовой тирадой о том, какой замечательный язык? Нет, это ты и сам поймешь :). Поехали.

Проектирование таблиц

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

Таблицу ты придумал. Теперь на каждый столбец таблицы ты можешь наложить так называемые "ограничения целостности". Это фишка позволяет контролировать, какие значения будут храниться в столбцах. Есть такие ограничения: CHECK, NULL, DEFAULT, UNIQUE, PRIMARY KEY, FOREIGN KEY.

CHECK налагает логические условия. То есть могут вставляться значения, удовлетворяющие условию. Пример: вставляем значения цены не больше 50 и не меньше 10:

Price >=10 AND <=50 или price BETWEEN 10 and 50.

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

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

DEFAULT вставляет значение по умолчанию, если при вставке не указано содержание ячейки. UNIQUE обеспечивает уникальность значения в столбце.

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

Типы данных

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

Все типы (используемые в MySQL) можно разделить на следующие группы:

- целочисленные;

- нецелочисленные;

- дата и время;

- двоичные;

- строковые;

- тестовые;

Остановимся на каждом подробнее.

Целочисленные предназначены для хранения данных, над которыми ожидается проведение стандартных арифметических операций, и чисел, не имеющих запятой. Существуют такие целочисленные типы:

- INT[(длина)] [UNSIGNED] - целые числа со знаком. 4 байта.

Есть еще BIGINT, SMALLINT, MEDIUMINT, TINYINT. Их размеры, соответственно, восемь, два, три, один байт. Синтаксис одинаков.

Нецелочисленные данные служат для хранения чисел с плавающей точкой. К ним относятся типы:

- DECIMAL (макс. длина, кол-во цифр после запятой) - десятичное число с плавающей точкой.

- FLOAT [(макс. длина, число десят. чисел)] - число одинарной точности.


Спецвыпуск Xakep, номер #028, стр. 028-044-2, Do you speak SQL?

Do you speak SQL?

GLAZъ (glazy@mail.ru)

Спецвыпуск Xakep, номер #028, стр. 028-044-2

- REAL [(макс. длина, число десят. чисел)] или DOUBLE [(макс. длина, число десят. чисел)] - число двойной точности.

Тип "Дата и время" хранит инфу о дате и времени :). Типы следующие:

- DATE - хранит дату в формате YYYY-MM-DD или YY-MM-DD.

- TIME - хранит время в формате HH:MM:SS.

- TIMESTAMP - автоматически изменяется при вставке или обновлении. Формат YYMMDDHHMMSS или YYYYMMDDHHMMSS.

Двоичные типы предназначены для хранения блоков двоичных данных. Поддерживаются следующие типы:

- BLOB - двоичный объект длиной в 65535 байт.

Есть еще всякие LONGBLOB (длиной в 2^32 байт), MEDIUMBLOB (длиной в 16777216 байт), TINYBLOB (длиной в 255 байт).

Типы данных строковой группы используются для хранения символьных строк. Есть такие типы:

- CHAR(длина) - строка фиксированной длины (параметр "длина" определяет, какое количество символов резервируется в памяти, от 1 до 255).

- VARCHAR(длина) - строка переменной длины. В отличие от CHAR параметр "длина" указывает максимальное число символов в строке. Например: столбец у нас определен как VARCHAR(100), а записали мы туда всего 7 символов. Следовательно, в памяти выделится 7 байт, а не 100, как выделилось бы, используя мы CHAR.

Если тебе нужно запихнуть в базу большой текстовый блок, то символьными типами ты не сможешь воспользоваться, так как они слишком малы. На помощь приходят текстовые типы данных. Я укажу один основной: TEXT. В нем под каждый символ отводится по одному байту.

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

Создание таблиц

Таблица создается командой

CREATE TABLE имя_таблицы (<Имя_столбца> <тип_данных> [(<размер>)]);

Вообще, определение столбцов может быть разным. Я показал наиболее примитивный способ. Давай создадим нашу первую таблицу.

CREATE TABLE news (

-> news_id INT NOT NULL AUTO_INCREMENT,

-> heading VARCHAR(50),

-> body TEXT,

-> date DATE,

-> author VARCHAR(15),

-> mail VARCHAR(30),

-> PRIMARY KEY(news_id));

В конце каждой строчки жмахай Enter. Компилятор, пока не встретит (;), не начнет выполнение кода. Если после всего, что ты проделал, ты получишь ответ: "ERROR трали-вали", значит, ты где-то не попал по клаве. Переделывай. А вот если сервер вернет: "Query OK, rows affected трали-вали", то я тебя поздравляю! У тебя теперь есть своя таблица. Давай над ней глумиться.

Разбор полетов

Напечатай в командной строке "describe news;" и ты получишь такой ответ:

Давай разбираться. Графа Field показывает, какие столбцы у тебя есть. Столбец Type расскажет тебе о типах тех столбцов, которые указаны в графе Field. Если в следующей графе стоит YES, значит, значение поля может быть NULL. Наличие PRI в графе сообщает о том, что данное поле является индексным при сортировке. В графе Default указывается, какие значение указываются по умолчанию. И последняя графа Extra указывает, какими дополнительными атрибутами обладает поле. В данном случае поле news_id увеличивается на единицу каждый раз при вставке строки.


Спецвыпуск Xakep, номер #028, стр. 028-044-3, Do you speak SQL?

Do you speak SQL?

GLAZъ (glazy@mail.ru)

Спецвыпуск Xakep, номер #028, стр. 028-044-3

Теперь давай что-нибудь добавим в таблицу. Добавление идет по команде

INSERT INTO имя_таблицы VALUES(выражение1,...);

Печатай в командной строке:

INSERT INTO news

->VALUES(NULL, 'Spez', 'Reading X-Spez',

->'04-02-2003', 'GLAZ', 'glazy@mail.ru');

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

INSERT INTO имя_таблицы (столбец1, столбец2) VALUES (значение1, значение2);

Запрос SELECT

Теперь надо как-то увидеть данные, которые мы ввели. Делается это запросом SELECT. Вообще, этот запрос является основной и самой важной частью языка SQL. Собственно, на нем и основывается весь язык. Синтаксис запроса SELECT может быть очень сложным. Но на практике обычно применяется облегченный вариант команды:

SELECT [DISTINCT | ALL] выражение [INTO имя_новой_таблицы]

FROM таблица/таблицы

[WHERE выражение_поиска]

[GROUP BY столбец1,...]

[ORDER BY условие_сортировки [ASC | DESC]];

Вот такой огромный запрос может быть. И это не предел! Давай рассмотрим каждую его часть.

- ALL. Если указан этот параметр, выводятся все данные, возвращенные запросом. Он стоит по умолчанию, поэтому его можно не указывать.

- DISTINCT. Результат запроса может содержать повторяющиеся данные. Вот если указан этот параметр, то повторяющиеся данные будут снесены. Удобно, например, когда тебе надо сосчитать число уникальных покупателей в твоем веб-магазине.

- <выражение> указывает, какие поля должны быть выбраны. Если указан символ *, то будут выбраны ВСЕ поля, имеющиеся в таблице (или таблицах).

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

- FROM. Здесь ты указываешь, из каких таблиц ты хочешь, чтоб были выбраны данные. Если ты не используешь столбец из какой-нибудь таблицы в выборке данных, но используешь его в другом месте (GROUP BY или ORDER BY), он все равно должен быть написан в этом разделе.

- WHERE. Раздел предназначен для ограничения количества строк, включаемых в результат выборки. Будут включены строки, удовлетворяющие логическому условию, записанному в "выражении_поиска". Выражение может сравниваться с константой, содержать различные операторы и функции. Например:

SELECT * FROM table WHERE number='1'; или SELECT * FROM table WHERE number > '1';

Расскажу про основные.

Начнем с операторов сравнения:

= - Равно;

> - Больше;

< - Меньше;


Спецвыпуск Xakep, номер #028, стр. 028-044-4, Do you speak SQL?

Do you speak SQL?

GLAZъ (glazy@mail.ru)

Спецвыпуск Xakep, номер #028, стр. 028-044-4

>= - Больше или равно;

<= - Меньше или равно;

<> - Не равно;

Ими можно пользоваться и при сравнении строк. При этом меньшим считается тот элемент, который стоит раньше в таблице ASCII. Например, буква "А" будет меньше "Б", но "а" будет больше "Б". Кстати, при сравнении строк ты можешь использовать оператор LIKE, он почти эквивалентен "=", только позволяет искать, к примеру, слова с одинаковым началом.

В запросе можно использовать булевы операторы (логические), т.е. AND, OR, NOT.

Пример:

SELECT * FROM articles WHERE author LIKE "GLAZ" AND number_articles > '1';

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

SELECT * FROM authors WHERE nick LIKE "GLAZ" OR nick LIKE "Dronich" OR ...;

Если авторов много, то умрем за клавой, перечисляя их всех. Смотри, как это красиво делается, используя IN:

SELECT * FROM authors WHERE nick IN ("GLAZ", "Dronich", ...);

Вот как стало все удобно и понятно, а главное сухо!

Есть еще такой оператор, как IS NULL. Разберем его на примере:

SELECT * FROM news WHERE author IS NULL;

Запрос возвратит всех авторов, которые пожелали остаться анонимными. Понял, для чего он? Для тех, кто в танке, поясняю: для проверки заполнено ли поле.

Ну и напоследок скажу об операторах, которые позволяют делать выборку данных по шаблону. Встречайте: "%" и "_". Первый означает несколько символов, второй - один. Показываю:

SELECT * FROM xsauthors WHERE nick LIKE "D%";

Запрос возвратит авторов: Dronich, Dr.Cod, Donor, Danya и т.д. Думаю, что со вторым оператором все понятно.

Чтобы узнать, какие дополнительные функции и операторы поддерживаются твоей СУБД, читай мануалы.

- GROUP BY позволяет выполнять группировку данных по столбцу или столбцам таким образом, что для всех строк с одинаковым значением в столбце, по которому выполняется группировка, в результате выборки будет возвращена всего одна строка. Например, когда ты хочешь просуммировать заказы в интернет-магазине за месяц и вывести результат в виде таблицы с полями КЛИЕНТ и СУММА.

Фишка в том, что в начале запроса помимо существующих полей можно указать одну из групповых функций - MAX, MIN, SUM или COUNT (это наиболее используемые, их на самом деле побольше). Запрос, считающий затраты клиента, будет выглядеть как:

SELECT name, SUM(paid) FROM shop_paiments GROUP BY name;

Здесь "name" - имя столбца с именами клиентов, а "paid" - имя столбца с суммами их заказов. Если ты хочешь просто узнать число покупок или максимальную сумму заказа, заменяй итоговую функцию на COUNT или MAX соответственно, и будет тебе счастье :).

- ORDER BY используется для сортировки вывода запросов. После этой команды пишутся столбцы, по которым выполняется сортировка, а после них тип сортировки: ASC или DESC, что значит по возрастанию или убыванию соответственно. По умолчанию стоит ASC. Втыкай пример:

SELECT * FROM authors ORDER BY nick;

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

Турбомоддинг

Фью! Запрос SELECT был успешно добит! Теперь вернемся к нашей таблице. Посмотрим, что мы в ней натворили. Напомню, что мы остановились на том, что добавили одну строку. Давай посмотрим, что получилось. Пиши в командной строке:


Спецвыпуск Xakep, номер #028, стр. 028-044-5, Do you speak SQL?

Do you speak SQL?

GLAZъ (glazy@mail.ru)

Спецвыпуск Xakep, номер #028, стр. 028-044-5

SELECT * FROM news;

Этим самым мы увидим всю таблицу, как она есть:

Зырим... Что-то не то с датой. А-ха! Мы неправильно ее указали. Давай переделаем. На этот случай есть команда:

UPDATE имя_таблицы SET столбец=измененные_данные WHERE выражение.

Поясню: ты указываешь, в каком столбце тебе надо поменять данные и на что, а после WHERE ты каким-то образом определяешь строчку (или несколько). WHERE можно не указывать, тогда во всех полях столбца установится значение, которое ты указал в SET. Кстати, о SET. Ты можешь указать в нем не просто константу, а выражение, если тебе надо что-то пересчитать. Но не забудь о приведении типов!

Давай менять данные в нашей таблице:

UPDATE news SET date='2003-02-04' WHERE news_id='1';

Получаем ответ "Query OK, трали-вали". Смотрим в таблицу. О, теперь то, что надо!

Пусть теперь нам надо снести новость. Все сносится командой DELETE:

DELETE FROM имя_таблицы WHERE выражения_поиска;

По окончании выполнения запроса ты получишь сведения - сколько строк снесено. Давай сносить у нас:

DELETE FROM news WHERE news_id='1';

Теперь посмотрим, что мы натворили. Вызывай таблицу. Ты должен увидеть следующее:

Вот так. Ну раз уж сносить, то сносить по полной! Снесем таблицу на х... т.е. совсем! Снос происходит при помощи команды:

DROP TABLE имя_таблицы [имя_таблицы2];

При этом никаких UNDO не предусмотрено :). Ну, вот и все, теперь у нас нет таблицы.

В память о ней рассмотрим последнюю функцию для работы с ними.

ALTER TABLE позволяет изменять определение таблицы, т.е. добавлять/убирать столбцы. Добавление имеет следующий синтаксис:

ALTER TABLE имя_таблицы ADD <имя_столбца> <тип_данных> [(<размер>)];

Удаление соответственно:

ALTER TABLE имя_таблицы DROP имя_столбца;

С помощью этой же команды мы можем переопределить столбец:

ALTER TABLE имя_таблицы CHANGE <старое_имя_столбца> <новый_тип_данных> [(<новый_размер>)];

Exit

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

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

О строках.

Каждая строка заключается в '' или "".

Если тебе нужно вставить в таблицу какой-нибудь служебный символ, используй \. Существуют такие комбинации:

\n - символ новой строки;

\t - символ табуляции;

\r - возврат каретки;

\b - backspace;

\' - ';

\" - ";

\\ - \;

\% - %;

\_ - _;


Спецвыпуск Xakep, номер #028, стр. 028-048-1, ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

fenix (f3x@land.ru)

Спецвыпуск Xakep, номер #028, стр. 028-048-1

Сколько девушек красивых,

а ты сидишь - лобаешь сайт!

Из хацкерского эпоса

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

ВВЕДЕНИЕ

Данная СУБД получила широкое распространение в Инете благодаря своей простоте (по сравнению с такой годзиллой, как Oracle) и богатым функциональным возможностям. Если в двух словах, то mysql - это sql-подобный язык структурированных запросов к базам данных со своей системой управления. Семантика и синтаксис его слегка отличаются как от MsSQL, так и, в частности, от Pl/SQL (Oracle). По словам разработчиков (http://www.mysql.com), язык может оперировать с 10 миллионами записей без существенной потери производительности (релизы 3.х), что на самом деле спорно, но не в этом суть. Совсем недавно вышла 4 версия данного продукта, в которой появилось много новых дополнительных фич, как то: поддержка ssl, частичная поддержка вложенных запросов и триггеров (частичная по сравнению с Oracle, MsSQL :).

Для чего тебе эта СУБД, ты, наверное, уже знаешь - ну, хотя бы для того, чтобы замутить себе динамически обновляемый сайт, контент которого берется из этих самих баз (базы) посредством одного из скриптовых языков (типа Perl, PHP) плюс структурированные запросы к базам. Итак, с мелочами и вводной теорией немного разобрались, перейдем к более практическим вещам.

ГДЕ ВЗЯТЬ?

Первым делом бежишь на http://www.mysql.com/downloads/ и качаешь одну из версий под необходимую тебе платформу Win32 или *nix. Далее здесь рассматривается версия 3.23.42 для Win32 и *nix (FreeBSD 4.7-STABLE). Версия для Win32 весит 13.3 Мб, версия Stanard для FreeBSD 4.x - 4.9 Мб. Версию 4.0 качать не советую, она еще глючная, хотя уже вышла версия 4.1, которая вроде бы уже пропатчена и работает постабильней. Вообще, качай любую из версий, которая тебе нравится, это не имеет принципиального значения.

WIN32-ИНСТАЛЛЯЦИЯ

В этом случае у тебя сложностей возникнуть не должно. Сливаешь exe'шник, запускаешь его и ждешь, пока софтина заинсталлится, после чего тебе будет предложено ввести рутовое имя и пароль для доступа к базам данных. Будь внимателен и запомни, что ты ввел, так как потом эти данные будут использоваться для доступа к твоим базам, администрирования и создания других аккаунтов. Жми дальше, прога свернется в системную панель, в которой ты увидишь иконку mysql - светофор с горящим зеленым светом; сие означает, что mysql запущен и готов к работе (обработке запросов). Если горит красный свет - значит, что-то не так, но это случается редко, обычно когда юзер по своей халатности стирает файл c:\windows\my.ini, в котором хранятся настройки mysql:

#секция с настройками mysql

[mysqld]

#каталог, куда установлен mysql

basedir=C:/USR/MYSQL

#IP к которому происходит привязка mysql

#bind-address=10.0.0.6

#каталог для баз данных

datadir=C:/USR/MYSQL/data

#кодировка для баз данных

#language=C:/USR/MYSQL/share/your_language_directory


Спецвыпуск Xakep, номер #028, стр. 028-048-2, ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

fenix (f3x@land.ru)

Спецвыпуск Xakep, номер #028, стр. 028-048-2

#лог файл

#slow query log#=

#каталог для хранения временных файлов

#tmpdir#=

#порт, на котором слушает mysql

#port=3306

#размер буфера

#set-variable=key_buffer=16M

#секция с настройками интерфейса к mysql

[WinMySQLadmin]

#путь к интерфейсу

Server=C:/USR/MYSQL/bin/mysqld-opt.exe

#админовский пароль для доступа к mysql

user=root

password=123

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

Mysql позволяет удаленное подключение к себе, что ты можешь использовать для удаленного администрирования и редактирования баз данных. Для этого он слушает на хосте 3306 порт, в чем ты можешь убедиться, набрав в командной строке "netstat -an":

UNIX (FREEBSD 4.X) ИНСТАЛЛЯЦИЯ

Заливаешь себе соответственные бинарники с http://www.mysql.com/downloads/. Разархивируешь их tar'ом (tar xzvf mysql-x.x.x-i368.tar.gz) и инсталлишь (процедура инсталляции стандартная и никаких затруднений у тебя вызвать не должна, поэтому здесь и не рассматривается). По дефолту mysqld устанавливается в /usr/local/libexec/ и базы в /usr/local/var/mysql в FreeBSD 4.х. Для того чтобы убедиться, что все нормально, набираешь в консоли:

altair# ps -afx|grep mysqld

и видишь примерно следующее:

т. е. процесс mysqld запущен - все нормально. Можешь еще набрать "sockstat -4|grep mysqld" и убедиться, что порт 3306 открыт:

НАСТРОЙКА В WIN32 И UNIX (FREEBSD 4.X)

Заходишь в каталог, в котором установлен mysql, работать придется в режиме командной строки с помощью sql-запросов. Все нижеописанное будет относиться как к настройке в *nix, так и для Win32, с разницей разве что в путях.

Итак, рассмотрим сначала все процессы в общем. Набрав mysql, ты попадешь в среду управления mysql (клиент, монитор), в результате чего будет выдано соответствующее приглашения вида:

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

При установке mysql создает 2 базы данных по дефолту - это test, назначение этой базы понятно из ее названия, и базу mysql, которая является служебной и в таблицах которой хранятся учетные записи пользователей, которые могут работать с определенными администратором базами, их права. Кстати, система присвоения прав является очень гибкой и функциональной для каждой отдельной учетной записи, так, например, пользователь root (администратор) может иметь доступ ко всем базам и делать с ними все что угодно, создавать (create) и удалять (delete) базы данных, вставлять (insert), обновлять (update) и совершать прочие подобные операции над записями баз данных, то есть данному пользователю доступны все права и, соответственно, все функции. Другой пользователь с соответствующими настройками сможет работать только с одной необходимой ему базой данных с возможностью только создавать в данной базе таблицы и редактировать записи - без возможности удаления данной базы данных и без возможности доступа к базам данным других пользователей. Так в двух словах мы вроде бы по теории пробежались, а теперь непосредственно к делу, попробуем это все дело на практике.


Спецвыпуск Xakep, номер #028, стр. 028-048-3, ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

fenix (f3x@land.ru)

Спецвыпуск Xakep, номер #028, стр. 028-048-3

Итак, входим в монитор и получаем его приглашение (подразумевается, что по дефолту учетная запись рута не содержит пароля):

mysql>

посмотрим, какие базы сейчас установлены:

Каждый запрос к базе данных должен завершаться "точкой с запятой". Перейдем в базу mysql и посмотрим список ее таблиц:

mysql> \u mysql

Database changed

(аналогичным образом можно войти в любую другую базу, введя ее имя с ключом \u)

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

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

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

mysql> select * from user;

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

На экран будут выведены все записи из таблицы user для того чтобы просмотреть какую-то определенную запись, например, запись пользователя root; необходимо задать критерий выборки:

mysql> select * from user where user='root';

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

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

НАСТРОЙКА УЧЕТНЫХ ЗАПИСЕЙ В MYSQL

Как было замечено выше, самый главный пользователь это root, который имеет полный доступ к базам данных; вначале необходимо задать для него пароль, так как по умолчанию он не установлен (в Unix инсталляции):

altair# mysql -u root mysql

данная команда, означает запуск mysql-клиента по имени mysql от имени пользователя root (-u root) и выбор базы данных mysql. Далее откроется консоль программы mysql.

Делаем обычный sql-запрос для обновления записи рута:

mysql>update user SET password=PASSWORD('new_password') where user='root';

Этот запрос обновит поля password для таблицы user, в которой поля user='root'. Другими словами, для пользователя root будет установлен пароль new_password, закриптованный по методу PASSWORD().

Теперь необходимо заставить mysql принять изменения:

mysql>flush privileges;

Есть еще один способ (только для версий mysql, бOльших 3.22):

mysql>set password for root=PASSWORD('new_password');

или еще так с помощью программы mysqladmin:

altair# mysqladmin -u root password new_password

Теперь пользователь root не сможет просто так войти в программу mysql. Набираем:

mysql>exit

и убеждаемся в этом:


Спецвыпуск Xakep, номер #028, стр. 028-048-4, ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

fenix (f3x@land.ru)

Спецвыпуск Xakep, номер #028, стр. 028-048-4

#altair>mysql -u root

ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)

Вход с паролем осуществляется с ключом -p:

Altair#>mysql -u root -p

Enter password: *******

Вот и все. Если пароль был случайно забыт, чтобы его задать по новой, тебе придется стереть файлы mysql.frm mysql.MYI и mysql.MYD из папки с базами данных, затем запустить скрипт mysql_install_db и повторить все по новой.

Хорошо было бы добавить пользователей базы данных вместе с их правами и паролями.

Для этого будем использовать выражение grant. Можно опять вносить прямые поправки в таблицы mysql, но это будет слишком неудобно. Итак:

mysql>grant all privileges on *.* to admin@localhost identified by 'some_password' with grant option;

Это создаст пользователя admin, который сможет делать все что захочет со всеми базами данных и вообще mysql-ем, подключаясь только с localhost и указывая пароль some_password.

Чтобы admin мог подключаться с других хостов, необходимо набрать следующее:

mysql>grant all privileges on *.* to admin@"%" identified by ' some_password' with grant option;

*.* означает, к каким базам данных и таблицам имеет доступ admin. Обозначения делаются следующим образом: "база.таблица".

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

mysql>grant select,insert,update,delete,index,create,drop on *.* to poweruser@localhost identified by 'user_password';

Такой пользователь сможет использовать все основные запросы для данных в таблицах, а также создавать и удалять базы данных. Однако он не сможет выключать, перезапускать демон mysql (серверную часть), смотреть на список процессов, не будет иметь доступ к файлам сервера, а также сможет подключаться к базе данных только с localhost'а и указывая свой пароль.

Вот все возможные опции для прав:

select, insert, update, delete - одноименные запросы операций с данными и записями;

create, drop - создание и удаление баз данных и таблиц;

grant, alter - совершение операций с привилегиями;

index - операции с индексами в таблицах;

references - работа со ссылками в базах данных и таблицах;

reload, shutdown, process - управление сервером mysql. Перезапустить, убить и посмотреть все подключения соответственно;

file - позволяет загонять в базу данных любой читабельный файл с сервера.

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

ВСПОМОГАТЕЛЬНЫЕ ИНСТРУМЕНТЫ

Ты, наверное, думаешь сейчас, как же это все неудобно и старомодно без графического интерфейса - ведь на дворе XXI век. Не переживай, такие средства есть, и мы рассмотрим два самых распространенных. Для Win32 я настоятельно рекомендую mysqlfront, данную софтину можно слить здесь: http://www.aiut.com.pl/pub/mysqlfront/. Очень удобный клиент для работы с mysql, прост в установке и использовании, куча настраиваемых параметров, возможно сохранение выполняемых запросов, экспорт/импорт и т. д. Самое главное в этой тулзе - это минимум ручной работы. Под *nix (KDE, Gnome) наверняка также существуют аналогичные клиенты, но я их не встречал, а если честно - и не пытался искать, привык все делать ручками. Пользователями всякого рода юнихов нет необходимости впадать в панику, так как существует web-панель для работы с mysql - phpMyAdmin, то есть данное решение платформонезависимое и может использоваться на любой операционке с корректно установленным веб-серваком, на любом хостинге и т. д.


Спецвыпуск Xakep, номер #028, стр. 028-048-5, ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

ДВИЖОК, РАБОТАЮЩИЙ С БД - ставим и настраиваем MySQL

fenix (f3x@land.ru)

Спецвыпуск Xakep, номер #028, стр. 028-048-5

Установка данного пакета примитивна и заключается в том, что необходимо распаковать скачанный архив в корневой каталог какого-нибудь веб-сервера, в единственном файле конфигурации config.inc.php необходимо прописать базу данных, к которой будет производиться подключение, хост, на котором работает серверная часть (демон) mysql и валидного пользователя. После этого в браузере набираешь http://localhost/phpMyAdmin-1.4/, и все, теперь в любое время дня и ночи, из любого места сети ты сможешь получить доступ к своим базам.

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


Спецвыпуск Xakep, номер #028, стр. 028-054-1, Пров отдыхает: регистрация своими руками

Пров отдыхает: регистрация своими руками

Спецвыпуск Xakep, номер #028, стр. 028-054-1

Регистрируем домен и привязываем его к статическому IP

2 примата (pishi_chto_hochesh@mgff.pp.ru, unknown@ua.fm)

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

Матчасть

Сразу после того, как твоя мужественная рука уверенно бьет по ентеру в строке УРЛ браузера (после unkip.dot.srv.ru, например), твой комп запрашивает IP-адрес машины, на которой лежит желаемая пага. Запрашивает он у своего DNS-сервера, на котором располагается база данных соответствий IP-адресов доменным именам (DNS - Domain Name System - служба, занимающаяся преобразованием доменного имени в айпишник; DNS-сервер - комп, на котором эта служба находится). Если у него нет данных о запрашиваемом имени, он обращается к корневому (Root) DNS-серверу. А у этого есть хотя бы адрес DNS-сервера, отвечающего за верхнюю зону искомого доменного имени. Хотя, на самом деле, обычно корневые серверы содержат инфу о большинстве доменов верхнего уровня и могут сразу дать адрес DNS-сервера домена второго уровня. Тот, если не имеет нужного адреса, обращается к серверу домена третьего уровня и так далее, пока не найдем желаемый айпишник. Если не понял - смотри картинку.

Так вот, за каждую зону отвечает минимум 2 DNS-сервера - первичный и вторичный. Вторичных может быть несколько, первичный - всегда один. На первичном DNS-сервере хранится оригинальная база данных, на вторичных - ее копии, которые периодически обновляются с оригинала. Вторичные DNS-сервера - своего рода резервные копии первичного: если первичный лежит, запрос переадресуется на вторичные. Теоретически, если б разного рода журналы не давали подробных руководств по выводу серверов из строя, получается - достаточно было бы и одного DNS-сервера :). Но это утопия... Кроме того, если первичный сервер лег надолго и не откликается на запросы вторичных, они удаляют у себя записи о доменном имени, и оно становится недоступным.

Регимся в РОСНИИРОСе

Итак сперва нам надо зарегить (купить) домен второго уровня в зоне .ru. Этим непосредственно занимается контора под названием "Региональный Сетевой Информационный Центр" - RU-CENTER (http://www.nic.ru). Но сначала нам надо зарегистрироваться в базе РОСНИИРОСа (http://www.ripn.net) - администратора Российского национального домена верхнего уровня ru - как физическое лицо. Заходим http://www.ripn.net => регистрация доменов => Раздел для зарегистрированных клиентов => Web-формы для регистрации: физических лиц. Вводим идентификатор (что-то типа логина) - можешь ввести свой ник или инициалы (например, MG). Постфикс -RIPN добавляется автоматически. "Продолжаем". Далее тривиальные вопросы о личной жизни... Анкета проверяется вручную, так что откровенный бред лучше не нести. "Далее". Теперь надо выбрать чела, который будет нас технически поддерживать. Точнее не чела, а службу. Нет знакомых и не из чего выбрать? Тогда жми "зарегистрировать" и регистрируй свою собственную службу техподдержки. Да, да, да, контактное лицо - тоже ты! Теперь подтверди данные и жди два дня, пока запрос обработается. Регистрировать домен можно только после регистрации в базе РОСНИИРОСа :(.


Спецвыпуск Xakep, номер #028, стр. 028-054-2, Пров отдыхает: регистрация своими руками

Пров отдыхает: регистрация своими руками

Спецвыпуск Xakep, номер #028, стр. 028-054-2

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

Регим домен

Как уже было сказано в начале прошлого абзаца, регистрацией доменов в зоне .ru занимается ру-центр. К нему мы и пойдем: nic.ru. Здесь мимолетом знакомишься с прайсом, вводишь под надписью "регистрация доменных имен" твой новый домен и жмешь "ок". Далее возможны два варианта развития событий:

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

2. Домен (для тех, кто попал на пункт 1 - наконец-то) свободен. Если у тебя есть 10-25 единиц лишней зелени, то можешь заказать себе вторичный и первичный DNS-сервера. Они предоставляются самим ру-центром и им же автоматически под тебя настраиваются. Если ты таки решился воспользоваться этой услугой, то можешь выбрать между первичным Auto и Standard DNS-сервером. У них всего два отличия: 1) - в пакете primary-standard можно самостоятельно вносить в зону записи (типа SOA, NS, MX, A, CNAME, PTR); 2) - за него придется выложить на 15 баков в год больше. Если твой бюджет не выдержит эти незапланированные расходы на содержание DNS-серверов, выбирай только регистрацию домена, хлебни пивка, а через пару абзацев я вкратце расскажу о халявных DNS'ах... Теперь настраивай, если желаешь, web- и mail-forwarding. Справился? На следующем экране во избежание возникновения всякого рода сомнений советую быстро жать "продолжить". Нажал? Хорошо, это был счет. Теперь надо ввести свои данные. Если ты читаешь эту статью исключительно от безделья и скуки, можешь вводить данные. Есть еще один вариант - перейти по ссылке "получить данные из РОСНИИРОСа", залогиниться в базу РОСНИИРОСа и "передать данные" в ру-центр. Дальше "запоминаем пароль" и номер договора и "отправляем анкету". Теперь надо бы выписать счет и заключить договор (без этого домен не зарегят). Жми "оформить заказ" и выписывай счет. Теперь распечатывай и иди платить в сберкассу.

Осталось заключить договор. Рули: ру-центр => Для клиентов => Заключить договор. Выбирай "Как заключить договор физическому лицу", находи пятый пункт и переписывай почтовый адрес ру-центра. Возвращайся назад, качай форму договора для физических лиц, подставляй свои данные, распечатывай в двух экземплярах и отправляй в ру-центр (по обычной почте!!!). Теперь осталось только дождаться, пока этот средневековый низкоэффективный способ передачи данных выполнит возложенную на него задачу. Хотя можешь самолично словить рогатого и отправиться к ним в офис. Все! Готово! Мойсайт.ру доступен любому юзверю с любого компа!!!


Спецвыпуск Xakep, номер #028, стр. 028-054-3, Пров отдыхает: регистрация своими руками

Пров отдыхает: регистрация своими руками

Спецвыпуск Xakep, номер #028, стр. 028-054-3

Безбюджетный вариант

Банальный случай: денег нет. Нет, ждать, пока появятся, мы не будем. Домены com.ru, org.ru, net.ru и pp.ru раздаются абсолютно бесплатно всем желающим. Хотя, конечно, всем раздается только pp.ru, а остальные - исключительно организациям. Будучи законопослушными и честными гражданами, не будем обманывать товарищей из РОСНИИРОСа и удовлетворимся вариантом pp.ru. Так что придумывай домен третьего уровня и не забудь на сайте РОСНИИРОСа проверить занятость этого домена. Можно, конечно, на другом сайте, предоставляющим whois-сервис, но "из первых рук" надежней. Для себя я выбрал mgff.pp.ru. А теперь надо организовать себе DNS-сервера - без этого домен не зарегишь. Поскольку дефицит либеральных ценностей не исчез, в очередной раз воздаем хвалу величайшему земному явлению - шаре - и набиваем mydomain.com. Эта служба бесплатно предоставляет первичный и вторичный DNS-сервера и еще очень много интересных фичей, которые, к сожалению, к данной статье не относятся. Жмем "Free Signup" и, как водится, регистрируемся. Вводи мыло - оно будет выступать в качестве идентификатора. Далее в очередной раз пара личных вопросов, не вызывающих, я думаю, затруднений. Теперь ищи линк "add a domain to my domain list" и тыкай в него крысой. В текстовом поле вводи домен, который ты регистрируешь в зоне pp.ru (у меня - mgff.pp.ru) и из комбо-бокса выбирай второй пункт. Теперь находи "IP-pointing", переходи по ссылке и вводи айпишник твоего сайта (на который будет переходить юзер при обращении к твоеимя.pp.ru). Подтверждай изменения. Готово? А теперь можешь побаловаться с переадресацией почты и остальными фишками. Да, не забудь записать адреса DNS-серверов mydomain'a - они нам еще пригодятся.

Теперь можно и в зоне pp.ru регистрироваться. Двигай на ripn.net (хотя можно и на ру-центр) => регистрация доменов => Регистрация доменов, прочие услуги: третьего уровня в зонах .COM.RU, .NET.RU, .ORG.RU, .PP.RU => Web-формы для регистрации: доменов. Вводи свой роснииросовский логин и "входи". Теперь пиши домен, на который ты настраивал mydomain.com и копируй в поле "nserver" сохраненные адреса DNS-серверов mydomain.com. Все остальное, как видишь, уже есть в базе. Есть. Поставлено в очередь на обработку вручную. Осталось подождать пару деньков, и tvoyapaga.pp.ru будет всеобще доступна. Шара форева!

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


Спецвыпуск Xakep, номер #028, стр. 028-054-4, Пров отдыхает: регистрация своими руками

Пров отдыхает: регистрация своими руками

Спецвыпуск Xakep, номер #028, стр. 028-054-4

Домены в зоне msk.ru, msk.su, spb.ru или spb.su можно получить (на ту же шару, естественно) на http://free.msk.su

Некоторые сайты, предоставляющие халявный DNS:

Mydomain (http://mydomain.com)

GraniteCanyon (http://soa.granitecanyon.com)

ZoneEdit (http://www.zoneedit.com)


Спецвыпуск Xakep, номер #028, стр. 028-056-1, Обнаженная теория об XML.

Обнаженная теория об XML.

DarkSergeant

Спецвыпуск Xakep, номер #028, стр. 028-056-1

(darksergeant@inbox.ru)

Еще в 1960-ом году для переноса документов между различными платформами был разработан язык SGML(Standard Generalized Markup Language). Но хотя SGML – мощный и достаточно универсальный язык, но из-за своей сложности и дороговизны, не получил широко распространения, даже не смотря на то, что МинОбороны США приняло его в качестве стандарта для описания технической документации.

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

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

В последние годы 1990-x, консорциум W3C понял, что HTML из простого языка вырос в большого такого монстра, и уже не справляется со своими обязанностями. Также стало понятно, что жестко заданных в стандарте тегов не хватает при сложной разметке документа.

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

HTML (вернее XHTML) хоть и был разработан раньше, чем XML, теперь является подмножеством XML-я.

XML – Расширяемый Язык Разметки

Основным понятием языка XML является ЭЛЕМЕНТ.

Элемент - это конструкция вида <Name></Name>, где вместо Name, может быть произвольное имя. Если внутренности элемента пусты, то возможна краткая запись - <Name/>. <Name> - называется, открывающим тегом, </Name> - закрывающим тегом. <Name/> - пустой элемент. Имя в открывающем теге и закрывающем теге, должно быть одинаковым. Регистр имени имеет значение, например, Name и name – это разные имена.

Внутрь каждого элемента можно вставлять любые другие элементы, а также можно вставлять произвольный текст - <User><Name>Вася</Name></User>.

На верхнем уровне документа может быть только один элемент, т.е. весь файл должен состоят из одного элемента, а все остальные элементы и текст должны быть вложены в этот главный элемент. Главный элемент обычно называют корневым(root) элементом. К каждому элементу могут быть приписаны атрибуты. Смысловая разница между внутренним элементом и атрибутом небольшая. В атрибуты обычно выносят простые свойства, который не имеют сложной структуры. Например, картинку размера 320х200 можно задать: <Image> <Width> 320 </Width> <Height> 200 </Height> <Path> c:/grjaznoe_porno/a.jpg </Path> </Image>, но намного удобнее задавать ту же самую инфу (высоту, ширину, путь) через атрибуты: <Image Width=”320” Height=”200” Path=”c:/grjaznoe_porno/a.jpg”/>. Обращаю твое внимание на то, что в XML-е, в отличии от HTML-я, все атрибуты должны браться в кавычки.


Спецвыпуск Xakep, номер #028, стр. 028-056-2, Обнаженная теория об XML.

Обнаженная теория об XML.

DarkSergeant

Спецвыпуск Xakep, номер #028, стр. 028-056-2

Если ты уже писал на HTML-е, то для тебя все эти понятия будут уже знакомы. Замечу только, что синтаксис языка XML более строгий, чем у HTML.

Так в XML-е, каждый открывающий тег должен быть закрыт, также недопустимы перекрестные теги - <User> <Name> Вася </User> </Name> - так нельзя.

XSD – Определение схемы XML-документа

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

Возьмем простенький XSD-файл и посмотрим, что в нем написано.

//корневой элемент схемы, в атрибутах видны ссылки на схемы, в которых написано, какая должна быть структура у схемы. Что-нибудь понял? :) Если нет, то не страшно. Надо просто запомнить, что так надо писать, и все.

<xs:schema id="Logins" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

//эта строчка говорит, что в нашем документе главным тегом будет являться Logins.

<xs:element name="Logins">

//Logins является сложным типом. Сложный тип – это все, что не число, строка и т.д.

<xs:complexType>

//choice говорит, что Logins является списком, unbounded говорит, что в списке может быть неограниченное кол-во элементов

<xs:choice maxOccurs="unbounded">

//Список Logins содержит элемент Login

<xs:element name="Login">

//Login является сложным типом

<xs:complexType>

//Login является записью/структурой/последовательностью элементов

<xs:sequence>

//У Login-а есть поле Name типа строка, это поле оформлено как элемент, minOccurs=”0” означает, что у Login-а данного поля может и не быть.

<xs:element name="Name" type="xs:string" minOccurs="0" />

//Остальные поля определяются аналогично полю Name

<xs:element name="Password" type="xs:string" minOccurs="0" />

<xs:element name="FullName" type="xs:string" minOccurs="0" />

<xs:element name="Nick" type="xs:string" minOccurs="0" />

<xs:element name="e-mail" type="xs:string" minOccurs="0" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:choice>

</xs:complexType>

</xs:element>

</xs:schema>

XPath – XML-ный путь

Для указания, а также выборки каких-либо данных (элементов) из XML-документа была придумана такая фишка, как XPath. XPath с одной стороны напоминает обычный файловый путь, с другой – похож на SQL (я надеюсь, что ты хотя бы поверхностно знаешь что это такое).


Спецвыпуск Xakep, номер #028, стр. 028-056-3, Обнаженная теория об XML.

Обнаженная теория об XML.

DarkSergeant

Спецвыпуск Xakep, номер #028, стр. 028-056-3

Возьмем простенький XML-документ:

<Users>

<User id=”1”>

<Name>Вася</Name>

<Role>программист</Role>

<Role>дворник</Role>

<Role>потребитель денег</Role>

<Salary>200</Salary>

</User>

<User id=”2”>

<Name>Михаил Петрович</Name>

<Role>шеф</Role>

<Role>раздатчик денег</Role>

<Salary>2000</Salary>

</User>

<User id=”3”>

<Name>Маня</Name>

<Role>секретарша</Role>

<Role>массажистка шефа</Role>

<Role>потребитель денег</Role>

<Salary>1000</Salary>

</User>

<User id=”4”>

<Name>Юра</Name>

<Role>программист</Role>

<Role>потребитель денег</Role>

<Salary>500</Salary>

</User>

</Users>

и представим, что мы хотим узнать сколько получает массажистка шефа. Через XPath это делается в одну строчку: /Users/User[Role=”массажистка шефа”]/Salary. Или мы хотим узнать как зовут второго чела: /Users/User[1]/Name. Даже если мы хотим узнать сколько шеф должен платить сотрудникам, это все равно будет одна строчка: sum(/Users/User[Role=”потребитель денег”]/Salary).

Как можно заметить формат XPath-а очень прост: указываем путь к интересующему нас элементу (также, как и в файловой системе), а в квадратных скобках указываем условие-фильтр. Обращаю твое внимание на то, что XPath выбирает все элементы, которые удовлетворяют данному условию. На запрос /Users/User[Salary<1000] мы получим 2 элемента полностью описывающих юзера:

<User id=”1”>

<Name>Вася</Name>

<Role>программист</Role>

<Role>дворник</Role>

<Role>потребитель денег</Role>

<Salary>200</Salary>

</User>

<User id=”4”>

<Name>Юра</Name>

<Role>программист</Role>

<Role>потребитель денег</Role>

<Salary>500</Salary>

</User>

Если бы мы уточнили запрос /Users/User[Salary<1000]/Name, то на выходе были бы не целые юзеры, а только их имена.

<Name>Вася</Name>

<Name>Юра</Name>

Все вышеприведенные запросы начинались с корневого элемента, но если запрос начинается с двух слэшей, то ищутся элементы на произвольном уровне вложенности. Так запрос //Role вернет список всех обязанностей наших юзеров. XPath не производит оптимизации ответа, поэтому Role «программист» будет выведена 2 раза.

В качестве домашнего задания напиши XPath-выражение, которое возвращает имя любовницы шефа.

XSL – Расширяемый Язык Стиля

Изначально XSL разрабатывался для преобразования XML-я в HTML, но сейчас XSL используется для произвольной трансформации одного XML-я в другой. XSL является XML-ным документом, корневой элемент которого должен быть xsl:stylesheet. Далее в этот корневой элемент вставляются шаблоны - <xsl:template match="//User"></xsl:template>, где в атрибуте match указывается XPath для каких элементов будет выполняться данный шаблон. Внутри элемента xsl:template пишется то, на что мы хотим заменить выбранные элементы. Например, следующий XSL:


Спецвыпуск Xakep, номер #028, стр. 028-056-4, Обнаженная теория об XML.

Обнаженная теория об XML.

DarkSergeant

Спецвыпуск Xakep, номер #028, стр. 028-056-4

<xsl:stylesheet>

<xsl:template match="//User">

Пользователь

</xsl:template>

</xsl:stylesheet>

Если мы натравим данное XSL-преобразование на исходный документ, то в ответ получим слово «пользователь» в 4 копиях. Понятно, что такое редко кому надо, поэтому в языке XSL есть конструкция, которая позволяет вставлять куски исходного документа. Эта конструкция - <xsl:value-of select="Name"/>, где в атрибуте select опять же задается XPath. Для создания простенького HTML-списка пользователей можно использовать следующий XSL:

<xsl:stylesheet>

<xsl:template match="//User">

Пользователь <xsl:value-of select="Name"/><br/>

</xsl:template>

</xsl:stylesheet>

После применения этого XSL-я у нас получится красивый список:

Пользователь Вася<br/>

Пользователь Михаил Петрович<br/>

Пользователь Маня<br/>

Пользователь Юра<br/>

При трансформации XML-документа XSL-процессор (прога, которая выполняет XSL-преобразование) просто бежит по элементам из входного документа и применяет все XSL-шаблоны.

В сложных преобразованиях также используются конструкция <xsl:for-each select="//User"></xsl:for-each>, которая для каждого элемента из XPatha, указанного в select, добавляет в выходной документ то, что указано внутри этого элемента.

<xsl:stylesheet>

<xsl:template match="//User[Role=’раздатчик денег’]">

Босс <xsl:value-of select="Name"/><br/>

И его сотрудники:<br/>

<xsl:for-each select="//User[Role=’потребитель денег’]">

<xsl:value-of select="Name"/><br/>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

На выходе получается:

Босс Михаил Петрович<br/>

И его сотрудники:<br/>

Вася<br/>

Маня<br/>

Юра<br/>

Парсеры XML-документов

Для того, чтобы поработать с XML-документом - его надо загрузить. Грузить, конечно, можно и руками, но это долго, нудно и противно, тем более, что существует огромное количество уже готовых библиотек, в чем вся и прелесть XML-я. Все библиотеки основаны на одной из трех моделей/подходов: SAX, DOM и XmlReader.

Самый простой и мощный из них это DOM, далее идет XmlReader, а замыкает самый запутанный – SAX (недаром у него такое название :)), именно в таком порядке мы и будем их рассматривать.

DOM – Документно-Объектная Модель

Загрузка XML-файла при использовании библиотеки, основанной на DOM-модели, делается одной функцией xmlDom->Load(“My.xml”). Во время этого вызова библиотека загружает файл полностью в память, причем файл разбирается и по нему строится XML-дерево. Благодаря тому, что было построено дерево, библиотека позволяет не просто гулять по узлам, но и выполнять XPath-запросы.

XmlDocument doc = new XmlDocument();

doc.Load("users.xml");

XmlNodeList nameNodes = doc.SelectNodes("//User[Role='программист']/Name");


Спецвыпуск Xakep, номер #028, стр. 028-056-5, Обнаженная теория об XML.

Обнаженная теория об XML.

DarkSergeant

Спецвыпуск Xakep, номер #028, стр. 028-056-5

foreach (XmlNode nameNode in nameNodes)

{

Console.WriteLine(nameNode.InnerText);

}

Данная программка выведет два имени:

Вася

Юра

Если нам надо просто «погулять» по элементам, то используются следующие фичи:

У каждого элемента есть ссылка на родительский элемент(xmlNode.ParentNode), а также список дочерних узлов (xmlNode.ChildNode). Корневой элемент документа получается через xmlNode.DocumentElement. xmlNode.Attributes – возвращает список всех атрибутов, приписанных к данному элементу.

Предыдущий пример можно было сделать и без XPath-запроса, вручную побегав по XML-дереву:

XmlDocument doc = new XmlDocument();

doc.Load("users.xml");

XmlNode usersNode = doc.DocumentElement; //получили корневой элемент

//перебираем все дочерние элементы внутри корневого элемента

foreach (XmlNode userNode in usersNode.ChildNodes)

{

if (userNode.Name != "User")

continue; //пропускаем все элементы, которые не юзеры

//перебираем все дочерние элементы внутри юзера

foreach (XmlNode roleNode in userNode.ChildNodes)

{

if (roleNode.Name != "Role")

continue; //пропускаем все, что не обязанности

//если содержимое обязанности равно "программист"-у,

//то выводим имя юзера

if (roleNode.InnerText == "программист")

Console.WriteLine(userNode["Name"].InnerText);

}

}

Как ты видишь, использование XPath-запросов здорово сокращает код и увеличивает понятность.

Но за все надо расплачиваться, за использование DOM-а мы платим увеличением времени загрузки и большим расходом памяти, так XML-файлик меньше ста килобайт может съесть памяти порядка нескольких Мегабайт.

XmlReader

Если нам хочется поэкономить память и не нужны сложные выборки данных из XML-документа, а также не страшны сложные заморочки, то можно использовать XmlReader. В отличие от DOM-а, XmlReader читает сразу не весь файл, а только по одному элементу за раз. Из-за того, что XmlReader не держит в памяти весь документ, то не возможны всякие вкусности типа XPath-запросов.

Предыдущий пример, переписанный на использование XmlReader-а, становится еще сложнее.

//создаем XmlReader, который умеет читать xml из текстового файла

XmlTextReader reader = new XmlTextReader("users.xml");

string userName = null; //имя текущего пользователя

bool isProgrammer = false; //является ли текущий пользователь программистом

string tagName = null; //название текущего элемента

//читаем по одному узлу из файла

while (reader.Read())

{

//если текущий узел - открывающий тег и название тега - юзер,

//то обнулим информацию о текущем юзере

if (reader.IsStartElement() && reader.Name == "User")

{

userName = null;

isProgrammer = false;

}

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

if (reader.IsStartElement())

tagName = reader.Name;

//если текущий узел - текст, то посмотрим по tagName

//какому элементу этот текст принадлежит

if (reader.NodeType == XmlNodeType.Text)

{

switch (tagName)

{

case "Role":

//если у текущего пользователя есть роль "программист", то

//запомним это

if (reader.Value == "программист")

isProgrammer = true;

break;

case "Name":

//запомним имя текущего пользователя

userName = reader.Value;


Спецвыпуск Xakep, номер #028, стр. 028-056-6, Обнаженная теория об XML.

Обнаженная теория об XML.

DarkSergeant

Спецвыпуск Xakep, номер #028, стр. 028-056-6

break;

}

}

//если мы дошли до конца элемента, и этот элемент был юзер-программист,

//то выведем его имя

if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "User"

&& isProgrammer)

Console.WriteLine (userName);

}

SAX - Простой API (набор функций) для XML

SAX еще сложнее использовать (я даже пример писать не буду), чем XmlReader. Слово Simple(простой) в названии данной модели, означает, что это самая простой подход с точки зрения РАЗРАБОТЧИКА БИБЛИОТЕКИ, что совсем не повышает удобство ПОЛЬЗОВАНИЯ библиотеками использующих эту модель. В Sax-е, как и в DOM-е, вся загрузка происходит за один вызов load-а, но если в DOM-е библиотека сама строила дерево, то в SAX-е просто на каждый открывающий тег, текст, закрывающий тег, будет вызываться твоя функция, которую ты должен был перед этим зарегить в библиотечке. Если в XmlRead-е можно самому решать, что, как и когда считывать, то в SAX-е все упирается в жесткие рамки SAX-библиотеки. Но благодаря своей простоте, SAX портирован уже на все платформы, а его библиотека занимает очень мало места, что может быть необходимо на «мелких» системах (КПК, телефоны и т.д.)

Запись Xml-документов.

Для записи Xml-документов в файл можно использовать DOM и XmlWriter. Первый опять же используется интуитивно, и осваивается за несколько минут. С XmlWriter-ом разбираться надо подольше.

Запись файлов через DOM-модель

Запись через DOM-модель происходит следующим образом: сначала мы создаем в памяти дерево, которое описывает наш xml-документ, а потом его сохраняем на диск. Для создания новых элементов, атрибутов, текста, используются функции doc.CreateElement, doc.CreateAttribute, doc.CreateText, далее созданные узлы привязывают к родительским элементам через функцию xmlNode.AppendChild и xmlNode.Attributes.Add.

В следующем примере мы записываем на диск список юзеров состоящий из одного юзера:

//создаем новый XmlDocument

XmlDocument doc = new XmlDocument();

//Создаем и добавляем корневой элемент Users

XmlNode usersNode = doc.AppendChild(doc.CreateElement ("Users"));

//Создаем и добавляем элемент User

XmlNode userNode = usersNode.AppendChild(doc.CreateElement ("User"));

//Создаем и добавляем к юзеру атрибут id

userNode.Attributes.Append(doc.CreateAttribute("id")).InnerText = 0.ToString();

//Создаем и добавляем к юзеру дочерний элемент Name с текстом Вася

userNode.AppendChild(doc.CreateElement("Name")).AppendChild(doc.CreateTextNode("Вася"));

//сохраняем полученный документ на диск

doc.Save("singleUser.xml");

После выполнения данного куска кода, на диске появится xml-файл со следующим содержимым:

<Users>

<User id="0">

<Name>Вася</Name>

</User>

</Users>

Также через Dom можно не только создавать Xml-файлы с нуля, но и редактировать старые. Так следующий код повышает зарплату программистам на 100 баксов:

//создаем новый документ

XmlDocument doc = new XmlDocument();

//загружаем в него данные из users.xml

doc.Load("users.xml");

//Для каждого узла Зарплата для юзеров, которые являются программистами

foreach (XmlNode nameNode in doc.SelectNodes("//User[Role='программист']/Salary"))


Спецвыпуск Xakep, номер #028, стр. 028-056-7, Обнаженная теория об XML.

Обнаженная теория об XML.

DarkSergeant

Спецвыпуск Xakep, номер #028, стр. 028-056-7

{

//поднять зарплату на 100 баксов

nameNode.InnerText = (int.Parse(nameNode.InnerText) + 100).ToString();

}

//сохранить измененный документ

doc.Save ("users2.xml");

XmlWriter

Запись через XmlWriter выглядит менее удобной (больше надо делать руками), но и зато менее ресурсоемкой. Но опять же используя XmlWriter вместо DOM-а, мы теряем кучу вкусностей. Запись в XmlWriter производится через функции WriteStartDocument, WriteStartElement, WriteAttributeString, WriteEndElement, WriteEndDocument. Следующий код записывает в файл одинокого юзера Васю:

//Создаем XmlWriter, который умеет писать в файл, задав ему имя файла “singleUser.xml”и стандартную windows кодировку

XmlTextWriter writer = new XmlTextWriter("singleUser.xml", Encoding.GetEncoding(1251));

//Записываем заголовок документа

writer.WriteStartDocument();

//Записываем стартовый тег элемента Users

writer.WriteStartElement("Users");

//Записываем стартовый тег элемента User

writer.WriteStartElement("User");

//Записываем атрибут id со значением 0

writer.WriteAttributeString("id", 0.ToString());

//Записываем элемент Name

writer.WriteStartElement("Name");

//Записываем в элемент Name текст «Вася»

writer.WriteString("Вася");

//Записываем закрывающий тег Name

writer.WriteEndElement();

//Записываем закрывающий тег User

writer.WriteEndElement();

//Записываем закрывающий тег Users

writer.WriteEndElement();

//Записываем конец документа

writer.WriteEndDocument();

//Закрываем файл

writer.Close();

Концовка

В этой статье я рассмотрел только самые основы Xml-я. Очень многое осталось за кадром, но я надеюсь, что ты уже достаточно грамотный чел, чтобы самому разобраться в том, что я не успел рассказать.

Традиционно желаю тебе учить новейшие технологии, так как знание новых технологий, это возможность срубить приличную кучу бабла. Если что-то не до конца было понятно, то посылаю тебя в MSDN, www.w3.org, rsdn.ru, microsoft.com. На этих ресурсах ты найдешь наиболее свежую и полную инфу.

Т.к. HTML не удовлетворяет требованиям XML (в HTML-е есть не закрытые теги, атрибуты могут писаться без кавычек и т.д.), то с HTML-ем не получается работать стандартными средствами XML. Но так как очень хочется поработать с HTML, используя богатые фичи XML, то W3C немного доработал стандарт HTML до уровня, чтобы выполнялись требования XML. Новый стандарт получил название XHTML. По большому счету большой разницы между HTML и XHTML нет, просто в XHTML немного ужесточили синтаксис. Так в XHTML запрещено использование незакрытых тегов (теперь тот же <br> надо писать так <br></br> или так <br/>), атрибуты должны обязательно быть заключены в кавычки, на верхнем уровне XHTML-документа должен быть только один элемент <HTML>. Если HTML-документ удовлетворяет стандарту XHTML, то сразу появляется толпа вкусностей. Тогда для разбора HTML-файла можно использовать стандартные Xml-парсеры, можно применять XPath-запросы, XSL-преобразования и т.д.

Собрался как-то интернетовский и около-интернетовский народ и рюхнул фишку, что нужно создать могучую кучку, которая будет разрабатывать инетовские стандарты и следить за их выполнением. Так язык HTML, XML, а также другие публичные интернетовские стандарты разрабатывает и поддерживает эта самая могучая кучка W3C (World Wide Wed Consortium). На их творения (различные стандарты) можно посмотреть на сайте www.w3.org.


Спецвыпуск Xakep, номер #028, стр. 028-060-1, СЛУЖБА ЗНАКОМСТВ: соединяем половинки

СЛУЖБА ЗНАКОМСТВ: соединяем половинки

cuttah (cutter@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-060-1

Знакомства в Интернете - нечто обыденное на сегодняшний день. Пользователи от нечего делать, из-за своей внутренней закомплексованности, от большого спермотоксикоза в голове начинают знакомиться в сети. Теперь это нормальное явление. Одни встречаются после таких знакомств и даже замечательно проводят время, а другие могут и пожениться. Но, в общей массе своей (применительно к сильному полу), пользователей овладевает данное им природой желание найти эту половинку (и как можно быстрее!), встретиться с ней, напоить ее чем-нибудь и грязно засунуть свои органы ощущения куда следует. Ну, все это - естественные физиологические желания. Мы же займемся обустройством сервера, предоставляющего все эти возможности; и пользователи, благодаря тебе, смогут найти свои половинки. Вот! Так что почувствуй себя благодетелем :). А еще, по размышлении зрелом, можно просечь тот факт, что на серверах знакомств всегда тусуется куча народу, так что, прикрутив к своему порталу тематический сервер знакомств, например, садо-мазо-лесбиянок, ты можешь конкретно поднять посещаемость своей паги.

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

ОСНОВНЫЕ ВОЗМОЖНОСТИ СКРИПТА

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

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

Смена данных. Любой пользователь может сменить любые данные о себе (кроме e-mail'а). Сменить картинку, удалить ее. В любой момент может выбросить анкету из базы. Также, после регистрации, у всех пользователей появляется возможность общаться внутренними сообщениями, что-то вроде SMS в рамках службы знакомств. Выглядят они как простые записи в гостевой книге. Их можно удалять, а можно и свои написать. Также, если пользователь забыл пароль, он может его попросить выслать, указав номер своей анкеты и e-mail.

Поиск половинки. В скрипте реализованы два метода поиска по анкетам. Первый - это обычный просмотр по типу ориентации (файлы anketa.shtml и anketa.cgi). Анкеты просто выводятся сплошным списком по 20 штук (это количество меняется в настройках скрипта). Второй тип - поиск по критериям: пол/ориентация, тип знакомства, город, возраст, рост, вес, наличие фотографии и описания (find.shtml и find.cgi). В общем, поиск довольно гибкий.


Спецвыпуск Xakep, номер #028, стр. 028-060-2, СЛУЖБА ЗНАКОМСТВ: соединяем половинки

СЛУЖБА ЗНАКОМСТВ: соединяем половинки

cuttah (cutter@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-060-2

Администраторская часть. Самая клевая часть во всех скриптах, особенно для меня :). Я попытался сделать что-то приятное, некий "центр наведения ракет на Пентагон :)". В итоге, правда, функций получилось не так много, и все из-за не очень большого желания работать. Но вот что можно делать. Админ может проверять вновь поступившие анкеты. Решать, стоит ли добавлять новую анкету. При отказе можно указать причину отклонения. Я, например, всегда удалял анкеты, имеющие проститутские наклонности. А их, поверь, почти около половины с женской стороны. Вообще, их надо резать либо выделить специальный раздел - платные объявления. Иначе просто засоришь сайт левыми объявами. Также есть поиск, но он несколько недоработан. Отсутствует возможность редактировать найденные анкеты. И последняя функция - удаление анкеты по ее номеру. Вот это тебе пригодится на все 100 процентов :).

ФОРМАТ ХРАНЕНИЯ БАЗЫ

В чем же хранится вся база? Некоторая часть лежит со скриптами (в директории cgi-bin/), сами же анкеты с текстом находятся в MySQL базе (на самом деле при небольшом желании можно перенести в любую другую SQL базу: mSQL, Postgres и т.д.). А самый первый вариант службы вообще работал в текстовых сообщениях, правда, это уже совсем маразм был :). Но вернемся к SQL. Под все анкеты выделена всего одна таблица, и это нормально. Находится она в cgi-bin/sqldata/create.txt:

CREATE TABLE anketa(

id int NOT NULL PRIMARY KEY AUTO_INCREMENT ,

password varchar (20) NOT NULL ,

name varchar (20) NOT NULL ,

email varchar (30) NOT NULL ,

sex char (1) NOT NULL ,

orient char (1) NOT NULL ,

type tinyint unsigned NOT NULL ,

maritial char (1) NOT NULL ,

education char (1) NOT NULL ,

age tinyint unsigned NOT NULL ,

zodiak tinyint unsigned NOT NULL ,

city varchar (25) NOT NULL ,

height tinyint unsigned NOT NULL ,

weight tinyint unsigned NOT NULL ,

eyes varchar (15) NULL ,

hair varchar (15) NULL ,

i_like varchar (80) NULL ,

i_dislike varchar (80) NULL ,

icq int unsigned NULL ,

homepage varchar (50) NULL ,

about_me text NOT NULL ,

candidate text NOT NULL ,

photo varchar (60) NULL ,

added int unsigned NULL ,

keep int unsigned NULL ,

shows mediumint unsigned NOT NULL ,

status tinyint unsigned NOT NULL ,

ip int unsigned NOT NULL

)

Из файла видно, что главное поле id (параметр PRIMARY KEY). Оно автоматически увеличивается с каждой новой анкетой (AUTO_INCREMENT). Далее следует информация о пользователе, его пароль, мыльник и прочее, прочее. Важным моментом является наличие полей status и ip. Первое отвечает за статус анкеты. По умолчанию анкеты не активизированы и в поле status хранится значение 0. После активирования в поле помещается единичка, и отныне анкета видна на сайте.

Теперь о поле ip. Оно тебе может понадобиться, если какой-нибудь урод зарегает подозрительную анкету или еще что-нибудь начудит. Тогда ты сможешь поднять логи и узнать ip (хотя, конечно, ясно, что все данные могут быть левыми, а человек вообще регался через цепочку соксов или проксей). У меня вообще был случай, пришло письмо от управления "Р" с просьбой прислать логи по какой-то анкете. Так что всякое может быть и ко всему надо быть готовым.


Спецвыпуск Xakep, номер #028, стр. 028-060-3, СЛУЖБА ЗНАКОМСТВ: соединяем половинки

СЛУЖБА ЗНАКОМСТВ: соединяем половинки

cuttah (cutter@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-060-3

Картинки же и внутренние сообщения лежат в отдельных файлах. Последнее кому-то может показаться неправильным, но, как показывает практика, все работает нормально. Единственная проблема, которая может возникнуть, нехватка самого дискового пространства под фотографии. Но здесь все зависит от размера свободы на диске, чем ее больше, тем лучше (могу посоветовать брать как минимум 200 мб свободного пространства). Сами же картинки по умолчанию находятся в директории "photo/", а внутренние сообщения в "cgi-bin/base/". И вот здесь надо сделать небольшое отступление.

Вообще, мой скрипт изначально настроен так, что есть какой-то каталог для html страниц, и он считается корневым. В нем же находится директория "cgi-bin/", в которой по понятным причинам находятся все Perl скрипты. Но часто бывает так, что на хостинге директории для html файлов и скриптов находятся в разных папках (например, zenon, у него для html - директория www, а для скриптов - vcgi). Тогда придется перенастраивать конфигурационные скрипты. Об этом читай чуть ниже.

УСТАНОВКА И НАСТРОЙКА СЛУЖБЫ ЗНАКОМСТВ

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

Для начала скопируй все скрипты и html файлы к себе на хостинг. Всякую графику и html страницы кидай, соответственно, в html, а скрипты - в cgi-bin. Теперь необходимо создать таблицу. Для ее создания я написал специальный скрипт. Лежит он по маршруту "cgi-bin/sqldata/create.pl". Его необходимо запускать не через браузер, а с сервера, через какую-нибудь оболочку (bash, csh и т.д.). Поэтому необходимо, чтобы ты имел telnet или ssh доступ к своему сайту. В общем, логинься на сервер, ставь скрипту права на запуск (chmod +x create.pl). В файле conf.pl (он лежит в том же "cgi/bin/sqldata/") пропиши правильные значение для базы данных, логина и пароля. Теперь запускай create.pl (./create.pl). Если все пройдет нормально, то будет создана таблица, и, в принципе, отныне служба знакомств будет работать. Осталось только прописать правильные значения в скриптах и установить им верные права доступа.

Теперь заходи в директорию в cgi-bin и открывай там файл data.pl. Здесь находятся основные настройки:

$mailweb - e-mail администратора. Именно от этого адреса будут приходить все письма пользователям службы знакомств.

$mailprog - путь к программе sendmail. Это значение обычно равно "/usr/sbin/sendmail". Если письма нормально рассылаются, то ничего менять не надо. При возникновении каких-то проблем напиши администраторам хостинга и спроси путь к sendmail.

$site - URL сайта. Здесь пропиши свой адрес. Причем прописывать его надо полностью. То есть, если у тебя адрес www.byaka.ru, то должно быть записано значение http://www.byaka.ru.

$db{'base'} - имя базы данных. Это ты должен был узнать при регистрации хостинга.


Спецвыпуск Xakep, номер #028, стр. 028-060-4, СЛУЖБА ЗНАКОМСТВ: соединяем половинки

СЛУЖБА ЗНАКОМСТВ: соединяем половинки

cuttah (cutter@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-060-4

$db{'login'} - логин для доступа к базе данных.

$db{'pass'} - пароль для доступа.

$db{'name'} - имя таблицы. Его менять не надо. Также это значение должно совпадать со значением в файле "cgi-bin/sqldata/create.txt".

$dir{'main'} - путь к директории с файлами сообщений. По умолчанию оно равно "base/". И, в принципе, нет никакой необходимости его менять.

$dir{'photo'} - путь к директории с фотографиями. Это папка должна находиться с html файлами, а не со скриптами. Иначе картинки просто не будут отображаться.

$dir{'form'} - каталог с HTML формами. То есть файлы, где содержаться HTML скелеты для таких страниц, как: добавление анкеты, отображение анкеты, изменения, поиск и куча других.

$dir{'mail'} - путь к файлам с MAIL формами. В них прописан текст, который приходит пользователям при новой регистрации, активации анкеты или об отказе.

$size{'time'} - промежуток в секундах для добавления новой анкеты с одного IP. Это параметр добавлен, чтобы избежать повторных регистраций. Мало ли чего может быть :).

$size{'form'} - максимальный размер отправляемой формы через POST запрос. Добавлен для защиты от DoS атак. Если будет послан слишком большой размер формы, то скрипт его будет обрабатывать впустую. Это защита, чтобы избежать как раз таких случаев.

$size{'pic'} - максимальный размер картинки в байтах. Этот параметр устанавливай по своему усмотрению. Я установил его в 50000 байт. В принципе, можно оставить и его.

$size{'num'} - количество отображаемых записей на одной странице при поиске/просмотре анкет. По умолчанию - 20.

$size{'perpage'} - количество отображаемых сообщений на одной странице.

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

$file{'leftc'} - HTML файл с таблицей, содержащей рекламу, ссылки на просмотр анкет.

$file{'up'} - HTML файл с верхним колонтитулом (шапкой).

$file{'down'} - HTML файл с нижним колонтитулом.

Все, поменяв эти значение, ты выполнил все основные настройки. Осталось только поставить верные права файлам и поправить сами HTML формы и тексты сообщений, приходящих по почте. С HTML ты будешь разбираться сам, а вот про права файлов я расскажу. Всем исполняемым файлам (с расширением .cgi) необходимо поставить chmod 755. Это ты можешь сделать либо через FTP клиент, либо через shell. Вот имена этих файлов:

add.cgi

admin.cgi

anketa.cgi

change.cgi

find.cgi

sendme.cgi

view.cgi

Всем остальным файлам с расширением .pl устанавливай права 600, только не забудь про еще один файл "cgi-bin/admin/checkankets.pl". Ему также надо поставить 600. Какие проблемы могут возникнуть? Бывает так, что хостинг настраивает httpd следующим образом. Все исполняемые скрипты пускаются не под правами пользователя (то есть тебя), а из-под nobody или apache. Это плохо, но с этим можно бороться. Чтобы скрипты смогли нормально функционировать, тебе придется установить на директорию cgi-bin права 777. Скриптам так же придется поставить 777. Теперь все будет нормально работать, но появляется другая проблема. Возможно, что любой пользователь с того же хостинга сможет украсть твои скрипты, а также создавать левые файлы. Как это лечить, я не знаю. Можно попросить админов исправить эту проблему, настроив нормально suexec (если это apache), но лучший вариант - банальная смена хостинга.


Спецвыпуск Xakep, номер #028, стр. 028-060-5, СЛУЖБА ЗНАКОМСТВ: соединяем половинки

СЛУЖБА ЗНАКОМСТВ: соединяем половинки

cuttah (cutter@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-060-5

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

РАЗБОР МОДУЛЕЙ СЛУЖБЫ ЗНАКОМСТВ

А теперь посмотрим, какие же скрипты есть и кто за что отвечает. В общем, краткое описание их жизнедеятельности:

add.cgi

Отвечает за добавление новых анкет. Использует стандартный модуль CGI для обработки форм с файлами (ENCTYPE="multipart/form-data"). Также три моих модуля: func.pl, spec.pl и data.pl. При GET запросе он выводит обычную форму заполнения анкеты. При POST добавляет анкету. Перед этим он делает проверку на повторения запроса с одного IP, чекает размер картинки и, если все ОК, посылает SQL запрос (makeid из spec.pl) и выводит html файл об успешной регистрации.

admin.cgi

Администраторский скрипт. Инклудит 4 модуля: checkankets.pl, func.pl, spec.pl и data.pl. По умолчанию выводит окно с просьбой вести пароль. Сам пароль прописывается в скрипте. Находится он в переменной $pass и равен значению "secpass". Когда будешь ставить скрипты, не забудь поменять на другое значение, а то похакают. Кстати, именно на этом месте я поленился. Советую тебе немного дописать скрипт, чтобы добавить возможность изменения пароля через вэб. Для этого тебе просто придется выделить специальный файл под пароль и дописать пару функций в admin.cgi.

anketa.cgi

Отвечает за вывод анкет по типу ориентации (нормальная, би, гомо). Юзает четыре модуля: func.pl, search.pl, data.pl и spec.pl. Скрипт очень примитивный. Он просто проверяет входные значения в query string и передает их процедуре find из модуля search.pl.

change.cgi

Отвечает за изменение/удаление анкеты, просмотра внутренних сообщений, а также за отсылку паролей забывчивым пользователям. Использует пять модулей: CGI, func.pl, spec.pl, data.pl, message.pl. Довольно загруженный кодом скрипт, в нем содержится куча проверок, всяких выводов и т.д. Поэтому, по возможности, я расставлял свои комментарии.

find.cgi

Выполняет функции поиска анкет по различным критериям: тип знакомства, город, возраст, рост и т.д. Во всем остальном является полным аналогом скрипта anketa.cgi, за исключением передачи другого количества параметров процедуре find. И так же он использует четыре модуля: func.pl, search.pl, data.pl и spec.pl.

sendme.cgi

Отправка сообщений владельцу анкеты. Подключает четыре модуля: message.pl, func.pl, spec.pl и data.pl. Может отправлять как на почту, так и во внутренние сообщения. Надо добавить, что это довольно удобно, и почему-то не все службы знакомств предоставляют такую возможность.


Спецвыпуск Xakep, номер #028, стр. 028-060-6, СЛУЖБА ЗНАКОМСТВ: соединяем половинки

СЛУЖБА ЗНАКОМСТВ: соединяем половинки

cuttah (cutter@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-060-6

view.cgi

Выводит полное содержание одной анкеты. Фотографию, если она есть, а также количество просмотров анкеты.

data.pl

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

func.pl

Набор вспомогательных функций: процедура копирования файла (copyfile), замена данных в массиве (exchange), процедура считывания нескольких файлов (getfiles), процедура чтения QUERY_STRING (parse_string), процедура чтения формы (parse_form).

math.pl

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

message.pl

Модуль для работы с внутренними сообщениями. Используется скриптом change.cgi.

find.pl

Модуль для поиска анкет. Ищет анкеты по определенным критериям в SQL базе. Также добавлены функции для вывода результата поиска.

spec.pl

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

НЕДОСТАТКИ И НЕДОРАБОТКИ

Они есть, и от них никуда не деться :). Большим минусом является возможность регистрации с одним мыльником любое количество раз. Это очень легко исправляется. Просто перед регистрацией добавь проверку: SELECT по мыльнику, если вернется какое-нибудь значение, то, значит, уже кто-то регистрировался. Другая ошибка - отсутствие проверки размеров картинки в пикселях. То есть любой может закачать картинку огромнейших размеров, например, 2000 на 2000. И тогда в дизайне возникнут неполадки. Чтобы исправить такую ошибку, необходимо будет написать дополнительно функцию, вытаскивающую размеры картинки из .gif и .jpeg файлов. Это тоже довольно просто.

Если покопаться глубже, то найдутся еще какие-нибудь баги. Но все они исправляются по ходу их обнаружения. Так что устанавливай скрипт, настраивай его и начинай приводить толпу новых посетителей. Сам скрипт можно скачать здесь: http://online.comtv.ru/SLUGHBA_ZNAKOMSTV.ZIP. Успехов!


Спецвыпуск Xakep, номер #028, стр. 028-064-1, СПАМ БЕЗ КОНЦА: двигло портальной рассылки.

СПАМ БЕЗ КОНЦА: двигло портальной рассылки.

cuttah & donor

Спецвыпуск Xakep, номер #028, стр. 028-064-1

Снова ты! Когда же ты, наконец, станешь большим и умным, и я буду ходить к тебе и задавать тупые вопросы! В смысле, привет :). Скажи, тебя сильно задолбал разный спам, например, с предложением купить третью турбину Верхоянской ГЭС? Ну, правильно, тебя же не колышит, что челу нужно продать турбину! Но если ты решил стать владельцем портала, то скоро ты сам станешь первостатейным спамером. Тебе же нужно будет рассылать рекламу твоей мега-кул паги, а потом ты убедишь вислоухих юзверей подписаться на новости (анекдоты, порно белочек и т.д.) и будешь настойчиво напоминать о себе свежим спамом. Конечно, можно зарегить рассылку у subscribe.ru, но откуда ты знаешь, что там происходит, когда твой юзерок подписывается у тебя (может, кто-то этим пользуется), да и дизигн портить не хочется. Да и просто, админить рассылку самому - клево!

РАССЫЛКА ПОД СКАЛЬПЕЛЕМ

Итак, что такое рассылка? Рассылка - это, прежде всего, база адресов юзеров и скрипт, который автоматически рассылает этим юзверям спам, то есть я хотел сказать, новости, информацию и прочую полезную пургу :). Естественно, жертвы... э-э-э... абоненты должны добавляться автоматически - не будешь же ты переписывать тысяч десять адресов ручками. Конечно же, юзеры должны иметь возможность отписаться от надоедливого хрена с турбинами (ну, это они думают, что отписываются, на самом деле они, наоборот, сообщают о своей активности, и спам валит с удвоенной силой), ну, или поменять инфу о себе или запросить раздолбайски утерянный пароль. Еще юзер может выбрать, в каком виде ему присылать мессаги: в экономном тексте или шикарном html. Двигло рассылки на каждое из таких событий должно уметь отреагировать какой-то мессагой, чтобы юзверь не почувствовал себя одиноким и забытым. И нельзя забывать про админскую часть движка, иначе какое же тут веселье? Админская часть должна помочь сварганить мессагу (забить поля "от кого" и "тема", принять тело письма), а также сделать некоторые настройки текущей спам-сессии.

ПОИНЖЕНЕРИМ

Каждая часть спам-двигла логично сделать отдельным модулем и связать их друг с другом инклудами. Так и работать удобнее и безопаснее. Данные хорошо бы, конечно, хранить в SQL базе, но не у всех и не всегда такая роскошь есть, поэтому предлагаю хранить данные о юзерах в отдельных текстовых файлах. Имя файла - это адрес мыла юзверя. Формат файла такой: на первой строчке - пароль, на второй строчке - ник, на третьей - тип рассылки (text/html). В текстовиках также будем хранить шаблоны для будущих системных мессаг юзеру.

ДВИЖОК НА ТРЯПОЧКЕ

maillist.cgi - это у нас основной скрипт, к которому будут цепляться все остальные детали движка. В нем мы выясняем, во-первых, кто к нам завалился: админ или юзер, а во-вторых, чего он хочет. Админ может хотеть начать рассылку, а юзер подписаться, изменить инфу, попросить затерянный пароль или отписаться. В зависимости от выбора главный скрипт вызовет соответствующую процедуру.

Обрати внимание, тут же я добавил проверку корректности введенного е-мыла, а также защитился от всяких "нехороших" символов, которые могут ввести разные желтопузые хитрожопики.


Спецвыпуск Xakep, номер #028, стр. 028-064-2, СПАМ БЕЗ КОНЦА: двигло портальной рассылки.

СПАМ БЕЗ КОНЦА: двигло портальной рассылки.

cuttah & donor

Спецвыпуск Xakep, номер #028, стр. 028-064-2

data.pl - это у нас настройки, если хочешь, окружения. Тут я раздаю переменным соответствующие значения: поле "откуда" будущего спама, почтовый клиент и путь к нему (скорее всего, это будет sendmail, и путь будет таким же), урла твоего портала для ссылки в теле письма, дальше прописываются директории для данных, для хранения временных пользователей и постоянных пользователей (их, скорее всего, менять не придется). Этот модуль будет подгружаться там, где он необходим.

func.pl - моя самопальная библиотечка для работы с файлами, массивами и строками. Довольно удобная. Я думаю, сам с ней разберешься и будешь юзать потом часто и со вкусом.

suscribe.pl - выводит первую форму для подписки на рассылку. Здесь юзерь вводит свое мыло.

new.pl - создание временного пользователя. Собирает данные с юзера, проверяет, что пользователя с такими данными пока нет и кладет текстовый файл файл в папку current, создает случайный пароль, выводит юзеру соответствующую html'ку и отправляет на почту запрос на подтверждение рассылки. Типа, мы хорошие и даем юзверю время передумать.

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

all.pl - отвечает за окончательное занесение юзера в базу рассылки и складирует данные о нем в папку users. То есть, сперва, сразу, как юзер забил свой мейл в форму, для него генерится временный пароль и отправляется к нему на мыло, а после подтверждения снова происходит проверка (чтобы не было пересечений) и в базу заносятся окончательные данные. Все, он наш!

change.pl - здесь обрабатываются запросы юзера на смену пароля, данных и отписку. Этот скрипт позволяет отписаться от рассылки (ты это серьезно?!), узнать забытый пароль (юзеру на мыло отправляется его пасс), поменять данные (мало ли, может, юзеру захотелось, чтобы его называли не "Ваше выскокопреосвещенство", а "Мега евнух всея Галактика"). Он же, собственно, и меняет эти данные в текстовых файлах.

С юзером разобрались. Теперь у нас в автономном режиме будет копиться база данных на подписчиков, однако нам нужно, собственно, и спам рассылать. Для этого можно воспользоваться shell-доступом (типа, крю-ю-ю-тто!), но некоторые козлыдни-хостеры не дают в руки shell (боятся, и правильно боятся). Тогда придется написать маленький веб-интерфейс для центра управления. Кстати, в последнем варианте получится нагляднее и можно навернуть кучу функций. Я, вот, даже хотел что-то типа Винды на Perl'е написать :), но заломало, поэтому в двигле остались заначенные на будущее заглушки, поэтому интерпретатор может ругаться - не обращай внимания, просто почисти, что тебе не нужно, а лучше прими участие в кул опенсорс проекте :).

setup.pl - просто выводит запрос на ввод админского пароля, чтобы чужие не пролезли. Эта часть не дописана. Все в твоих ручонках :).

send.pl - здесь реализована рассылка через шел. Скрипт запрашивает у админа права доступа, и может начать рассылку заново, либо с определенного места, если рассылка была прервана (читает соответствующий файл и, если там ноль, начинает с начала и записывает последний номер).


Спецвыпуск Xakep, номер #028, стр. 028-064-3, СПАМ БЕЗ КОНЦА: двигло портальной рассылки.

СПАМ БЕЗ КОНЦА: двигло портальной рассылки.

cuttah & donor

Спецвыпуск Xakep, номер #028, стр. 028-064-3

admin.pl - выводит админскую форму в админском браузере. Запрашивает пароль и считывает из формы настройки и текст сообщения. Настройки такие: обычным способом (в поле "кому" пихается вся порция адресатов рассылки), скрытым способом (вся порция адресатов пихается BCC) или персонально (каждое письмо адресовано только одному юзеру), и последний, но очень важный параметр - сколько писем рассылается за один присест. Сейчас объясню в чем сложность. Дальше начинается рассылка.

Рассылать приходится пачками примерно по 100 мейлов. Дело в том, что в настройках сервера есть ограничения на время работы скрипта (timeout). Так вот, время жизни скрипта ограничено, и рассылка не успевает разослаться на все несколько тысяч адресов - скрипт умирает. Поэтому после отсылки порции писем скрипт вызывает сам себя еще раз и передает себе в качестве параметра последний обработанный адрес, и все начинается сначала. И придется бедному админу не закрывать браузер и тупо пялиться на него до конца рассылки. Теперь ты понимаешь, почему я люблю shell?

fast.pl - это то же самое, что и admin.pl, но без дополнительных настроек.

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

НАСТРОЙКА

Закачивай все это на свой сайт. Не забудь узнать у админов сервака путь к почтовой программе, а также поменять права доступа к скриптам: chmod 755 для maillist.cgi и chmod 600 для всех остальных. Теперь собирай побольше лопушков с подозрительно чистыми мыльниками и кавабанга!!!

ПРИМЕР РАССЫЛКИ

Теперь, друг мой, проведем с тобой пробную рассылку. Проверь, есть ли у тебя подписчики. Если таковые имеются, то открывай свой сайт. Допустим его адрес: www.mlist.ru. Скрипт ты установил в корень директори cgi-bin, тогда заходи на следующий урл:

http://www.mlist.ru/cgi-bin/maillist.cgi?admin

Появится окно с формой. Заполняй его. Обратный мыльник, это адрес, с которого будут идти все письма. Можешь придумать какой-нибудь нереальный. Пароль. Это пароль от рассылки, он прописан в скрипте. Теперь способ рассылки. Я предлагаю выбрать скрытый метод, тогда получатели спама не смогу понять, кому же еще шлются все эти мегатонны писем (bcc). Персонально ли рассылать письма? Если ты любишь приветствовать пользователя по имени, тогда придется выбрать персональный метод рассылки, иначе установи "Нет". Количество сообщений посылаемых за одну сессию работы скрипта. Поставь около 100. Теперь тема и само сообщение. Это ты придумывай сам :). Далее дави кнопку "Разослать" и жди пока не появится сообщение, что рассылка окончена.

Поздравляю, теперь ты посвящен в великие спамеры :).

ТВОЕ ТВОРЧЕСТВО

Ну, и чтобы тебе было совсем весело, расскажу о недоработках и возможностях. Пока я смотрел код, сам заметил несколько дырочек, например, не проверяется пароль при повторном запуске скрипта из веб-интерфейса. Еще можешь покумекать, как перевести рассылку на SQL базу и добавить такие функции, как просмотр записей, их сортировку и поиск нужного юзера по мылу - это проще простого. Также тебя ждут мои заглушки, вместо которых ты сможешь прикрутить свои модули, апгрейдящие админский интерфейс. Ну, я уже не говорю, что это двигло можно приспособить для любых целей, связанных с рассылкой большого количества писем, было бы желание. В общем, качай тут: http://online.comtv.ru/maillist.zip и have joy with it!


Спецвыпуск Xakep, номер #028, стр. 028-066-1, МЕТА-ТЕЛЬНОЕ ОРУЖИЕ ВЕБ-МАСТЕРА - настройка страницы для индексирования

МЕТА-ТЕЛЬНОЕ ОРУЖИЕ ВЕБ-МАСТЕРА - настройка страницы для индексирования

Pingvinov

Спецвыпуск Xakep, номер #028, стр. 028-066-1

(mailto:$echo cvativabi@znvy.eh|rot13)

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

ЧЕСТНО

Сразу скажу, старик, в этой статье речь только о честной раскрутке сайта. И только об очень простых вещах: о мета-тегах и заголовках страниц. Почему так скромно? Потому что правильно настроенные меты и заголовки - это очень эффективный способ увеличения трафика, приходящего со всяких Яндексов и Гуглов. Для этого твоя страница должна в ответ на некоторые слова выдаваться там в числе первых десяти-двадцати. Чтобы приблизиться к этому, стоит немного разобраться с тем, как работает среднестатистический Яндекс.

РОБОТЫ

Все Яндексы устроены примерно одинаково: для них Интернет - это большой список веб-сайтов, которые надо время от времени просматривать и составлять индекс (что-то типа предметного указателя в конце учебника). Для просмотра и обхода веб-сайтов на Яндексе (на любом) работает специальное приложение (пипл называют его робот или червяк). Робот заходит на вершину очередного сайта типа http://www.pukin.ru, прочитывает страницу, составляет индекс, а дальше идет с этой страницы по ссылкам на ней, не выходя, впрочем, за пределы сайта. Когда сайт просмотрен весь, робот переходит к следующему в списке. По итогам работы над каждой страницей всем словам на ней приписывается

вес

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

Твоя задача, перец, делится на две: во-первых, попасть в список сайтов на Яндексах и Гуголах; во-вторых, оказаться в начале списка, когда серфер начнет искать что-то по твоей теме.

К счастью, первая задача - очень легкая. На Яндексе иди на http://www.yandex.ru/addurl.html, почитай правила и не торопись заносить свой сайт, сперва настрой его. На остальных поисковиках такие странички тоже есть. Разберешься.

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

ЗАГОЛОВОК

Эту фишку ты видишь при просмотре веб-страницы, хотя и не очень обращаешь на нее внимание. В заголовке веб-страницы (то есть в исходнике, между <head> и </head>) эта фишка живет между тегами <title> и </title> и выводится в самой верхней панели строки браузера. Что-нибудь типа "Хоумпага Васи - Microsoft Internet Explorer". Когда на пагу смотришь, внимания этот текст привлекает ровно ноль целых и хрен десятых. И вроде не о чем говорить, но...


Спецвыпуск Xakep, номер #028, стр. 028-066-2, МЕТА-ТЕЛЬНОЕ ОРУЖИЕ ВЕБ-МАСТЕРА - настройка страницы для индексирования

МЕТА-ТЕЛЬНОЕ ОРУЖИЕ ВЕБ-МАСТЕРА - настройка страницы для индексирования

Pingvinov

Спецвыпуск Xakep, номер #028, стр. 028-066-2

Но именно этот текст видит серфер, найдя твой сайт в Яндексе! То есть чел читает ровно эту строчку и принимает (за две секунды!) решение, на какой из десяти результатов кликать мышью. Предположим, он искал "уход за крокодилом", и ему надо выбрать между заголовками: "Суперсайт Васи Пупкина" и "Методики содержания и разведения тропических пресмыкающихся". Ты уже догадался, куда направится мышь клиента, ну а я сейчас выдам тебе первую рекомендацию. Вот она: между тегами <title> и </title> в заголовке должна быть очень краткая и ясная формулировка темы твоей страницы.

DESCRIPTION

Этот тег живет тоже в заголовке, и использовать его не обязательно, как впрочем и все остальные мета-теги. Выглядит он примерно так: <meta name="description" content="Методы разведения и приемы ежедневного ухода за крупными тропическими крокодилами, аллигаторами и варанами. Температурный режим, графики и рационы кормления, подбор влажности и светового режима.">.

Может показаться, что этот текст тоже предназначен для чтения глазами серфера. Увы, это не так. То есть когда-то, видимо, замысел был именно такой, но народ писал в description всякую лажу, и поисковики перестали выводить его для предварительного просмотра; теперь они (Рамблер, Яндекс, Гугол) выводят кусочки основного текста страницы с ключевыми словами (что, на мой взгляд, очень правильно).

Тем не менее заполнить description очень даже имеет смысл. Во-первых, встречаются поисковики, которые все-таки выводят description для чтения публикой, а во-вторых, слова из этого текста добавляют вес словам со страницы. Итак, вторая рекомендация: обязательно вставь в заголовок страницы тег <meta name="description" content="Контент пиши сюда"> и напиши в него ясное и подробное изложение темы страницы, постаравшись употребить по возможности больше ключевых слов (тех, по которым твою страницу должны находить). Изложение должно быть написано нормальным человеческим языком: помни, что некоторые серферы этот текст все-таки прочтут.

KEYWORDS

Этот тег серфер вообще не увидит, но при этом тег, может быть, даже более важен, чем предыдущие. Кстати, про него-то ты, наверное, немало слышал (ну, например, что если сюда написать "секс, порно, реферат", то страницу начнут посещать толпы народу). Видимо, именно из-за этих дурных слухов Яндекс и выдает по запросу "секс, порно" так много мусора :). Немного поговорим о том, как этот тег использовать правильно, то есть чтобы к тебе приходили те, кому нужна твоя страница, а не броуновское веб-движение. В этот тег следует поместить через запятую ключевые слова и словосочетания, которые

встречаются на странице

. То есть для разведения пресмыкающихся мета-тег мог бы выглядеть так: <meta name="keywords" content="крокодил, аллигатор, варан, уход, кормление, разведение, влажность, меню, террариум, тропические пресмыкающиеся">.

Почему не стоит вписывать сюда "порно, секс, реферат"? Ну, прежде всего потому, что это не в тему, если читатель ищет про порно, то крокодилы ему сбоку нужны. Есть и вторая причина: Яндексы и Гуголы учитывают слово и словосочетание из keywords только в том случае, если оно встречается на странице. Итак, третий совет: вставь в заголовок страницы <meta name="keywords" content="сюда, пиши, слова"> и напиши туда через запятую ключевые слова и словосочетания, по которым серферы должны находить твою страницу. Писать связные фразы не обязательно, имеет смысл выкинуть всю лабуду типа "круто, моя страница, лучшая страница, секс, порно, реферат", и тогда к тебе на пагу придут именно те, кому интересна ее тема.


Спецвыпуск Xakep, номер #028, стр. 028-066-3, МЕТА-ТЕЛЬНОЕ ОРУЖИЕ ВЕБ-МАСТЕРА - настройка страницы для индексирования

МЕТА-ТЕЛЬНОЕ ОРУЖИЕ ВЕБ-МАСТЕРА - настройка страницы для индексирования

Pingvinov

Спецвыпуск Xakep, номер #028, стр. 028-066-3

КОМУ ЭТО НАДО

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

НАПОСЛЕДОК

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

Вообще-то незаметных настроек еще много, к теме вернусь, а ты пока что почитай для самообразования страничку на "Яндексе" в разделе "Веб-мастеру". "Вредные советы" называется. Про нашу сегодняшнюю тему там не очень много, но советы - дельные. http://www.yandex.ru/skazki/skazka24.html.

Удачи.


Спецвыпуск Xakep, номер #028, стр. 028-068-1, БЕРЕГИТЕ WAREZ! РАСПРЕДЕЛЕННАЯ СИСТЕМА СКАЧКИ

БЕРЕГИТЕ WAREZ! РАСПРЕДЕЛЕННАЯ СИСТЕМА СКАЧКИ

cuttah & Donor

Спецвыпуск Xakep, номер #028, стр. 028-068-1

Хай, любопытный подоночек! Согласись, клево иметь свой варезник. Все за тобой ходят, выпрашивают ссылку или пароль, умоляют на коленях, рыдают - в общем, ты понял ;). Но с варезниками всегда куча траблов: во-первых, стремно открыто хранить у себя варез, кряки, кейгены и прочую незаконную пургу; во-вторых, постоянно не хватает места, и приходится все время искать новое халявное пространство; в-третьих, стоит кому-то капнуть в органоны, что на серваке лежит варез, как хозяева хостинга тут же закроют твою пагу и удалят весь архив. В общем, варезные порталы постоянно закрываются, переезжают с места на место, их хозяева перекачивают мегатонны инфы с одного сервака на другой, тратят кучу времени и нервов, и это все очень большой гимор. Идея намутить свой варезник уже не кажется такой веселой?

ИДЕЯ... НАХОЖУСЬ?!

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

Представь, что все файлы лежат абсолютно на разных серверах, причем одни и те же софтины могут быть продублированы по нескольким адресам. Теперь кто тебе мешает зарегить пару паг на халявных серверах и заюзать свободное место под хранение твоего файла, тогда падение одного сервера не приведет к полной неработоспособности твоего сайта, больше того - какой-нибудь шутник (в погонах и с ксивой) не сможет грохнуть всю базу файлов одним махом, и тебе не придется закачивать пять... э-э-э... гигабайт заново. А главное, никто, кроме тебя, не будет знать, где реально находятся эти файлы. Для посетителя это будет одна и та же страница, он будет топтать ссылки и получать файлы, а длинный нос мы ему обрежем. Еще один плюс в том, что все, что нужно, будет лежать у тебя, и ссылка не перестанет работать через 5 минут после публикации, потому что что-то там за бугром легло в сексуальную позу. Здорово? Ка-а-а-анечна!

Еще, конечно же, станет замечательно, если обновление базы и закачка файлов на армию сервачков будет происходить автоматически и пага портала переколбасится сама. А в чем, собственно, вопрос? Воспользуемся современными серверными технологиями!

А ЧТО НАМ НАДО?

Да только свет в окошке... Хм! Нам нужен хостинг с поддержкой perl либо php и с какой-нибудь SQL базой данных (MySQL, mSQL, Postgress, MS SQL). Остальные сервера просто хранят файлы. На них нужно побольше места, и больше ничего, главное, чтобы к ним был доступ по ftp.

Я, как яростный адепт Perl'а, буду делать все на нем, соответственно на моей тачке тусуется Perl Builder, а гопники-юниксойды могут сидеть в своих NEdit, CoolEdit, vi, emacs и прочей дребедени (шучу! не бейте ногами!).

КАК РЕАЛИЗОВАТЬ?

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

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


Спецвыпуск Xakep, номер #028, стр. 028-068-2, БЕРЕГИТЕ WAREZ! РАСПРЕДЕЛЕННАЯ СИСТЕМА СКАЧКИ

БЕРЕГИТЕ WAREZ! РАСПРЕДЕЛЕННАЯ СИСТЕМА СКАЧКИ

cuttah & Donor

Спецвыпуск Xakep, номер #028, стр. 028-068-2

Какие же скрипты нам понадобятся?

admin.cgi

Через этот перл-скрипт ты будешь обновлять свою базу. Добавлять в нее новые поступления софта, прописывать, на каких серверах хранятся эти самые заветные файлы. Что-то удалять, если возникнет такая необходимость. А также банить некоторых активных пользователей в случае их гипер-активной деятельности.

list.cgi

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

download.cgi

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

Чтобы понять, как это работает на практике, приведу один пример. Допустим, пользователь хочет скачать новую версию Reget Deluxe. Он заходит на твой варезный сайт и кликает примерно на такую ссылку: http://www.soft.ru/cgi-bin/download.cgi?file=rgtdlx3. Что происходит? Запускается скрипт download.cgi. Он чекает параметр file со значением rgtdlx3, сверяет его со своей DBM базой. Если в хэше находится какое-то значение, а оно там должно находиться, то скрипт начинает его парсить (обрабатывать). Из подобной записи

rgtdlx3.zip| Reget Deluxe 3

http://www.some.ru/rgtdlx3.zip

http://www.some2.ru/rgt3.zip

http://soft.hoha.ru/rgt3

скрипт вытаскивает первую строку. Делит ее на две части по символу |. Первая часть содержит в себе имя архива, вторая - описание, которое и выводится при помощи скрипта list.cgi. Далее первая строка удаляется, и в итоге остается информация, откуда этот файл можно скачать. Скрипт пускает генератор случайных чисел, получает номер от 1 до количества числа ссылок. В зависимости от получившегося номера, открывает соединение с соответствующим сервером. Дальше происходит стандартный GET запрос (ведь это http сервера), а ответ в виде потока данных посылается пользователю. Это и есть общий метод скрытия реального месторасположения файлов.

Какой положительный момент в этом методе? Во-первых, если ты размещаешь свои файлы на халявных хостингах (а так, скорее всего, и будет), то очень вероятно, что у этих самых хостеров будет неприятное ограничение. Ты не имеешь права выкладывать файлы с расширением zip, rar, exe и какими-нибудь другими известными форматами. Тем самым они хотят тебя ограничить в возможностях выкладывать варез (вот свиньи! :)). Но теперь эта проблема решена. Ты можешь просто переименовать файл в любой другой, например, rgtdlx3.zip в rgtdlx3.aaa. Для пользователя же он будет выглядеть как обычный zip файл.


Спецвыпуск Xakep, номер #028, стр. 028-068-3, БЕРЕГИТЕ WAREZ! РАСПРЕДЕЛЕННАЯ СИСТЕМА СКАЧКИ

БЕРЕГИТЕ WAREZ! РАСПРЕДЕЛЕННАЯ СИСТЕМА СКАЧКИ

cuttah & Donor

Спецвыпуск Xakep, номер #028, стр. 028-068-3

КАК НАСТРОИТЬ?

Настройка весьма проста. Ты просто копируешь весь набор этих скриптов в директорию cgi-bin. Ставишь скриптам (admin.cgi, list.cgi и download.cgi) права доступа 755 (chmod 755). Делается это через любой FTP клиент. Остальным файлам ставь 600. Возможно, что скрипты будут запускаться не с правами владельца файлов, а из-под nobody/apache. Тогда придется установить на директорию права в 777. Вот и все приготовления. Тебе остается только поправить html файлы с дизайном, залить базу и начать привлекать посетителей.

ЧЕГО ПОМЕНЯТЬ, ЧЕГО ДОБАВИТЬ?

Предлагаемый скрипт очень сырой. Это только небольшие зачатки от того варезного монстра, который можно намутить. Так что тебе придется еще попыхтеть :). А вот что стоит изменить. Во-первых, базу надо перенести в SQL. Для удобства создать две таблицы. Одну для архива имен файлов с описанием, а вторую со списком URL'ов. Вот как они примерно будут выглядеть в MySQL:

CREATE TABLE files(

id int NOT NULL PRIMARY KEY AUTO_INCREMENT ,

name varchar (30) NOT NULL ,

content varchar (40) NOT NULL

)

Это таблица для списка имеющихся файлов. Id - идентификатор файлов. Для каждого файла он разный. Name - имя файла, content - его описание. А вот вторая таблица для самих URL:

CREATE TABLE url(

id int NOT NULL,

url varchar (50) NOT NULL

)

Здесь, я думаю, и так все ясно. Главное, чтобы id у второй таблицы совпадал с id первой. Ведь id из первой таблицы будет соответствовать id во второй (а если точнее, то просто какие-то URL'ы).

Второй этап: сделать нормальное отображение списка файлов. Ведь в моей реализации он выдает просто сплошной несортированный список. Тебе предстоит добавить сортировку (в SQL это реализуется крайне удобно), а также сделать вывод списка по первой букве. Это очень понадобится, когда архив будет большим (попробуй зайди на www.cracks.am). Также придется писать поиск по имени файла или по его описанию. Надо ведь заботиться о своих посетителях :).

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

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

А вообще, проблему загруженности можно решить гораздо проще. Просто добавь проверку на timeout при соединениях. Если произошел timeout, то переходи к следующему серверу. В случае, когда все сервера перегружены, придется вывести ошибку с извинениями :).


Спецвыпуск Xakep, номер #028, стр. 028-068-4, БЕРЕГИТЕ WAREZ! РАСПРЕДЕЛЕННАЯ СИСТЕМА СКАЧКИ

БЕРЕГИТЕ WAREZ! РАСПРЕДЕЛЕННАЯ СИСТЕМА СКАЧКИ

cuttah & Donor

Спецвыпуск Xakep, номер #028, стр. 028-068-4

Итак, если ты - крутой кодер, то ты, наверняка, реализуешь эту идею сам на любом языке, например, на php, но если с кодингом у тебя пока не очень, то разобраться во всем тебе поможет мой вариант скрипта. Утягивай здесь - http://online.comtv.ru/redir.zip - и радуйся.

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


Спецвыпуск Xakep, номер #028, стр. 028-070-1, БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

Спецвыпуск Xakep, номер #028, стр. 028-070-1

интервью с Аленой Скворцовой, директором Интернет-магазина E-Shop

Душу вынимал Donor (donor@real.xakep.ru)

Хай, будущий сетевой магнат, владелец заводов, газет, пароходов! Как поживает твоя предпринимательская жилка? Жилит :)? Правильно! Ведь каждый из нас рано или поздно сталкивается с проблемой нехватки денег и оказывается перед большим тяжелым вопросом: "А где бы взять наличности да побыстрее?". И многие особо рисковые перцы решают завести Инет-магазин, чтобы барыжить всяким нестандартным стаффом. Впереди их ждет довольно много траблов. SPEZ решил подогнать тебе инфы и реального опыта электронной коммерции, чтобы шишки на твоей виртуальной башке были не такие большие и фиолетовые, и отправился в гости к Алене Скворцовой, директору Интернет-магазина "E-shop".

SPEZ: Привет, Алена! Расскажи, как вы решили делать Интернет-магазин? Что, так с нуля и начали?

Алена: На самом деле, у нас уже были нормальные магазины в Москве и Питере, так что опыт организации торговли и работы с клиентами у нас уже был. Мы даже пытались торговать по каталогу, но это оказалось слишком сложно - проект умер.

S: Если все было так клево, зачем стали делать веб-магазин?

А: Два фактора. Наш самый крупный магазин был в СК "Олимпийский", и мы должны были съезжать оттуда каждый раз во время всяких спортивных мероприятий, поэтому мы продали основной товар и съехали, чтобы вернуться в августе. А в августе случился кризис.

S: То есть, можно сказать, повезло?

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

S: И сразу полностью перешли на торговлю в сети?

А: Ну, если учесть, что на тот момент у нас была написанная нашими кодерами система учета движения товаров, то необходимая база у нас была, поэтому - да, сразу.

S: А как у вас были налажены контакты с государством, ведь надо фирму зарегить, с таможней контачить, налоги платить?

А: У нас уже была фирма, были магазины, так что все эти вопросы были уже решены.

S: Работаете ли вы с таможней? Есть ли с этим проблемы?

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

S: А если делать все с нуля?

А: Для начала нужно купить домен (это сейчас недорого, долларов 20-25), дальше непосредственно сам магазин (программу ведения заказов и базы) либо написать все самим. E-shop мы, например, написали сами на ASP+SQL, а систему учета - на Delphi.

S: Какие налоги платит интернет-магазин?

А: Интернет-магазин платит стандартные для обычного магазина налоги. Любой бухгалтер знает.

S: А можно забить на налоги?

А: Нет, нельзя – интернет-магазин, как и любое юридическое лицо, обязан платить налоги по закону. Если он этого делать не будет, его закроют (привлекут к ответственности владельца, уничтожат юридическое лицо, закроют хостинг).


Спецвыпуск Xakep, номер #028, стр. 028-070-2, БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

Спецвыпуск Xakep, номер #028, стр. 028-070-2

Незнание закона не освобождает от ответственности. Посмотри статьи 171, 198, 199 УК РФ, а еще зацени штрафы, которые предусмотрены в Налоговом кодексе РФ. Например, если ты вовремя не встанешь на учет в налоговом органе, то, в случае чего, с тебя снимут 5000 рубленных.

S: Какое железо нужно закупать?

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

S: Как у вас с рекламой в Инете?

А: От баннерных сетей мы отказались - они перегружают страницу, а отдачи от них, судя по SpyLog'у, очень мало. Сейчас мы обмениваемся рекламой с игровыми сайтами.

S: А как вы боретесь с шутниками и теми, кто отказывается брать заказанный товар?

А: Очень просто – не отдаем :). Звоним уточнить адрес, выяснить, есть ли код в подъезде и т.д., и слушаем, кто подошел и как разговаривает. Если это ребенок и он, отвечая на вопросы, спрашивает что-то у родителей, то ясно, что они тоже в курсе. В крайнем случае, спрашиваешь, когда кто-то из взрослых будет дома, потому что по закону продавать товар детям нельзя. Ну, естественно, бывают возвраты - по телефону выяснить, сколько лет ребенку и что у него на уме, все-таки, сложно. Бывают и просто покупатели, которые к моменту доставки передумали, но таких возвратов немного.

S: И часто вы так залетаете?

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

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

S: А как вы контачите с регионами?

А: Клиент выбирает товар, заполняет форму с адресом, и, в зависимости от того, где он живет, ему предлагается выбрать способ доставки (почта или курьерская служба UPS). Скрипт рассчитывает финальную сумму заказа с учетом соответствующих тарифов, и юзеру предлагается распечатать готовую квитанцию со всеми необходимыми данными для оплаты через "Сбербанк" (оплатить он ее может в любом банке) либо счет, если заказ оформлен на фирму.

S: А с зарубежьем работаете?

А: Мы даже не включили ближнее зарубежье в форму автоматического выставления счетов, потому что существуют серьезные проблемы как с отправкой, так и с получением заказа. Как правило, зарубежным покупателям мы предлагаем передать заказ с кем-то. Мы как-то оправили UPS'ом на Украину игру стоимостью $30 (без пошлины можно вывозить из страны ценности на сумму до $100). Покупатель месяц не мог получить ее у себя на таможне (срок доставки UPS'ом – 1-3 рабочих дня!), да еще заплатил там $15.


Спецвыпуск Xakep, номер #028, стр. 028-070-3, БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

Спецвыпуск Xakep, номер #028, стр. 028-070-3

S: С кредитками E-shop имеет дело?

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

S: Так, так, интересно! Как это было?

А: В первый раз нас нагрели всего лишь на $20. Человек расплатился ворованной картой, причем понять, что она ворованная, было нельзя, так как в то время не было возможности получить информацию о стране, где была выпущена карта, а также имя владельца карты.

В тот раз мы попросили прислать паспортные данные - обычно те, кто платит "левой" картой, пугаются и ничего не шлют, мы отменяем платеж, - но этот прислал. Мы отправили ему игру. А через месяц мы получили письмо из банка от реального владельца карты о том, что платеж он не совершал. Дело в том, что в течение полугода реальный владелец карты может отменить платеж в случае, если с его карты были списаны деньги, а подтверждающих документов с его подписью нет. Это называется charge back. По нашим законам в этом случае крайним остается интернет-магазин - банк просто списывает деньги со счета (в Штатах на этот случай можно застраховаться).

Этим вопросом занималась я лично. Я пошла в Управление "Р", познакомилась со многими интересными людьми, и мне честно сказали, что со своими двадцатью долларами я могу идти куда подальше, так как на серьезное дело такая сумма не тянет, а мелочью никому заниматься неохота. Заявление я оставила, но особой надежды не было. Но, в конце концов, этого человека все-таки задержали.

Этот случай заставил нас пересмотреть систему безопасности. Сейчас авторизационный центр предоставляет информацию о стране-эмитенте и имени владельца карты, которое вводит покупатель.

S: Что это за авторизационные центры такие?

А: Это такие компании, которые проверяют валидность кредиток (наличие такой карты и денег на счету) и осуществляют транзакцию по картам. Информация о них доступна в Инете. Например, мы работаем с Assist. Ты заключаешь с ними договор и пользуешься их услугами.

S: И сколько это стоит?

А: Вообще, за транзакцию проценты снимает банк, а уж как они делятся с авторизационным центром - это их дело.

S: Как все это работает?

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

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


Спецвыпуск Xakep, номер #028, стр. 028-070-4, БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

Спецвыпуск Xakep, номер #028, стр. 028-070-4

S: Как же вы попались второй раз?

А: Оказалось, что система авторизации устроена более хитро: если карта никогда не проходила через Интернет-платеж, то при авторизации в банке нет данных об имени владельца. Они проверяют только, что карта такая есть, что на ней есть деньги и списать их можно и что срок действия карты не истек. Именно такой картой воспользовался второй человек, который нас обманул на $800. Он вбил держателем карты Петра Семенова и прислал паспортные данные Петра Семенова, плюс мы не знали тогда страну эмитента, так что все было нормально. Мы отправили товар - через какое-то время приходит charge back. На этот раз мы обратились в УБЭП. Подключились оперативники, сделали запрос в тот город, откуда был этот парень. Он не ожидал, что к нему придут, да еще и так быстро. А пришли к нему достаточно быстро. Он сел на конкретную измену, сам позвонил нам и слезным голосом просил позволить возместить ущерб (ему светило до 7 лет лишения свободы). Деньги мы получили, срок ему, скорее всего, скостили. По большому счету, надо было еще компенсацию за моральный ущерб взять...

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

S: ОК, сменим тему. Вы работаете с различными вебмани, типа yandex-money?

А: С этим сложности. Во-первых, проблема это все завести. Во-вторых, вебмани - это одна большая дыра, и заниматься проблемами секьюрности веб-денег нам некогда. В-третьих, большая проблема их купить - и потратить, я думаю, не меньшая. Хотя мы подключили оплату картами E-port. Платежей через них идет мало, получить деньги с них сложно, да и процент они берут слишком уж хороший. Вообще, если посмотреть статистику оплаты, то на первом месте идут нал и безнал через банк, на втором - кредитки и уж на третьем – все остальное.

S: Вы ведете статистику покупателей?

А: А как же!

S: И что, статистика автоматически ведется на сервере?

А: Нет. Автоматически формируется заказ, рассчитывается цена, происходит авторизация юзера и кредитки. Также автоматически обновляется весь контент сайта в соответствии с ассортиментом. В принципе, есть еще что автоматизировать, но это не главное. Главное - поставить работу с клиентом, от этого зависит успех Интернет-магазина.

S: А какая сейчас ситуация в электронной торговле? Чем и как стоит торговать?

А: Торгуют практически всем. Не очень хорошо идет торговля продуктами - их лучше собирать по полкам в офф-лайне. Главное, заниматься тем, в чем хорошо разбираешься.


Спецвыпуск Xakep, номер #028, стр. 028-070-5, БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

БОЕВЫЕ БУДНИ ВИРТУАЛЬНОГО РЫНКА

Спецвыпуск Xakep, номер #028, стр. 028-070-5

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

S: Ну и напоследок: кто-нибудь пытался вас похачить или задосить?

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

Курьезный случай

Как-то по "левой" карте у нас заказали несколько цифровых камер. Я всегда таким людям удивляюсь: закажи одну – это не привлекает внимания, а тут мало того, что к цифровой технике у нас вообще повышенное внимание, так еще и несколько штук сразу. Мы сразу сообщили в органы. Те попросили оказать содействие при поимке. Ну, не вопрос – наш курьер взял камеры и поехал. Связь с клиентом была только через мобильный телефон (и то не его), поэтому назначили встречу на улице (это, кстати, нормальная практика). Все ждут, что будет. И тут звонят те, кто устраивал засаду, и возмущенно нам выговаривают: мы, мол, уже на месте, а где же ваш курьер и преступник? Оказалось, что они заранее приехали туда всей толпой на двух машинах с мигалками :). Естественно, "клиент" не пришел.


Спецвыпуск Xakep, номер #028, стр. 028-074-1, ПРИБАРАХЛИСЬ ДОМЕНАМИ - как купить домен, поднять на этом бабки и не пролететь

ПРИБАРАХЛИСЬ ДОМЕНАМИ - как купить домен, поднять на этом бабки и не пролететь

matt (matt@nm.ru)

Спецвыпуск Xakep, номер #028, стр. 028-074-1

Продать домен за 30 тысяч баков не реально?! Кто тебе сказал такую глупость? Если откачать из черепа пол-литра пива и вставить на это место мозги, то можно поднять планку и до семи с половиной мегатонн. А если толкнуть два таких? Ну, если толкнешь, переведешь мне 5% за этот мануал :).

Пристегнуть ремни. Взлет разрешаю!

Домены бывают разные...

Все домены верхнего уровня (зоны) делятся на общие (Generic Top Level Domains - gTLDs) и национальные (Country code Top Level Domains - ccTLDs). К gTLDs относятся:

1. com, net, org, info, biz, name - домены общего использования (открыты для регистрации всем желающим);

2. aero, coop, museum - специальные домены общего назначения (регистрация разрешена только лицам, связанным с соответствующим видом деятельности);

3. int, edu, gov, mil - домены ограниченного использования (доступны только соответствующим учреждениям).

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

Других доменов верхнего уровня нет.

Как купить домен: user's manual

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

Все регистраторы gTLD'ов перечислены на паге http://www.icann.org/registrars/accredited-list.html. Где регистрировать - нашли. Далее процедуры несколько отличаются в зависимости от админа зоны. Но суть их всех такова: ты должен зарегистрироваться, заключить договор и оплатить выставленный счет. Естественно, домен второго уровня должен соответствовать техническим требованиям (длина более одного (или трех) символов, без начального и концевого дефиса, etc - при регистрации тебе сообщат). В большинстве случаев домен получает тот, кто первый прислал заявку.

С национальными зонами есть еще одна заморочка: некоторые админы (Австрия, Канада, Япония, Малайзия, Америка и кое-кто еще) регистрируют доменные имена второго уровня только резидентам. Таким образом, при всем желании, сидя в России, в .жп ты никак не попадешь (если, конечно, под .жп понимать японскую зону).

Регистрацию домена, как правило, каждый год надо продлевать (хотя .biz и .info требуют проведения этой процедуры в два раза реже). Стоит продление обычно столько же, сколько и сама регистрация. Одни и те же деньги придется платить в зоне общих доменов, su, tv. А вот за продление регистрации домена.ру ру-центр просит на четверть меньше.

Личные дела

tv - это Тувалу, fm - Федеративные штаты Микронезии, am - Армения. Я перевернул твою систему ценностей? Ну, извини...

Да, как я уже где-то писал, существуют только общие и национальные домены. Поскольку к тем несчастным 13 gTLD'ам эти домены не относятся, то, методом исключения, можно догадаться, что это национальные домены. Впрочем, равно как и cd, it, is, ms, jo и еще 235 ccTLD'а. В свое время америкосы, почуяв добычу, подсуетились и купили многие домены: cd, am, fm, md, etc (правда, самой Армении все-таки оставили возможность регистрировать домены). И теперь все пожертвования за домен в Микронезии идут мимо этой великой тихоокеанской державы с гордым и мужественным 124-тысячным населением. А что им - все равно Инета нет...


Спецвыпуск Xakep, номер #028, стр. 028-074-2, ПРИБАРАХЛИСЬ ДОМЕНАМИ - как купить домен, поднять на этом бабки и не пролететь

ПРИБАРАХЛИСЬ ДОМЕНАМИ - как купить домен, поднять на этом бабки и не пролететь

matt (matt@nm.ru)

Спецвыпуск Xakep, номер #028, стр. 028-074-2

Ценовая политика у админа зон am, fm, cd такова, что за доменное имя второго уровня ты выкладываешь 200 баков при длине домена не более четырех символов и 100 - за остальные. Для сравнения: в зоне ru - 20, com - 25, tv - 50. И где справедливость? Хотя спрос рождает предложение...

Страшные киберсквоттеры

Смышленые члены Интернет сообщества быстро сообразили, что если быстренько купить домен, созвучный известной торговой марке, то потом ее владельцу этот домен можно продать раз этак в 200, а то и в 20 000 дороже (им-то он ой как нужен!). Называются эти смышленые члены киберсквоттерами, а их занятие - киберсквоттингом. Естественно, со словами "Ой, извините, пожалуйста" они не возвращают домен полноправному владельцу торговой марки, возмещая при этом моральный ущерб. Как правило, называется 6-7-значное число с непонятным префиксом "$", которое, так уж и быть, убедит чела передать домен. Правда, сильно оборзевшие сквоттеры, запутавшиеся в нулях, часто так ничего и не получают - компании судятся с ними и выигрывают. Так соответствующие конторы отсудили kodak.ru, coca-cola.ru, sprite.ru, nivea.ru. Хотя kamaz.ru в судебном порядке передать, собственно, КамАЗу так и не удалось. А некоторые считают, что потеря запрошенной суммы не сильно повлияет на их благосостояние либо просто проигрывают суды и выкладывают немалые грины за столь желанное, но оккупированное подлыми жуликами доменное имя. GeneralMotors, например, забыли зарегить домен generalmotors.com и потом как-то договаривались с перехватчиком. Но это все достаточно мелкие (в смысле количества перехваченных доменов) жулики. То ли дело adresa.ru! Ребята перехватили более 1000 доменов в зоне .ру (tampon.ru, utug.ru, shpagat.ru, kompaktdisk.ru, kompyuter.ru и еще более 995 адресов) и теперь просят за каждый по 3 тонны зеленого укропа. "Золотые адреса" типа benzin.ru, kazino.ru могут стоить в 10 раз больше. И считай сам: регистрация домена в зоне .ру стоит 20 вечноусловных единиц, продление - 15. Имеем: 1000 доменов*20 баков=20 000 баков - расходы на регистрацию, 15 000 - на продление. Нетрудно догадаться, что все эти затраты окупаются продажей семи доменов в первый год и пяти - в последующие. А это вполне реально.

Некоего рода киберсквоттингом занимается даже регистратор зоны tv. Обычный домен у них стоит 50 вечнозеленых, а вот business.tv уже обойдется ровно в миллион. Каждый зарабатывает как может.

Но продажей доменов занимаются не только киберсквоттеры. Киберсквоттеры-то перехватывают и продают адреса известных торговых марок их владельцам. Но ведь можно также продать известный адрес. На фига? Реклама! Например, пару лет назад cinema.com была продана за 700 тысяч, wines.com - за 3 млн., altavista.com - за 3.3 млн., а business.com один америкос, купив за 150 тысяч баков, перепродал за 7.5 лимонов тех же денег! Но тут никаких подколок (ни моральных, ни правовых).


Спецвыпуск Xakep, номер #028, стр. 028-074-3, ПРИБАРАХЛИСЬ ДОМЕНАМИ - как купить домен, поднять на этом бабки и не пролететь

ПРИБАРАХЛИСЬ ДОМЕНАМИ - как купить домен, поднять на этом бабки и не пролететь

matt (matt@nm.ru)

Спецвыпуск Xakep, номер #028, стр. 028-074-3

Как не лопухнуться при покупке домена

В свете предыдущего раздела прежде всего надо защититься от подлых и коварных сквоттеров. Как они тебе помешают? Ну, во-первых, ты можешь сболтнуть, что собираешься регить такой-то домен. Как с этим бороться - решай сам ;). Во-вторых, некоторые whois-сервера, проверяющие доступность домена, могут держать сами кибержулики, и как только ты убедился в незанятости адреса, они сразу же (раньше тебя!) отправляют заявку на регистрацию. Так что пользуйся лучше роснииросовским (http://ripn.net) или ру-центровским (http://nic.ru) whois-сервисом.

Если вдруг ты решишься переложить на прова все заботы по регистрации домена, то внимательно изучи договор. Там должно быть написано, что пров регистрирует доменное имя второго уровня на ТЕБЯ(!). И не третьего уровня: WWW(.domain.ru), а именно второго: DOMAIN(.ru).

Как заработать: вместо послесловия

Два предыдущих раздела, собственно, можно толковать и как инструкцию по поднятию денег на регистрации доменов. Единственное что - преобразование в честного и порядочного члена Интернет сообщества придется отложить до лучших времен (по крайней мере на срок до прочтения следующего Спеца - ВЕБ-МОШЕННИЧЕСТВО :) - прим. ред.).

Тувалу (tv) - независимое государство в Тихом океане, состоящее из девяти атоллов. Население: 12000 чел. Площадь: 26 кв. км.

Самые дорогие доменные трансферты:

Business.com - 7.5 млн.

AltaVista.com - 3.3 млн.

Loans.com - 3 млн.

Wines.com - 3 млн.

Autos.com - 2.2 млн.

Express.com - 2 млн.

WallStreet.com - 1 млн.

Bingo.com - 1 млн.

Cinema.com - 700 тыс.

Ну не рублей же!

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


Спецвыпуск Xakep, номер #028, стр. 028-076-1, Php-nuke v 2.0 Все, что душа пожелает!!!

Php-nuke v 2.0 Все, что душа пожелает!!!

ManderX

Спецвыпуск Xakep, номер #028, стр. 028-076-1

(forother@fromru.com)

Ну вот, нюку мы уже заинсталлили, потискали все имеющиеся функции и модули и поняли, что это не совсем то, что нам надо, нужны еще модули, темы, etc. Так что сегодня я тебе расскажу про дополнительные модули и блоки, а также поговорим немного о будущем этого проекта =).

AppServ

Мне много пришло писем по поводу установки нюки, так вот, существует такая софтина - AppServ, она включает в себя:

- Apache WebServer Version 1.3.26

- PHP Script Language Version 4.2.3

- MySQL Database Version 3.23.52

- PHP-Nuke Web Portal System Version 5.6

- phpMyAdmin Database Manager Version 2.3.0

Новичкам в нюке она будет очень полезна, ничего не надо настраивать. Запустил .exe файл и все! Наверняка многие уже слышали про подобные "джентльменские наборы" веб-мастера, включающие в себя веб-сервак, пхп, перл, мускулы, etc, так этот содержит еще и нюку. Сливаем тут - http://rus-phpnuke.com/modules.php?name=Downloads&d_op=viewdownload&cid=3.

[ModuleZ&BlockZ&ThemeZ]

Когда ищешь дополнения к грозному нюку, часто приходится регаться на порталах для того, чтобы скачать что-то, так что не бойся приветствий типа - "Stai provando ad accedere ad un'area privata" =). Для начала я скажу, где ты можешь поискать модули/блоки/темы, а потом опишу наиболее популярные. Вот два моих любимых сайта (оба на русском и оба не требуют регистрации), на первом ты найдешь кучу тем, на втором модули, блоки, темы, патчи, а также новости:

1.http://kindgood.ru/web/modules.php?op=modload&name=My_eGallery&file=index&do=showgall&gid=3.

2.http://rus-phpnuke.com/modules.php?name=Downloads - если при описании увидишь "Rus: +", это значит, что тут ты сможешь найти полностью (и заметь - качественно) русифицированную версию модуля/блока.

Вот еще несколько забугорных сайтов:

http://www.nukedownload.com - там сможешь скачать Wisiwyg_3.0, это модуль редактора, т.е. чтобы не писать тегами, делаешь все кликами. Заменяет модули FeedBack и Submit_News (кстати, там есть и другие неплохие модули).

www.khakism4.com - хочешь, чтобы на твоем сайте посетитель смог играть в flash-игры? Тогда модуль khakism4games для тебя, там уже есть 6 игр + ты можешь добавлять свои (хе-хе, ну я прям как в рекламе написал =).

На самом деле сайтов с модулями намного больше! Просто следи за новостями www.phpnuke.org, там рассказывается про эддоны, темы и т.д. и даются линки для скачивания. Удачи в поиске!

А теперь перейдем к описанию самих модулей, напомню, что если модуль требует MySQL (при описании "Мускулы: +"), то чаще всего надо запускать install.php, но иногда приходится поработать и вручную, в этом нам поможет такая команда (см. предыдущую статью):

mysql -h имя_хоста -u логин -p nuke < x.sql

МОДУЛИ

:Gbook

:Логово: http://www.php-mania.com.ar

:Мускулы: +

:Rus: +

Нужна гестбука? Этот модуль то, что тебе надо! После распаковки в нужную диру заходишь на http://www.yoursite.com/modules.php?op=modload&name=Gbook&file=install, и все, модуль установлен. Кстати, в целях безопасности положено сразу же удалять install.php, так что давай удаляй, не ленись. Достаточно функциональная гостевуха: поддерживает HTML и BBcode, логирует IP, все красочно оформлено + ты можешь менять цветовую гамму из веб-интерфейса. Также присутствуют функции оповещения админов и/или пользователей о новых сообщениях, отцензуривания, проверки на флуд и т.д. Имеется достаточно смайликов, чтобы насмайлиться =). Как админ, ты, естественно, можешь редактировать/комментировать/удалять сообщения пользователей, а также закрывать на время гестбуку. Можешь сделать этот модуль только для админов, тогда все админы смогут общаться, обсуждать проект.


Спецвыпуск Xakep, номер #028, стр. 028-076-2, Php-nuke v 2.0 Все, что душа пожелает!!!

Php-nuke v 2.0 Все, что душа пожелает!!!

ManderX

Спецвыпуск Xakep, номер #028, стр. 028-076-2

:phpBB

:Логово: www.phpbb.com & http://bbtonuke.sourceforge.net

:Мускулы: +

:Rus: Только для 5.6

Вот это уже посерьезнее штучка, чем предыдущая гостевуха, это самый настоящий (я бы даже сказал, один из лучших) форум. Один умелец (Tom Nitzschner) написал bbtonuke, это тоже PhpBB, только выполненный в виде модуля для нюки. Сейчас есть бетка для Php-nuke 6.0, ставь ее, багов вроде нет. Про установку следует сказать по действиям (у тебя должен быть админ и пользователь в системе одновременно):

1. Забекапь всю инфу и базы данных на всякий...

2. Удаляй старый форум. Т.е. - /modules/Forums/*.

4. Далее копируй все из архива bbtonuke в свою диру, не меняя структуры. Некоторые файлы будут перезаписаны, соглашайся, если что.

4. Заходишь под логином того пользователя и админа, жмешь на линк к форуму.

5. Далее следуй указаниям.

Вот и все, если чего-то не получается - пиши, помогу. Про форум я рассказывать не буду, всем и так известно что это такое =). Кстати, в последней версии этого модуля имеется 7 тем.

:WebChat + блок

:Логово: http://www.saarport.net

:Мускулы: +

:Rus: +

Раз уж мы про общение, то давай завершим эту тему веб-чатом. Веб-чат он и в Африке веб-чат, вот только не надо на меня орать, типа IRC 4ever, для такого ирц-маньяка, как ты, туда воткнули команду "/msg" =). Установка не должна вызвать никаких затруднений: скопировал все, потом заходишь под админом в этот модуль через веб-интерфейс и устанавливаешь. Можешь добавлять/редактировать/удалять комнаты и править кучу других настроек. С модулем идут два блока, которые отображают инфу о количестве человек в комнате.

:My_eGallery

:Логово: http://www.marsishere.net

:Мускулы: +

:Rus: +

Очень известный модуль галереи, и обойти его было бы несправедливо. Установка опять-таки делается через веб-интерфейс (но можешь и вручную!). Этот модуль не ограничивается показом картинок, прямо в онлайне ты можешь смотреть видео и слушать музон (для локалок очень даже приемлемо), а проигрывателем будет сам сайт, или можешь просто скачать и прослушать в оффлайне. Также в этот модуль встроена система почтовых открыток, т.е. пользователи смогут посылать поздравления с открытками своим друзьям! Остальные функции обыденны - редактирование категорий, описаний файлов (там можно составить целое досье на файл =) и т.д.

:La_boutique

:Логово: http://www.presencenet.net

:Мускулы: +

:Rus: +

Модуль магазинчика. Те, кто не может дождаться Php-nuke 6.5, используют именно его и не жалуются, вполне приемлемый, настроек достаточно. В главном окне показываются последние поступления и категории, также можешь вывесить рекламу какого-нибудь товара. Цены могут отображаться и в рублях, и в бакинских, и в евро, с НДС или без. Модуль поддерживает темы, то есть можешь менять дизигн. Единственный недостаток - тебе придется вручную заполнять и создавать sql-таблицы.


Спецвыпуск Xakep, номер #028, стр. 028-076-3, Php-nuke v 2.0 Все, что душа пожелает!!!

Php-nuke v 2.0 Все, что душа пожелает!!!

ManderX

Спецвыпуск Xakep, номер #028, стр. 028-076-3

:Who_is_Were

:Логово: www.surf4all.net

:Мускулы: +

:Rus: +

Блестящий блок! Советую выкинуть в хлам "Who's Online" и поставить "Who_is_Were", так как он отображает более подробную инфу. Если юзер зарегистрирован, то в блоке отображаются его ник и дира, где он находится; если не зареган, то отображаются его IP и опять-таки дира нахождения. Кстати, это еще один метод подтолкнуть анонимусов к реганию, ведь многие не хотят, чтобы их IP узнали =).

About Future

На самом деле, нюка далеко не идеал! Во-первых, если это OpenSource - то обязательно будут находить жучков, например, недавно сервер phpnuke.org был атакован. Хотя FB (Francisco Burzi) и сообщил, что атака была произведена не на систему Php-nuke, а на Апач, вскоре вышел патч к Php-nuke, скачать который ты можешь тут - http://rus-phpnuke.com/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=42&title=Security%20fix. А здесь - http://www.security.nnov.ru/search/news.asp?binid=2333 - можешь прочитать о CSS багах во многих модулях в версии Php-nuke 6.0, удивительно, но на официальном сайте они не фурычат. Во-вторых, многие утверждают, что Php-nuke спроектирован неверно (особенно SQL), об этом можешь прочитать тут - http://forum.ru-board.com/topic.cgi?forum=28&topic=1172#1. А после длительного изучения этого движка я вполне согласен с автором этого сообщения, который разрабатывает свою систему PhpBBCMS (на основе PhpBB), утверждая, что она будет быстрее и лучше других. Ну что ж, поживем - увидим, а за прогрессом можешь наблюдать здесь - http://phpbbcms.sourceforge.net/. Теперь немножко о будущем Php-nuke (ведь он тоже не стоит на месте). Скоро должна выйти Php-nuke 6.5, так вот - для корректной работы этой версий нюки нужен PHP 4.3.0 (кстати, именно эта версия включена в AppServ 1.9.0), это чтобы у тебя было меньше проблем =). И конечно, там будет много нововведений, типа магазинчика, также обещают новый модуль новостей, встроить PhpBB, а не этот стандартный Forum. Многие модули теперь не придется скачивать и ставить самостоятельно. Возможно, он уже вышел, так что иди на www.phpnuke.org за обновлением!

P.S. И помни, все, что сделано своими руками, - дороже!

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


Спецвыпуск Xakep, номер #028, стр. 028-080-1, ЗНАЙ ВРАГА В ЛИЦО! - статистика посещений по-простому

ЗНАЙ ВРАГА В ЛИЦО! - статистика посещений по-простому

Спецвыпуск Xakep, номер #028, стр. 028-080-1

ДАО-КЭ-ДАО ФЭЙ-ЧАН-ДАО

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

КТО?

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

Чтобы узнать список всех переменных, которые поддерживает твой браузер, нужно заюзать таг:

<?php phpinfo()?>

Инфа о браузере и операционной системе и языке хранится в переменной HTTP_USER_AGENT; чтобы вывести ее содержимое, забивай таг:

<?php echo $HTTP_USER_AGENT; ?>

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

Полезно также знать, с какой странички пользователь к тебе пришел, то есть кто такой хороший дал ссылочку на твою заплесневелую пагу? Этот адрес выясняется легко:

<?php echo $HTTP_REFERER; ?>

Чтобы пользователи не наглели, полезно будет хранить их IP-шники. То есть можно будет вычислить адреса любителей порнушки. Конечно, IP-адрес у юзера может быть не постоянный, но все-таки это внесет какую-то стабильность. Это простейший способ определить, тот же пользователь заходит на страничку или другой?

Вывод осуществляем тагом:

<?php echo $REMOTE_ADDR; ?>

Не отходя от кассы, можно проверить порт, с которого пришел запрос:

<?php echo $REMOTE_PORT; ?>

Ну и еще полезно знать, какую страничку пользователь запросил:

<?php echo $REQUEST_URI; ?>

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

КОГДА?

Как только пользователь зайдет на нашу страничку, он сразу же активизирует таг:

<?php $kogda=date('H:i:s, d m Y'); ?>.

Функция date() запишет в переменную kogda часы, минуты, секунды, день, месяц и год. Подробную расшифровку смотри по ссылке: http://www.west.com.ua/doc/php/learn_php3/7.html

СОХРАНИТЬ!

Кто и когда, мы знаем, теперь осталось это сохранить в файле. Для этого надо заюзать функцию открытия файла и установки указателя fopen(), в скобках указывай путь к файлу. Процедура fwrite() - запишет в файл по указателю полученные данные, а процедура fclose() закроет файл.

ДВИЖОК: с каких страниц к тебе ходят

АДРЕС: http://www.evilwalrus.com/viewcode/605.php

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

ДВИЖОК: когда? кто? откуда? под чем?

АДРЕС: http://www.evilwalrus.com/viewcode/56.php

Ну а тут движок немного посложнее. Засасываются: дата, с помощью функции date(), айпишник юзера через переменную REMOTE_ADDR, откуда пришел через HTTP_REFERER и с чем пришел (браузер) HTTP_USER_AGENT. Причем все это записывается в формате HTML файла за счет того, что переменные вставлены в заготовку HTML-документа. В результате имеем статистику в HTML-файле, которую можно посмотреть через браузер.


Спецвыпуск Xakep, номер #028, стр. 028-080-2, ЗНАЙ ВРАГА В ЛИЦО! - статистика посещений по-простому

ЗНАЙ ВРАГА В ЛИЦО! - статистика посещений по-простому

Спецвыпуск Xakep, номер #028, стр. 028-080-2

ДВИЖОК: Google-шпион

АДРЕС: http://dimok.ru/notes/seo-stats-of-googlebot-visits.html

Ну а теперь извращенческий скрипт, предназначенный для подглядывания за роботом. С помощью функции eregi() этот скрипт определяет наличие строки "googlebot" в переменной HTTP_USER_AGENT. Если такая строка есть, значит нам пожаловал поисковый робот GOOGLE.COM. Сразу записываем в файл, когда приползал паук и как часто он у нас бывает. Если научиться отличать поисковые системы от обычных юзеров, изучить их поведение, то можно научиться искусственно накручивать рейтинг твоего сайта. Это называется клоакингом, о котором мы тебе расскажем в следующем номере.

ДВИЖОК: банальный счетчик

АДРЕС: http://www.evilwalrus.com/viewcode/80.php

Конечно, бывает нужно просто сосчитать, сколько раз запрашивали какую-то страничку. Тут небольшая процедура при каждом заходе на страничку открывает файл, достает оттуда число, добавляет единичку и снова закрывает. Этот пример интересен новым способом записи в файл из PHP. Функция exec() вызывает шелл, в котором перенаправляет стандартный вывод переменной счетчика в текстовый файл. Это, конечно, через зад, но так тоже можно.

ДВИЖОК: умный счетчик

http://www.evilwalrus.com/viewcode/385.php

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

ДВИЖОК: потрошитель HTTP_USER_AGENT

АДРЕС: http://www.evilwalrus.com/viewcode/612.php

Этот скрипт расшифровывает аббревиатуры, записанные в переменной HTTP_USER_AGENT, и представляет их в понятном виде. То есть на экран выводится полное название браузера, операционной системы, язык. В качестве бонуса есть возможность увидеть количество цветов и разрешение на экране пользователя за счет вставок на JavaScript.

СЕССИИ

Одна из проблем подсчета юзеров в том, что они разбегаются. То есть бывает сложно отличить, посчитали ли мы этого юзера или еще не посчитали. Один из способов пометить посчитанных юзеров - сессия. Тогда каждому клиенту выдается по уникальному номеру. Подробнее теорию можешь прочитать здесь: http://www.ruscripts.com/php-articles/sessions.php. А простенький пример под названием "В который раз ты на этом сайте, задолбал ходить" ты найдешь здесь http://www.ruscripts.com/php-articles/sessions.php. Когда этот скрипт своим заходом на страницу задействует нового пользователя, он накручивает счетчик.

GD

Важно не только собирать статистику, но еще ее красиво отображать на страничке. Конечно, засосать инфу из файла статистики в HTML, как ты уже понял, для PHP не проблема. Однако на этом все не кончается. Ведь ты можешь еще строить графики на основе полученных данных статистики. GD - это библиотека графических функций, подробную инфу о которой ты найдешь на http://www.komkon.org/~denis/mydoc/gd.htm. А если коротко, то ты можешь работать с картинками jpg, gif, png. Можешь изменять их масштаб, обрезать, накладывать на них текст и геометрические фигуры, такие как: ломаная, точка, круг, прямоугольник. В HTML-заготовке, на месте PHP-скрипта c GD-функциями, появляется картинка. Она формируется во время запроса и отсылается в графическом формате.


Спецвыпуск Xakep, номер #028, стр. 028-080-3, ЗНАЙ ВРАГА В ЛИЦО! - статистика посещений по-простому

ЗНАЙ ВРАГА В ЛИЦО! - статистика посещений по-простому

Спецвыпуск Xakep, номер #028, стр. 028-080-3

ДВИЖОК: простейший графический счетчик

АДРЕС: http://www.beginnersphp.co.uk/gdcounter.php

История та же, что и с обычным счетчиком. На сервере хранится файл с количеством насчитанных посещений. Каждый новый пользователь запускает своим приходом PHP-скрипт, который открывает файл и добавляет к количеству посещений единичку. Отличие в том, что методом GET новое значение передается скрипту, генерящему картинку счетчика. Он создает новую картинку, записывает туда белый прямоугольник, поверх прямоугольника накладывает новое число посещения черным и записывает его в JPEG-файл. Этот новоиспеченный файл с обновленным значением браузер загружает как обычную картинку.

БД

Ну а теперь вспоминаем, куда мы записывали статистику. А записывали мы ее в обычный текстовый файл. Конечно, на PHP или на Perl, или даже на C можно написать обработчик для нашей базы данных. Ведь нужно данные сортировать, группировать, проводить поиск и формировать отчеты. Однако на обычном языке программирования это все писать заколеблешься. Нужна БД (База Данных), во многих крутых движках статистики любят использовать MySQL. Доки здесь: http://emanual.ru/download/1121.html. Конечно, придется немного помучиться, чтобы прикрутить MySQL-сервер к WEB-серверу, но зато этим укоротим километры лишнего кода на Perl или PHP.

ДВИЖОК: простенький логгер с применением MySQL

САЙТ: http://www.evilwalrus.com/viewcode/187.php

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

ЗАКЛЮЧЕНИЕ

В этой статье я специально подобрал для тебя скрипты размером не больше странички, а обычно вообще в несколько строк. Если хочешь погеморроиться, то разбирайся в этом мегастатистическом скрипте: http://www.mithril.ca/code/php/lib_useage_track.php. Перечислять все, что он умеет, у меня бумаги не хватит. Бывай.


Спецвыпуск Xakep, номер #028, стр. 028-082-1, haX0rz4haX0rz - Инфа по укреплению своего пристанища в Инете

haX0rz4haX0rz - Инфа по укреплению своего пристанища в Инете

Frozen (frozen@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-082-1

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

Дока: Документация по MySQL

Линк: http://www.sql.ru/docs/mysql/rus_ref/

На сегодняшний день база данных MySQL является, наверное, одной из самых распространенных, как самая бесплатная и, несомненно, удобная. Но, как и везде, у этого языка запросов существует множество особенностей и различных конструкций запросов, разобраться в которых не всегда получается... Открыв представленную ссылку в своей бродилочке, ты наткнешься на полный и удобный справочник-учебник по этой СУБД. Как оказалось, это даже не перевод оригинальной документации, а как говорит сам автор, "этот документ написан после прочтения фирменной документации, работы с пакетом и даже попыток его повалить, правда, не слишком удачных". Так что очень советую ознакомиться с предложенной информацией, если ты юзаешь MySQL.

Рекомендовано: девелоперам сайтов с использованием MySQL.

Дока: Понимание SQL

Линк: http://www.sql.ru/docs/sql/u_sql/index.shtml

Ну, а если ты решил запариться не просто с MySQL, а вообще с базами, построенными на основе структурированного языка запросов (SQL), вроде мелкософтовского MSSQL или другого какого mSQL, то советую обратить внимание на этот талмудище. Рассматривается в мельчайших подробностях все, начиная с общих понятий о реляционных базах данных и заканчивая информацией по конкретно СКЛю и использованию его совместно с разными языками программирования. Освещено много частностей по работе с этой СУБД (например, рассказывается, как и в какой форме хранятся данные, как работают привилегии и прочие разные аспекты, присущие этой БД). В общем, если ты решил не останавливаться только на конкретном продукте, а хочешь освоить все семейство, то беги читать. Да и вообще присутствует тут и общая информация, которая будет полезна для понимания любой БД.

Рекомендовано: серьезным людям, связанным с базой SQL.

Дока: WML

Линк: http://www.citforum.ru/internet/articles/wmldoc.shtml

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

Рекомендовано: если ты решил делать сайт для сотовых телефонов, то стоит посмотреть.

Дока: WAP и ASP

Линк: http://relib.com/articles/article.asp?id=132

http://relib.com/articles/article.asp?id=134


Спецвыпуск Xakep, номер #028, стр. 028-082-2, haX0rz4haX0rz - Инфа по укреплению своего пристанища в Инете

haX0rz4haX0rz - Инфа по укреплению своего пристанища в Инете

Frozen (frozen@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-082-2

http://relib.com/articles/article.asp?id=136

А если ты решил более серьезно заняться ваянием сайтов для мобил, то зайди сюда, тут автор пытается рассказать, как подружить творение мелкософта - ASP и собственно сам WAP. Причем отсюда же ты узнаешь, как организовать работу с базой данных (ессесно, акцесс) на примере создания информационного "портала" по заказу билетов в кино с мобилы :))), а также пример довольно полезного приложения по созданию подобия онлайн-магазина для телефона. Все объяснения сопровождаются подробными комментариями и картинками, хотя, в общем-то, ничего сложного, как оказалось, во всем этом нету. Если так дальше дела пойдут, то, я чувствую, скоро можно будет самому ваять проги для управления всей своей техникой по телефону.

Рекомендовано: телефонным порталостроителям.

Дока: Системы управления Web-контентом

Линк: http://osp.admin.tomsk.ru/ecom/2000/02/052.htm

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

Рекомендовано: админам крупных сайтов с огромным контентом.

Дока: Начала сайтостроения

Линк: http://do.bti.biysk.secna.ru/lib/book/

А это еще один талмудик для освоения некоторых основ при построении сайта. Понравилось тем, что все просто и понятно объясняется на конкретных примерах безо всяких там заумностей и прочих специфических терминов и многих слов. Раскладывается материал прямо-таки по полочкам от простого к сложному. И освоив предоставленную инфу, ты сможешь изготавливать сайты, используя не только обычный хтмл, но и технологии вроде пхп, асп, XML и другие немаловажные вещи.

Рекомендовано: не до конца освоившим азы вебинга.

Дока: Создание бизнес-сайта

Линк: http://business-site.ru/interview/site/vasilyev.htm

Это даже не полноценный документ - это интервью с очень умным дяденькой, однако тут освещаются весьма интересные вещи по созданию и продвижению бизнес-сайта. Конкретных примеров по созданию чего-либо ты тут не найдешь, но интересно будет почитать просто про саму технологию ваяния проекта, действительно могущего приносить реальную прибыль. Также рассматриваются аспекты создания сайта для коммерческих компаний, но это, я думаю, тебя мало заинтересует. Хотя, кто знает - а может ты будущий гений дизайна и гуру порталостроения :). А вообще, советую посмотреть данный линк, вдруг пригодится.

Рекомендовано: разработчикам архикрутых бизнес-сайтов :)

Дока: Язык XML - практическое введение


Спецвыпуск Xakep, номер #028, стр. 028-082-3, haX0rz4haX0rz - Инфа по укреплению своего пристанища в Инете

haX0rz4haX0rz - Инфа по укреплению своего пристанища в Инете

Frozen (frozen@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-082-3

Линк: http://www.webclub.ru/archive/xml/article-226.html

Наверняка тебе известен такой язык - XML, здесь же ты найдешь довольно полное руководство по этому языку разметки. Присутствует достаточно большое количество примеров и описаний разных структур, объясняются основы дружбы XML и ASP, а также другие интересные вещи. И, скорее, этот ресурс похож на справочник, чем на обстоятельный документ. Так что советую держать под рукой как небольшого помощника при создании чего-либо с использованием этой фичи.

Рекомендовано: XML-зависимым людям.

Дока: Форум XPoint

Линк: http://www.xpoint.ru/

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

Рекомендовано: у тебя есть вопросы без ответов - тогда тебе сюда :).


Спецвыпуск Xakep, номер #028, стр. 028-086-1, ВОРЧОКИНГ-2 - новые похождения бутаритарцев

ВОРЧОКИНГ-2 - новые похождения бутаритарцев

Спецвыпуск Xakep, номер #028, стр. 028-086-1

Как известно, в нашей Бутаритари две столицы - первая и южная. Я живу в южной, он же Санто-Пабло, - климат помягче, теплое море, пляжи, золотой песок, белые штаны, мулатки пачками и Замковая площадь с Николаевским столбом посередине. Итак:

Приехав в пятницу домой и усевшись в комнате для медитаций со свежим номером СПЕЦа в фаянсовое кресло, я задумался. Из высоких раздумий о смысле жизни меня вывел звонок телефона. Вылезать не хотелось - посему, успокоив себя, что если кому что нужно - на трубу позвонят, я продолжил чтение. Тут заверещала трубка, на всякий случай носимая с собой всегда. Друган Леха торжественно сообщил, что ему контора приобрела новый ноутбук, и его охота потестить в экстремальном режиме. Контора у Лехи абсолютно буржуйская, посему девайсы покупает только брэндовые, так что развлечение предстояло быть интересным.

Turn on. Tune in. Drop out.

Наутро в субботу, пересекшись с ним на мосту Давский проспект/Гребонал Короедова, я залез к нему в машину известной бутаритарской марки «ОООО». Лучше, конечно, было бы сесть на какой-нибудь ТАЗ "Жиголо", чтобы особо не отсвечивать, но на безрыбье и икра - вобла.

Он тут же начал хвастать новой Тошибой, манерная такая штука. В сумке к ней была куча девайсов, и первое, на что у меня упал взгляд, была карточка - о, великий бутаритарский Бог! - Cisco Air. С разъемом под внешнюю антенну. Я тут же вытащил Спец из рюкзака и сунул его Лехе. Прочитав статьи про варчокинг и банктенну, Леха засверкал глазами, и между нами произошел следующий диалог:

- Ну, поехали,

- Куда?

- Как куда? Антенну паять!

Остановившись по дороге у магазина электроники, мы купили все необходимые причиндалы для пайки и поехали искать кабель для антенны. Западло. У нас в южной столице кабеля для антенн стоят дороже, чем в главной столице. В магазине "Компьютерная война" нам предложили данное устройство за 85 мертвых президентов, за которые, в принципе, я бы зайца по полю вилами загонял. Потеряв всякую надежду, мы зашли в маленький магазинчик в подвальчике. Из разряда таких, где тебе не очень трезвый менеджер начинает шептать на ухо, что вот у нас новая поставка системных блоков - по мегасниженным ценам, сейчас только кровь с него оботрем... Безо всякой надежды мы спросили у продавца шланг к сиське. Опа! Бинго!

- Да, пожалуйста, последний остался...

- Сколько?

- 25 долларов.

- ?!

- И диск с драйверами...

- ???

Да, диск с драйверами представлял собой болванку с закатанным на нее Netstumbler'ом и прогой под названием Radiosurfer неизвестного производителя, которая не только не работала, но даже не устанавливалась. Битый архив. Ну и ладно. Кстати - если кто-то найдет работающий радиосерфер - расскажите, что за фигня. Совершенно случайно у них оказались нужные нам разъемы (это был просто день Бэкхэма).

Теперь нужно было решить проблему с антенной. У самого дома мы зашли в пупермаркет и купили банку шампиньонов, как нам показалось - она подходила. Как выяснилось - не очень. Рассказывать долгую историю, как мы испортили 4 консервных банки и объелись шампиньонами, корнишонами, а также ананасовым компотом, не буду, но продавщицы в супермаркете, ближайшем к лехиному дому, по всей видимости, тихо перлись и писались кипятком, глядя на нас, когда мы раз в полчаса приходили в супермаркет с линейкой и штангенциркулем, обмеряя банки с консервами на полках. В итоге нам подошла банка из-под этого самого ананасового компота фирмы «Pole!» длиной 160 мм и диаметром 108 мм. Но антенну нужно было настроить - для этого Леха предложил поехать к ним в офис, потому как у них в конторе радиоэзернет был. Типа идеал для фирмы, которая часто меняет местоположение :).


Спецвыпуск Xakep, номер #028, стр. 028-086-2, ВОРЧОКИНГ-2 - новые похождения бутаритарцев

ВОРЧОКИНГ-2 - новые похождения бутаритарцев

Спецвыпуск Xakep, номер #028, стр. 028-086-2

Тест-драйв

Подъехав к точечному офисному зданию, где-то в районе проспекта Электриков, мы подоткнули бук в прикуриватель, загрузились, запустились, по примеру товарищей из главной столицы положили банку на переднюю панель, правда я накрыл ее кепкой. Ей-то по барабану, а эцилопам спокойнее. Стали медленно нарезать круги вокруг здания. Отстроившись по оптимуму - второй раз рассказывать нет смысла - читайте "Банктенну", мы обнаружили в двенадцатиэтажной точке 3 сетки, помеченных WEP. С криками «Клюет!» мы вылезли из машины и сплясали ритуальный танец бутаритарских ворчокеров, выталкивая машину из сугроба (в смысле, из песчаной дюны :)). Этажом выше лехиного офиса находились офисы конторы, торгующей спортивными товарами одного широкоизвестного бренда; хотелось выкачать у них пару свежих роликов с какой-нить знаменитостью - типа теннисисткой :), но не судьба.

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

Туристы, я вам ща проведу, блин, экскурсию (с) Масяня

Въехав в район, преимущественно населенный посланниками всяких княжеств и графств в нашей славной Бутаритари, мы медленно поехали по улице с труднопроизносимым названием. Наивно было полагать, что в консульствах будут юзать радиосетки, да еще и без кодировки, но покидать спиннинг было прикольно. Сигналы на стамблере время от времени попадались, но были либо очень слабыми и кодированными, либо... А вот это что-то новенькое - сигнал был сильным, но прерывающимся - на скрине этого не показать; грубо говоря - сигнал есть - сигнала нет. И так с периодичностью в три секунды... Какие-то новые военные фишки. Осмотревшись, мы увидели на здании, непосредственно рядом с нами, флажок маленького, но очень задиристого государства, претендующего на роль мирового жандарма. Они очень любят побомбить кого не попадя и ввести свои войска куда не надо. Чтобы не нервировать охрану, состоящую из ребят, явно прошедших операцию "Штиль на пляже", мы погасили сканер, вылезли из машины, достали по банке безалкогольной водки и принялись обсуждать ситуацию. Данный метод глушения сигнала не был описан в известной нам научной литературе, посему было решено отложить обследование данной точки до лучших времен. Банки под присмотром простых парней в зеленом камуфляже были интеллигентно выкинуты в урну, и мы переместились на параллельную улицу, которая была точно так же заполонена всякими консульствами и представительствами. Там все было гораздо интереснее. Черт побери, надо же, поблизости от консульства одной из бывших провинций Бутаритари, получившей независимость благодаря самому гуманному человеку, жившему в шалаше, была сетка с устойчивым коннектом. Заняться ею более плотно нам помешали эцилопы, которые поглядели-поглядели на стоящую машину, из которой никто не выходит, да и пошли к нам. Некоторые части нашего тела немного сжались, но шеф-пилот заявил:


Спецвыпуск Xakep, номер #028, стр. 028-086-3, ВОРЧОКИНГ-2 - новые похождения бутаритарцев

ВОРЧОКИНГ-2 - новые похождения бутаритарцев

Спецвыпуск Xakep, номер #028, стр. 028-086-3

- С... бегать нельзя. Номер запишут и попалят. Будем так отмазываться.

Отмазываться не пришлось, просто была открыта папка с какими-то бумажками по Лехиной работе, и мы погрузились в обсуждение фьючерсов и прочей хрени. Ноут был технично закрыт. Эцилопы откозыряли, и мы поехали в сторону Разливального проспекта. Он известен тем, что на нем находится "маленькая избушка" в десяток этажей, в которой так приятно попить пивка в субботу вечерком в приятной компании настоящих мужчин :). Они работают в тени и ходят в сером. Искать на наши розовые попки приключений такого уровня нам, конечно же, не хотелось. Поэтому интеллигентно погасив сканер, мы объехали данное здание со стороны и двинулись в сторону Зимнего парка, по дороге отмечая слабые нырки стамблера, который пытался что-то ловить, но у него плохо получалось. «Сегодня клева не будет», - завил пилот, как вдруг пики сигнала почти порвали окошко стамблера. Ух ты! Кто здесь? Сетка была заWEPена, но нигде вблизи ничего не показывало на что-нибудь пальцовое. Ни тебе окошек с стеклопакетами, ни папских машинок у подъезда. Объехав квартал, мы поняли, что источник находится прямо тут, но где - Святой Буритарин знает. Однако потом по карте выяснилось, что там находится детский сад :). А еще международная общественная организация "Общество болтовой резьбы". Фиг знает, у кого из них стоит сетка :), но сигнал ядреный.

Город садов, парков и музеев

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

Тогда мы двинулись в сторону Замковой площади по Замковой же набережной, попутно отлавливая пару-тройку слабых кодированных сигналов, по всей видимости - с другого берега реки Даты. На том берегу находилась бывшая местная королевская тюрьма Алькатразз, но сигналы были явно не оттуда, хотя пес его знает, на правый берег сегодня мы лезть не собирались. Оставим это другим первопроходимцам. Потом свернув на набережную реки Помойки, мы нашли еще несколько слабых сигналов, запеленговать которые у нас не получилось, несмотря на все наши ухищрения, езду задом и прочие извращения. Да и еще - в общей массе сигналы были шифрованные. Судя по всему, у нас в южной столице народ более параноидален, и если есть Wireless Encryption Protocol, то его включают. Халява ведь, Included. Чего бы ее не поюзать? Тогда мы двинулись к паре зданий, в которых размещены представительства марихуанового королевства, лягушачьей республики и нашего соперника в борьбе за три острова с кокосовыми пальмами. WEP. Мы даже не стали заморачиваться и двинули на запад. Так потихоньку мы подобрались к сердцу нашей южной столицы. С учетом того, что выезд на Замковую площадь для некоролевского автотранспорта перекрыт, мы припарковались на подходах и начали водить банкой по направлению к адмиральской гауптвахте. Сканер захлебывался, но, по всей видимости, это работали кодировщики порноканалов :) и глушилки западных голосов :), потому что какого-либо устойчивого коннекта не было. Да и сеток он не нашел ни фига. За этим рискованным занятием прошло несколько минут, и мы решили размять части тела и вылезли из машины. Увидев табличку, напротив которой мы парканулись, мы в один голос начали угорать. Как выяснилось - это был эцилопский лазарет. Вдоволь посмеявшись и выпив еще по банке безалкогольного рома, мы спокойно раскурили трубку мира и стали разрабатывать дальнейший маршрут. Буржуин Леха сказал, что можно еще съездить к одной гешефт-конторе, которая находится в переулке, рядом с самым большим магазином колониальных товаров в Санта-Пабло - "Зданием Санта-Паблинской Торговли".


Спецвыпуск Xakep, номер #028, стр. 028-086-4, ВОРЧОКИНГ-2 - новые похождения бутаритарцев

ВОРЧОКИНГ-2 - новые похождения бутаритарцев

Спецвыпуск Xakep, номер #028, стр. 028-086-4

Я рисую на асфальте синим мелом слово "Хватит" (с) Пропаганда :).

Подъехав туда, мы задумались. Я туда однажды заходил по делам работы, перешивали контроллеры Sima. Там, типа, круто и все такое. Однако и охрана там такая, что если в наличии еще и имеется подразделение информационной безопасности - то стремно. Ладно, двум смертям не бывать. Go-go-go! Ба-бах! Одна сетка, другая, третья, четвертая. Ни одна не кодирована. Черт, круто. Сакс, отстойно. К нам шел крепкий парнишка в форме с надписью "секьюрити". Блин, что ему нужно. А-а-а-а-а-а-аааааа. Дядя, только не по голове, мы же ничего плохого не делали?

- Господа, вы приехали в наш бизнес-центр?

- Ну, типа нет.

- Тогда попрошу вас освободить парковочное место.

- Да-да, конечно, конечно.

Фу-у=у, блин, так и заикой стать недолго.

Ладно, отъезжаем немного в сторону. И продолжаем водить банкой. 4 устойчивых коннекта. Без WEPа. Супер, вот оно, теплое место. Ладно, на глазах у охраны чирикать мелом не стали, зашли за угол. Типа отлить. Сели в машину и свинтили оттуда. Место богатое, но стремное. Двинулись в сторону свежеотремонтированной Семенной площади по Давскому проспекту, а потом по Огородной улице. По ней тоже есть пара слабых сигналов, но заморачиваться мы на них не стали, потому как оголодали. И захотелось нам повторить опыты наших столичных товарищей. Сели мы в ФакДональдсе, взяли по молочному коктейлю и по кофе, открыли ноутбук и давай развлекаться. Для пущей веселухи мы начали разговаривать по-английски. "My name is Bond. James Bond. My name is Off. Fuck off". С учетом того, что Леха передвигается по городу только в костюме и пальто, а я в джинсах, гриндерах и куртке-танкере, мы представляли собой милую парочку. Только у нас было круче, чем в главной столице. Намного круче. К нам не приставали с расспросами всякие девочки. К нам пристала охрана. И попросила не заниматься "ничем таким" в их заведении.


Спецвыпуск Xakep, номер #028, стр. 028-086-5, ВОРЧОКИНГ-2 - новые похождения бутаритарцев

ВОРЧОКИНГ-2 - новые похождения бутаритарцев

Спецвыпуск Xakep, номер #028, стр. 028-086-5

Леху закусило, и он решил вступить в дискуссию.

- Простите, а что вы подразумеваете под "всем таким"?

- У вас неизвестное устройство, неизвестно, какое влияние оно оказывает на посетителей нашего ресторана. (Ресторан, мля. Еще скажите, что у вас ЕДУ подают.)

- Почему - это ноутбук...

- А это что?

- А это банка от компота... :)

- А зачем она подключена к ноутбуку?

- А почему бы ее не подключить?

- А если это вредно? (Мля, конечно вредно, для админов-ламеров.)

- Нисколько не вредно.

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

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

Проехали - 34 километра.

Потраченное время - 4 часа 25 минут.

Поймано свыше 20 сигналов.

Коннект был 6 раз.

ЗаWEPлено - порядка двух третей сеток.

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

Оборудование, на котором проводилась акция:

Toshiba Satellite 5105 S701 w. Cisco air 340 + Win2000 Pro SP3

Special thanks

Лехе за предоставленную тачку;

лехиной фирме за новый бук :);

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

Приложение - легенда к карте

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

2. Точка рядом с представительством бывшей провинции

3. "Маленькая избушка". Мы ДАЖЕ не смотрели в ее сторону. И тебе не советуем, дорогой товарищ. Объезжай ее стороной.

4. Непонятная точка с сильным сигналом. Оччень странное место - детский сад?

5. Системно-Инженерный дворец. ЗДЕСЬ РЫБЫ НЕТ! Кто это сказал? Директор стадиона!

6. Сюда доносятся какие-то слабые сигналы - должно быть с того берега....

7-8. WEPленые сетки. По соседству три представительства - смотри в тексте.

9. Точка перекура у эцилопского лазарета - да здравствуют новые технологии глушения - ничего не видно...

10. Гешефт-контора, у которой стремно парковаться... но рыбное место...

11. Точка на карте не указана, но где ФакДональдс на Садовой, думаю, знают все... А кто не знает, тот отдыхает (С) Реклама какая-то... :)


Спецвыпуск Xakep, номер #028, стр. 028-090-1, PAYALNIK Доктора Добрянского

PAYALNIK Доктора Добрянского

Спецвыпуск Xakep, номер #028, стр. 028-090-1

Если у тебя есть свои радио-

новости,

приколы,

методы,

решения,

инструменты,

устройства,

мнения,

поделись с нами. Прием радиомыслей на Dr.Cod@online.ru

новость: ЧТО ТАКОЕ VCO?

Для любого радиолюбителя или радиоинженера построить стабильный генератор, а тем более перенастраиваемый - большая проблема. А возможность подстройки частоты дается с еще большими муками с варикапами, подстроечными катушками и конденсаторами. Возрадуйтесь! Все больше и больше появляется микросхем VCO (Voltage Control Oscillator). Весь генератор с температурной стабилизацией собран на одном кристалле, тебе остается подать питание и снять готовый сигнал с выхода. А менять частоту можно с помощью обыкновенного переменного сопротивления. У микросхемы есть четвертая нога, на которой мы выставляем управляющее частотой напряжение!

С такой микрухой передатчик с ЧМ (Частотная Модуляция) соберет любой ребенок, только микрофон прикрутить. Правда, большинство таких VCO имеют квадратный импульс, но по моему опыту он легко преобразуется в синусоиду, как подключишь. А для любителей глушилок на одной микросхеме и высоких частот оно и лучше: ведь гармоник-то больше!

прикол: МУЗЫКАЛЬНАЯ ЗАЧЕТКА

Очень интересный прикол мне поведал Дронич! Представь, что идет экзамен по серьезному предмету, принимает его серьезная тетя в толстых очках, а сдает студентка отличница: "По билету отчиталась, давай зачетку". Как только экзаменатор открыла зачетку, та заиграла веселую мелодию. На серьезном лице училки появилась глупая улыбка: "А как отключить-то?".

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

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

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

метод и инструмент: НАУЧИТЬСЯ ПАЯТЬ

Наконец-то паяльник стал ежемесячной рубрикой, чего мы так с тобой ждали. И паять нам предстоит немало, потому проведем небольшой ликбез. Собственно, принцип известен всем: макнул во флюс (канифоль), взял на жало припоя (олово со свинцом), и можно припаивать. Ударяться в тонкости спайки конкретных материалов и разницы флюсов и припоев не буду, уж больно много об этом везде написано: http://agg.i1.ru/paika.html, http://www.alhimik.ru/MASTR/mast7.html, http://un7ppx.narod.ru/info/technology/bonding/bon19.htm.

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


Спецвыпуск Xakep, номер #028, стр. 028-090-2, PAYALNIK Доктора Добрянского

PAYALNIK Доктора Добрянского

Спецвыпуск Xakep, номер #028, стр. 028-090-2

Бери паяльник с согнутым жалом. Прямым жалом в большинстве случаев паять ужасно неудобно. Кстати, жало лучше брать никелированное, оно медленнее обгорает. И еще полезно, чтобы на паяльнике жало крепилось винтиком, иначе замучаешься его доставать и вставлять! А запасное жало иметь полезно; если собираешься паять много, то самое первое быстро выгорит, станет мягким и пористым.

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

Лучше купить паяльник с регулятором напряжения (нагрева). Еще один плюс в том, что можно работать с нежными микросхемами. На обычном, незаземленном паяле весит обычно вольт сто, которые здорово убивают микросхемы. Однажды я перепаивал так капризный усилитель низкой частоты 174ун7 раза три, пока не заземлил паяло.

Жизненно важно выбрать правильный паяльник, а паять научишься, читай ссылки!

решение: ШАРОВАЯ МОЛНИЯ В МИКРОВОЛНОВКЕ

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

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

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

На сайте http://angel.elte.hu/~andras/lb.html один из экстремистов поставил в свою печку свечку. На фотографиях видно, как электромагнитное поле вырывает из пламени свечи небольшие плазменные шары, которые взлетают и исчезают через половину минуты. Обрати внимание на предупреждение на сайте, чтобы ты не смел такое повторять, иначе можешь спалить печку, кухню и даже убить себя!


Спецвыпуск Xakep, номер #028, стр. 028-090-3, PAYALNIK Доктора Добрянского

PAYALNIK Доктора Добрянского

Спецвыпуск Xakep, номер #028, стр. 028-090-3

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

Или вот тоже интересный опыт с микроволновкой, где чел поймал молнию в банку http://hochwald.tripod.com/microwave/contained/lightning.html.

мнение: ДРОНИЧ ПРОЧИТАЛ И СКАЗАЛ

Хоть я и держал паяльник в руках всего пару раз в жизни, все равно радуюсь наступившей ежемесячности рубрики. Надо сказать, что для меня проблемы построить стабильный генератор не существует, ибо даже если он мне позарез понадобится, я попрошу Федю спаять его :))). Историю про зачетку Добрянский почти не переврал, жалко только, что он не замутил схему - было бы гораздо понятнее, что и куда крепить (долби теперь его мыло :)). Советы начинающим понравились, ибо я сам таким являюсь. Только теперь в страшных снах снятся черноногие микрухи и частые гости с помойки с надфилями в руках :). Про шаровую молнию я от Федора слышал раньше, но посмотреть и почитать было интересно. Принял решение спалить институт, попросив тетю Клаву из столовой разогреть замаскированную под хот-дог свечку.

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


Спецвыпуск Xakep, номер #028, стр. 028-092-1, ОПЕРАЦИЯ "ПРОТИВОСТОЯНИЕ" - порция альтернативного софта

ОПЕРАЦИЯ "ПРОТИВОСТОЯНИЕ" - порция альтернативного софта

Андрей "Дронич" Михайлюк

Спецвыпуск Xakep, номер #028, стр. 028-092-1

(dronich@real.xakep.ru)

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

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

Браузер

Де-факто: Microsoft Internet Explorer

Альтернатива: Опера (NetCaptor, MyIE)

Прочнее всех за свое место держится именно Ослик ИЕ, поэтому первое место в обзоре отдано ему вполне заслуженно. Два офигеннейших плюса, удерживающих юзеров, это совместимость со ВСЕМИ технологиями и наличие в любой поставке Win. Когда никто еще не заикался о незаконности присутствия ИЕ в дистрибутиве виндов (монополизм и все такое), он получил главное - массовость. Есть винда - есть ИЕ. И вот результат - дизигнеры стали оптимизировать сайты именно под него, появились пресловутые "Best viewed with MS IE 5.0". Зачем же его на что-то менять? ИЕ откровенно тормознут, ИЕ молчит о процессе загрузки страниц, как партизан, ИЕ невозможно заставить отображать страницы не так, как задумал автор, а так, как хочется юзеру. Так что пусть запасаются камнями все те, кто видит страницы в ИЕ моментально, верит его единственному ползунку загрузки и любит читать лиловый текст на салатовом фоне. Если запаслись - можете кидать в меня, а я аккуратно прикроюсь Оперой :).

Коротко о ее плюсах, если кто еще не знает: возможность включать/выключать картинки, грамотная работа с кешем (ИЕ кладет туда что попало, а то, что положит туда Опера, можно детально настроить :)), четкое слежение за процессом загрузки, удобство поиска в сети. О последнем хочется сказать особо. Набираешь в адресной строке "a SomeSoft crack" - и вот он уже ищется на Асталависте. То же касается Яндекса, Апорта и других поисковых систем - достаточно добить их в инишник или просто скачать готовый :).

Минусы известны - не всегда правильное отображение сайтов, заточенных под ИЕ, иногда глюки с ЖамаСкриптом. Но если вдруг тебе попадется такой сайт (один из пятидесяти по статистике), кто мешает тебе запустить ИЕ? :). Так что бегом на www.myopera.net скачивать комплект для установки и русификации.

Еще две проги - NetCaptor и MyIE пользуются заслуженным успехом именно за "оперизацию" ИЕ, то есть за добавление в него некоторых фич Оперы. Кому-то этого хватит, но лично я не люблю полумеры :Р.

Почтовик

Де-факто: Microsoft Outlook (Express)

Альтернатива: TheBat! (Becky! Internet Mail)

Честно говоря, я даже сомневался, пихать ли Батника в разряд альтернатив? За последний год он шагнул далеко вперед, по крайней мере в России. Что может Аутлук? Реально работать в корпоративной сетке и по IMAP. И, помимо этого, он содержит в себе столько невостребованных рядовым юзером функций, что хоть за голову хватайся. Ведь вся эта мурь еще и грузится при каждом его запуске. А на фига? Кастрированный же Экспресс Батнику вообще не конкурент :).


Спецвыпуск Xakep, номер #028, стр. 028-092-2, ОПЕРАЦИЯ "ПРОТИВОСТОЯНИЕ" - порция альтернативного софта

ОПЕРАЦИЯ "ПРОТИВОСТОЯНИЕ" - порция альтернативного софта

Андрей "Дронич" Михайлюк

Спецвыпуск Xakep, номер #028, стр. 028-092-2

Итак, Батник умеет: работать с кучей ящиков, вести удобную адресную книгу с группами, использовать интерактивные шаблоны для текста писем, сортировать почту по всяким признакам, не поддаваться вирусам и червякам и наглядно отображать процесс связи с почтовым сервером. Минусов замечено два - письма кропаются только в плейн-тексте, а версии выходят раз в месяц с минимальными изменениями :). Если это, конечно, минусы :).

Расстроенным любителям накидать письмецо с рюшами и бантами на фоне "японский садик весной" можно посоветовать воспользоваться Becky! (какое странное совпадение - конкуренты оба оканчиваются восклицательным знаком :)). Он и в ХТМЛе писать позволяет, и по IMAP'у сносно работает - в общем, мечта. Но непопулярный и пока нерусский :). Кто знает, может он (или она) потеснит нашего Мыша с компов продвинутых и не очень юзеров. Поживем - увидим...

Звонилка

Де-факто: удаленный доступ

Альтерантива: MuxaSoft Dialer (E-Type Dialer)

Что и говорить, удаленный доступ в винтукее и ХРюшке стал гораздо продвинутее - и телефоны перебирает, и "занято" нормально распознает... Только лучшее всегда было врагом хорошего, поэтому мы будем зариться на лучшее :). Тем более, что оно появилось совсем недавно :). Еще год назад я успешно пользовался отличной звонилкой MuxaSoft Dialer, которая умела очень многое - запускать и гасить приложения, считать статистику по тарифным планам, сортировать телефоны по проценту дозвона - суперсофт, короче. А потом на мой комп поселились двухтысячные, под которыми диалер работать отказался. Так и закончились бы наши отношения, если бы не отдельные энтузиасты :).

Если кто-то продолжает развивать казалось бы брошенный, но отличный по своим характеристикам софт, это всегда приятно. И когда я узнал о выходе новой версии MuxaSoft Dialer, я не смог удержаться и связался с его нынешним разработчиком, Игорем Личко ака Zeta. Краткий конспект нашего диалога ты можешь прочитать на врезке в этой статье.

Если MuxaSoft по какой-то причине тебя не устраивает, можно смело пользоваться старым добрым EDialer'ом. Функций в нем поменьше, интерфейс попроще, но прога в целом надежная и удобная.

Видеоплеер

Де-факто: Windows Media Player

Альтернатива: BSPlayer (SASAMI2k)

Да, да, да! Я действительно считаю, что WMP недостоин называться истинным видеоплеером, хотя бы из-за своей универсальности :). Все и сразу редко получается хорошо, не так ли :)? Где Pan-Scan? Ты знаешь, как выглядит широкоэкранное кино на мониторе 17"? Отвратительно! И WMP не может это поправить... Где поддержка ВСЕХ форматов титров? Я, как фанат кино без перевода, протестую! А скины - да разве ж это скины? Короче, слов нет, одни междометия :). Так что, BSPlayer - вещь в хозяйстве обязательная. И Pan-scan двух типов держит (ручной и автоматический ресайз картинки под экран), и цветокоррекция у него замечательная, и титры, и скины, и ваапче! :). Очень не люблю малоаргументированные решения, но тут... Просто НАДО!


Спецвыпуск Xakep, номер #028, стр. 028-092-3, ОПЕРАЦИЯ "ПРОТИВОСТОЯНИЕ" - порция альтернативного софта

ОПЕРАЦИЯ "ПРОТИВОСТОЯНИЕ" - порция альтернативного софта

Андрей "Дронич" Михайлюк

Спецвыпуск Xakep, номер #028, стр. 028-092-3

Сасами - тоже был классным плеером, но глючил не по-детски :(. Потому и не вынес конкуренции. И к тому же его главную фишку - всплывающее снизу меню управления при полноэкранном просмотре - БСка унаследовал :).

Смотрелка

Де-факто: ACDSee

Альтернатива: IrfanView (XnView)

Первый случай, когда фриварка метит на место шароварки :). MS почему-то упорно не делает нормальных просматривалок, поэтому место штатной оккупировала ACDSee. Я согласен, в первой версии она была ОГО-ГО - шустрая, удобная, без аналогов. Но сейчас... прогу просто испортили, обвешав всевозможными малополезными функциями, из-за которых она грузит систему чуть ли не как Фотошоп :). Так что если тебе нужна действительно быстрая и универсальная смотрелка, качай IrfanView, проще и практичней еще ничего не придумали. Правда, в ней нет полюбившихся режимов просмотра каталогов, но для этого гораздо приятнее пользоваться XnView - САМОЙ универсальной прогой для просмотра и организации графики. Как показатель эффективности - никто кроме нее не может открыть файл MBM, в котором хранится графика на моем карманнике Psion :).

Кончай базар!

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

И еще... Никогда не верь лапше, повешенной тебе на уши. Все, абсолютно все просто необходимо пропустить через себя, и только после этого конопатить свое веское мнение на весь мир. Поверь, от этого будет лучше всем - и тебе, и тем, кто тебе когда-то что-то посоветовал :). Вот и весь сказ.

Дронич vs. Zeta

Расскажи читателям, что это вообще такое - MuxaSoft Dialer?

Первая версия MuxaSoft Dialer-а появилась в 1998-м году. Диалер обладал базовыми функциями, такими как автодозвон, само соединение с Интернетом, примитивный подсчет статистики и перебор телефонных номеров.

Написал ее молодой программист Свинарев Михаил и опубликовал на своем сайте www.mdialer.chat.ru. Почти шестьсот писем с пожеланиями пришло в его адрес, но реализовать их у него не было возможности :(.

Откуда возникла мысль возродить его в новой версии?

В один прекрасный день я зашел на сайт www.nnm.ru. На одной из страниц архива была размещена заметка о том, что есть возможность получить исходные коды и продолжить работу над новой версией MuxaSoft Dialer всем желающим. Так мы познакомились с Мингалевым Виталием (Rainman'ом). Мы хотели поскорее выпустить новую версию программы. Хотелось сделать подарок всем пользователям в канун Нового года. В принципе, так и получилось. Официальная дата открытия сайта - 28 декабря 2002 года :).


Спецвыпуск Xakep, номер #028, стр. 028-092-4, ОПЕРАЦИЯ "ПРОТИВОСТОЯНИЕ" - порция альтернативного софта

ОПЕРАЦИЯ "ПРОТИВОСТОЯНИЕ" - порция альтернативного софта

Андрей "Дронич" Михайлюк

Спецвыпуск Xakep, номер #028, стр. 028-092-4

Почему местами выползают баги? :)

Новая версия (3.0) появилась через 2 недели после передачи мне такой вот программной эстафеты по написанию очередного диалера. Главной задачей являлось обеспечить совместимость программы с Windows NT5x. Это удалось реализовать, хотя и не безболезненно. Дело в том, что структура всех механизмов ядра NT очень существенно отличается от ядра 9x. Мы гордимся даже тем, что диалер вообще заработал в этих операционных системах :).

Что будет в следующей, четвертой версии?

Новую версию мы начали писать совсем недавно. Теперь наша задача - полностью переписать программу и добавить в нее новые возможности. Скажу уже сейчас, что переписано с нуля всплывающее меню, написано всплывающее окно со статистикой, popup с отображением короткой статистики, написан MuxaSoft Statistic Manager - программа для управления отчетами и статистикой.

Непопулярность Оперы среди юзеров во многом объясняется... глупой поставкой. Мне многократно приходилось выслушивать речи типа "ни фига Опера не быстрее, да и неудобная она", а потом замечать неотключенный баннер, фоны всех панелей в ДжиПеГах, огромные кнопки, адресную строку снизу и список закладок слева :). Согласен, в таком виде она не особо приятна, но, будучи доведенной до ума прямыми (или не очень) ручками, Опера становится бесподобна (см. скрин).


Спецвыпуск Xakep, номер #028, стр. 028-094-1, СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

Kirion (kkr@mailru.com)

Спецвыпуск Xakep, номер #028, стр. 028-094-1

Вначале хочу принести извинения всем тем, кто писал на winfo.org и не получил ответа. К сожалению, наш сайт (а с ним и мыльники) стал невинной жертвой войны с порнобизнесом :). Наверное, мы его восстановим, но это в компетенции Дронича. А пока что могу предложить только его скромную архивную копию, хранящуюся на моем винте вместе с десятками других страничек. Правда ведь, неудобно хранить их в таком виде: очень проблематично что-либо найти, да и места занимает немало. Но у меня таких проблем нет - я храню странички в формате HTML-help, также известном как "Chm".

Це шо? - Це хм!

Наверняка ты хоть раз в жизни читал файлы справки (не читал!? А, ну да, конечно: мануалы читают только ламеры :)). И наверняка видел, что они бывают двух разных типов: с расширением "hlp" и с расширением "chm". Файлы "hlp" - это файлы Winhelp, старого формата справки от MS, а "chm" - это файлы HTML-help, нового формата справки. В настоящее время Winhelp применяется все реже и реже и вот почему: файлы Winhelp создаются на основе файлов "rtf" с особой разметкой, набивать которые тебе придется в ворде. Все изображения должны быть в "bmp", что отрицательно сказывается на размере. HTML-help создается на основе html-файлов (логично, правда :)), средств для создания которых - полно. Да и не надо запоминать еще один язык разметки. Все изображения сжимаются в "jpg", "gif" или "png". Кроме того, тебе доступны вся мощь Javascript и также некоторые объекты ActiveX. Ну и самое главное - компилятор достаточно сильно сжимает исходные html-ки, а вытащить их назад не составляет особого труда. Можно просто декомпилятор использовать, а можно открыть в ослике и сохранить отдельно (урл будет вроде помощь.chm://файл.htm). Правда, есть некоторые ограничения: у тебя обязательно должен стоять ослик хотя бы четвертой версии (неужели еще есть люди с 95 виндами?). А еще должна стоять свежая версия файлика Hh.exe, отвечающего за правильное отображения файлов справки. Апдейт качается с download.microsoft.com, весит около 700 кило. С него же можешь скачать HTML Help Workshop, кстати, она часто входит в поставку средств разработки программ (например, Visual studio), кроме продуктов Borland. Они поставляют с Delphi старенький Help workshop для создания Winhelp-файлов. Вместе с Workshop идет дополнительная тулза - Image Editor. Вряд ли он тебе пригодится, ибо скрины можно снимать и другими средствами (Hypersnap, например), равно как и подгонять изображения. Кстати, к хелпу прилагается достаточно подробное руководство по тегам и css, если нет проблем с английским - советую сохранить где-нибудь (после установки Workshop он будет валяться в "windir"\help\htmlref.chm).

Основы

Итак, запускай Workshop и кликай по File|New. Тебе предложат выбрать, что создавать: проект, html-файл, текстовый файл, содержание (aka table of contents, TOC) или индекс. Предполагаю, что html-ки и текстовики ты можешь набить и в других местах, а содержание и индекс нас пока не интересуют - проекта-то еще нет. Смело выбираем первый пункт. Есть возможность конвертировать проект Winhelp-справки, если где вдруг завалялся (что-то сомневаюсь). Далее: имя файла и путь, а потом уже имеющиеся файлы для проекта. Содержания и индекса у нас еще нет, а вот html-ок - полно. Дави "Add" и добавляй их в проект. Итак, проект создан. Первым делом лезем в опции проекта (двойной клик на разделе options или самая верхняя кнопка в левом ряду). На вкладке "General" задаем язык проекта (русский, я полагаю), начальную страницу файла, параметры шрифта. На вкладке "Files" задаем путь к скомпилированному файлу справки, логам, файлу содержания, файлу индекса и стоп-листу. Стоп-лист - это файл со списком слов, по которым не будет выполняться поиск. Удобно один раз создать такой файл и забить туда разные местоимения, союзы, предлоги и прочее, чтобы потом использовать во всех проектах. Здесь же можно задать автоматическую генерацию содержания, но я не советую ее использовать: результаты, прямо скажем, не очень. Названия разделов будут браться из заголовков страниц. А вот по какому принципу будут создаваться подразделы - это я так и не понял, и в мануале этого нет :(. Лучше уж потрать пять минут на создание содержания, не так уж и сложно создать его самому. На закладке "Compiler" не забудь поставить галку на "compile full-text search information", а то у тебя не будет поиска в готовом файле. Если будешь создавать индекс - лучше делай его двоичным (ставь галку "create binary index") - это уменьшает размер файла. Ну а если у тебя уже есть откомпилированный файл справки и ты хочешь объединить его с твоим - задай путь на закладке "merge files". Неплохо было бы настроить внешний вид твоего творения, добавить кнопок или задать размеры. Для этого кликаем на третью сверху кнопу и попадаем в "Add/modify window definition". Тебя попросят задать имя твоего нового типа окна. Далее ты сможешь задать заголовок окна, кнопки (стандартные кнопки ослика, "вперед", "назад", "домой" и т.д.), размер и позицию окна (особо не извращайся). Необходимо задать файлы для перехода по кнопкам и закладкам в "files", а то ничего не будет работать. В закладке "Navigation pane" задаем свойства навигационной панели (никогда бы не догадался :)) и будет ли она вообще. Остались две закладки со стилями, там настройки типа окна и наличия различных виндовых контроллов: кнопок, скролла, рамок и т.д. Ну, вроде все настроили. Теперь такое окно будет отображаться в списке "windows", и его можно будет использовать для вывода. Только не забывай прописывать его в свойствах вместо стандартного. А теперь будем создавать навигацию.


Спецвыпуск Xakep, номер #028, стр. 028-094-2, СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

Kirion (kkr@mailru.com)

Спецвыпуск Xakep, номер #028, стр. 028-094-2

Навигационный TOC

Содержание - это основа навигации нашего будущего файла. Конечно, можно создать страничку и кинуть с нее линки на все остальные, но гораздо приятнее, да и удобнее, если у тебя будет нормальное содержание с иерархической структурой и наглядным видом. Особенно это важно для большого количества документов - ты легко будешь видеть структуру и сможешь быстро перемещаться по разделам. Убедил? Тогда кликай на закладку "contents". Тебе предложат создать новую TOC или указать путь к файлу с ней. А потом зайдем в... свойства, и не надо меня бить ногами :). Не так много всего осталось настроить. Нам всего-то надо задать стили отображения и собственные иконки для разделов, если, конечно, они есть. Закладка "information types" отвечает за присвоение разделам типов: ты можешь присвоить каждому разделу тип и категорию и потом, при просмотре файла, отображать только определенный тип. Вряд ли тебе это понадобится, но так, на всякий случай, имей в виду.


Спецвыпуск Xakep, номер #028, стр. 028-094-3, СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

Kirion (kkr@mailru.com)

Спецвыпуск Xakep, номер #028, стр. 028-094-3

Теперь перейдем собственно к созданию. Определись вначале со структурой, чтобы потом десять раз не переделывать. Определи уровень вложенности и создавай рубрики (aka heading), а потом рассовывай по ним темы, задавай для них файлы и иконки. Если вложенность у тебя отсутствует, можешь обойтись и без рубрик, просто добавляй темы и располагай в нужном порядке. Кстати, не поленись и пропиши во всех html-ках тег <title>. Пригодится и при создании тем и при поиске в готовом файле. Имена разделов по умолчанию совпадают с заголовком паги. Если хочешь извратиться - создай особый тип окна и пропиши его в строке "window" вкладки "advanced". Топик будет выводиться в этом окне вместо стандартного. Проверь, не забыл ли ты какую-нибудь одинокую страничку, на которую не ведет ни одна ссылка или топик в содержании. Все в ажуре? Тогда можешь уже компилировать, но если у тебя файл со сложной структурой или ты хочешь сделать навигацию более приятной - читай дальше.

Индексы и ссылки

Индекс - это вспомогательное средство навигации и поиска. Что-то вроде предметного указателя. Ты сам задаешь ключевые слова и связанные с ними разделы. Кликай на вкладку "index". Как и в случае с содержанием, тебе предложат создать новый файл или указать путь к готовому. В опции можешь не лезть, ничего особенно важного там нет. Разве что шрифт задать и окно для вывода, если не хочешь использовать стандартное. Кликай на кнопку с ключиком и начинай добавлять ключевые слова. При создании индекса ты можешь указывать структуру. Например: ты создаешь ключевые слова "Winfo", "Kirion", выделяешь "Kirion" и жмешь кнопку "move selection right". Теперь по ключевому слову "winfo" будет выводиться список подразделов (который мы создали всего один). Если ключевое слово встречается в разных файлах, ты можешь добавить их через "add..." или "alternate entry". Тогда при выборе слова появится окно со списком доступных разделов. Если же у тебя есть похожие термины или синонимы, ты можешь задать в качестве раздела другое ключевое слово, просто поставь галку "target is another keyword" на закладке "advanced". Есть и другой способ добавления ключевых слов. Он реализуется с помощью Klinks (keyword links). Это объекты ActiveX, представляющие собой ссылку на раздел индекса в тексте раздела. Создаются они так: открываешь код нужного раздела и выделяешь кусок текста. Далее жмешь на кнопку "HTML help ActiveX control" (с изображением цилиндра). В появившемся диалоге выбираешь тип команды "keyword search" и идентификатор нового объекта. Потом задаешь вид окна и самой ссылки и, наконец, список ключевых слов. В готовом файле при нажатии на эту ссылку появится окно с найденными разделами. Но работать все будет только после компиляции. Кстати, можно создать подобные ссылки и без указания ключевых слов. Для этого вместо "keyword search" надо выбрать "Alink search". Все похоже, только вместо ключевых слов ты выбираешь непосредственно разделы. Такая ссылка называется "Alink" (Associative Link). Что-то похожее получится, если в качестве объекта выбрать "Related topics". Если ты заметил, в менюшке выбора типа объекта достаточно много пунктов. Нас с тобой могут заинтересовать еще два: "Splash screen" и "Close window". Как не сложно догадаться, первый из них выводит заставку (указываешь картинку и продолжительность), а второй - закрывает окно (полезно, если ты создал свой тип окна и не хочешь, чтобы на нем были стандартные виндовые кнопки "закрыть", "минимизировать" и т.д.). Остальные объекты ActiveX используются в основном при создании настоящих хелпов к прогам, как "trainig card", например. Этот объект осуществляет связь между прогой и справкой путем посылки виндовых сообщений. Прога может перехватить их и среагировать. То есть по выбору ссылки в хелпе в самой программе будут выполняться определенные действия. Так делаются "Step-by-step" файлы помощи. Объект "Shortcut" используется для посылки сообщений Windows из файла справки. Так можно запускать внешние программы, управлять окнами, вызвать диалоги и еще очень много всего делать - смотри справку по WinAPI :). Объекты "Contents" и "Index" служат для динамического присоединения файлов содержания и индекса соответственно. Самый загадочный объект - "Winhelp". Он служит для вызова раздела Winhelp-справки. На фига? Если у нас есть уже файл HTML-справки...


Спецвыпуск Xakep, номер #028, стр. 028-094-4, СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

Kirion (kkr@mailru.com)

Спецвыпуск Xakep, номер #028, стр. 028-094-4

Ну а если лень

А если тебе лень разбираться с HTML-help workshop, то существует достаточно много мелких программ, просто собирающих группу html-ок в один chm-файл. Естественно, редактировать структуру ты уже не сможешь, придется довольствоваться результатом. Правда, большая часть из них рассчитывает, что в системе установлен компилятор файлов справки - тебе все равно придется ставить продукт от Мелко-Мягких. Из известных мне прог, не требующих его наличия, могу посоветовать htm2chm (yarix.by.ru). До версии 2.0 она была бесплатной, сейчас хочет денег, хотя функциональности особенно не прибавила. Впрочем, это не мешает ее использовать намного дольше 30 дней :). Что она может? Можно создавать файлы помощи с поиском. Можно настроить кнопки на главной панели. Можно задать размеры и положение окна. Можно декомпилировать готовые файлы и индексировать страницы, о последнем подробнее. Дело в том, что создавать TOC подобные программы не умеют. А если страницы не связаны между собой, то навигация невозможна в принципе. Более того, при создании они, как правило, требуют файл index.htm или default.htm и только по нему понимают, какие страницы нужно включать в готовый файл. Приходится создавать индексный файл со ссылками на все другие страницы. Для того чтобы не писать его руками, и служит команда "индексировать". Она создает файл со ссылками на содержимое указанной папки, чтобы потом использовать его при компиляции. Стиль индексной страницы задается через css-файл. Прога встраивается в контекстное меню виндов, так что доступ к ее функциям легок и приятен. Жаль, что она не умеет создавать индекс всего содержимого папки, а не только html-файлов. Но для этого могу посоветовать прожку "Индексатор" (vaddya.far.ru/indexer/indexer.htm). Все просто: исходная папка - готовый файл. Жаль только, нельзя выбрать стиль индексного файла, но автор над этим работает. Опять таки действия можно выполнить из контекстного меню. В целом, если есть время и важен результат, - лучше учись пользоваться HTML-help workshop.


Спецвыпуск Xakep, номер #028, стр. 028-094-5, СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

СОВРЕМЕННАЯ ПОМОЩЬ - HTML-help и с чем ее едят

Kirion (kkr@mailru.com)

Спецвыпуск Xakep, номер #028, стр. 028-094-5

Стань девелопером

Ну, теперь уж надеюсь, что у тебя не будет захламленных архивов надерганных из разных мест страничек. Посиди денек, разберись с прогой - потом будешь только благодарен мне :). А если ты еще и программируешь для себя или для работы - тогда тем более воспользуйся HTML-help. Рано или поздно тебе обязательно придется писать справку для пользователей или заказчиков, и лучше уж она будет выполнена профессионально и наглядно. Тем более, что существует достаточно продвинутый HTML-help API, похожий по принципу на Win32API. Тоже функции, сообщения, структуры. В папке с установленным Workshop должны быть две диры: "Lib" и "Include" - библиотеки для включения в прогу. Пусть даже твоим хелпом воспользуется один-единственный умный пользователь твоей проги - он будет тебе благодарен, и это того стоит. И не стоит придумывать что-то мега крутое - посмотри на хелпы к известным продуктам. Главное - чтобы все было понятно и все можно было найти :).


Спецвыпуск Xakep, номер #028, стр. 028-098-1, Folder.htt - Скрытые возможности

Folder.htt - Скрытые возможности

Квер (qwertyrar@nm.ru)

Спецвыпуск Xakep, номер #028, стр. 028-098-1

Так уж устроен наш пытливый хаксорский ум, что не можем мы мириться с мыслью о том, что кто-то может думать за нас. И пускай высокооплачиваемые дяди-программисты и тети-дизайнеры месяцами бьются над интерфейсом того или иного приложения (чтобы сделать жизнь простого юзера максимально удобной) - мы все равно залезем ручками в настройки и перелопатим там все что только можно. И сделаем не как удобно, а как нужно :). Вот, к примеру, стандартное виндявое окошко. Тебя не сильно бесят облачка и цветные квадратики в левом верхнем углу, ламерские подсказки и никому не нужные линки? Или ты просто отключил опцию "Показывать web-содержимое" в настройках вида и наслаждаешься девственно чистой папкой с разбросанными по ней иконками файлов? В любом случае - бежать от проблемы нехорошо, с проблемами надо бороться. Что мы, собственно, и попытаемся сейчас сделать...

КОРЕНЬ ЗЛА

Думаю, для тебя не будет открытием, что интересующая нас собака окажется зарытой в папке "C:\Windows\Web". Здесь валяется куча файлов с расширением "*.htt", которые отвечают за оформление и функциональность практически всех папок и компонентов Windows. Нас пока будет интересовать только файл "folder.htt", где хранятся дефолтовые настройки обычных несистемных папок. Здесь я проявил малодушие и решил, что к глобальному изменению интерфейса я пока не готов. А посему мною была создана специальная "Подопытная папка", на примере которой мы и будем во всем разбираться. И тебе тоже рекомендую настраивать фолдеры индивидуально, ведь это гораздо прикольнее, когда каждая папка имеет уникальную внешность и живет своей собственной жизнью.

ПРИСТУПИМ

Итак, лезь в меню "Вид->Настроить вид папки...". Попадешь в мастер настройки, который предложит тебе изменить HTML-шаблон для папки, выбрать рисунок фона, добавить комментарий к папке (это в винтукее) или же сбросить все настройки. Ставь галку в первом пункте и жми "Далее". Перед тобой откроется текстовик со скриптами (если у тебя w2k, то надо еще предварительно выбрать один из четырех стандартных шаблонов). Собственно говоря, на этом дружественный виндуозовский интерфейс заканчивается - начинается суровая программерская реальность. Так вот Анкл Билл утер нос всем ламерюгам: мол, не знаешь скриптов - так и нехрен выпендриваться. Оно и правильно - защита от дураков еще никому не мешала. Мы-то не дураки поди, сами во всем разберемся. Ладно, закрывай пока текстовик и жми "Готово" в мастере. Что изменилось? В твоей папке появились еще две иконки (если не появились, значит, у тебя отключена опция "Показывать системные файлы" - включи ее скорей). Это файл "desktop.ini" (нам он еще пригодится) и папка "folder settings", где будет храниться личный "folder.htt", куда ты можешь в любой момент залезть и нагадить по своему усмотрению.

МОРДА

Начнем с простого - добавим в нашу папку фоновый рисунок. Здесь нет ничего сложного: просто лезешь в мастер настройки и выбираешь нужную bmp-шку. Разумеется, она должна быть достаточно большой, чтобы у тебя вместо окна папки не получился коврик из одинаковых квадратных картинок. Идеально подойдут какие-нибудь десктопные обои. Да, и не забудь отрегулировать представление имен файлов - цвет подписей к иконкам должен быть контрастным по отношению к бэкграунду.


Спецвыпуск Xakep, номер #028, стр. 028-098-2, Folder.htt - Скрытые возможности

Folder.htt - Скрытые возможности

Квер (qwertyrar@nm.ru)

Спецвыпуск Xakep, номер #028, стр. 028-098-2

Еще один нюанс. Многие додельники ограничиваются сменой фона только в правой части окна, а слева остаются облачка-квадратики на белом фоне. Смотрится это, мягко говоря, тошнотворно. Поэтому я поступил так. Взял понравившуюся картинку, в Фотошопе отрезал слева полоску шириной в 200 пикселей и сохранил в отдельный файл. Назвал его "wvleft.bmp" и положил в папку "folder settings", заменив одноименный дефолтовый файлик. Теперь обе половинки состыковались, образовав единое целое. Одна приятность... Сам посмотри на скриншоте.

Иконка

Поскольку папка у нас должна получиться в своем роде уникальная, то и значок ей нужен особенный. Нет проблем! Рисуй любую иконку (размером 32х32, кстати, прикольно будет, если в качестве иконки использовать репродукцию настоящей церковной иконы :)), лезь в файл "desktop.ini" и дописывай в разделе [.ShellClassInfo] такую строчку: IconFile=Folder Settings\icon.bmp (указывай соответствующий путь к своему значку). Если нужная иконка хранится в dll-ке, то допиши еще одну строку: IconIndex=N, где N - порядковый номер иконки в библиотеке. Готово. Новый значок виден как в открытой папке, так и снаружи. Если у тебя 98-е Винды, то снаружи папка будет представлена все тем же стандартным желтым значком, а чтобы устранить этот непорядок, придется сделать папку системной (Выполнить -> attrib +s C:\Подопытная папка). Какая от этого всего польза? Ну, например, ты хочешь спрятать от посторонних глаз папку с любимой порнухой. Пропиши ей какой-нибудь скучный системный значок (или вообще укажи несуществующий путь к иконке - тогда у папки будет значок нераспознанного файла), обзови как-нибудь типа "param_65b8.bin", и о твоих маленьких слабостях никто не узнает - ни начальник, ни родители :).

ЛЕЗЕМ ГЛУБЖЕ

Ладно, все это было присказкой. Давай же, наконец, поковыряемся в скриптах. Открывай "folder.htt". Как видишь, раздел <body> занимает лишь небольшую его часть. Остальное - это коды процедур на яве, которые занимаются тем, что выдают и форматируют информацию о выделенных файлах, генерируют их превьюхи в левой части окна и выполняют разные вспомогательные действия. Что здесь можно изменить в лучшую сторону? Ну, скажем, в функции ShowInfo() порезать часть кода, отвечающую за вывод ненужных нам сведений. В идеале - из свойств оставить только размер файла. Здесь все снабжено комментариями ("// type", "// name", "// size"), так что не запутаешься. Не удержался я и от соблазна поиграться со строковыми константами, поменяв "Размер:" на "Весит:", "Атрибуты:" на "Фичесы:" и тому подобное...

Едем дальше. В этой же функции ищи условные операторы if (IsMovieFile(ext)) и else if (IsSoundFile(ext)). Они проверяют, является ли файл звуковым или видеофрагментом, и, в зависимости от этого, вставляют в левую часть окна компонент ActiveX (в данном случае - Windows Media Player), который, по идее, здесь же должен и проигрывать эти файлы. В строке "<param name="AutoPlay" value="false">" меняй false на true - и все! Теперь mp3-шки, avi-шки и иже с ними будут начинать пригрываться сразу при выделении. В 98-х Форточках были проблемы с удалением медиа-файлов, поскольку при выделении иконки файл сразу начинал проигрываться и становился недоступен. В винтукее такой проблемы нет - все удаляется без претензий и скандалов.


Спецвыпуск Xakep, номер #028, стр. 028-098-3, Folder.htt - Скрытые возможности

Folder.htt - Скрытые возможности

Квер (qwertyrar@nm.ru)

Спецвыпуск Xakep, номер #028, стр. 028-098-3

МЫ ПОЙДЕМ ДРУГИМ ПУТЕМ

Автоматическое проигрывание - это хорошо, но не всегда нужно, да и притормаживает работу системы к тому же. Давай лучше напишем скрипт, который будет проверять расширение файла и в зависимости от этого выводить на левую панель тематический флеш-мувик. Mp3-шке у нас будет соответствовать мувик с колбасящимся под музыку Клявиным (мифическим героем таджиков), а avi-шке - порнушный мультик в стиле xiaoxiao (исходя из соображения, что если видео - значит, порнуха :)). Как сделать мувики во флеше, я подробно рассказывать не буду - все более менее понятно из скриншотов.

Итак, swf-ки готовы и лежат в папке "folder settings". Ищи строку, где определяется расширение файла (ext = GetFileExtension(item.Path);) и сразу после нее пиши следующее:

if (ext=='avi')

{

Preview.innerHTML = '<p>' +

'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="150" height="150">' +

'<param name=movie value="file:///C|/Подопытная папка-2/Folder settings/porevo.swf">' +

'<param name=quality value=high>' +

'</object>';

}

Путь к флешкам, естественно, ставь свой, а параметры мувика - по вкусу. Чтобы не мучиться с прописыванием флеш-объекта, просто опубликуй его в отдельный html-документ, скопируй код и вставь его в текст нашего файла. А можно открыть folder.htt в Macromedia Dreamweaver'e и, особенно не напрягаясь, импортировать туда флешку (честно говоря, я так и делал). Точно таким же образом зарегистрируй и второй мувик. Теперь ищи тела функций IsMovieFile(ext) и IsSoundFile(ext), где удали из списков расширений соответственно расширения avi и mp3. Для всех остальных типов файлов будет по-прежнему работать дефолтный ActiveX.

Идентификацией файла по расширению занимается функция GetFileExtension(name), которая ищет в имени файла последнюю точку и присваивает текстовой переменной ext строку, стоящую после этой точки. По аналогии с этой процедурой можно написать свои функции обработки имени, чтобы выполнять определенные действия в зависимости, например, от длины или первой буквы имени файла. Или вообще автоматически переименовывать файлы с нецензурными названиями :).

ЛИНКИ

Ну и, наконец, давай добавим в нашу папку несколько ссылочек. Допустим, в корни всех доступных дисков. Иди в раздел <body> и прописывай линки. Сделать это можно двумя способами: вставить обычный гипертекст или импортировать флеш-ролик, состоящий из одной кнопки (ссылка программируется средствами Flash).

Последний вариант мне нравится больше. Флеш-кнопку можно анимировать (в html тоже, конечно, можно создать ролловер, но это долго, нудно и эффект не тот). Кстати, в свойствах кнопки можно указать, будут ли ссылки открываться в одном и том же или в отдельном окне. Просто в опциях процедуры getURL() выбираешь опцию Window: _blank (в новом окне) или Window: _self (в этом же окне). Потом импортируешь кнопку - и готово. В результате всех махинаций у тебя должна получиться примерно такая картинка.


Спецвыпуск Xakep, номер #028, стр. 028-098-4, Folder.htt - Скрытые возможности

Folder.htt - Скрытые возможности

Квер (qwertyrar@nm.ru)

Спецвыпуск Xakep, номер #028, стр. 028-098-4

НА СЕГОДНЯ ХВАТИТ

Думаю, мы вдоволь поиздевались над нашей несчастной папкой. Нет? Хочешь еще? Ладно, я умываю руки и оставляю тебя с нею наедине :). Осваивай javascript, фантазируй, креативь. А в следующий раз мы с тобой полезем копаться во внутренности системных папок. Договорились? Лады. Как там Ильич говорит?

Да пребудет с тобой великий... ну, частично Flash :).


Спецвыпуск Xakep, номер #028, стр. 028-102-1, M$-update: полезные и бесполезные

M$-update: полезные и бесполезные

Леха ББ (alex-sun@mtu.ru)

Спецвыпуск Xakep, номер #028, стр. 028-102-1

В полку заплаток, патчей и дырколатателей снова пополнение! И мы, как всегда бывает на этих страницах, попробуем их разгрести.

Обновление 327979 - заплатка от вырубания игрушки в момент запуска заставки

Наконец-то поубавится глюков в ХР, когда захочется порубиться в игрушки! Бывает, что хочется забить на все дела и просто посидеть погамиться. Я не имею в виду игры из стандартного набора - они только на работе помогают убить время, если инета нет. Имеются в виду реальные игры, для которых у тебя стоит GeForce 4 или чего-нибудь подобное. Возьмешь у друганов диск с новенькой гамкой, проинсталлишь, а тебе выдается "Video not available - cannot find 'VIDS:IV50' decompressor" или " Failed (hr=0x80004002) in pVW-> put_Owner((OAHWND)HWnd)". Облом, конечно. Но в мелкософте об этом позаботились. Наверное, у самих игрушки не хотели идти :). Вот и выпустили обновление, доступное на сайте виндов как "обновление 327979".

Причиной облома может быть содержащийся игрой видеоролик, сжатый кодеком Indeo, а не глючные винды или DirectX кастрированный. Уж какие ошибки были в встроенном в виндах Indeo-кодеке, который только разжимать видео и может, но что-то, значит, было не так. В список игр с глючным видео попали Ubi Soft'овский Flanker 2.5, мелкософтовский Motocross Madness 2, Operation Blockade и Wheel of Fortune от Infogrames и некоторые другие. Если уже были проблемы подобного рода или просто хочется избежать их в будущем, то лезь на http://windowsupdate.microsoft.com и пошустрей качай этот апдейт.

ЕВРО и Windows

Уже прошло несколько лет с введения в Европе заменителей баксов - ЕВРО. Надеюсь, что не только о компах и пиве думаешь, так что должен знать. Тем более, что и компы, и пиво тоже денег стоят :(. Вот только в виндах долго не было возможности вставлять знак евры в текст документов. Сразу после ввода денежной единицы евры особой необходимости не было - повсюду крутились привычные $$$. Но теперь уж еврик подороже бакса будет. А значит, и использоваться чаще будет. А взять-то его где? Только в Windows ХР и ХР-офисе он по дефолту есть. А для остальных версий виндов и офисов появился недавно апдейт такой. Даже для 95-ых виндов, на которых положили еще пару лет назад! Благодаря патчу появится знак ЕВРО для таких шрифтов, как Times New Roman, Courier New, Arial и некоторых других.

Средство для конвертации в ЕВРО работает только для жителей тех стран, где она водится как основная. Нас же это не касается.

Избавление от вездесущности IE - критическое обновление 810565

Непонятно до сих пор, по каким критериям обновления называют "критическими". Хотя это обновление реально полезное, правда для тех, кто не любит експлорер и не пользуется им как броузером по дефолту. Это обновление исправляет багу, когда после нажатия ссылки (например, в менюшке обновления программы или ссылки на сайт) вместо любого дефолтного броузера открывается Explorer. Мелочь, но приятно, если не хочется качать обновления не только к мелкософтным виндам, но и к их броузеру (который, как показывает обилие заплаток, не сильно славится своей безопасностью).


Спецвыпуск Xakep, номер #028, стр. 028-102-2, M$-update: полезные и бесполезные

M$-update: полезные и бесполезные

Леха ББ (alex-sun@mtu.ru)

Спецвыпуск Xakep, номер #028, стр. 028-102-2

Windows Media Player 9

Наконец-то спустя полгода после появления различных бета-версий WMP 9 появился Final Release. Поначалу думалось, что после установки и ознакомления он будет благополучно забыт, но случилось чудо - ни разу не видел такого удобного и универсального плеера. Смотреть и слушать можно, наверно, все, что можно. По заверениям разработчика (понятно, кого именно), в WMP появилось 120 новых функций. Сказать точно не могу, ибо всем предыдущим версиям был предпочтен BSPlayer. А теперь тут удобно и playlist'ы делать, и плагины всевозможные подключать, и шкуры менять... WMP совместил в себе удобство создания плей-листов в Winamp'е, скорость работы BSPlayer'а и надежность предыдущих версий WMP. Улучшилась перемотка видео в формате Div-X - даже на не слишком шустрых машинах видео перематывается без похожих на зависание стоп-кадров. Если бы все было так хорошо, как изначально кажется...

Очень досадно, что до сих пор не реализована возможность менять соотношение сторон (Aspect Ratio) и применять PanScan (увеличение+ресайз) при просмотре видео. Поэтому криворесайзенное видео придется смотреть так, как оно есть, и ничего с ним не поделаешь. Хотя, если учитывать возможность подключения плагинов, то вполне возможно, что дело не за горами. Возьмет кто-нибудь (а может это будешь ты?) и напишет плагин. Дай тогда мне знать :). Из других замеченных недоделок можно выделить неправильное определение битрейта в мп3-шках, закодированных VBR'ом (переменным битрейтом). WMP пишет не средний битрейт и даже не показывает текущее значение битрейта, а просто пишет явно завышенный (326 или более kbps), в то время как реальный битрейт гораздо ниже.

Как и в 8-ом WMP, в 9-ом можно рипать AudioCd, только кодировать их в привычный MP3 не получится. Поддерживается только WMA (Windows Media Audio) с битрейтом не более 192 kbps. Вообще, на мелкософтном сайте о windowsmedia (http://windowsmedia.com/9series/) есть раздел, посвященный плагинам к WMP. Там есть и Audio DSP, и Video DSP, и визуализации, и плагин для кодирования в MP3. Только, правда, денег хотят за большинство плагинов, хотя и почти все они не мелкософтом сделаны. Но есть среди них и халявные. Похоже на то, что зарождается нечто похожее на winamp.com :).

Пользовавшим ранее бету 9-ого WMP придется делать медиа-базу (Media Library) снова, ибо она накроется тем, чем обычно накрываются вещи :). Но для этого ничего особо сложного делать не придется - надо лишь отправить WMP на поиски media-файлов, а остальное он сам за тебя сделает.

WMP 9 под ХР отличается от WMP для других виндов примерно 4 метрами (для ХР он 9.5 метров, а для Win 98/Me/2k - 13.5). Понятное дело, что и качать их с двух разных мест - для ХР: http://download.microsoft.com/download/8/a/2/8a27acce-5c9e-46b3-8996-1e76c0413d17/MPSetupXP.exe, для всего остального: http://download.microsoft.com/download/1/b/c/1bc0b1a3-c839-4b36-8f3c-19847ba09299/MPSetup.exe.

Несмотря на недавность выхода WMP 9, уже успело появиться приличное количество плагинов. Откуда они берутся только? Небезызвестный fxsound.com уже выложил несколько Audio DSP плагинов, правда за реальное право пользоваться ими бабла просит. Пусть и немного, но это не по-нашему :). Лишь бы другие создатели плагинов не последовали такому примеру.


Спецвыпуск Xakep, номер #028, стр. 028-102-3, M$-update: полезные и бесполезные

M$-update: полезные и бесполезные

Леха ББ (alex-sun@mtu.ru)

Спецвыпуск Xakep, номер #028, стр. 028-102-3

Бесполезные вещи

В середине января появился русский Service Pack к ХР. Несмотря на это, полезного в нем мало - либо нет лицензионного русского ХР в России, либо такого вообще не существует в природе. А на крякнутый ХР никакой апдейт встать не сможет (для этого нужна английская корпоративная версия ХРей + MUI, но тогда надобность в русском SP отпадает сама собой).

А еще вышло обновление виндовой софтины, полезность от которой близка к нулю. Это Windows Movie Maker 2. Кому он нужен - до сих пор непонятно. Ни о каком Div-X там даже не слышали, только дефолтные кодеки винды! Глючный, тормозной, бесполезный... Если уж решил видео пообрабатывать, то скачай себе Virtual Dub (http://www.virtualdub.org). Virtual Dub абсолютно фришный (даже исходник на сайте лежит), сам находит все установленные видео и аудио кодеки, содержит прилично встроенные фильтры для обработки видео, дополнительные легко подрубать (к тому же из таких еще ни одного платного не видел). Да и в скорости даст фору WMM'у и Adobe Premiere'у.

Думать не вредно

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


Спецвыпуск Xakep, номер #028, стр. 028-104-1, ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

Vadias

Спецвыпуск Xakep, номер #028, стр. 028-104-1

(painter@gameland.ru, www.freehand.str.ru)

Новые устройства, программы, технологии рождаются, зреют, звереют и умирают каждый день. Конечно, многие из них - откровенное фуфло и не заслуживают внимания, но иногда попадаются на редкость удивительные экземпляры. Вот и новая хитромудрая фича от бывшей MetaCreations обладает тремя фичами, которые знает и хочет каждый веб-дизигнер: маленький размер трехмерных файлов, красивое сглаживание (или, говоря по-русски, антиалиасинг :)) и огромное количество интерактивных и не очень возможностей. Многие миллионы пиплов скачали себе VMP-плеер, мелкий плаг-ин к бродилке, позволяющий заценить viewpoint-сцены, однако смотреть на чужие потуги - разве это занятие для настоящего компьютерного креатиффщика? Во, во! Поэтому в конце статьи, после разбора техники, русский гуру вьюпоинта даст тебе урок созидания своей дольки 3D-интернета. Go and create, nigga!

ОТКУДА Я ВЗЯЛСЯ, МАМА?

О том, насколько крут сабж нашего рассказа, подумаем после того, как будем точно знать, что он собой представляет, какими возможностями обладает и какое может найти применение на наших net-страницах. Для начала вопрос: знаешь ли ты, что такое rich media? Это понятие довольно часто юзают в интернет-рекламе, и переводится оно дословно как "обогащенное средство". Отличие от другой рекламы в том, что она не статична, как, скажем, тупой текст или мигающий баннер, а интерактивна, то есть юзер после щелчка по ней не просто сразу летит пулей на рекламируемый зло-сайт, а может поучаствовать в голосовании, почитать более развернутые зло-описания, в конце концов, поиграться в простую он-лайн игрульку. Возможности такой рекламы по полировке мозгов клиента куда круче, чем просто у килобайтов текста или у уже подзадолбавших дешевых рекламных трюках в gif-баннерах (например, картинка с более приличной частью обнаженной телки и фэйковой полосой прокрутки - "покрути ее, увидишь такие места - закачаешься!"). Безусловно, флэш, Java и скрипт, которыми обычно пользуются для создания таких мулей, - вещи хорошие, и при должном умении с ними можно вытворять великолепные штуки, но... чего-то им явно недостает. Ты, как всегда, все понял правильно - объемности 3D-графики. Ведь мы живем в трехмерном пространстве, и трехмерные изображения - наиболее естественное представление данных для нашего мозга.

Технологий, которые должны были интегрировать 3D в web, расплодилось немало. Наиболее нашумел (я бы даже сказал, наорал), пожалуй, VRML (язык моделирования виртуальной реальности), однако он пока что-то не особо проявил свою потенцию в сети. Да еще и конкуренты поджимают с тылов с новыми хитроумными фичами.

Мама нашего мальчика - команда, которая некоторое время назад именовалась MetaCreations и выпускала такие крульные вещи, как Painter, Poser, MetaCreations Tools и еще кучу с вишневой косточкой сверху других софтварных продуктов. Потом все это классное софтовое барахлишко было распродано другим компаниям, и все силы и средства были брошены на metastream - собственно то, что сейчас и называется VET (Viewpoint Experience Technology).


Спецвыпуск Xakep, номер #028, стр. 028-104-2, ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

Vadias

Спецвыпуск Xakep, номер #028, стр. 028-104-2

Чтобы оценить то, что у них получилось, тебе нужно будет скачать Viewpoint Media Player (VMP), который занимает от 95 кило (дополнительные модули скачиваются по мере надобности), что можно сделать на его родном сайте - www.viewpoint.com - или на нашем, русском - www.viewpoint.ru.

ГЛАДКИЙ И ШУСТРЫЙ

Объемность - это, конечно же, самая сильная и яркая фишка вьюпоинта. Веб-дизайнер всегда вынужден рваться между красотищей с эффектностью и узкими, как талия манекенщицы, каналами диалаповых соединений. Особенно заметна разница у растровых изображений, ведь размеры картинки и объем файла возрастают прямо пропорционально. Некоторые технологии, например, QuickTime VR или IPIX, используют растровые изображения; первый из них "сшивает" фотографии для создания впечатления движения по маршруту, а второй "натягивает" на сферу панорамные снимки, и управляемая юзером камера как бы сажается внутрь этой сферы. VET - это настоящее 3D. Математическое описание 3D-объектов кодируется, быстро перекидывается на машину юзера и уже там рендерится viewpoint-плеером. Вьюпоинт неплохо сглаживает "зубчатость" ребер объектов в реальном времени и очень хорошо колбасит динамический свет и тени, а это - залог реалистичности :).

Как уже говорилось, Viewpoint не только гладкий, но и шустрый, то есть быстро грузится. Секрет этой быстроты кроется в том, что модель загружается не вся сразу, а постепенно, наподобие Progressive JPG, только в объеме. Юзверь видит процесс загрузки, и это его, как правило, радует.

Кстати, к вопросу о популярности формата. Об этой характеристике, на мой взгляд, можно судить по количеству софтин, поддерживающих его экспорт, справедливо? Своего софта для работы с 3D у Viewpoint, можно сказать, практически нет (есть Viewpoint Scene Builder, предназначенный в основном для формирования всей сцены). Зато сторонних разработчиков, чьи проги экспортируют в VET, - целая армия. Среди них такие легендарные имена, как 3DS MAX, Maya, Lightwave, Truespace, Poser и множество других. Некоторым требуются специальные плагины, другие - выдают продукт напрямую. Полученная в результате модель сохранит как форму, так и текстуру, и даже анимацию.

МИЛЛИОН ВОЗМОЖНОСТЕЙ

Вот чем, действительно, Viewpoint валит наповал, так это тем, что авторы не уперлись в сплошное 3D, но и запарились интеграцией с другими форматами, распространенными в сети. Кроме объемных моделей, в VET-сцену можно запихнуть и плоскую графику, причем как растровую, так и векторную (в формате SVG или Flash). Для растровых картинок здесь имеется своя собственная технология, которая позволяет гнать по сети пикчуры с отменным качеством. Сжатие эффективнее JPG, и эта штука уже поддерживается седьмым "Фотошопом". Хочешь музыки - пожалуйста, в проге Viewpoint Scene Builder в сцену импортируются mpeg и wav. Не забыта и такая простая, но насущная вещь, как банальный текст.

"Что он там бормотал про Flash?" - спросишь ты, и я расскажу об этом удивительные вещи. Начнем с того, что VMP обрабатывает флэш-мувики на 300 процентов быстрее родного плеера Macromedia (это не я сказал, а разработчики :)). Правда, некоторые свойства мувика теряются при импортировании в сцену, например, не работают кнопки, но упущенное можно наверстать средствами VET. Но самое эффектное - то, что мувик может служить текстурой для объемной модели! Да-да, ты можешь натянуть флэшку на модель, и она не лопнет! Впечатляет :)?


Спецвыпуск Xakep, номер #028, стр. 028-104-3, ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

Vadias

Спецвыпуск Xakep, номер #028, стр. 028-104-3

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

КРЕАТИВИМ ЛИЧНЫЙ ЧАЙНИК В ИНТЕРНЕТЕ

Джедай! Ты познал истину и готов получить небольшой практический урок. Сделаем его в 3DS Max, он ведь, наверное, у тебя лицензионный? Только имей в виду, для него должен быть установлен спец-плагин, который можно найти по адресу http://www.viewpoint.ru/dev/tools_docs/tools_docs.htm. Для просмотра, естественно, также должен быть установлен VMP; где он лежит, ты уже знаешь. Кроме них, неплохо иметь и Viewpoint Scene Builder, который можно скачать с www.viewpoint.com.

Итак, к делу. Урок несложный, и выполнить предложенное задание сможет даже чайник. Его (чайник) мы, собственно, и будем реализовывать :). Эта модель уже давно присутствует в стандартном наборе примитивов Макса и создается одним взмахом. В меню справа, на вкладке Create, выбери тип объекта Teapot (смотри на картинки). Не спеши создавать, сначала нужно задать параметры: радиус примерно 40, Smooth помечено, не помечено галочкой только поле Lid - это значит, что мы создаем чайник без крышки. Ее мы создадим отдельно. Создавай еще раз чайник с такими же параметрами, но теперь поле Lid пометь, а с Body, Handle и Spout галочки убери.

Теперь у нас есть чайник, состоящий из двух частей, который не стыдно экспортнуть, что мы и сделаем. Если нужный плагин установлен, выбери команду File>Export, назови файл, например, teapot, и жми "Сохранить". Перед тобой выскочит новое окно с настройками экспорта. Если хочешь, можешь поколупать ногтем эти настройки, хотя можно оставить все как есть. Единственное - убери все галочки на вкладке Lighting. Тень на плетень мы набросим во Viewpoint Scene Builder. На рисунке приведены настройки, которые рекомендует мастак вьюпоинта.

Сейчас ты уже можешь проверить, что ты там натворил. Полезай в папку, которую указал экспортеру, и ты увидишь три новых файла, все с именем, которое ты задал, но с разными расширениями: mtx, mts и html. Запустив последний, ты увидишь свой чайник, который можно вертеть, перемещать, приближать и удалять. Однако качество визуализации сейчас, следует признать, хромает на обе ноги. Чтобы восстановить справедливость, запускаем Viewpoint Scene Builder. Прога очень проста, если знать, для чего она служит. В меню справа щелкаем по кнопке "Open MTX" и открываем созданный нами файл с расширением mtx. Этот файл как раз содержит в себе объекты сцены, в данном случае - только чайник.

Здесь мы сможем добавить обещанные красоту, эффектность и реалистичность. Во-первых, добавим тень. Нажми клавишу "5", откроется вкладка Global Parameters, на которой нажимаем кнопку "Shadow". Затем жмем "2", выделяем правой кнопкой крышку и жмем "BackFace Culling". Теперь крышка будет реальна не только с наружной стороны, но и с внутренней. Выделяем основу чайника и опять жмем "BackFace Culling". Все части чайника двусторонние. Все честно :).


Спецвыпуск Xakep, номер #028, стр. 028-104-4, ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

Vadias

Спецвыпуск Xakep, номер #028, стр. 028-104-4

А что если сделать крышку полупрозрачной? Снова выделим ее правой кнопой крысы и, нажав и удерживая курсор на кнопке "Opacity", тянем его влево, до нужной степени прозрачности, скажем, до 60. Все, можешь заглядывать внутрь чайника и проверять его на наличие "стасиков", не снимая крышки :).

Как известно, людей тянет на блестящее. Чтобы наш чайник нравился не только нам, мы также сделаем его псевдометаллическим и отражающим свет. Для этого применим известную тридэшникам фишку - Lightmap. Тебе потребуется картинка вроде той, что изображена на скрине. Ее можно сделать самостоятельно в Фотошопе, а можно заглянуть на www.viewpoint.ru, где лежат все заготовки для этого скромного тутора.

В общем, когда будешь обладать требуемой пикчуркой, схвати ее мышью в проводнике, перетащи на модель в окне Viewpoint Scene Builder и, удерживая ctrl, отпусти. Проделай эту операцию и с туловищем, и с крышкой.

Работа с 3D практически окончена, осталось только расположить чайник под эффектным углом и сохранить. Заметь, юзверь увидит сценку в том ракурсе, в который ты ее поставил перед сохранением :). Сохранив файл mtx, можно посмотреть на внесенные изменения. Все стало гораздо красивее, но чайник статичен и безжизненен.

Внести некоторую интерактивность можно, немного пошкодив в XML. Берем первый попавшийся текстовый редактор (рекомендую XmlSpy) и открываем в нем файл с расширением mtx. Это управляющий файл сцены. Находим содержимое тэга "MTSInstance" для "teapot_MESH_1" и прописываем еще две строчки (на рисунке серое - это то, что уже есть, а белое - то, что нужно дописать):

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

Короткая поясниловка: тэг "MTSInteractor" отвечает в данном случае за действия крышки при наведении мыши, а два тэга "MTSTimeElem" под названиями "animation1" и "animation2" - за анимацию поднятия крышки и опускания соответственно.

Сохраняем и запускаем html-файл для просмотра результата копания грязными руками в XML-коде. Наводи курсор на крышку, кликай на нее. И еще разок, и еще. Сцена готова полностью!

Это пример простейшей анимации и интерактивности, а заинтересовавшимся могу предложить "поиграть" с параметром "Value" тэга "MTSHandle" и со значениями тэгов анимации. Например, если сменить loc_ на scl_ да и координаты попереставлять... А любые возникшие вопросы можешь задать в форуме на www.viewpoint.ru.

МАЛЕНЬКАЯ НЕЗАДАЧА

Оп-ля! Я забыл сказать тебе одну вещь: про лицензирование. Только не по почкам!


Спецвыпуск Xakep, номер #028, стр. 028-104-5, ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

ВОЛШЕБНАЯ ТЕХНОЛОГИЯ VIEWPOINT - сделай свой сайт трехмерным

Vadias

Спецвыпуск Xakep, номер #028, стр. 028-104-5

Дело в том, что технология Viewpoint является условно-бесплатной, а не полным фриваром. Когда ты юзаешь VET-файлы на локальном компе, все нормально и жизнь в шоколаде. Однако стоит тебе выложить продукты творчества в интернет, то поверх основного окна сцены появятся полупрозрачные надписи: www.viewpoint.com, www.viewpoint.com, www.viewpoint.com и так далее :). Чтобы убрать это излишество, нужно получить лицензию, которую они называют Broadcast key. Тем, кто использует технологию в коммерческих целях, должен выкладывать, ни много ни мало, 500 баксов в год. Однако честные креативщики, юзающие ее для удовлетворения своих художественных потребностей, имеют полное право затребовать эту лицензию на халяву. Ты также можешь это сделать на все том же ресурсе www.viewpoint.ru, если писать письма на английском не хочется.

ЗАКЛЮЧЕНИЕ

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

Чтобы посмотреть на то, как можно полноценно выжимать из Viewpoint все возможное, сходи на http://www.viewpoint.com/developerzone/ и выбери там раздел Gallery. Там ты найдешь мастерски исполненные модели и профессиональный дизайн. Рекомендую посмотреть ссылку Ford Expedition - с первого раза весьма впечатляет.


Спецвыпуск Xakep, номер #028, стр. 028-108-1, УЛЫБНИСЬ В СТИЛЕ АНИМЕ - прикольные рожицы и новые смайлы

УЛЫБНИСЬ В СТИЛЕ АНИМЕ - прикольные рожицы и новые смайлы

Ain Hagalaz

Спецвыпуск Xakep, номер #028, стр. 028-108-1

(ainhagalaz@hotmail.com)

Привет! Последнее время ты, наверное, замечаешь огромное количество большеглазых девочек с длинными ногами и волосами всех цветов радуги, смотрящих на тебя с обложек журналов. Вот смотришь ты на этих милашек, смотришь, слюной исходишь, а в чем фишка, до тебя не доходит. Все дело в стиле, имя которой - аниме! Не думай, что это просто красивые яркие картинки. Аниме - это, в первую очередь, японские мультфильмы. Эй, эй! Я понимаю, что ты знаком с этим стилем только по дешевым детским мультсериалам, которые иногда крутят по нашему ТВ, но если копнуть глубже, то ты окунешься в потрясающий, волнующий мир, попав в который один раз, выбраться будет весьма проблематично :)). Ах, эти маленькие хитрые японцы, чего они только не придумывают! Ведь аниме существует на любой вкус и возраст, каждый может найти себе по душе: секс, спорт, юмор, фэнтези, киберпанк... ня!.. А вот на киберпанке мне хочется заострить твое внимание, так как мне уже начинает казаться, что именно аниме теперь диктует это направление по полной программе. Гибсон, отец киберпанка, все больше и больше оказывается в положении отдыхающего.

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

А ТЕПЕРЬ ФИШКА!

К чему этот прогон во вступлении? Напомню тебе старое доброе аниме "Sailor Moon". Просьба не капать слюной на страницы журнала! И не вопить что-то из серии: "Это не для нас, мы выросли из этого возраста!" Учтите, для малышей не делают мультики с элементами гомосексуализма, пусть даже весьма завуалированного... Кроме того, кровь и смерть там тоже присутствуют. Почему именно "Сэйлормун"? Да потому что это единственный японский сериал, который крутили по нашему телевидению раз пять. И наверняка любой человек хоть краем глаза его видел...

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

Не считай это глупым ребячеством, уделом свихнувшихся отаку (отаку - фанат аниме и манги) или бездельников. Подобное комическое отражения окружающего мира весьма помогает расслабиться, от души поиздеваться в школе/институте над "любимым" преподом или придурком-однокашником (ага, я сама часто этим грешу). Эффект на окружающих производит колоссальный! :) Сам Масамуне Широ (Masamune Shirow) - автор знаменитой манги "Ghost in the Shell" ("Призрак в доспехе"), по мотивам которой был сделан одноименный мультфильм (если до сих пор его не посмотрел, то ты последний asshole), - большой любитель подобным образам поизвращаться над своими героями. Также в его арте неоднократно были замечены прикольные роботы, танки и прочая дребедень. Если уж один из самых именитых японских киберпанков любит это дело, почему бы не попробовать и нам? :)


Спецвыпуск Xakep, номер #028, стр. 028-108-2, УЛЫБНИСЬ В СТИЛЕ АНИМЕ - прикольные рожицы и новые смайлы

УЛЫБНИСЬ В СТИЛЕ АНИМЕ - прикольные рожицы и новые смайлы

Ain Hagalaz

Спецвыпуск Xakep, номер #028, стр. 028-108-2

КАРАНДАШ - ЭТО ПРОСТО!

Хочу сразу отметить, что ничего сверхсложного и сверх гениального в подобном творчестве нет. Вовсе не надо уметь рисовать, достаточно иметь представление о двух инструментах - ручке и карандаше. Карандаш - это маленькая деревянная палочка, предназначенная для... тьфу!.. Думаю, с этим все и так ясно ^_^. Извлекай свои карандаши, пора приступать к делу!

РАДОСТЬ

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

Смайлик такой: ^__^ (в латинской раскладке [Sift+6], подчеркивание, [Sift+6]). Чем больше подчеркиваний, тем шире лыба.

Сделал гадость - на сердце радость ^___^

ПОХОТЬ

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

Главной отличительной чертой данной рожицы является так называемая "кошачья улыбочка". Выглядит как горизонтально положенная цифра "3". Полуприкрытые глаза - так, чтобы образовался смачный прищур и брови домиком. Правда, милая мордашка выходит?

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

Смайлик такой: :3 (двоеточие, З).

Она по нему скучает...

220 ВОЛЬТ

Ты когда-нибудь засовывал пальцы в розетку? Ну и не пробуй! Зато состояние глубочайшего ступора, наверное, тебе знакомо. Главной составляющей этой эмоции являются глаза. Есть несколько вариантов их начертания - это глаза "навыкат", со спиралью внутри или трещинками от зрачков, также можно нарисовать смачные крестики. Приподнятые брови, отвисшая антресоль... эээ... то есть челюсть.

Смайлик такой: х__х или @__@.

Ааа!.. Ахренеть!

ЗЛОСТЬ

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

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

Еще в аниме встречаются значки, обозначающие эмоцию. В японских RPG часто используется эта фишка для обозначения статуса типа: конфуз - звездочки, молчание - три точки, ослепление - облачко и так далее. В нашем случае это крестик с округлыми уголками к центру, на кулаке или на лбу.

Смайлик такой: -_-x (минус-подчеркивание-минус-буква "х").

Ща как звездану! -_-х

УЖАС

Это проще простого! Самое стандартное и распространенное выражение в любой мультипликации. Маленькие зрачки-точки, широко раскрытые глаза. Рот можно варьировать по-разному, посмотри на предыдущие рожицы.


Спецвыпуск Xakep, номер #028, стр. 028-108-3, УЛЫБНИСЬ В СТИЛЕ АНИМЕ - прикольные рожицы и новые смайлы

УЛЫБНИСЬ В СТИЛЕ АНИМЕ - прикольные рожицы и новые смайлы

Ain Hagalaz

Спецвыпуск Xakep, номер #028, стр. 028-108-3

Смайлик такой: O_o. Буквы "О" можно делать большими или маленькими по своему усмотрению.

Кто здесь?!!

ОБЛОМ

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

Смайлик такой: -__-

Он ушел? Как же так?!

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

Если ты проникся аниме и хочешь приобщиться к этому стилю, ты просто не можешь пропустить эти аниме:

Ghost in the shell

В мире, где киборги живут среди людей, появляется хакер, желающий получить "реальное" тело. Главная героиня майор Motoko Kusanagi и ее напарник Bateau разыскивают этого суперхакера, известного как Кукловод.

Весь мир опутан компьютерными сетями, позволяющими органическим и неорганическим "ghosts" (или человекоподобная сущность) сознаниям переносить себя из тела в тело "shell" (органическое или кибернетическое).

Мрачное будущее, башнесносящие технологии, огромные роботы и пушки, похожие на BFG-9000 из Doom'а, кровавые сцены с торчащими ребрами, сосудами и проводами. Фильм наводит на депрессивные мысли о сущности человека и его души. Рекомендуется к непременному просмотру как классика жанра.

Akira

Сверхизвестный режиссер Кацухиро Отомо веников не вяжет. Сначала все развивается просто и бесхитростно. Банда байкеров, корефаны Тецуо и Канеда, девки, пиво, rock'n rol. Все меняется сразу, когда в Тецуо просыпается элемент "Акира". Сам бог Акира представлен здесь как идея о необозримых ресурсах генетической эволюции человека, как представление о бесконечности времени позади. Графика фильма поражает своей масштабностью. Эпизод, когда в ставшего практически неуязвимым Тецуо мочат из орбитальной ионной пушки, вызывает нервное похихикивание. Минимум статики, анимирована каждая мелочь. Куча идей, потрясное исполнение замысла, нашумевшее имя. Must see! Для всех. Точка.

Cowboy Bebop

На фоне Акиры и Gits ковбой Бибоп выглядит как более легкое аниме и может рассматриваться как анимешный боевик. Рассказ идет о том, как некий Винсент, одинокий, лишенный прошлого человек, умирая, решает прихватить с собой весь мир. Главный герой, парень хоть куда, противодействует Винсенту по мере сил.

Анимация реалистична до безобразия. Много специфичного анимешного юмора. Сексапильные женские персонажи. Кинематографичность - высший класс. Хореография поединков на уровне, до которого Голливуду эволюционировать и не торопиться.

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


Спецвыпуск Xakep, номер #028, стр. 028-110-1, TIPS OF WEB: продвинутый альбом с порнушкой

TIPS OF WEB: продвинутый альбом с порнушкой

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #028, стр. 028-110-1

TIPSA 1

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

TIPSA 2

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

TIPSA 3

Сперва надо намутить план. Общая схема такова: 1. цепляем с сервака XML документ с описанием картинок; 2. на основе данных этого XML подгружаем и показываем превьюшки; 3. превьюшкам назначаем на клик подгрузку большой фотки; 4. делаем две кнопки для смены превьюшек.

TIPSA 4

Сразу сделай все необходимое для тестирования. Создай папку, сохрани в нее флэшку, в эту же папку скинь штук 20-30 фоток, сделай превьюшки - уменьшенные копии этих фоток (в нашем примере 50х50 пикселей). И садись за XML. Тебе нужно сделать XML файл "album.xml" по следующему шаблону:

<album>

<pic img="PIC001.JPG" preview="PIC001_1.JPG" comment="комментарий 1" />

...

<pic img="PIC0025.JPG" preview="PIC0025_1.JPG" comment="комментарий 25" />

</album>

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

<pic img="IMG/PIC001.JPG" preview="IMG/PIC001_1.JPG" comment="комментарий 1" />

Короче, свобода, и ничего не надо перелопачивать заново.

TIPSA 5

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

System.useCodePage = true;

XML.prototype.ignoreWhite = true;

Эту функцию всегда можно найти на http://proto/layer51.com

// (c) Ivan Dembicki, dembicki@narod.ru

XMLNode.prototype.nextNode = function() {

if (this.firstChild != null) {

return this.firstChild;

}

var n = this;

while (n.nextSibling == null) {

if (n.parentNode) {

n = n.parentNode;

} else {

return null;

}

}

return n.nextSibling;

};

Эта часть уже дважды мною описывалась в предыдущих статьях, поэтому кратко: загружаем и проверяем успешную загрузку и валидность XML, потом обойдем все дерево и назначим каждому узлу свой ID для дальнейшего обращения к ним через этот ID. Синтаксис: any_xml[ID]. И запомним на всякий случай в переменной _root.preview_total общее количество фоток, которое юзер может у тебя посмотреть.


Спецвыпуск Xakep, номер #028, стр. 028-110-2, TIPS OF WEB: продвинутый альбом с порнушкой

TIPS OF WEB: продвинутый альбом с порнушкой

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #028, стр. 028-110-2

this.input_xml = new XML();

this.input_xml.load("album.xml");

this.input_xml.onLoad = function(success) {

if (success) {

if (this.status != 0) {

trace("invalid xml");

} else {

this.addID();

_root.preview.loadPictures();

}

} else {

trace("error opening URL");

}

};

this.input_xml.addID = function() {

var i = 0;

var nod = this.firstChild;

while (nod) {

nod.attributes.ID = i++;

nod = nod.nextNode();

}

_root.preview_total = i;

this.parseXML(this.firstChild);

};

TIPSA 6

Юзай "умные" мувики!

Для превьюшек сделай отдельным мувик - так ими легче управлять. Замутить мувик элементарно:

_root.createEmptyMovieClip("preview", 1);

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

Следующим шагом зададим этому мувиклипу функцию добавления и размещения на сцене экземпляров мувиков для превьюшек.

TIPSA 7

Если хочешь плодить клипы, тебе нужен базовый клипушник в библиотеке и линка на него!

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

TIPSA 8

Кстати, если захочешь, чтобы превьюхи легли иначе, то тебе нужно будет подергать две последние строки этой функции, где этим мувикам в цикле задаются координаты _x и _y. Сейчас они сидят через 45 пикселов по высоте. По ширине четные в координате 10, а нечетные в координате 40 - я разделил их с помощью вычисления остатка от деления на 2 номера превьюшки (вот такой я извращен :)). Когда у тебя все получится и ты будешь экспериментировать с настройками, попробуй в строке mc._x = i%2*30+10; двойку заменить на тройку, четверку и т.п. и посмотри, какой эффект это даст. Также я вынес в отдельную переменную количество превьюшек на странице. Ее ты можешь менять по своему усмотрению.

_root.preview.preview_step = 10;

_root.preview.loadPictures = function() {

var i = 1;

for (i; i<=this.preview_step; i++) {

var mc = this.attachMovie("pictureHolder", "p"+i, i, {num:i});

mc._y = 45*(i-1);

mc._x = i%2*30+10;

}

};

TIPSA 9

Храните функции в сберегательном классе... и на пальцах не будет мозолей.

Создать и зарегить класс легко:

HolderClass = function () { };

Object.registerClass("pictureHolder", HolderClass);

Создали и зарегили. Теперь, если приаттачить мувик "pictureHolder" из библиотеки, он автоматически будет принадлежать этому классу и унаследует от него все функции этого класса. То есть, если мы поместим в прототип класса некую функцию, она будет доступна этому экземпляру, как будто эта функция написана прямо в экземпляре. Короче, почкование копированием :).

Мозги не сварились? Ведь еще надо разобраться, какие функции будут жить в этом классе.

TIPSA 10

Юзай временные ссылки... и снова избежишь мозолей на пальцах!

Поместим в прототип всю функциональную начинку мувиклипов и сделаем короткую ссылку (tmp) на прототип класса:

tmp = HolderClass.prototype=new MovieClip();

TIPSA 11


Спецвыпуск Xakep, номер #028, стр. 028-110-3, TIPS OF WEB: продвинутый альбом с порнушкой

TIPS OF WEB: продвинутый альбом с порнушкой

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #028, стр. 028-110-3

Зацени прием цепной реакции!

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

Итак, КАЖДЫЙ ЭКЗЕМПЛЯР при загрузке создает мувик, в который будет грузиться превьюшка. Затем первому из десяти (или какое ты там поставил значение переменной _root.preview.preview_step) мувиков дается команда стартануть (инициализировать) загрузку превьюшки.

tmp.onLoad = function() {

this.createEmptyMovieClip("pic", 0);

if (this.num == 1) {

this.initLoading();

}

};

Инициализация загрузки - это последовательный вызов функций: 1) проверки наличия соответствующего узла XML; 2) собственно команды на загрузку (адрес берем из своего узла XML) и 3) проверки - загружена ли превьюшка.

tmp.initLoading = function() {

if (!this.checkNode()) {

return;

}

this.pic.loadMovie(_root.input_xml[this.num+this._parent.begin].attributes.preview);

this.onEnterFrame = this.checkIsLoaded;

};

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

tmp.checkNode = function() {

this.nod = _root.input_xml[this.num+this._parent.begin];

if (this.nod == undefined) {

this._parent["p"+(this.num+1)].initLoading();

this.removeMovieClip();

return false;

}

this.tooltip_text = this.nod.attributes.comment;

return true;

};

Проверка, загружена ли превьюшка, нужна, чтобы отловить момент, когда она полностью загрузилась. Когда это произошло, нужно сделать следующее: 1) стартануть загрузку следующей превьюшки; 2) задать стартовый масштаб картинки равным единице; 3) начать анимацию загруженной превьюшки.

tmp.checkIsLoaded = function() {

if (this.pic.getBytesLoaded()/this.pic.getBytesTotal() == 1) {

this._parent["p"+(this.num+1)].initLoading();

delete this.num;

this._xscale = this._yscale=1;

this.onEnterFrame = this.animateIt;

}

};

TIPSA 12

Принимай на вооружение прием расчета загрузки мувика, который засветился в листинге чуть выше! getBytesLoaded() и getBytesTotal() - рульные встроенные функции флэша.

TIPSA 13

Программная анимация часто прикольнее, чем покадровая, а весит... ноль!

Анимация загруженной картинки очень проста: в каждом кадре к масштабу прибавляем некий шаг (this.st), который тоже с каждым кадром увеличивается на 3. Через некоторое время масштаб станет больше чем 100% и сработает условие блока if. В этом блоке устанавливается масштаб равно 100% и прекращается обработка onEnterFrame.

tmp.animateIt = function() {

if (this._xscale>100) {

this._xscale = this._yscale=100;

delete this.st;

this.onEnterFrame = null;

return;

}

this._yscale = this._xscale += this.st += 3;


Спецвыпуск Xakep, номер #028, стр. 028-110-4, TIPS OF WEB: продвинутый альбом с порнушкой

TIPS OF WEB: продвинутый альбом с порнушкой

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #028, стр. 028-110-4

};

В результате получается анимация увеличения картинки с ускорением и в конце с эффектом инерционного перескока финального размера и последующего возврата к этому размеру (во как!).

TIPSA 14

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

tmp.onRelease = function() {

_root.photo.loadMovie(this.nod.attributes.img);

_root.comment = this.nod.attributes.comment;

};

Где _root.comment - это некая переменная, которую ты можешь назначить текстовому полю, чтобы юзверь мог увидеть подпись к твоей картинке.

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

Не забудь удалить ссылку на прототип класса (только не из скрипта!) - она нам нужна была только для удобства написания скрипта: delete tmp;

TIPSA 15

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

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

В таких случаях, чтобы пользователь мог догадаться, что его жмаканья вызвали ответную реакцию у проги, оптимальным будет показать ему прелоадер. Кстати, если мой не нравится, можешь заюзать любой. Только учти, что в этой части скрипта я сделал мувик "photo" в руте, в него и будет грузиться большая фотка. И если ты его решишь подвинуть, то делай это сразу здесь. Я его только сдвинул вправо от края на сотню пикселов.

И еще: прелоадер полностью независим от других частей программы, за исключением этой фотки, и его логика устроена так, чтобы он показывался (_visible=1) только во время загрузки фотки. Да, впрочем, ты и сам разберешься - прелоадеры одна из самых исследованных областей даже среди начинающих.

mc = _root.createEmptyMovieClip("preloader", 2);

mc._x=Stage.width/2-100, mc._y=Stage.height/2-50;

mc.targ_mc = _root.createEmptyMovieClip("photo", 0);

mc.targ_mc._x = 100;

mc.createTextField("info_txt", 1, -50, 0, 1, 1);

mc.info_txt.autoSize = "left";

mc.onEnterFrame = function() {

var percents = this.targ_mc.getBytesLoaded()/this.targ_mc.getBytesTotal()*100;

if (percents == 100 || !percents) {

this._visible = 0;

return;

}

this._visible = 1;

this.clear();

this.lineStyle(5, 0x000000, 100);

this.moveTo(-100, 0), this.lineTo(100, 0);

this.lineStyle(3, 0xFF0000, 100);

this.moveTo(-100, 0), this.lineTo(percents*2-100, 0);

var str = "загрузка фотки:\r\""+_root.comment+"\"\r";

str += "размерчик:\t\t\t"+Math.round(this.targ_mc.getBytesTotal()/1024)+"\tkB,\r";

str += "ужо загружено:\t\t"+Math.round(this.targ_mc.getBytesLoaded()/1024)+"\tkB,\r";

str += "в процентиках:\t\t"+Math.round(percents)+"\t%";

this.info_txt.text = str;

};

delete mc;

TIPSA 16

Не забудь кнопки - листалки страничек - ведь фоток много! Возможно, тебе часто придется "листать" странички в будущих скриптах - бери прием на вооружение!

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


Спецвыпуск Xakep, номер #028, стр. 028-110-5, TIPS OF WEB: продвинутый альбом с порнушкой

TIPS OF WEB: продвинутый альбом с порнушкой

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #028, стр. 028-110-5

Рисуем кнопку "вперед":

mc = _root.createEmptyMovieClip("next", 3);

mc.createTextField("dir_txt", 0, 0, 0, 0, 0);

mc.dir_txt.text = "вперед >>";

mc.dir_txt.autoSize = true;

mc._x=50, mc._y=470;

И назначаем ей обработку клика: 1) устанавливаем начальный номер превьюшки, добавляя к текущему значению размер шага; 2) вызываем loadPictures(), которая прежде всего заместит существующие превьюшки пустыми мувиками из библиотеки и инициализируется подгрузка в них новых мувиков; 3) раз мы кликнули вперед, то что-то осталось позади, и нужно сделать видимой кнопку "назад". Если она и так видима, ей это не повредит; 4) проверяем, нужна ли нам кнопка "вперед" видимой, сравнивая начальный номер превьюшек при следующем показе с общим количеством фоток.

Вот как это выглядит на Action Script:

mc.onRelease = function() {

_root.preview.begin += _root.preview.preview_step;

_root.preview.loadPictures();

_root.prev._visible = 1;

var next_show_begin = _root.preview.begin+_root.preview.preview_step;

if (next_show_begin>=_root.preview_total) {

this._visible = 0;

}

};

Рисуем кнопку "назад":

mc = _root.createEmptyMovieClip("prev", 4);

mc.createTextField("dir_txt", 0, 0, 0, 0, 0);

mc.dir_txt.text = "<< назад";

mc.dir_txt.autoSize = true;

mc._x=30, mc._y=490, mc._visible=0;

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

mc.onRelease = function() {

_root.next._visible = 1;

if (_root.preview.begin>0) {

_root.preview.begin -= _root.preview.preview_step;

if (_root.preview.begin == 0) {

this._visible = 0;

}

_root.preview.loadPictures();

}

};

И не забываем удалить ненужную уже ссылку (но не из скрипта!): delete mc;

TIPSA 17

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

Если ты читал предыдущие мои статьи, то тебя, наверняка, насторожила строка this.tooltip_text = ... в функции проверки узла XML. Я вроде невзначай создаю переменную в каждой превьюхе и потом нигде не использую. Это просто подготовка для внедрения объекта TolTips. Да, да, та самая текстовая подсказка для юзера, которую мы разбирали в одном из предыдущих выпусков Tips of Flash. Если ты про это читал и уже где-нибудь реализовал, то тебе достаточно забросить типсу на сцену, и она будет работать. Ко всему прочему, ты можешь легко применить эффект показа фотки, также описанный мною в этом журнале в одном из предыдущих номеров.

TIPSA 18

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


Спецвыпуск Xakep, номер #028, стр. 028-110-6, TIPS OF WEB: продвинутый альбом с порнушкой

TIPS OF WEB: продвинутый альбом с порнушкой

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #028, стр. 028-110-6

TIPSA 19

Без багов никак. Вот и здесь тебя ждут некоторые засады.

Главный жук здесь такой: ты не можешь грузить gif, png и прогрессивный jpeg. Только обычный jpeg. Сохраняя превьюху в "Фотошопе", выбирай метод Baseline (Standart).

При обнаружении других багов, (а с кем не случается?) или, если вдруг чего не получается, ты знаешь мое мыло: dembicki@narod.ru, но перед тем как написать, загляни на http://dembicki.narod.ru - может я к тому времени и сам обнаружу и выложу исправленную или дополненную версию.

Мои благодарности MasTak за бета-тестирование и ценные предложения.


Спецвыпуск Xakep, номер #028, стр. 028-114-1, TIPS OF WEB: грузим без динамы, динамим, чтобы не грузить!

TIPS OF WEB: грузим без динамы, динамим, чтобы не грузить!

Sevranty

Спецвыпуск Xakep, номер #028, стр. 028-114-1

(sevranty@deepdesign.ru, vsevolod.deepdesign.ru)

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

TIPSA 1. ОЖИДАНИЕ ЗАГРУЗКИ СТРАНИЦЫ

Для начала сделаем html-прелоадер. Пусть он нам показывает "Загрузка начата ...", пока на странице грузятся разные картинки.

<script language="JavaScript"><!--//

var layerRef="null", styleSwitch="null";

function init() {

if (navigator.appName == "Netscape") {

layerRef="document.layers";

styleSwitch="";

} else {

layerRef="document.all";

styleSwitch=".style";

}

}

function hideLayer(layerName) {

eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.visibility="hidden"');

}

function showLayer(layerName) {

eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.visibility="visible"');

}

//--></script>

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

Это первый блок:

<div id="loading">

Загрузка начата...

</div>

Это второй блок:

<div id="load">

Загрузка окончена...

</div>

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

Далее опишем правильно эти дивы в CSS (каскадной таблице стилей). Вариантов много, например:

<style type="text/css">

<!--

#loading {}

#load {visibility: hidden;}

-->

</style>

Эта часть у нас теперь готова. Осталось немного: инициировать скрипты из боди на событие Onload.

<body onload="init();hideLayer('loading');showLayer('load');">

Теперь можешь набить свою хоумпагу кучей картинок и долго наблюдать мессагу о том, что "Загрузка начата...".

TIPSA 2. POP-UP ПРИВЕТСТВИЕ

Раз уж сделал прелоадер, то будь вежлив до конца - поприветствуй пользователя! Для этого сначала запроси его:

<script language="javascript">

{

var family = prompt("Фамилию, быстро!", "Кацман")

var name = prompt("Имя, сволочь!", "Изя")

}

</script>

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

<script language="javascript">

{

document.write("Приветствую вас <b>" +family+ " " +name+ "</b>.");

document.write("<br>");

document.write("Добро пожаловать ко мне домой");

document.write("<br>");

document.write("<b>"+"И все такое"+"</b>");

document.write(" ...");

}

</script>

Кстати, не рекомендую вставлять этот скрипт в хедер. Мало ли что %-)!

TIPSA 3. УВЕЛИЧЕНИЕ КАРТИНОК

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

<SCRIPT LANGUAGE="JavaScript"><!--//

function ReSize(img, filesmall, heightsmall, widthsmall, filebig, heightbig, widthbig) {

if (img.src.indexOf('_small') > 0) {

img.src=filebig;


Спецвыпуск Xakep, номер #028, стр. 028-114-2, TIPS OF WEB: грузим без динамы, динамим, чтобы не грузить!

TIPS OF WEB: грузим без динамы, динамим, чтобы не грузить!

Sevranty

Спецвыпуск Xakep, номер #028, стр. 028-114-2

img.alt="Уменьшить картинку";

img.width=widthbig;

img.height=heightbig;

} else {

img.src=filesmall;

img.alt="Увеличить картинку";

img.width=widthsmall;

img.height=heightsmall;

}

return false;

}

//--></SCRIPT>

Вот маленький скриптик с семью параметрами. Первый параметр - это идентификатор картинки. Следующие три параметра - это свойства маленькой картинки. А последние три параметра - свойства большой картинки. Все эти параметры мы передаем из события onClick на ссылке, которую мы вешает на картинку.

<a href="JavaScript://" onClick="return ReSize(document.gallery_a,'../../../../xakep/a-002/img1_small.gif',60,60,'../../../../xakep/a-002/img1_big.gif',300,300);" style="cursor:hand"><img src="/xakep/a-002/img1_small.gif" width="60" height="60" border="0" alt="Увеличить-Уменьшить" name="gallery_a"></a>

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

TIPSA 4. РАЗВОРОТ СПИСКОВ НА СТРАНИЦЕ БЕЗ ПОДГРУЗКИ

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

<style type="text/css">

<!--

.tip {display: none; padding-top: 3px; text-decoration: none;}

-->

</style>

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

<script>

<!--

www = (document.getElementById) ? true : false;

var opened=0;

function list(idname){

var div;

if(!(www||ie4))return;

if(www){

div=document.getElementById(idname);

}else{

div=document.all[idname];

}

if(opened){

opened.style.display='none';

if(opened==div){opened=0;return false;}

}

div.style.display='block';

opened=div;

return false;

}

//-->

</script>

А вот здесь в линке мы вызываем нашу функцию с параметром, соответствующим id нашего дива:

<li><a href="#" onclick="return list('info1')" class="hdr">Подсказка 1</a><div id="info1" class=tip style="margin: 1 0 0 10px;"><table width="300" border="0" cellpadding="5" cellspacing="1" bgcolor="#CC0000"><tr><td bgcolor="#FFFFE4">

<p align=justify>

<img src="/xakep/a-002/img1_small.gif" width="60" height="60" border="1" alt="" align="left"><b>БЛОК 1</b><br> Текст первой подсказки. Текст первой подсказки. Текст первой подсказки. Текст первой подсказки. Текст первой подсказки. Текст первой подсказки. Текст первой подсказки.

<br><br clear="all">

</td></tr></table></div>

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

TIPSA 5. ВСПЛЫВАЮЩАЯ ПОДСКАЗКА

Это довольно нетривиальное решение, можно было и проще, но с абсолютным позиционированием, что смотрится кисло. А можно и так, как представлено ниже, правда, скриптов прибавится, но их ты всегда сможешь скачать у меня всего за $99,99... Шучу! Не бейте, не бейте!


Спецвыпуск Xakep, номер #028, стр. 028-114-3, TIPS OF WEB: грузим без динамы, динамим, чтобы не грузить!

TIPS OF WEB: грузим без динамы, динамим, чтобы не грузить!

Sevranty

Спецвыпуск Xakep, номер #028, стр. 028-114-3

<script>

<!--

dom = (document.getElementById) ? true : false;

nn4 = (document.layers) ? true : false;

ie = (document.all) ? true : false;

ie4 = ie && !dom;

function empty(){}

if(nn4) document.captureEvents(Event.MOUSEMOVE);

document.onmousemove = stdMouseMove;

var stdMouseX = -1, stdMouseY = -1;

var MouseMoved = 0;

var hint="";

var MouseMove = empty;

var Init = empty;

function stdMouseMove(e)

{

stdMouseX = (nn4) ? (e.pageX):(event.x + document.body.scrollLeft);

stdMouseY = (nn4) ? (e.pageY):(event.y + document.body.scrollTop);

MouseMoved++;

MouseMove(e);

HintMouseMove();

}

function HintMouseMove()

{

if(hint)moveElem(hint, stdMouseX+10, stdMouseY+10);

}

function showElem(elemId) {

if (dom) document.getElementById(elemId).style.visibility = "visible";

else if (ie4) document.all[elemId].style.visibility = "visible";

else if (nn4) document.layers[elemId].visibility = "show";

}

function hideElem(elemId) {

if (dom) document.getElementById(elemId).style.visibility = "hidden";

else if (ie4) document.all[elemId].style.visibility = "hidden";

else if (nn4) document.layers[elemId].visibility = "hide";

}

function moveElem(idname,x,y)

{

if (dom)

with(eval(idname)){

style.left = x;

style.top = y;

}

else if(nn4){

document.layers[idname].left=x;

document.layers[idname].top=y;

}

}

function OverIm(id)

{

if(hint)hideElem(hint);

hint=id;

moveElem(hint, stdMouseX+10, stdMouseY+10);

showElem(hint);

}

function OutIm()

{

hideElem(hint);

hint="";

}

//-->

</script>

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

Теперь на картинку или ссылку (можно и на другое место привесить) вешаем вызов наших функций. На onmouseover запуск с id нашего div'а в параметре и onmouseout выключение показа, соответственно:

<a href="#" onmouseover="OverIm('hint1');" onmouseout="OutIm()"><img src="/xakep/a-002/img1_small.gif" width="60" height="60" border="0" alt=""></a>

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

<div id="hint1" style="position: absolute; visibility: hidden; width: 160px; top: 0px; left: 0%;">

<table cellpadding="1" cellspacing="0" border="0" width="100%" bgcolor="#999999"><tr><td width="100%">

<table cellpadding="3" cellspacing="0" border="0" width="100%" bgcolor="#ffffff"><tr bgcolor="#ffffff">

<td><img src="/xakep/a-002/help.gif" width="30" height="30" alt="" border="0"></td>

<td> </td>

<td width="100%">

<b>Аналог всплывающей подсказки</b>


Спецвыпуск Xakep, номер #028, стр. 028-114-4, TIPS OF WEB: грузим без динамы, динамим, чтобы не грузить!

TIPS OF WEB: грузим без динамы, динамим, чтобы не грузить!

Sevranty

Спецвыпуск Xakep, номер #028, стр. 028-114-4

</td></tr>

<tr bgcolor="#ffffff">

<td colspan=3>

Все, что тебе необходимо, ты можешь вывести здесь<br>

</td></tr></table></td></tr></table>

</div>

Подсказку можно оформить по-разному. Только есть ли смысл городить огород?


Спецвыпуск Xakep, номер #028, стр. 028-116-1, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-1

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

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

Тот подкатил достаточно быстро - рядом с Кантом остановился поднос, свободно парящий в воздухе, с прицепленным к нему небольшим экранчиком. Выбрав из строк, медленно проплывающих на экране, необходимое, Морган ткнул в них пальцем, поочередно выбирая; поднос коротко пикнул и отъехал в сторону.

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

Капеллану было около шестидесяти лет, седые волосы покрывали его голову; лицо с проникновенными глазами, способными открыть, будто штопор, любой замок, запирающий сердце, было сегодня напряженным, взгляд - тяжелым, речи медленными и взвешенными. До Моргана слова не долетали, по движениям губ он читать не мог, приходилось просто смотреть на происходящее и искренне завидовать тем парням, что слушали сейчас Слово Божье.

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

Кант машинально поднял глаза вверх - несмотря на то, что знал лица всех людей, сияющих вечно розовым светом в высоте, - Гордона Брасса, первого капитана «Вирджинии»; Тима Лайфуса, ее первого навигатора... И отца Джереми. Мало кто помнил его имя и фамилию, он так и вошел в экипаж «Вирджинии» - ее первый капеллан, отец Джереми, и все.

Кант почувствовал, как по коже спины пробежали мурашки от взгляда теплых, добрых, окруженных морщинками глаз отца Джереми; довольно неприятно было видеть сквозь голову священника потолок Зала, но очень скоро это ощущение прошло. Лицо обрело реальные черты, потеряло всякую голографическую проницаемость. Морган не мог оторвать от него глаз. Заныл рубец справа на шее - там, где туго и горячо пульсировала сонная артерия.


Спецвыпуск Xakep, номер #028, стр. 028-116-2, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-2

- ...Его канонизировали, дети мои! - услышал Кант голос Марча. Священник повысил тембр разговора, сделав Моргана его невольным участником. - Если бы вы знали, какой смертью погибали ваши духовные наставники - вы бы так бездумно не проводили свои дни в праздности!

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

- Он отдал за вас жизнь! Как вы можете...

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

- Прошу прощения, уважаемый... - виновато произнес Марч, показавшись из-за спины. - У нас возник спор, и мне хотелось бы...

- Короче, - с набитым ртом буркнул Кант.

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

- Возможно, к счастью, - вставил слово Морган и наколол на вилку очередной кусок мяса. - Что вам нужно? Я так и не услышал ничего вразумительного.

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

- Вы слышали когда-нибудь о Лайме Дэвидсоне? - спросил капеллан, пытаясь заглянуть в глаза Канта, разглядывающего содержимое своей тарелки. - Хоть когда-нибудь?

Морган медленно поднял на него взгляд. Капеллан не то что бы понял или увидел, нет - он почувствовал, как этот взгляд высушивает его мозг. Зрачки Канта, будто провалившиеся вглубь глазниц, сверлили Марча лучами лазера.

- Вы серьезно? - после нескольких секунд паузы произнес Морган. - О Лайме?

Кристофер Марч почувствовал себя крайне неловко. Он уже пожалел, что затеял весь этот разговор сначала с геологами, а потом с этим странным человеком, так изменившимся в лице, услышав имя «Лайм Дэвидсон». Немного отодвинувшись от стола Канта, священник утвердительно кивнул.

Морган грустно посмотрел на недоеденное мясо и отодвинул от себя тарелку, протянув руку за стаканом сока.


Спецвыпуск Xakep, номер #028, стр. 028-116-3, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-3

- Лайм... - шепнул он, но Марч его услышал. - Странно, но его очень многие любили - он был компанейским парнем.

- Так вы знали его? - спросил капеллан, но Морган не слышал его.

- ...А он был богом для корабельных детей - один из немногих людей на «Вирджинии» понимал их всех с полуслова, умел заставить их смеяться и плакать, играть и слушать, любить и ненавидеть... Матери, уходившие в Поиск, оставляли своих чад не отцам - Лайму. Они знали, что их дети будут защищены, заняты играми, вовремя накормлены и уложены спать...

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

Кант кивнул им всем, отхлебнул сок и внимательно посмотрел на капеллана, ожидая продолжения. Тот смутился и тихо произнес:

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

Поставив стакан на стол, Морган отодвинулся от стола, вытянув ноги, сложил руки на груди и ответил:

- Он никого не хотел убивать. Как никто другой, он хотел жить и давать жить другим. Он просто был болен...

- Чем? - торопливо спросил один из подошедших геологов, на вид самый молодой из них.

- Страхом, - ответил Кант и закрыл глаза. - Тем, чем больны вы все при высадке в очередную Зону Разведки; тем, чем болен я, прокладывая курс в неизвестности Вселенной; тем, чем болен уважаемый капеллан Марч, понимая всю беззащитность своих воззрений перед масштабностью космоса.

- Что вы хотите этим сказать? - положив ладони на стол, спросил Марч.

- Ничего. Я просто ответил.

- И что было потом? - услышал Кант еще один вопрос от геологов, не успев заметить, кто же его произнес.

- А вот потом было самое интересное. Когда страх переполнил его, он пошел к отцу Джереми, - сказал Морган. - Он вошел к нему с лучевым пистолетом в руке.

Кристофер Марч подался вперед.

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

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

- Мне это известно из первых рук.

- От самого Лайма? Или, может быть, это рассказал вам сам Джереми - после своей смерти? - ухмыльнулся Марч, пытаясь удержать нить разговора в своих руках. Трое геологов из пяти улыбнулись - это придало уверенности священнику.

Кант вздохнул - ему очень не нравилось направление разговора:

- Все дело в том, что Лайм вошел к Джереми не один. Он взял заложника. Ребенка.

- Ребенка?.. - недоуменно переспросил Марч.


Спецвыпуск Xakep, номер #028, стр. 028-116-4, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-4

- Мальчика шести лет. Маленького Моргана Канта.

Рубец на шее медленно наливался кровью...

* * * * *

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

Холод проникал, как казалось Лайму, сквозь этот экран внутрь корабля. Находясь в Детском Зале, учитель не так остро чувствовал ограниченность пространства мчащегося в космосе корабля - но стоило рабочему дню окончиться, стоило всем матерям забрать своих чад назад, и клаустрофобия овладевала им, захватывая рассудок целиком.

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

Хуже всего было то, что дети, ради которых он и полетел, поглощали огромное количество той жизненной силы, которая могла помочь Лайму бороться со своим недугом. Дэвидсон понимал, что так долго продолжаться не будет; когда-нибудь наступит переломный момент, рассудок учителя не справится с такой нагрузкой, какой оказался замкнутый мир звездолета в миллионах и миллиардах миль от Земли. Каждый вечер, возвращаясь в свою комнату на Семейном Ярусе (он был одинок, но жил там же, где и большинство детей, чтобы всегда быть рядом), он мечтал об одном - вернуться домой, в Вашингтон. Защелка дверного замка, отгораживая его от малолюдного коридора, пробуждала к жизни все его страхи.

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


Спецвыпуск Xakep, номер #028, стр. 028-116-5, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-5

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

И, КОНЕЧНО ЖЕ, РАЗВЯЗКА БЫЛА НЕ ЗА ГОРАМИ...

* * * * *

Капелланом отца Джереми называли в основном по привычке - «Вирджиния» в прошлом была боевым кораблем, а военный священник именно так и именовался. В армии он никогда не служил, но слово «капеллан» ему было приятно - и на слух, и по смыслу. Он служил Богу уже около тридцати лет, и достаточно удачно. Его кандидатура была выбрана из тридцати тысяч священников, подавших заявления в Подготовительную Комиссию. За плечами отца Джереми были несколько приходов в Мичигане, две поездки в Ватикан на личную аудиенцию к Папе (за заслуги по оказанию помощи детям-сиротам) и паломничество в Мекку (половину Израиля он прошел пешком, постигая путь Христа).

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


Спецвыпуск Xakep, номер #028, стр. 028-116-6, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-6

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

Очень быстро сотрудники «Эн-Сенс» убедились, что общаться со «Святым Матвеем» может только его создатель. Исходные коды и подготовительные базы отец Джереми уничтожил при изготовлении оригинала из нескольких предварительных версий - на всякий случай. Он понимал, что будут предприняты неоднократные попытки воспроизвести и даже превзойти его детище, - но допустить существование на планете двух подобных компьютеров одновременно было нельзя. Подобная кибернетическая личность должна была существовать в единственном числе - во избежание недоразумений и двойственных толкований.

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

Ему ничего не оставалось, как использовать силовые методы. Тогда он еще не понимал, насколько смешны подобные воздействия на человека, который каждый день общается с Богом. Один из посланных им киллеров застрелился; второй вернулся, не побоявшись раскрыть заказчика, вошел к Доновану в кабинет среди рабочего дня, в разгар служебного совещания, бросил на стол пакет с пластиковыми картами «Эн-Сенс-Банка» (свой гонорар за убийство), после чего вытащил из кармана Евангелие, поцеловал его, свирепо взглянул в глаза съежившегося в кресле директора и вышел, хлопнув дверью.

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


Спецвыпуск Xakep, номер #028, стр. 028-116-7, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-7

Когда комиссия по отбору команды для полета «Вирджинии» обнаружила в огромном количестве заявок анкету отца Джереми, все остальные кандидатуры отпали сами собой. А когда капитан Брасс узнал, что вместе со святым отцом летит и его детище, сам «Святой Матвей», он даже немного испугался. Он еще никогда не перевозил на борту искусственных богов...

* * * * *

- ...Мне кажется, вы несколько увлеклись описательной частью, - прервал Канта Марч. - Все это мы и так с вами знаем из дневников капитана Брасса и из логов «Святого Матвея», извлеченных после гибели отца Джереми из «черного ящика» независимыми экспертами. Хотелось бы поподробнее услышать вашу версию того, что произошло в комнате капеллана, когда туда вошел Дэвидсон, - не знаю, насколько она окажется правдоподобной.

- Вот-вот, логи... - ухмыльнулся Морган, потирая шрам на шее (это он делал машинально с самого начала разговора). - И вы туда же... А ведь до сих пор непонятно, чего больше в «Святом Матвее» - от искусственного интеллекта или от бога.

- Что вы имеете в виду? - насторожившись, спросил священник.

- Вы когда-нибудь исповедовались ему?

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

- Ну и как ощущения? Вам было что ему сказать?

- Тайна исповеди нерушима - это один из вечных законов церкви, - сказал Марч.

- Но если есть логи - значит, кто-то их читает, - ответил ему Морган. - Это тоже закон, но несколько иного мира - мира компьютеров...

* * * * *

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

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

- Он, наверное, решил записаться в десант! - выпалил в конце Баркер. - А как же мы? Он уйдет от нас? А кто будет читать мне сказки перед сном?..

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

Отмечалась интересная деталь - с пистолетом в руках клаустрофобия куда-то подевалась; причем так далеко, что Лайм на несколько секунд засомневался в своих намерениях. Казалось, что все страхи и опасения Дэвидсона беспочвенны, что их нет и просто-напросто никогда не было. Оружие внушало то, что и должно было внушать с момента своего появления на свете - уверенность и безнаказанность. Дэвидсон, забыв о своем предназначении на этом корабле, о своем педагогическом образовании, тупо смотрел на лучемет, периодически закатывая глаза к потолку. Он просто предавался физическому наслаждению от отсутствия страха - это чувство было сродни оргазму.


Спецвыпуск Xakep, номер #028, стр. 028-116-8, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-8

Захотелось чего-нибудь горячительного. Для людей, не связанных с несением вахт, это не было запретным. Лайм отложил оружие в сторону, поднялся с дивана, сделал несколько шагов к бару и едва не упал на пол - настолько сильно ударил его откат той счастливой волны отдыхающего рассудка. Болезнь вновь подчинила его себе - с новой силой, словно мстя за минуты, которые Дэвидсон провел, выпутавшись из ее сетей. Ноги вновь стали ватными, к горлу подступила волна тошноты, и Лайм, сам не осознавая свой поступок, ринулся к оставленному на столе лучемету.

Металл рукояти, оттянув нетренированную кисть, дал вздохнуть и распрямиться; расширенными от ужаса глазами Лайм оглядел комнату. Если бы его мог увидеть в эту минуту кто-нибудь посторонний, то с огромной долей вероятности можно было сказать, что больше ни одна мать не доверит Дэвидсону своего ребенка. Наступил тот миг, за которым человек перестает быть человеком - ужас проникает в него полностью, становится частью личности, его главной составляющей, доминантой. Больной рассудок - это не больной зуб; никаким скальпелем нельзя вырезать ту червоточинку, что расплавляет сознание, ежеминутно и ежесекундно подталкивая человека к пропасти.

Дэвидсон прижал лучемет к груди.

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

- Домой, на Землю... Ведь есть же Волна - значит, кто-то ее создает...

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

Увидев то, как из сверкающей пустоты по ту сторону ворот, из петель полярного сияния Антарктиды (где располагалась передающая станция) на борт «Вирджинии» шагнули семь человек, он поразился величию человеческой мысли и технического прогресса. А вечером, оставшись наедине со своим кошмаром, он представил себе свой шаг - в обратном направлении. И пусть это будет бесплодная пустыня Южного полюса, неважно - это должна была быть Земля.

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


Спецвыпуск Xakep, номер #028, стр. 028-116-9, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-9

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

Сделав несколько шагов в сторону Ворот, Лайм наткнулся на невидимую преграду - силовое поле ограждало их от любопытных натур. Тугая пелена поля остановила Дэвидсона, не пустила дальше. Он не удивился - но желание попасть домой выросло на порядок именно из-за этой недоступности. Рука, сжимавшая лучемет, поднялась на уровень груди; ноздри стали раздуваться все шире и шире, дыхание сделалось шумным, капли пота выступили на висках.

- Я пройду этими Воротами - сегодня же! - дал он себе обещание. Казалось, темнота в провале ворот засветилась зловещим фиолетовым светом, как всегда бывало при начале настройки для проведения телепортации. - Я пойду к Брассу! Я буду требовать! Я хочу домой!

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

- Это ваше? - спросил мальчик, после чего поднял глаза на своего учителя и воспитателя. И в эту секунду весь план Дэвидсона на корню видоизменился. Он ласково улыбнулся кареглазому мальчику, протянул к нему свободную руку и взял за маленькое хрупкое плечико.

- Морган, здравствуй! - приветливо сказал он. - Ты очень вовремя...

Мальчик доверчиво смотрел в глаза Дэвидсона.

* * * * *

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

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

Джереми, сидевший с книгой в кресле-качалке, подскочил как ужаленный.

- Бегу-бегу, Сент-Эм! - крикнул он в раскрытое окно своего жилища, которое по приказу главного инженера было создано в виде отдельно стоящего домика с прилегающим к нему Зимним садом (так попросил сам Джереми - чтобы при приближении к Приходу у экипажа «Вирджинии» возникало ощущение чего-то родного, знакомого, земного). Отложив книгу в сторону, отец Джереми молодецки, несмотря на свои сорок восемь лет, перепрыгнул порог своего домика и через несколько секунд оказался рядом с молодым человеком.


Спецвыпуск Xakep, номер #028, стр. 028-116-10, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-10

- Моя орхидея... - прошептал он, разглядывая огромный цветок. - Вот уже десять лет она цветет - и первый раз делает это в космосе!

Сент-Эм улыбался краешками губ, глядя со стороны на эту картину. Джереми почувствовал этот взгляд, повернулся и, наклонив голову, спросил:

- Тебе нравится?

- Конечно, учитель. Да ведь вы и сами знаете - независимо от смысла происходящего то, что нравится вам, должно нравиться и мне.

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

Сент-Эм пожал плечами, виновато улыбнулся:

- Вам не нравится, святой отец?

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

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

- Можете хлопнуть.

Джереми опустил руку - она легла на выпуклое сильное плечо, священник ощутил пальцами шелк рубашки.

- Ты многому научился, парень, - а ведь всего пара недель...Кстати, ты не помнишь, у нас сегодня есть какие-нибудь встречи?

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

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

- Странно, у меня предчувствие, что состоится какая-то незапланированная встреча... - задумчиво произнес Джереми. - Плохое предчувствие...

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

- Мальчик - Морган Кант, - шепотом подсказал Сент-Эм. - шесть с половиной лет, мать - Эмма Кант из группы связи. И маленькая деталь, учитель...

Но Джереми не стал слушать дальше - он уже шел навстречу. Сент-Эм, сожалея о недосказанном, повернулся к цветку, зная, что священник все равно услышит его:

- А ведь деталь-то важная - лучемет...

Сделав несколько пассов рукой над орхидеей, он придал ей какой-то особый, одному ему видимый шарм, после чего направился к месту встречи Джереми и Лайма Дэвидсона. Его шаги были практически неслышны; движения мягки и точны, словно у кошки. Он был воплощением виртуального идеала - «Святой Матвей», искусственный бог, детище Джереми. Его блок прогнозирования ситуации в настоящий момент определил происходящее как «потенциальную угрозу жизни отца Джереми». Но Сент-Эм не торопился в гущу событий - все-таки «потенциальная» не есть «реальная».

Тем временем Джереми вплотную приблизился к Дэвидсону и Канту. Еще за несколько десятков метров он, наконец-то, сам разглядел у Лайма в руке лучемет, но постарался не придавать этому значение с первых секунд предстоящей беседы - он готовился сконцентрироваться на внутреннем мире человека, вошедшего к нему.


Спецвыпуск Xakep, номер #028, стр. 028-116-11, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-11

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

- У меня кое-что есть для него, - раздался в левом ухе голос Сент-Эма.

Джереми подоткнул наушник поглубже, кашлянул, сам не зная, зачем, потом тихо произнес:

- Будь рядом, друг мой.

- Я всегда рядом.

- Это утешает, - кивнул сам себе Джереми и остановился. От Лайма и мальчика его отделяло около десяти шагов. Идущий к священнику должен остановиться последним - ведь это ему необходима предстоящая встреча. Под ногами Дэвидсона несколько раз хрустнули речные камушки, которыми была по заказу Джереми усеяна дорожка; он замер, держа Моргана за руку. Мальчик поднял голову и спросил - непонятно, кого именно:

- И что мы будем делать?..

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

- Спасать мою душу.

Джереми улыбнулся:

- Если вы пришли за этим, то, спешу заметить, направление было выбрано верное.

- Здесь что-то не так, - шепнул издалека Сент-Эм. Лайм заметил движение глаз, которым Джереми непроизвольно среагировал на фразу Сент-Эма, поднял перед собой лучемет, направив его на священника, и требовательно произнес:

- Вы с кем-то разговариваете. Я видел, как вы посмотрели вбок, у вас, наверное, в ухе что-то спрятано.

Джереми вытащил маленький наушник, показал его Лайму:

- Не более чем средство связи с Богом...

- Вы говорите с Богом? - внезапно спросил Морган. - С самим Богом?

- Конечно, мальчик мой, - приветливо отозвался Джереми. - Для того я и поставлен здесь - говорить с Богом и спрашивать у него совета, как спасти ваши души.

- И мою?

- Ну, твою еще рано спасать от чего-либо... - сказал Джереми. - Опустите оружие, - обратился он к напряженному Дэвидсону, слушающему их диалог с Кантом с абсолютно отрешенным лицом - казалось, Лайм просто-напросто забыл, для чего он пришел сюда. Маленький мирок, созданный Джереми и дизайнерами, заставил его провалиться в некий мир воспоминаний и сомнений; учитель понемногу начинал обретать умиротворенность и уверенность - и вдруг он услышал обращенную к нему речь Джереми. Страх и ненависть вновь обрушились на него.

- Я пришел к вам не для душещипательных бесед! - почти крикнул он в лицо Джереми, до боли сжав ладонь Моргана; мальчик непроизвольно вскрикнул и попытался вырваться. - У меня более чем конкретное требование!

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

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

- Нет! - категорично заявил Дэвидсон. - У меня есть к вам абсолютно конкретное предложение. Я знаю, что вы участвовали в приеме последней Волны сотрудников. Вы поможете мне отправиться на Землю. Немедленно. Сегодня.


Спецвыпуск Xakep, номер #028, стр. 028-116-12, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-12

- А вы? - коротко спросил Джереми. - Что с вашей стороны?

- А я... - проглотил тугой комок слюны Дэвидсон, - а я оставлю в живых вас и этого мальчишку!

Джереми грустно улыбнулся, одними углами рта; лоб избороздили морщины.

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

- Я не разговаривать сюда пришел! - крикнул Дэвидсон. Морган вновь дернулся - по-видимому, ему тяжелая рука Лайма причиняла серьезную боль. - Пошевеливайтесь, Джереми! У вас мало времени!

- А у вас? - Сент-Эм, как и всегда, подошел совсем неслышно. - Я смотрю, друзья мои, что здесь возникли какие-то разногласия? Сплошное недопонимание, конфликт...

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

- Кто бы вы ни были - отойдите, и как можно дальше! Я вас не знаю, вести с вами разговоры не собираюсь! Если у вас есть желание оказаться замешанным в эту историю - можете оставаться, будете еще одним заложником!

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

Дэвидсон приставил ствол лучемета к шее Моргана и требовательно сказал:

- Мне необходимо попасть на Землю - по одному мне известной причине. Не обсуждая ее с вами, хочу поставить еще одно условие - время. У вас есть полчаса на то, чтобы связаться с капитаном Брассом, пригласить сюда инженера Каллахена и организовать включение Сияющих ворот. Если вы не укладываетесь в указанный промежуток времени - я буду стрелять, - эти слова дались учителю с большим трудом, но он сумел произнести их почти не дрогнувшим голосом. - Сначала погибнет ребенок. Потом ваш друг. И напоследок вы.

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

- Я немедленно свяжусь с капитаном, уважаемый мистер Дэвидсон, - поспешил заверить Лайма Джереми. - Но для этого мне надо пройти в мой дом...


Спецвыпуск Xakep, номер #028, стр. 028-116-13, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-13

- Вперед, - кивнул Дэвидсон и махнул стволом.

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

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

Террорист он, кстати сказать, оказался неважный - обезоружить его можно было в любой момент. Но Джереми это даже не приходило в голову, ему в жизни вообще не доводилось пользоваться силовыми методами. Он был ошеломлен происходящим; священник просто переложил ситуацию на плечи компьютера и сейчас молил Бога о том, чтобы у «Святого Матвея» все получилось (а уж как Сент-Эм мог вести беседы с людьми - Джереми был информирован лучше кого бы то ни было).

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

Когда до входной двери осталось несколько шагов, Дэвидсон вдруг понял, что не слышит шагов человека, идущего перед ним. Сначала он отнес это на счет плохой акустики Зимнего сада, потом даже приостановился на мгновенье, чтобы не идти с ним в ногу - звука не было. Тот молодой мужчина, что шел впереди него, не издавал ни единого звука; мало того, после его ног не оставалось следов на дорожке.

- Стойте! - хрипло крикнул Дэвидсон. Джереми резко замер, явно ожидая выстрела в спину. Морган, которого в очередной раз едва не развернуло вокруг своей оси, заплакал от боли в вывернутом плече. Сент-Эм оказался единственным, кто отнесся к происшедшему крайне просто - он повернулся к Лайму и вежливо спросил:

- В чем дело, мистер Дэвидсон?

Учитель, выпучив глаза и силясь что-то сказать, смотрел на Сент-Эма, как на Кентервилльское привидение. Ствол лучемета то опускался вниз, то вновь прыгал на уровень глаз.


Спецвыпуск Xakep, номер #028, стр. 028-116-14, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-14

«Святой Матвей», видя замешательство Лайма, получил от анализатора ситуации четкий приказ. После чего сделал шаг вперед и протянул руку к Моргану:

- Отдайте мне ребенка, Лайм, - ему больно.

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

Лайм в ужасе толкнул ребенка вперед; тот, ожидая встретить на своем пути тело Сент-Эма, вытянул руки и пролетел сквозь него, упав на дорожку у ног Джереми.

Сент-Эм обернулся к священнику и развел руки, показывая, что ни он, ни его блок анализа и синтеза не предвидели, что ребенок разоблачит призрачность «Святого Матвея». И Дэвидсон выстрелил ему в спину - сам не зная, зачем.

Ярко-зеленая молния пронзила образ Сент-Эма и дотянулась до отца Джереми; на нем вспыхнула одежда, мощный удар свалил с ног. Морган Кант, подняв свою голову, увидел, как умирает священник, дергаясь в агонии.

- Что вы делаете, мистер Дэвидсон? - спросил Сент-Эм, поворачиваясь назад. Лайм, шумно дыша ртом, обошел призрак, подхватил мальчика и вбежал в дом священника. «Святой Матвей» подошел к бездыханному телу Джереми, наклонился, взглянул в его застывшие глаза, после чего медленно пошел в сторону дома. Тем временем Дэвидсон пытался там забаррикадировать дверь, пододвигая к ней большое кресло, стоявшее у иллюзорного камина, распространяющего тепло.

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

- Мистер Дэвидсон, а что там с отцом Джереми? - решился он на вопрос, когда Лайм, остановившись у двери, разглядывал комнату в раздумье - что же еще подтащить к двери. - Он мертвый?

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

- Я писать хочу, - жалобно сказал Морган. - Мистер Дэвидсон, мне надо в туалет.

- Иди к черту, - буркнул Лайм, надавливаясь что есть сил на оказавшийся чересчур тяжелым комод. - Вот уж не думал... что этот старый Джереми... живет среди такой рухляди...

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


Спецвыпуск Xakep, номер #028, стр. 028-116-15, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-15

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

- Не рекомендую заходить сюда! - крикнул он «Святому Матвею». - Я застрелю ребенка!

И он принялся переводить ствол с Сент-Эма на Моргана и обратно.

- Я не хочу входить, - слегка повысив голос, чтобы его было слышно сквозь стекло, сказал Сент-Эм. - Мне нужен только мальчик. Я ведь не думаю, уважаемый мистер Дэвидсон, что у вас хватит решимости на то, чтобы выстрелить в это беззащитное создание.

Лайм облизал пересохшие губы и погладил ствол лучемета. В углу всхлипнул Морган; по его штанишкам потекла тоненькая горячая струйка. Силы покинули ребенка; он опустился по стенке на корточки и заплакал по-настоящему, слезы лились ручьями, маленькая шейка тряслась от обиды и страха.

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

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

- Мама... Мама... - тихонько звал мальчик на помощь. - А-а-а...

Он завыл чуть погромче, увидев довольно крупные капли крови, падающие на пол откуда-то с шеи. Сент-Эм смотрел туда, откуда доносился звук плача, смотрел не отрываясь и не произнося ни звука. Перед его глазами, не видимая никому, висела надпись, которую он, едва шевеля губами, прочитал:

- В случае исключительной ситуации подключить данные из базы «Поинт-зеро». Использовать их для разрешения конфликта. Логи сохранить, дописать к базе.

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

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

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

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


Спецвыпуск Xakep, номер #028, стр. 028-116-16, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-16

Лайм попытался встать, но Сент-Эм ему не позволил.

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

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

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

- Их хотели использовать для генетического эксперимента... - с трудом разомкнув слипшиеся сухие губы, произнес Лайм. - Вы думаете, я убил их потому, что не хотел допустить распространение генетического дефекта?

Сент-Эм молчал. Наступило время говорить Дэвидсону.

- Они отправили солдат для того, чтобы доставить их на Землю из резервации. Никто толком не мог объяснить, почему их спрятали на Марсе, это уже потом я узнал, что у них, кроме синдрома Дауна, была еще одна аномалия, очень нужная военным... Вы же знаете - если что-то нужно военным, они возьмут это, даже пройдя по головам... Короче, «идеальные солдаты», и так далее... А команда, что прибыла на место, должна была пустить газ... Обыкновенное снотворное... Я не знал... Я думал... Короче, я решил, что не дам им издеваться над детьми... Откуда у вас эти сведения? - вдруг поднял он взгляд наполненных слезами глаз на Сент-Эма. Тот сделал несколько шагов в сторону, заглянул за комод, увидел там яркие бусинки смотрящих на него зрачков Моргана, ласково кивнул ему и вернулся на прежнее место.

- Откуда вы все это знаете? - повысил голос Лайм. - Это знает... Знал... Только отец Джереми...

- Тайна исповеди... - усмехнулся Сент-Эм. - А если такой, как вы, берет в руки лучемет и стреляет в ребенка - каким способом можно остановить его бесплотному созданию вроде меня?

- Нет... - прошептал Дэвидсон и нагнулся за лучеметом. - ТАК НЕЛЬЗЯ... Один на один с богом... С вами... Подло...

И он выстрелил себе в сердце.

Сент-Эм несколько секунд смотрел на то, как догорает одежда на груди Дэвидсона, после чего вновь заглянул за комод.

- Ты в порядке, Морган?

Мальчик кивнул и попытался улыбнуться.

- Это замечательно. Я очень рад - потому что тебе придется выполнить одну очень неприятную работу...

* * * * *

- ...И что было потом? - спросил не выдержавший нависшей паузы Марч.

Морган Кант в последний раз коснулся своего рубца на шее и обвел глазами маленькую аудиторию.

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

- Я хочу знать правду, - упрямо повторил Марч. - Ведь я тоже работаю с Сент-Эмом.

- И я, - произнес один из геологов. - Я недавно был в церкви... Я хочу знать.

Остальные поддержали их. Морган выждал несколько секунд, потом согласно кивнул.


Спецвыпуск Xakep, номер #028, стр. 028-116-17, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-17

- Самым трудным для меня оказалось вытащить тело Дэвидсона туда, куда показал «Святой Матвей» - я своими слабенькими ручками шестилетнего мальчика выволок тяжелого Лайма на дорожку и положил возле мертвого Джереми. Потом Сент-Эм показал мне, где священник хранил свой лучемет, положенный всем в экипаже. Я принес его и вложил в руку отцу Джереми. То оружие, из которого застрелился Дэвидсон, я бросил на дорожку рядом с ним. Все выглядело, как короткая перестрелка, в которой не осталось живых.

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

Кристофер Марч вертел в руках вилку из приборов, не использованных Морганом на ужине. Мир готов был рухнуть на глазах.

- Но ведь вы... - поднял он глаза на Канта, - вы чего-то не договариваете. Чего-то очень важного.

Морган недоуменно склонил голову набок, вглядываясь в Марча.

- Неужели это так заметно? - спросил он у капеллана. - Я понимаю, что зашел уже слишком далеко в своих откровениях, просто не знаю, что на меня нашло. Видимо, лица этих парней, никогда не видевших отца Джереми, но боготворящих его с ваших слов, натолкнули меня на СВОЮ исповедь. К сожалению, сохранить ее в тайне не удастся... - Кант ненадолго задумался. - Ну да ладно, что уж там... Когда все было кончено, Сент-Эм подошел ко мне и остановился совсем рядом - мне казалось, что я могу дотронуться до него, но одновременно я знал, что он бесплотен, и это у меня, шестилетнего ребенка, вызывало непонятную бурю эмоций. Некоторое время он молча стоял и смотрел на меня, потом что-то сделал со своей рукой и погладил меня по голове - я отчетливо почувствовал мягкое прикосновение, немного успокоившее меня.

- Ты славный мальчишка, Морган, - сказал Сент-Эм. - Я буду признателен тебе, если ты никому не расскажешь о том, что произошло. На шее будет рубец, но он быстро заживет - раны от лучемета практически стерильны. А я хочу сделать тебе маленький подарок...

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

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

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

- А мы? - спросил один из геологов дрожащим голосом. - Как быть таким, как мы, - то есть всем остальным?

Морган встал, поправил скатерть и вышел из-за стола. Капеллан тоже поднялся и вопросительно посмотрел на Канта. Тот выдержал паузу и, в свою очередь, спросил:


Спецвыпуск Xakep, номер #028, стр. 028-116-18, Тайна исповеди

Тайна исповеди

Спецвыпуск Xakep, номер #028, стр. 028-116-18

- У вас не появилось никаких мыслей после моего рассказа? А ведь все лежит на поверхности, друзья мои. Вспомните, кто сделал Сент-Эма?

- Отец Джереми, - не задумываясь над словами Моргана, ответил Марч.

- Нет, дело не в этом. Его сделал ЧЕЛОВЕК.

Морган медленно пошел к выходу, предоставляя возможность слушателям самим сделать вывод, но самый нетерпеливый из них крикнул в спину:

- Ну и что?

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

- Он не Бог. А значит, с ним можно договориться...

Хлопнула дверь - Морган ушел. Капеллан Марч нащупал на груди золотое распятие и сжал его - крепко, до боли. «Да святится имя Твое...» - прошептал он несколько слов из молитвы, потом обвел глазами геологов и устало опустился на стул...


Спецвыпуск Xakep, номер #028, стр. 028-124-1, Буки для web-разработчика

Буки для web-разработчика

Frozen (frozen@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-124-1

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

Мартин Грабер. SQL, справочное руководство. Полное описание команд от А до Я. - М.: Издательство "ЛОРИ", 2001 - 354 с.

Какой современный, развивающийся сайт обходится без баз данных? Да не найти таких, наверно. А какая самая известная БД? Скорее всего - SQL. Ведь есть как фришные издания, типа MySQL, так и платные монстры вроде мелкософтовского продукта MSSQL. Но даже если ты полностью разбираешься в структуре баз данных, то хранить в голове полный мануал по всем командам не так-то уж и просто, а если еще учесть, что у разных стандартов есть свои особенности, то можно полностью свернуть и без того загруженные инфой мозги :). Чтобы cберечь свою драгоценную голову, особо не напрягая ее всякой справочной инфой, советую обратить внимание на этот талмудик. Это не книга по СиКуЭль и даже не руководство пользователя - это просто обыкновенный справочник по командам и параметрам этих самых команд. Минимум объяснений и разглагольствований по поводу и без повода - одна сухая информация, где применять и как работает позыв к серверу. Есть и бонус - описание разных стандартов SQL (92/99), инфа о работе ядра базы и другие полезные главы ("Соответствие языка SQL другим языкам", "Коды ошибок", и др.). Ну а если говорить в целом, то это хороший справочник для тебя.

Рекомендовано: полезная бука для людей, связанных с этой БД.

Борис Леонтьев. Web-дизайн. Тонкости, хитрости и секреты. - М.: СОЛОН-Пресс, 2003 - 640 с.

Нет, ну вот опять! Долго я не встречал попсовых книг вроде этой, да и сейчас, конечно, не совсем в тему говорю про эту макулатуру. Но решил хоть как-то предостеречь тебя от ошибки в виде покупки этой, с позволения сказать, книги... Опять автор развлекается копированием чужих материалов в "свой" талмудик, хоть и помещает ссылочки на источник. И, что оказалось самое интересное, большинство (больше половины) материалов взято либо с сайта www.xakep.ru, либо из твоего, надеюсь, любимого журнала... Так что, в общем-то, и ругать копировальщика не за что, ведь не он все это писал :). Ну а со своей стороны, могу посоветовать обратиться к первоисточнику предоставленной информации и почитать все в оригинале :).

Рекомендовано: гы, в общем-то, никому...

Анна Мартинес. Секреты создания недорогого Web-сайта. - М.: Издательство ДМК-пресс, 2002 - 416 с.

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


Спецвыпуск Xakep, номер #028, стр. 028-124-2, Буки для web-разработчика

Буки для web-разработчика

Frozen (frozen@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-124-2

Рекомендовано: если твоя страничка не для узкого круга "своих" людей, советую тебе обратить внимание на эту книгу.

Чарлз Дж. Лионс. Разработка WEB-Узлов web-профессионалам. - Киев: BHV, 2001 - 304 с.

А эта книга хоть и небольшая, но зато в ней много полезностей. Автор собрался рассказать тебе про такую важную тему, как проектирование и создание своего web-узла. Что немаловажно, в книге рассматриваются разные аспекты при разработке сайта: проектирование, анализ и собственно реализация своих идей. Прочитав книжку, ты сможешь выбрать оптимальные средства для разработки, а затем создать оригинальный, запоминающийся дезигн и удобную навигацию по узлу с применением передовых технологий (XML, XHTML, XSL, etc...). Немалую часть составляют разделы, посвященные графике и языку XML. Причем все здесь разложено по полочкам последовательно, шаг за шагом. И к тому же все основные принципы, изложенные в книге, рассмотрены на конкретном примере создания сайта. Имеется также интересная глава, где рассказывается про оптимизацию странички для людей с отклонениями в физическом здоровье :).

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

Блейк Швендимен. PHP. Руководство разработчика. - Москва, СПб, Киев: Вильямс, 2002 - 688 с.

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

Рекомендовано: как пособие для разработчиков Internet-приложений.


Спецвыпуск Xakep, номер #028, стр. 028-124-3, Буки для web-разработчика

Буки для web-разработчика

Frozen (frozen@real.xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-124-3

Цеховой В. А. WEB: дизайн и коммерция. - СПб: Наука и Техника, 2000 - 192 с.

Если ты всерьез решил заняться созданием коммерческой паги, то советую посмотреть этот, как автор говорит, "конспект программиста". На самом деле полезными являются только главы, не касающиеся собственно веб-дизайна, потому что "автор книги - сертифицированный специалист Microsoft по программе FrontPage". Зато вот обратить внимание на часть, посвященную заработку, стоит, но тоже особо не увлекаясь... Вообще-то, обещая золотые горы, тебя уверяют, что после прочтения книги ты сможешь самостоятельно "выполнять, размещать и продвигать сайты в Интернете, открыть свой собственный бизнес...". Хех, ну вообще-то на таком маленьком пространстве этому не обучить, но все же есть и полезные сведения, которые пытаются донести до тебя слегка непонятным языком. А если говорить в общем и целом о книге, то посмотреть ее стоит, хотя есть и более хорошая литература по такой направленности.

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


Спецвыпуск Xakep, номер #028, стр. 028-126-1,

From: Del (bezdelnick@pisem.net)

To: spec@real.xakep.ru

Subj: rulez^_^

Хай! Про то, что вы делаете классный журнал, и так понятно, ну, я вам еще раз напомню ;).

Молодцы, че вернули в Хакер-спец анимешные иллюстрации - Grif рулит^_^. Недавно вспоминал старые номера (ну там самые, самые первые) - все-таки вы сильно изменились с тех пор. Да, во многом (очень многом!) в лучшую, но того крейзи-стиля некоторых статей уже нет =). Посерьезнели и все такое... M$ даже иногда хвалить начали (не, я ж не спорю - у нее много достойных вещей, просто как факт =). Но может ет и к лучшему.

To: Del (bezdelnick@pisem.net)

Бла-бла, бездельник! Вовремя напомнил про классный журнал, а то у меня уже было началась депрессия, что я совсем никому не нужен, даже Феде Добрянскому... Грифа мы буквально позавчера вытащили из подполья, где он рулил до этого, щеголяя проколотыми частями тела. Так что до серьезности нам еще далеко - зацени хотя бы Zайку на последней странице. А первые номера... Да, детство было солидное, побуянить успели на славу :). Ну ладно, неужели мы стали хуже? По-моему, мы просто немного другие, взрослые, серьезные, но не пафосные, и немного шизанутые :). Все. Поголовно. Особенно Гриф.

ЗЫ ZАЯЦ 4EVR!

From: TAHKuCT (tahkuct@timus.ru)

To: spec@real.xakep.ru

Subj: Эх, были времена

Привет, ребята! Я хотел бы немного пофилософствовать ;).

У меня такой вопрос: куда делась культура хака? Многие помнят свой первый комп, первый Doom, первый взлом. А сейчас что? Полный хлам какой-то, почти КАЖДЫЙ считает себя Хакером с большой буквы, но на самом деле настоящих, рульных спецов немного - раз, два... по пальцам сосчитать можно. Просто немного подумайте над этим, ведь и вы тоже являетесь частью Хакерской культуры.

З.Ы. Sorry за то, что нагружаю.

И еще. Я всегда улыбаюсь, когда вы пишите "для танкистов", потому что у меня ник такой TAHKuCT ;)).

To: TAHKuCT (tahkuct@timus.ru)

Махатма Ганди тебе, великий обитатель железной коробки с извергающей огонь палкой! Видимо, отвечать на твое письмо придется со всей серьезностью, так что принимай последний хуморной штрих в этой мессаге: объясняю для танкистов :))).

Знаешь, на самом деле времена никуда не делись. Просто появились два очень нехороших фактора - рассеивание и опопсеивание культуры. Дошло до того, что хацкером можно назваться, взломав Пентагон или мыло подружки Маши с паролем "love" :). И если имя первого хацкера не узнает никто, то второй заведет себе страничку на НАРОДе, расскажет все про переписку Маши и выложит кучу "отокующих праграм". Кстати, потом он обычно просит денег у родителей, покупает себе шестизначку в АйСиКу-шопе и задирает нос сверх меры... Так что, если ты хочешь общаться с реальным андеграундом, а не с инфантильными ушлепками - придется искать ИХ, причем искать долго. Или самому сделать что-то настолько выдающееся, чтобы ОНИ тебя заметили. К сожалению (или к счастью), пробиться через ушлепков очень сложно, но тем не менее вполне реально. Вот и все, Танкист :).

From: Максим Степанов (max85@bashnet.ru)

To: spec@real.xakep.ru


Спецвыпуск Xakep, номер #028, стр. 028-126-2,

Subj: RULEZ!!!

Привет, Спец!!!

Вот решил вам написать, потому что у меня каникулы и времени полно. Ваш журнал просто RULEZ!!! То, что вы пишете, просто супер. Я прочитал почти все ваши номера!!! После каждого прочтенного мною "спеца" в мою коллекцию взломов добавляется еще один. Ребята, вы просто супер, желаю вам, чтобы ваш журнал всегда оставался таким. SUPER!!!

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

To: Максим Степанов (max85@bashnet.ru)

Фэй-шуй, Максим Степанов! Надо сказать, что после потока хвалебных излияний, расслабивших меня до состояния аффекта и паранирваны, я как-то не понял твоего последнего замечания ака ЗЫ. С одной стороны, знать наше мыло и задавать на него вопросы по хаку - это хорошо. Но напрашивается вопрос: а куда же ты запихивал конкретно это послание? И если не на наше мыло, то как же, черт побери, я его сейчас читаю? Может быть, это письмо вовсе и не нам, а в какой-нибудь другой журнал для коллекционеров взломов? Короче, озадачил ты всех нас не по-детски... Так что задай нам пару контрольных вопросов по хаку, чтобы мы разобрались, ты это или не ты. А заодно - и мы это или не мы... Познай свою (и нашу) сущность поскорее! О-о-ом шиангал!

From: Admin (san_inoz@mail.ru)

To: spec@real.xakep.ru

Subj: Удалить без прочтения

Респект тебе, Спец. Пишу тебе из далекого Козлопердуйска :). Надоели мне стори, этими страницами я привык вытирать заднее место, т.к. ничего интересного в них нету, а занимают они до фига. Читаю журнал от корки до корки с ранних лет и по сей день :) Хвалю за то, что обходите всю ету лабуду, о чем пишут в ][. Усе типа &)

З.Ы. Мафия - руллит :)

To: Admin (san_inoz@mail.ru)

Гамарджоба, Админ-сан! Вопрос со стори - больной вопрос. Куча народу сходит с ума по Ниро, присылает нам в редакцию бандероли с отрезанным аппендиксом на его имя и просит выслать его анализ мочи наложенным платежом. Меньшая же куча не любит его и просит прекратить засорять умы молодежи. Радует только одно - равнодушных нету :). Так что убирать стори мы пока точно не будем, тем более, что и тебе она может пригодиться. Как раз в тот самый заподлянский момент в придорожных кустах, когда любая бумага становится ценной :).

ЗЫ. А GTA все равно лучше :))).

From: DiT (DiT@inbox.ru)

To: spec@real.xakep.ru

Subj: Впечатление от журнала

Привет, Спец. НАКОНЕЦ :)) решил вам написать. Хочу выразить свои мысли о журнале СпецХакер и сказать, что Spezz - RULEZZZ. Если следующие номера будут выходить про Web-дизайн и ты.ды., то это есть большой гуд. Сейчас эта тема особенно интересна. Хотя я мечтал увидеть и подержать в руках Спец по кодингу-2 и про *nixы. А то нужно просвещать молодое поколение насчет крутых ОС'ей, а то практически все мои друзья уверены, что кроме WinXP ничего более крутого не существует. ХА!!! НАИВНЫЕ!!! А кодинг хоть и есть немного замороченное занятие, но после рубрики "кодинг" в обычном Хакере все поняли, что можно писать крутые сетевые и прикольные проги.

Огромное спасибо за рубрику Креатифф. Там в каждом номере куча полезных идей для умелых рук :))). Особо хотелось отметить Niro, более угарных рассказов за последнее время не читал. Комикс нарисован круто, но общей идеи, как мне кажется, у него нет :(. А так в целом впечатление положительное. Долгих лет процветания и халявного Инета вам и вашим (т.е. нам) читателям.


Спецвыпуск Xakep, номер #028, стр. 028-126-3,

Пока.

To: DiT (DiT@inbox.ru)

Привет, ДиТ. НАФЛУДИТ :)). Не, сегодня с написанием стихотворных писем у меня какая-то лажа получается :). Как видишь, серия по вебу продолжается (зря ты назвал ее веб-дизайном, ой, зря... теперь у тебя есть личный враг с замысловатым библейским ником N... хотя тссс! Может, он и не услышал :)). Про кодинг и никсы ты почти угадал, только писать мы теперь будем сериями, так что инфы насобираем - залейся, добавь лучку и закатай за собой крышку банки :). Ведь для консервов время течет субъективно, и выход этих Спецов станет для тебя совсем близким. Спешу тебя разочаровать - кроме WinXP действительно ничего более крутого не существует (фраза проплачена MS, продажная журналистика форева!). Разве что РедХата, которую я сейчас спешно осваиваю. За креатив благодари его духовного папашу Донора, а на комикс, как ты заметил, мы забили. Теперь он у нас поменьше, зато с общей идеей. Да какой идеей!.. Так, ладно, закругляюсь, а то за мной уже из мелкософта пришли, карать за нарушение контракта. Увидимся в аду.