Вы умеете создавать Web-страницы с помощью приложений Microsoft Office или с помощью мастеров Web-страниц, но результат кажется вам недостаточно профессиональным - тогда эта книга для вас. Загляните, что скрывается по ту сторону окна обозревателя, когда в нем отображается Web-страница. Там вы увидите код, который сообщает обозревателю, когда и каким образом отобразить информацию, сохраненную в файле Web-страницы. Если код HTML с первого взгляда покажется вам странным и непонятным, не волнуйтесь. В действительности он чрезвычайно прост и создан для того, чтобы предоставить дизайнеру максимум возможностей в управлении содержимым и видом Web-страниц.
Всемирная Паутина (World Wide Web) спровоцировала революцию в информатике, предоставив любому пользователю возможность публикации HTML-документов. До недавнего времени информация в этих документах была в большинстве случаев статической, что требовало реакции сервера на действия пользователя. С введением динамического HTML парадигма Web сместилась от взаимодействия с сервером в сторону создания интерактивных Web-узлов и Web-приложений. Поскольку динамический HTML обеспечивает возможность взаимодействия HTML-документов с пользователем и полного их изменения на клиентском компьютере, вы можете создавать Web-приложения с богатыми возможностями.
Когда филолог Ларри Уолл создавал первую версию компьютерного языка Perl, он, наверное, не подозревал, что его детищу будет суждена долгая и увлекательная жизнь. Perl понравился администраторам и web-программистам и прочно занял свою нишу в арсенале разработчиков. У каждого языка есть свои плюсы и минусы - спорить по поводу того, какой язык лучше, можно до бесконечности. Эта книга посвящена самой последней версии языка, который продожает развиваться. Описываются синтаксис языка, новые возможности и идеи, рассказывается, в какую сторону пойдет развитие.
Книга будет полезна широкому кругу IT-специалистов: программистам, администраторам, менеджерам.
В данной статье рассмотрены принципы, помогающие компилятору Delphi генерировать более оптимальный с точки зрения скорости код. Если Вы не хотите вникать в подробности, в конце статьи есть «свод правил», которые рекомендуется соблюдать при написании программ.
Компилятор Delphi относится к разряду оптимизирующих. Но насколько качественно проводится оптимизация? Как «помочь» компилятору создать более быстрый код? Давайте разберемся с этим на экспериментах.
Оптимизация константных выражений
Пример 1:
С точки зрения оптимизации код можно упростить еще на этапе компиляции до
Но написанный выше листинг преобразуется в
С одной стороны компилятор не «сообразил», что значение переменной «a» можно преобразовать в константу и сложить с другой константой (которая, заметим, подставлена именно как константа) на этапе компиляции, с другой стороны был применен весьма хитрый трюк с LEA (об этом ниже). Тем не менее, код
в любом случае быстрее и короче.
Пример 2:
Скомпилированный код будет выглядеть
А ведь значение, присвоенной переменной «а» являлось константой и наш пример можно было бы переписать как:
Пример 3:
После компиляции получаем:
Т.е. компилятор преобразовал код так, как он был написан, а ведь можно было бы просто записать:
Оптимизация алгебраических выражений
Пример 4:
После компиляции эти переменные будут удалены, причем с предупреждением
Пример 5:
Код скомпилируется как есть! Таким образом мы обманули компилятор псевдо использованием переменных. Delphi не исправляет нашей «кривости», поэтому эта задача ложится исключительно на плечи программиста.
Пример 6:
Данный код можно оптимизировать до
И этого Delphi за нас не сделает.
Пример 7:
В данном примере первую строчку можно безболезненно удалить, что Delphi делать умеет.
Пример 8:
В данном случае можно избавится от одной операции умножения, присвоив значение выражения a*b временной переменной. Анализ ассемблерного листинга показывает, что компилятор именно так и поступает. Тем не менее, поменяв второе подвыражение на ((b*a)>0), компилятор принимает выражения за разные и генерирует умножение для обоих случаев, не смотря на то, что результат одинаков.
Оптимизация арифметических операций
Сложение и вычитание
Применение инструкции LEA вместо ADD позволяет производить сумму 3х операндов (двух переменных и одной константы) за один такт. Трюк заключается в том представление ближних указателей эквивалентно их фактическому значению, поэтому результат, возвращенный LEA равен сумме ее операндов. При возможности Delphi производит такую замену.
Деление
Операция деления требует гораздо больше тактов процессора, нежели умножение, поэтому замена деления на умножение может значительно ускорить работу. Существуют формулы, позволяющие выполнять такое преобразование. Тем не менее, Delphi не использует такую оптимизацию. Деление на степень двойки можно заменять сдвигом вправо на n бит, но даже в этом случае получаем следующий код:
Здесь учитывается особенность самой операции div – округление в большую сторону. Поэтому, если можно пренебрегать округлением, используйте c:=a shr 1 вместо с:=a div 2.
Умножение
Умножение на степень двойки можно заменять сдвигами битов. Delphi заменяет умножение сдвигами при умножении на 4,8,16 итд. При умножении на 2 производится суммированием переменной с собой.
Умножать на 3,5,6,7,8,10 и т. д. можно и без операции умножения – расписав выражение по формуле (a shl n)+a, где n – показатель степени двойки. Например, при умножении на 3 n=1. Delphi при возможности прибегает к этому трюку. Заметим, операнд LEA умеет умножать регистр на 2,4,8, что также при возможности используется компилятором. Например, умножение на 3 преобразуется в инструкцию
Оптимизация case of
Анализ скомпилированного кода показывает, что Delphi проводит утрамбовку дерева. Т.е. значения case сортируются и выбор нужного элемента производится при помощи двоичного поиска.
В случае, если элементы case of выстраиваются в арифметической прогрессии, компилятор формирует таблицу переходов. Т.е. создается массив указателей с индексами элементов, поэтому выбор нужно элемента выполняется за одну итерацию независимо от количества элементов.
Оптимизация циклов
Разворачивание циклов – не производится. Разворачивание циклов весьма спорный момент в оптимизации, поэтому принять грамотное решение может только человек. Delphi не производит разворачивания ни больших, ни маленьких циклов.
Слияние циклов – не производится. Если два цикла, следующие друг за другом имеют одинаковые границы итерационной переменной, разумно оба цикла объединить в один.
Вынесение инвариантного кода за пределы цикла – не выносится. Наиболее распространенный недочет – условие цикла записывается как:
Delphi будет при каждой итерации вызывать метод count, вычитать из результата 1 и потом уже сверять. Настоятельно рекомендуется переписывать подобный код как
Весь код VCL написан с нарушением этого правила. Очевидно, что проще подобного рода оптимизацию встроить в компилятор, нежели переписывать VCL :)
Замена циклов с предусловием на циклы с постусловием – производится. Циклы с постусловием имеют главное преимущество над другими видами циклов (с предусловием и с условием в середине) – они содержат всего одно ветвление. Delphi производит такую замену.
Замена инкремента на декремент – не производится. Более того, даже декрементный цикл компилируется в неоптимальный код, т.к. не используется флаг ZF. Вместо этого происходит сравнивание значения регистра с 0.
Удаление ветвлений – не производится.
Вывод:
1. Не используйте переменные для временного хранения констант или обязательно объявляйте «магические» числа как const, либо подставляйте в код непосредственные значения
2. Неиспользуемыми объявлениями и присвоениями можно безболезненно пренебрегать – Delphi умеет их вычищать.
3. Внимательно следите за использованием переменных, в частности лишним присвоениям их значений друг другу. Такого рода оптимизации Delphi делать не умеет.
4. Используйте свернутые математические выражения. (например, (3*a - a) /2 упрощается до a). Delphi не умеет упрощать математические выражения. (Да и что говорить, даже MathCAD не всегда грамотно умеет делать такие преобразования).
5. Не используйте конструкции типа a:=10*sin(45*pi/180); Delphi не вычислит эту константу на этапе компиляции, напротив, будет послушно вызывать sin и pi по ходу выполнения программы! В случае, если угол является переменной, по крайней мере pi можно заменить константой 3,1415...
6. Delphi прекрасно справляется с выражениями, полностью составленных из констант – они вычисляются на этапе компиляции.
7. Внимательно следите за условиями и их границами. Компилятор Delphi не умеет обнаруживать заведомо ложных условий. Также он не умеет удалять заведомо лишние условия. Например, (a>0) and (a<15616) and (a<>0)
8. Если в условии несколько раз проверяется одно и тоже выражение, следите, чтобы оно было выражено во всех конструкциях одинаково. В противном случае скомпилированный код будет не оптимален. Например, if ((a*b)>0) and ((a*b)<1024) then... При перестановке во втором случае b*a смысл выражения не изменится, но код будет иметь уже на одну операцию умножения, а две. Можно временно присвоить проверяемое выражение временной переменной, а затем уже проверять полученное значение.
9. Сообщение «Combining signed and unsigned types – widened both operands» сообщает не только о потенциальной ошибке – также вследствие преобразования мы теряем производительность. Например, z – объявлена как ineteger. условие if z>$abcd6123 then z:= $abcd6123; несмотря на его правильность вызовет данное предупреждение. Сгенерированный код будет, выполнять преобразования величин до 64-х бит, и дальнейшее уже сравнение 64-х битных операндов. Если изменить тип z на cardinal, мы избавимся от предупреждения и получим 3 строки кода, вместо 8 !
10. Delphi умеет оптимизировать сложение, умножение и частично деление. При делении на степень двойки, если не важно округление до большего, рекомендуется пользоваться shr 1 вместо div 2.
11. В case of при возможности используйте элементы, расположенные в арифметической прогрессии. Тем не менее, даже при невыполнении данного условия мы получим качественный код после утрамбовки дерева.
12. Выносите инвариантный код за тело цикла. Наиболее частая ошибка – for i:=1 to length(str) do... Дело в том, что при каждой итерации будет вызываться функция length, что пагубно скажется на производительности. Рекомендуется длину строки заранее присвоить переменной. Также не включайте в тело цикла код, заведомо не зависящий от изменения итерационной переменной.
Сравнивая Delphi с компиляторами Visual C++, WATCOM, Borland C++ (тестирование данных компиляторов приведено в [1]) приходим к выводу, что Delphi по своим оптимизирующим свойствам аналогичен Borland C++ (а кто сомневался? ;) ). Учитывая, что Borland C++ по итогам сравнения оказался последним, делаем несложный вывод. Весьма печален и тот факт, что большинство кода VCL написано с точки зрения «красоты» кода, а не его оптимальности с точки зрения скорости. Например, не соблюдается правило 12.
Не всегда хорошая программа стоит много денег. Не которые бесплатные программы, например, такие как VirtualDub или 7-Zip стали более популярными, чем их платные аналоги. Создание таких программ начинается с простого энтузиазма людей, которые хотят сделать вещь полезную всем. А результат работы целой команды людей всегда оказывается успешным.
3D-редактор Blender 2.45
Не всегда хорошая программа стоит много денег. Не которые бесплатные программы, например, такие как VirtualDub или 7-Zip стали более популярными, чем их платные аналоги. Создание таких программ начинается с простого энтузиазма людей, которые хотят сделать вещь полезную всем. А результат работы целой команды людей всегда оказывается успешным.
Так случилось и с программой трехмерной графики Blender. Это ещё один пример коллективной работы многих людей. И сейчас Blender является полноценным бесплатным 3D-редактором.
Внешний вид всех программ для работы с трехмерной графикой очень похож. По этому производители коммерческих пакетов для работы с 3D выпускают специальные брошюры, где подробно разъясняются отличия в «горячих клавишах» и инструментах управления сценой между их программой и приложением, с которого они хотят переманить пользователя.
Программисты, сделавшие Blender, не ставят перед собой цель заработать деньги, и им не нужно подстраиваться под тех, кто раньше работал в другом 3D-редакторе. Поэтому, открывая для себя Blender, работе с трехмерной графикой приходится учиться заново.
Необычный внешний вид Blender говорит о том, что разработчики создавали свой проект «с нуля», не привязываясь к внешнему виду прочих программ для работы с трехмерной графикой. В какой-то мере это было правильное решение, ведь только так можно было создать удобный и в то же время принципиально новый интерфейс. Казалось бы, что можно придумать удобнее нескольких окон проекций и панели с настройками объектов?
Удобнее может быть только возможность гибкой настройки интерфейса под нужды каждого пользователя. В Blender реализована технология, благодаря которой внешний вид программы изменяется до неузнаваемости. Изюминка интерфейса Blender состоит в том, что в процессе работы над трехмерной сценой можно «разбивать» окно программы на части. Каждая часть – независимое окно, в котором отображается определенный вид на трехмерную сцену, настройки объекта, линейка временной шкалы timeline или любой другой режим работы программы.
Таких частей может быть неограниченно много – все зависит от разрешения экрана. Но сколько бы окошек ни было создано, они никогда не пересекутся между собой. Размер одного зависит от размера остальных, то есть если пользователь увеличивает размер одной части, размер соседних уменьшается, но никаких "накладываний" окон друг на друга не происходит. Это невероятно удобно, и тут создателям коммерческих приложений стоило бы посмотреть в сторону Blender, чтобы взять новшество на заметку.
Еще одна сильная сторона программы – хорошая поддержка «горячих клавиш», при помощи которых можно выполнять практически любые операции. Сочетаний довольно много, и запомнить все сразу тяжело, однако их знание значительно ускоряет и упрощает работу в Blender.
Таким образом, сложным интерфейс программы кажется только с непривычки. На самом же деле, инструменты Blender расположены очень удобно. Для того чтобы это понять, нужно поработать в программе какое-то время, привыкнуть к ней.
Для создания трехмерных моделей используются полигональные и NURBS-поверхности. Имеются в Blender и инструменты сплайнового моделирования. Создание 3D-объектов производится также с использованием кривых Безье иB-сплайнов.
Инструментарий Blender столь универсален, что позволяет воссоздавать даже очень сложные органические формы. Для этой цели можно использовать метаболы и технологию «трехмерной лепки» с помощью виртуальных кистей. Редактирование формы трехмерной модели с помощью кистей производится примерно так же, как это делается в Maya. Вносить изменения в геометрию можно в режиме симметрии, что особенно важно при моделировании персонажей.
В программе можно создавать обычную анимацию, а также работать над персонажной оснасткой, строить скелет и выполнять привязку костей к внешней оболочке. Трехмерный редактор работает с прямой и инверсной кинематикой.
В программе предусмотрена и возможность работы с частицами. Система частиц может быть привязана к любому трехмерному объекту. Поток частиц управляется с помощью направляющих кривых, эффектов ветра и завихрений. Кроме этого, влияние на частицы может определяться как окрашивание, в зависимости от силы воздействия на них. Есть вариант проверить, как частицы будут отражаться от движущейся трехмерной поверхности, или заставить их подчиняться законам гравитации. С помощью статической системы частиц можно даже моделировать волосы.
Blender включает в себя симулятор флюидов, благодаря которому в программе можно моделировать «текучие» эффекты жидкостей. Нужно отметить, что эта разновидность эффектов присутствует далеко не во всех 3D-редакторах, например, в 3ds Max нет инструментов для моделирования текучих флюидов.
Создать реалистичную анимацию особенно сложно, если необходимо имитировать физически точное поведение тел. В Blender есть инструменты для просчета поведения тел в определенных условиях. В режиме реального времени можно просчитать деформацию мягких тел, а затем «запечь» ее для экономии ресурсов и оптимизации визуализации анимации. Физически точное поведение может быть определено также и для упругих тел, с последующим «запеканием» измененных параметров в анимационные кривые.
Что касается визуализации, то и тут возможности Blender на высоте. Можно рассчитывать на поддержку рендеринга по слоям, на получение эффектов смазанного движения и глубины резкости (depth of field). Также поддерживается "мультяшный" рендеринг и имитация глобального освещения (ambient occlusion). Вместе с программой удобно использовать бесплатный движок визуализации YafRay, который может похвастаться работой с HDRI, возможностями просчета каустики и глобального освещения. Есть и другие подключаемые визуализаторы, например, Indigo.
В Blender-сообществе – был выпущен первый 3D-мультфильм, полностью созданный при помощи этой программы. Короткометражный фильм Elephants Dream создавался в течение полугода командой из шести аниматоров и других специалистов, которые постоянно работали в офисе компании Montevideo, поддерживающей проект. Приложить свою руку к созданию мультфильма могли все желающие, помогая основной команде разработчиков удаленно, через интернет.
Целью проекта было показать, что Blender является полноценным 3D-редактором, который с успехом может использоваться не только студентами и школьниками в целях обучения, но и профессионалами, работающими в команде над производством сложных проектов.
Одной из особенностей проекта Elephants Dream стало то, что в интернете был выложен для свободной загрузки не только сам фильм, но и все исходные материалы, которые использовались при его создании: сцены, текстуры и т.д.
После успеха Elephants Dream CG-энтузиасты, работающие в Blender, создали ещё один анимационный проект - фильм Peach. В нем аниматоры обращают внимание общественности на другие сильные стороны Blender, которые не удалось показать в первом фильме. В частности, это касается средств для работы с мехом и шерстью. И Peach стал "забавным и пушистым".
Blender – это отличный инструмент для трехмерного моделирования и анимации. Вне всякого сомнения, у этой программы есть будущее, она постоянно совершенствуется и обрастает новыми возможностями.
Откроем замечательную векторную программу Adobe Illustrator и попробуем нарисовать кусочек сыра (если вы не знаете, что такое векторный и подобные вещи, то читайте статью «Первые шаги - компьютерная графика и графические редакторы»).
Изучаем векторную графику (Adobe Illustrator).
Откроем замечательную векторную программу Adobe Illustrator и попробуем нарисовать кусочек сыра (если вы не знаете, что такое векторный и подобные вещи, то читайте статью «Первые шаги - компьютерная графика и графические редакторы»).
Для начала нужно создать новый документ (лист бумаги, на котором будем рисовать). В меню выбираем File - New...
Выбираем нужные размеры документа, и наживаем OK, чтобы его создать (в данном случае, взяты значения, те, что предложил Иллюстратор по умолчанию).
Так как рисуем сыр с нуля и еще не умеем, то воспользуемся сыром образцом (будем срисовывать).
Чтобы поместить не векторное изображение на лист, выбираем в меню: File - Place... - выбираем рисунок, который надо разместить на листе.
Прежде чем начать работать с сыром, его надо увеличить. Чтобы сделать саму картинку с сыром больше, надо кликнуть по ней левой кнопкой мыши - таким образом, выделится объект и вокруг него появится рамочка. Потянем за уголок - и таким образом можно изменить размер картинки. Чтобы при этом картинка не деформировалась и сохраняла пропорции, то придерживаем, когда тянем за уголок, клавишу Shift на клавиатуре.
Чтобы изменить видимый размер картинки (приблизить - отдалить) - выберем инструмент лупа (zoom tool) на основной панели инструментов. Этот инструмент, наводим на картинку, кликаем левой кнопкой мыши - изображение приблизится. Если наоборот, отдалить, то кликаем мышью по изображению, придерживая кнопку Alt на клавиатуре. Чтобы снова работать с изображением (т.е. выйти из режима лупы), надо выбрать другой инструмент на панели инструментов (например, следующий инструмент, с которым вы будете работать).
Итак, видимый размер куска сыра увеличен, чтобы было удобнее его обрисовывать, теперь фиксируем картинку с сыром на листе, чтобы, когда с ней начнем работать, она никуда не сдвинулась нечаянно. Для этого выбираем на панели инструментов черную стрелку (selecтion tool), после чего кликаем по рисунку, чтобы его выделить (всегда, объект, с которым работаем, должен быть выделен), затем в меню выбираем Object - Lock - Selecтion.
На панели инструментов выбираем инструмент перо (pen tool), с помощью него обрисовываем сыр. Но прежде чем, обрисовать сыр, надо убрать заливку объекта. Квадраты - белый и черный - внизу панели инструментов, указывают, какой цвет будет у объекта, который рисуем - он будет белым, и вокруг него будет черная граница.
Чтобы изменить цвет границы или цвет объекта - кликаем два раза по нужному квадрату (если нужно изменить границу - то по черному, в данном случае, если цвет объекта - по белому), и появится окошко, где можно выбрать другой, нужный цвет. Но в этом случае, другой цвет не нужен, надо, чтобы объект не был закрашен, и было видно только границу (контур объекта) - так будет удобнее срисовывать. Поэтому одним кликом мыши выбираем белый квадрат, и под ним выбираем иконку с квадратом, перечеркнутым красной полосой - таким образом, говорим иллюстратору - отмени заливку объекта белым цветом, и он это сделает.
Теперь начнем обрисовывать сыр, сначала светлую верхнюю плоскость, а затем нижнюю. Кликнем, допустим, в одном из уголков сыра, затем, повторяя контур сыра, кликаем дальше. Чтобы все линии (отрезки, которые появятся при этом), были прямыми, то когда надо кликнуть мышью, чтобы создать очередную точку, не отпуская левую клавишу мыши, тогда удерживая ее и двигая мышью, можно выгнуть отрезок, как угодно, и таким образом более точно обвести сыр.
Если был сделан отрезок кривым (выгнутым), то прежде чем продолжать обрисовывать объект, надо кликнуть левой кнопкой мыши по последней точке, которую поставили, и только затем создавать новую точку и отрезок. Если этого не сделаете, то следующий отрезок выгнется подобно предыдущему.
Если не верно поставлена точка, если отрезок как-то не так выгнут, то чтобы отменить действие, нажимаем на клавиатуре Ctrl+Z. Если отменили предыдущее действие ошибочно, то нажмите Ctrl+Shift+Z, чтобы вернуть все обратно.
Чтобы завершить обрисовывать верхнюю часть сыра надо обязательно закончить в той точке, с которой начали, чтобы получить цельный объект (т.е. замкнуть наш контур).
Аналогично первому создаем второй контур (объект).
Чтобы нагляднее было видно, что на картинке два контура: второй, недорисованный контур, немного сдвинут в сторону. При этом создание объекта не было прервано. Что делать, если надо довести контур объекта, после того как прервались? Чтобы продолжить работу, надо ткнуть кнопкой мышки в точку объекта, на которой прервались и можно дорисовывать объект дальше (естественно, при этом на панели инструментов должно быть выбрано перо, если надо дорисовать объект; если же надо подвигать объект, то переключаемся на selecтion tool - черная стрелка, только не забыть переключаться на нужные инструменты, прежде чем выполнять какие-то действия над объектом).
Когда нарисованы нужные объекты, следует их закрасить. Как это делается, объяснялось ранее: выделяем объект, и внизу панели через квадраты оперируем цветом. Есть и другие пути: можно вызвать цветовую палитру, чтобы она всегда на экране: Window - Color (опять же выделяем объект, прежде, чем дать ему цвет). Также можно, выделив объект, выбрать инструмент пипетка (eyedroррer tool) на панели инструментов, и ткнуть пипеткой по другому объекту на листе (например, по картинке с сыром, чтобы дать новому объекту такой же цвет, как цвет куска сыра, с которого срисовываем).
На данном примере три куска сыра: один - с какого срисовываем, второй - кусок сыра, которому дали такие же цвета, как сыру на картинке, но т.к. цвета не сырные, заплесневелые, то были подобранны другие цвета, которые можно видеть на третьем куске сыра. Если еще трудно сделать последнее самим, то сохраните картинку с примером на компьютере, поместите ее на лист бумаги в иллюстраторе и при помощи пипетки, дайте вашему куску сыра такие же яркие и приятные цвета, как у третьего куска сыра на картинке с примерами.
Как перемещать и копировать нарисованные объекты? Перемещать объекты надо следующим образом: выделить объект, предварительно выбрав инструмент selecтion tool (черная стрелка) на панели инструментов, а затем при помощи мышки перетащить выбранный объект. Если надо переместить сразу несколько объектов: опять же выбираем selecтion tool, и далее либо удерживая левую кнопку мыши выделяем все объекты, либо кликаем на нужные нам объекты поочередно, удерживая клавишу Shift на клавиатуре. После того как были выделены все нужные объекты, их можно перемещать, куда угодно. Также, выделив объекты, можно скопировать их Edit - Copy. Чтобы вставить скопированные объекты на лист - Edit - Paste. Чтобы удалить, выделенные объекты - Edit - Clear.
После придания куску, который рисуем, нужные цвета, рисуем на нем сырные дырки, чтобы придать ему еще большую схожесть с сыром. Дырки не будем срисовывать с фотографии куска сыра, а нарисуем сами. Дырка - это круг. Круги рисуют при помощи инструмента elliрse tool. Чтобы найти этот инструмент на панели инструментов надо кликнуть мышкой по инструменту квадрат (rectangle tool), удерживая мышку, выпадет меню, в котором надо выбрать elliрse tool. Далее кликаем на нашем листе в любом месте и рисуем круг.
Нарисовав круг, даем ему цвет более насыщенный и темный, чем боковая сторона сыра (т.к. дырка для этой стороны, а дырка она визуально более темная по цвету, чем сама сторона). Если переместить, нарисованный круг, на кусок сыра, то станет понятно, что он еще не смотрится дыркой, не хватает "глубины", так что надо приблизить круг (дырку) ближе к реальности, добавив ей бликов и теней.
Итак, скопируем круг, и вставим скопированное на лист (как это делается, рассказывалось ранее). Затем совместим круги так, как показано на рисунке (в итоге должно быть три круга - один исходный, и два которые, скопировав исходный круг, вставили на лист, а затем совместили между собой новые круги, как показано на рисунке):
Теперь порежем эти круги при помощи Pathfinder. Вызываем его через меню: Window - Pathfinder. Далее оба круга выделяем, и нажимаем в окошке Pathfinder инструмент Divide. Если сейчас попытаться подвигать круги, то обнаружите, что они слиплись в один объект. На самом деле, Divider порезал наши круги на много маленьких объектов, но для удобства, он их потом сгруппировал (вдруг захочется их передвинуть сразу куда-нибудь). Поэтому надо рассгруппировать все объекты. Выделяем нашу группу объектов, выбираем в меню - Object - Ungroup.
Если теперь попробовать мышкой подвигать круги, то видим, что их все-таки разрезали, и получили в итоге три очень интересных объекта: два полумесяца и объект похожий на дыню. Круги и резали, т.к. нужны были полумесяцы. Скопируем один из полумесяцев, вставим на лист, дадим ему цвет чуть бледнее, чем цвет круга, и переместим на круг, как показано на нашем рисунке (см. чуть выше).
Затем еще раз копируем полумесяц и вставляем его на лист, делаем его еще светлее, и переносим на наш круг, как показано на рисунке:
Теперь нужен другой полумесяц, зеркальный тем, что копировали до этого. Берем полумесяц, копируем, даем ему самый темный цвет по сравнению с другими объектами, перемещаем на круг так, как показано на рисунке:
Вот и все, сырная дырка готова, теперь надо переместим ее на сыр. Для этого надо сгруппировать все объекты, имеющие отношение к сырной дырке, чтобы потом было легче их копировать и перемещать при необходимости. Чтобы сгруппировать объекты, их нужно выделить, а затем группируем их, выбрав в меню Object - Group (если надо будет снова разбить объекты, отклеить друг от друга, то выделяем сгруппированные объекты, и при помощи уже знакомого Object - Ungroup).
Итак, переместили дырку на сыр, теперь скопируем ее, и вставим еще несколько новых дырок на боковую сторону сыра. Сделаем их размеры разными (как, уменьшать-увеличивать размер объекта говорили в начале статьи). В итоге, должны получить, вот такой сыр:
Чтобы сыр был похож на настоящий, добавим еще одну полудырку, а так же теней и рефлексов на края.
Для этого берем готовую дырку, копируем, вставляем на лист (отдельно от сыра), и затем при помощи Pathfinder и Divider ее ополовиниваем. Также копируем два полумесяца, которые потом, вставим на край сыра. Получаются две следующие картинки:
Теперь и половинку дырки, и два полумесяца немного развернем при помощи инструмента rotate tool. Края сыра идут немного под наклоном, и чтобы совместить дырки с краями куска сыра, их надо привести в соответствие. Теперь наложим их на кусок сыра, если надо еще чуть-чуть поразворачиваем, и в итоге должны получить следующее:
Итак, кусок сыра почти нарисовали, теперь надо нарисовать дырки для верхней плоскости (копируем уже имеющиеся дырки, и немного изменяем им цвет на посветлее, затем немного их трансформируем до овалов, и разворачиваем при помощи rotate tool):
Теперь еще для красоты можно нарисовать при помощи пера парочку рефлексов и теней, и сыр готов:
Можете идти ловить мышей. Хотя... умея рисовать картинки в Иллюстраторе, вам будет не до мышей.
Позволю себе предоставить на конструктивный суд общественности список хорошо зарекомендовавших себя архитектурных решений и практик. Сегодня поговорим о базах данных MySQL.
Повелитель CHAR
Если есть возможность, используем поле CHAR для текстовых полей. И искать будет быстрее, и защита от дурака будет. Так, например, для MD5-хэша пароля это CHAR(32), для тикера валюты (USD, EUR) – CHAR(3). Есть ещё масса примеров: если ваше приложение работает с данными по аэропортам, то кандидатом на тип CHAR будет ICAO-код аэропорта (4 символа) или IATA-код (3 символа), если с банками, то код BIC.
Приручаем TIMESTAMP
Часто требуется хранить дату создания и/или модификации сущности (поля stamp_created и stamp_updated). Не все пользуются фреймворками типа Symfony, где система сама отвечает за их наполнение — и так как порой их актуальность обеспечивается вручную, были случаи, когда эти поля оставались просто пустыми — некогда было возиться. Можно объявить поле так, что этот функционал будет работать сам. Правда, в случае MySQL придётся выбирать: автоматически будет работать либо дата создания, либо дата модификации. Для этого нужно создать поле типа TIMESTAMP; в первом случае (created) указываем инициализацию текущим временем, во втором (updated) — указываем авто-обновление поля при каждой модификации текущей записи. Оба варианта умеет делать PHPMyAdmin.
Каскады FOREIGN KEY
Конечно, это касается не только MySQL. Удаление данных в иерархии сущностей можно автоматизировать с помощью каскадного удаления FOREIGN KEY (да, это банально, но часто на это кладут). Например, у меня в Rival Alert есть пользователи, у пользователей есть графики, у графиков есть данные. Без FOREIGN KEY функция удаления пользователя должна сначала удалить все данные по графикам этого пользователя, потом все его графики, и только потом — самого юзера. При использовании FOREIGN KEY вся соответствующая информация удалится сама, причем логикой на стороне сервера БД, и без дополнительных запросов от сервера приложений.
Кстати, FOREIGN KEY поддерживаются только в InnoDB-движке. Перейдя на него, вы получите возможность использовать транзакции, но потеряете полно-текстовый поиск (он в MyISAM).
Есть ещё идейка, которую держу про запас. В той же “Building Scalable Web Sites” пишут, что для ускорения работы приложения базу данных можно немножко де-нормализовать, например, рейтинги статей считать не налету на каждый запрос, а держать в отдельном поле таблицы статей уже в посчитанном виде и время от времени обновлять, ну или скажем вам нужно дублировать название/ссылку статьи в каждой записи рейтинга. Так вот идейка состоит в том, чтобы использовать CASCADE UPDATE для обновления полей в зависимой таблице — тогда целостность данных при такой денормализации будет выше.
INSERT + UPDATE в одном запросе
Частый кейс: если нет такого записи — вставить (INSERT), если есть — обновить для неё пару полей (UPDATE). Часто это решается через предварительный SELECT, чтобы установить факт наличия такой записи. Можно сделать это одним запросом, лишь бы был PRIMARY KEY или UNIQUE KEY.
Приведу пример. В том же Rival Alert у меня у одного графика за один день может быть только одно значение (такое вот условие). Сколько раз в базу будет класться это значение — не важно. Так вот, если значения “за сегодня” нет — мы его добавляем, если есть — обновляем (в поле `date` хранится текущая дата; пара `id_graph`+`date` — уникальна для каждой записи, что было указано через UNIQUE при создании таблицы).
Кстати, чтобы запрос стал красивее, и вам не нужно было два раза указывать значение вставки/обновления (в моём примере — это 4444), можно в разделе UPDATE указать, что нужно взять значение из раздела INSERT:
Оба запроса делают то же самое, только теперь вам нужно будет лишь в одном месте подставлять фактическое значение, а не в нескольких.
И последнее. Если вам нужно работать по сути с одними и теми же данными, но из разных баз данных, посмотрите в сторону Federated Storage Engine. Полезно иметь такую фичу на примете.
Надеюсь, эта заметка поможет вам кода писать меньше, а успевать больше.
Жесткие диски (винчестеры), как электромеханические устройства, являются одним из самых ненадежных компонентов современного компьютера. Несмотря на то, что в большинстве случаев срок службы последних соизмерим, и даже превосходит время их эксплуатации до момента морального устаревания и замены более новыми моделями, все же отдельные экземпляры выходят из строя в течение первых месяцев эксплуатации. Выход жесткого диска из строя - самое худшее, что может случиться с вашим компьютером, так как при этом часто необратимо теряются накопленные на нем данные. Если резервная копия по какой-то причине отсутствует, то суммарный ущерб от поломки заметно превышает номинальную стоимость современных винчестеров.
Многие фирмы, пользуясь ситуацией, предлагают свои услуги по восстановлению информации с вышедшего из строя накопителя. Очевидно, это обходится недешево и целесообразно только тогда, когда на диске находилось что-то действительно ценное. В противном случае легче просто смириться с потерей.
Ремонт жестких дисков требует специального оборудования и практически невозможен в домашних условиях. Так, например, для вскрытия контейнера необходима особо чистая от пыли комната. Казалось бы, положение безнадежно и нечего даже помышлять о восстановлении поломанного диска в домашних условиях. Но, к счастью, не все поломки настолько серьезны, и во многих случаях можно обойтись для ремонта подручными (а иногда чисто программными) средствами.
Один из самых частых отказов винчестеров фирмы western digital (а также и некоторых других) выглядит следующим образом: жесткий диск не опознается bios, а головки при этом отчетливо стучат. Скорее всего, по какой-то причине не работает блок термокалибровки, и устройство не может обеспечить нужный зазор между головкой и рабочей поверхностью "блина". Обычно это происходит при отклонении от нормального температурного режима эксплуатации, например, в зимнее время, когда жесткие диски в плохо отапливаемых помещениях "выстывают" за ночь (при температуре 18...210С жесткий диск часто может исправно функционировать и с испорченным механизмом термокалибровки). Попробуйте дать поработать винчестеру в течение нескольких часов, чтобы он прогрелся, при этом рано или поздно винчестер попадает в необходимый диапазон температур и работоспособность (возможно, временно) восстанавливается. Разумеется, первым делом нужно скопировать всю информацию, поскольку работоспособность такого диска уже не гарантируется. То же можно рекомендовать и в отношении устаревших моделей без термокалибровки; часто они оказываются зависимыми от температурного режима, и с ростом износа винчестера эта зависимость проявляется все сильнее.
Вторым по распространенности отказом является выход из строя модуля диагностики при полной исправности остальных компонентов. Как это ни покажется парадоксальным, но полностью рабочий винчестер не проходит диагностику. При этом в регистре ошибок (порт ox1f1 для первого жесткого диска) могут содержаться значения, приведенные ниже:
Диагностические ошибки
Бит Содержимое Источник ошибки
7 0 Ошибка master диска
1 Ошибка slave диска
2-0 011 Ошибка секторного буфера
100 Ошибка контрогльной суммы, не устранимая избыточным кодированием
101 Ошибка микроконтроллера
Разные biosы могут различно реагировать на такую ситуацию, но все варианты сводятся к одному - жесткий диск не определяется и не "чувствуется". Однако на уровне портов ввода/вывода устройство функционирует отлично. Заметим, что существуют такие материнские платы (особенно среди новых моделей), которые, обнаружив ошибку микроконтроллера винчестера, просто отключают питание жесткого диска. Несложно написать для испорченного таким образом винчестера драйвер, который обеспечит работу с диском через высокоуровневый интерфейс int 0x13. Например, следующая процедура обеспечивает посекторное чтение и запись через порты ввода/вывода для первого жесткого диска в chs режиме.
lba mode для упрощения понимания не поддерживается. Необходимую техническую информацию обычно можно найти на сайте производителя вашего жесткого диска.
Этот фрагмент может служить вполне работоспособным ядром для драйвера 16-ти разрядного режима. Для упрощения понимания не включена задержка после каждого обращения к порту. В зависимости от соотношений скорости вашего процессора и контроллера диска эта задержка может и не потребоваться (в противном случае рекомендуется читать регистр статуса ox1f7, дожидаясь готовности контроллера). При этом не следует спешить с заменой такого жесткого диска на новый, с подобной неисправностью можно успешно работать не год и не два. Последнее, правда, лишь при условии, что все используемое программное обеспечение не будет конфликтовать с нестандартным драйвером. Писать драйвер, скорее всего, придется вам самому, поскольку не известно ни одной коммерческой разработки в этом направлении, а все любительские разработки выполнены в основном "под себя". Так, например, драйвер от kpnc hddfix3a поддерживает только винчестеры primary master до пятисот мегабайт и не работает в среде windows 95 (разработан на год раньше ее появления).
Более легкий, но не всегда осуществимый путь - запретить тестирование жестких дисков biosом или, по крайней мере, игнорировать результаты такового. Как это осуществить, можно прочесть в руководстве на материнскую плату (или обратиться за помощью к службе технической поддержки фирмы-производителя, поскольку в руководствах пользователя такие тонкости нередко опускают). Например, попробуйте установить "halt on" в "never" или перезаписать flach bios, модифицировав его так, чтобы тот не выполнял подобную проверку. Если Вам повезет, жесткий диск заработает! Однако иногда все же происходят и аппаратные отказы. Например, у винчестеров фирм samsung и conner отмечены случаи отказа модуля трансляции мультисекторного чтения/записи. Если это не будет обнаружено внутренним тестом устройства, то такой жесткий диск вызовет зависание операционной системы на стадии ее загрузки. Для предотвращения этого достаточно добавить в config.sys ключ multi-track=off и отключить аналогичные опции в blose. При этом, проиграв в скорости, все же можно заставить жесткий диск сносно работать. Понятно, что эксплуатировать восстановленный таким образом диск длительное время нерационально по причине потери быстродействия. Лучше приобрести новый, на который и скопировать всю информацию. С другой стороны, такой жесткий диск все же остается полностью рабочим и успешно может служить, например, в качестве резервного.
На том же connere эпизодически выходит из строя блок управления позиционированием головок, так что последние уже не могут удержаться на дорожке и при обращении к следующему сектору немного "уползают". При этом считывание на выходе дает ошибочную информацию, а запись необратимо затирает соседние сектора. Бороться с этим можно позиционированием головки перед каждой операцией записи/чтения, обрабатывая за один проход не более сектора. Понятно, что для этого необходимо вновь садиться за написание собственного драйвера. К счастью, он достаточно простой (можно использовать аппаратное прерывание от жесткого диска int 0x76 irq14, вставив в тело обработчика команду сброса контроллера. В данном случае подразумевается, что контроллер используемого жесткого диска проводит рекалибровку головки во время операции сброса. Некоторые модели этого не делают. В этом случае придется прибегнуть к операции позиционирования головки (функция ОхС дискового сервиса 0x13). Первые модели от вторых можно отличить временем, требуемым на сброс контроллера. Понятно, что электроника "сбрасывается" мгновенно, а позиционирование головки требует хоть и не большого, но все же заметного времени. Современные модели с поддержкой кэширования этого часто не делают или "откладывают" операции с головкой до первого к ней обращения. Разумеется, в этом случае кэширование придется выключить. Большинство bios позволяет это делать без труда, и нет нужды программировать контроллер самостоятельно. В другом случае вышедший из строя блок позиционирования (трансляции) подводит головки вовсе не к тому сектору, который запрашивался. Например, головки могли физически сместиться с оси, "уползая" в сторону. Разумеется, этот дефект можно скорректировать программно, достаточно проанализировать ситуацию и логику искажения трансляции. Многие модели позиционируют головку, используя разметку диска, что страхует от подобных поломок (к сожалению, сейчас от такого подхода большинство фирм отказались, выигрывая в скорости).
Конечно, все описанные программные подходы в действительности не устраняют неисправность, а только позволяют скопировать с казалось бы уже нерабочего винчестера ценные и еще не сохраненные данные. При этом ни к чему писать универсальный драйвер для win32 и защищенного режима. Вполне можно ограничиться dos-режимом. Для копирования файлов последнего должно оказаться вполне достаточно, конечно за исключением тех случаев, когда диск был отформатирован под ntsf или другую, не поддерживаемую ms-dos, систему. К счастью, для многих из них есть драйверы, которые позволяют "видеть" подобные разделы даже из "голой" ms-dos. В крайнем случае, можно ограничиться посекторным копированием на винчестер точно такой же топологии. При этом совершенно не имеет значения используемая файловая система и установленная операционная система.
Посекторно скопировать диск на винчестер с иной топологией трудно, но возможно. Дело в том, что многие современные контроллеры жестких дисков позволяют пользователю менять трансляцию произвольным образом. Для этого необходимо приобрести винчестер, поддерживающий lba-режим (а какой из современных жестких дисков его не поддерживает?). При этом он может быть даже большего объема, нежели исходный, но это никак не помешает копированию. Другой вопрос, что без переразбиения скопированный таким образом диск не "почувствует" дополнительных дорожек и следует запустить norton disk doctor, который устранит эту проблему.
Достаточно часто нарушается вычисление зон предком-пенсации. Дело в том, что плотность записи на разных цилиндрах не одинакова, так как линейная скорость растет от центра диска к периферии. Разумеется, гораздо легче постепенно уплотнять записи, нежели искать некий усредненный компромисс. На всех существующих моделях плотность записи изменяется скачкообразно и на последних моделях программно доступна через соответствующие регистры контроллера. При этом значения, выставленные в bios, практически любой жесткий диск (с интерфейсом ide) просто игнорирует. Предыдущие модели не имели с этим проблем, и только винчестеры, выпущенные в течение последних двух лет, склонны к подобным поломкам. Скорее, даже не к поломкам, а к сбоям, в результате которых искажается хранимая где-то в недрах жесткого диска информация. Если контроллер позволяет ее программно корректировать, то считайте, что ваш жесткий диск спасен. Конечно, придется пройти сквозь мучительные попытки угадать оригинальные значения, однако это можно делать и автоматическим перебором до тех пор, пока винчестер не начнет без ошибок читать очередную зону. Помните, что любая запись на диск способна нарушить низкоуровневую разметку винчестера, после чего последний восстановлению не подлежит и его останется только выкинуть. Производите только чтение секторов!
Если же контроллер не позволяет программно управлять предкомпенсацией, то еще не все потеряно. Попробуйте перед каждым обращением делать сброс контроллера, а точнее, его рекалибровку (команда ixh). В некоторых случаях это срабатывает, поскольку с целью оптимизации скорости обмена предкомпенсацией обычно управляет не один блок. И, кроме того, иногда контроллер кэша не учитывает предкомпенсацию, а его сброс реализует последнюю аппаратно. К сожалению, это по большей части догадки и результаты экспериментов автора, так как техническая документация фирм-производителей по этому поводу не отличается полнотой, а местами содержит противоречия. Можно испытать и другой способ - попробовать перезаписать микрокод контроллера (команда 92h). Конечно, это доступно только для специалистов очень высокого класса, но ведь доступно! Заметим, что не все контроллеры поддерживают такую операцию. С другой стороны, это и хорошо, так как уменьшает вероятность сбоя и не дает некорректно работающим программам (вирусам в том числе) испортить дорогое устройство. Жесткие диски от samsung обладают еще одной неприятной особенностью - часто при подключении шлейфа "на лету", при включенном питании, они перестают работать. Внешне это выглядит так: индикатор обращения к диску постоянно горит, но диск даже не определяется biosom, или определяется, но все равно не работает. Близкое рассмотрение показывает, что на шине пропадает сигнал готовности устройства. В остальном контроллер остается неповрежденным. Разумеется, если не обращать внимание на отсутствие сигнала готовности, то с устройством можно общаться, делая вручную необходимые задержки (поскольку физическую готовность устройства уже узнать не представляется возможным, приходится делать задержки с изрядным запасом времени). При этом, к сожалению, придется отказаться от dma-mode (а уж тем более ultra-dma) и ограничиться pio 1 (с небольшим риском - pio 2) режимом. Конечно, писать соответствующий драйвер вам придется опять самостоятельно. Разумеется, скорость обмена в режиме pio 1 по сегодняшним меркам совершенно неудовлетворительна и не годится ни для чего другого, кроме как копирования информации со старого на новый винчестер, но некоторые "нечистоплотные" продавцы компьютерной техники как-то ухитряются устанавливать подобные экземпляры на продаваемые машины. Будьте осторожны! Учитывая, что написание подобных драйверов для win32 - трудоемкое занятие, большинство ограничивается поддержкой одной лишь ms-dos, и вовсе не факт, что компьютер, демонстрирующий загрузку win95, содержит исправный, а не реанимированный подобным образом жесткий диск.
У жестких дисков фирмы samsung при подключении "налету" может появляться другой неприятный дефект - при запросах на чтение контроллер периодически "повисает" и не завершает операцию. В результате "замирает" вся операционная система (впрочем, windows nt с этим справляется, но, вероятно, не всегда). На первый взгляд может показаться, что с этого винчестера несложно скопировать ценные файлы, но при попытке выполнить это выясняется, что диск "зависает" все чаще и чаще и копирование растягивается до бесконечности. Однако если выполнить сброс контроллера, то можно будет повторить операцию. Это можно сделать аппарат -но, подпаяв одну кнопку на линию сброса и статуса. Последнее нужно для указания на ошибочную ситуацию, чтобы операционная система повторила незавершенную операцию. Если этого не сделать, то часть секторов не будет реально прочитана (записана). Или можно выполнять сброс автоматически, например, по таймеру. Чтобы не сталкиваться с подобной ситуацией, никогда не следует подсоединять/отсоединять винчестер при включенном питании. Очень часто это приводит к подобным ошибкам, хотя производители других фирм, по-видимому, как-то от этого все же защищаются, ибо аналогичной ситуации у них практически не встречается. Все же не стоит искушать судьбу... От аппаратных ошибок теперь перейдем к дефектам поверхности. Заметим сразу, что последнее встречается гораздо чаще и проявляется намного коварнее. Обычно это ситуация, в которой мало что можно предпринять. Но достичь главной цели - спасти как можно больше уцелевших данных - довольно часто удается. Возьмем такую типичную ситуацию как ошибка чтения сектора. Маловероятно, чтобы сектор был разрушен целиком. Чаще всего "сыплется" только какая-то его часть, а все остальные данные остаются неискаженными. Существуют контроллеры двух типов. Первые, обнаружив расхождение контрольной суммы считанного сектора, все же оставляют прочитанные данные в буфере и позволяют их извлечь оттуда, проигнорировав ошибку чтения. Вторые либо очищают буфер, либо просто не сбрасывают внутренний кэш, в результате чего все равно прочитать буфер невозможно. На практике обычно встречаются последние. При этом сброс кэша можно инициировать серией запросов без считывания полученных данных. Кэш при этом переполняется, и наиболее старые данные будут вытолкнуты в буфер. Остается их только прочесть. Конечно,-это крайне медленно, но, к сожалению, универсальной команды сброса кэша не существует. Разные разработчики реализуют это по-своему (впрочем, иногда это можно найти в документации на чипы, используемые в контроллере). western digital сообщает в техническом руководстве что при длинном чтении сектора без повтора контроль сектора не выполняется и он будет-таки целиком помещен в буфер. Кстати, так и должно быть по стандарту. Увы, остальные фирмы от него часто отклоняются по разным соображениям. Остается определить, какие же из прочитанных данных достоверные, а какие нет (если этого не видно "визуально" - например, в случае текстового или графического файлов)? Разумеется, в подобных рамках задача кажется неразрешимой, но это не совсем так. Дело в том, что можно произвести не только короткое, но и длинное чтение (ox22h req ploin long with retry), для чего можно использовать следующую процедуру. При этом кроме собственно данных читаются также и корректирующие коды. Автоматическая коррекция не выполняется (хотя некоторые контроллеры это реализуют аппаратно и не могут отключить автокоррекцию; в документации этот момент, кстати, не уточняется). Как правило, используются корректирующие коды Рида-Соломона, хотя последнее не обязательно. Математические законы позволяют не только определить место возникновения сбоя, но и даже восстановить несколько бит. При больших разрушениях можно определить только место сбоя, но достоверно восстановить информацию не удается.
Модуляция при записи такова, что все биты, стоящие справа от сбойного, уже не достоверны. Точнее, не все, а только в пределах одного пакета. Обычно за один раз записывается от 3 до 9 бит (необходимо уточнить у конкретного производителя) и содержимое остальных пакетов, как правило, остается достоверным. Самое интересное, что зачастую сбойный пакет можно восстановить методом перебора! При этом можно даже рассчитать, сколько вариантов должно получиться. Учитывая хорошую степень "рассеяния" корректирующих кодов можно сказать, что не очень много. И таким образом можно восстановить казалось бы безнадежно испорченные сектора, а вместе с ними и файлы, расположенные "поверх" последних.
Выше были перечислены наиболее типичные случаи отказов жестких дисков, которые поддавались чисто программному восстановлению если уж не винчестера, то хотя бы хранимых на нем данных. Разумеется, что иногда жесткий диск выходит из строя полностью (например, при неправильно подключенном питании, скачках напряжения) от вибрации или ударов, а то и просто из-за откровенного заводского брака. Есть один старый проверенный способ - найти жесткий диск такой же точно модели и заменить электронную плату. К сожалению, последнее из-за ряда конструктивных особенностей все реже и реже бывает возможно, а уж дефекты поверхности этот способ и вовсе бессилен вылечить. Поэтому, берегите свой жесткий диск и почаще проводите резервное копирование. Помните, что самое дорогое это не компьютер, а хранимая на нем информация!
Проблемы соединения волоконных световодов приобрели особую актуальность при разработке технологии их промышленного применения. Выбор способа сращивания зависит от условий применения волоконной оптики.
Очевидно, что значительные преимущества при использовании волоконно-оптических технологий в телекоммуникационной отрасли, связанные с улучшением целого ряда технико-экономических показателей (возрастанием скорости передачи информации, увеличением длины регенерационного участка, уменьшением массогабаритных характеристик кабелей, экономией цветных металлов и др.), предопределят в будущем широкое внедрение волоконной оптики при построении линий связи различных уровней. Однако необходимо было разработать методики сращивания волоконных световодов, обеспечивающие высокие качественные и вместе с тем достаточно технологичные и доступные показатели, чтобы сделать возможным применение этих световодов не только в стационарных, но и в полевых условиях.
Строительная длина волоконно-оптического кабеля на практике устанавливается, исходя из ряда факторов. Прокладка больших длин кабеля неудобна вследствие необходимости сматывания с барабана и манипуляций с кабелем как во время прокладки в полевых условиях (при пересечении других подземных коммуникаций), так и в городских условиях (при прокладке в кабельную канализацию). Прокладывая кабель с помощью кабелеукладочной техники, также возникают неудобства, связанные с манипуляциями большими длинами, если для погрузочно-разгрузочных работ приходится использовать специализированную технику. Особенно остро стоит проблема манипуляции строительными длинами с большой удельной массой при прокладке глубоководных морских кабелей и кабелей для прибрежной зоны. Из-за необходимости инсталляции кабелей максимально возможной длины для их транспортировки по суше используются спаренные железнодорожные платформы, на которых кабели выкладываются в форме "8", а не на кабельные барабаны. Таким образом кабель транспортируется по суше до погрузки на судно.
Для соединения оптических волокон разработаны два способа соединений: разъемные и неразъемные. Неразъемные соединения оптических волокон осуществляются методом сварки, методом склеивания, а также с помощью механических соединителей. Для создания разъемных соединений оптических волокон используются оптические коннекторы.
Соединения оптических волокон с помощью сварки
Соединение оптических волокон с помощью сварки является сегодня наиболее распространенным методом получения неразъемных соединений. Благодаря в достаточной мере совершенной технологии этот метод позволяет получать качественные соединения с низкими показателями вносимых потерь (порядка 0,1-0,15 дБ), что обуславливает его применение на линиях связи, где этот показатель входит в приоритетные - магистральные, зоновые и другие - высокоскоростные ВОЛС.
Сваривание оптических волокон предусматривает оплавление концов волоконных световодов путем помещения их в поле мощного источника тепловой энергии, как, например, поле электрического разряда, пламя газовой горелки, зона мощного лазерного излучения.
Каждый из перечисленных методов имеет свои достоинства и недостатки. Достоинством метода сварки с помощью лазера можно считать возможность получения чистых соединений из-за отсутствия в них сторонних примесей, и, как следствие, достаточно малых вносимых потерь (0,1 дБ и менее). Как правило, в качестве источника лазерного излучения высокой мощности (до 5 Вт) используются газовые лазеры на СО2.
К достоинствам метода сварки с помощью газовой горелки следует также отнести возможность получения соединений оптических волокон, отличающихся высокой прочностью мест сростков. В качестве источника пламени используют смесь пропана с кислородом или соединение кислорода, хлора и водорода. Этот метод распространен по большей части для сварки многомодовых оптических волокон.
Основным достоинством сварки в поле электрического разряда является быстрота и технологичность. Этот метод в настоящее время приобрел наибольшую популярность для сварки одномодовых световодов.
Аппараты для сварки оптических волокон можно классифицировать следующим образом: по способу юстировки свариваемых концов оптических волокон (в зависимости от геометрических размеров сердцевин или от потерь мощности светового сигнала, распространяющегося через место сварки); по способу проведения операций (ручные или автоматические); по типу устройства контроля (микроскоп, монитор на жидких кристаллах); по количеству оптических волокон, которые могут быть сварены одновременно (одно- и многоволоконные).
При сварке оптических волокон в поле электрического разряда можно выделить такие технологические этапы:
* подготовка торцевых поверхностей соединяемых оптических волокон;
* надевание защитной термоусаживаемой гильзы на одно из соединяемых волокон;
* установка подготовленных концов оптических волокон в направляющие системы сварочного аппарата;
* юстировка свариваемых оптических волокон;
* предварительное оплавление торцов оптических волокон (fire cleaning) с целью ликвидации микронеровностей, возникающих в
* процессе скалывания;
* непосредственное сваривание оптических волокон;
* предварительная оценка качества сварки;
* защита места сварки с помощью термоусаживаемой гильзы;
* окончательная оценка качества сварки с помощью рефлектометра.
Существует два способа юстировки. Первый базируется на выравнивании сердцевин свариваемых оптических волокон по их геометрическим размерам (Profile Alignment System PAS) с помощью боковой подсветки концов свариваемых волокон.
Второй способ основан на выравнивании сердцевин оптических волокон по принципу минимизации потерь тестового светового сигнала, распространяющегося через место сварки.
Что касается активной юстировки, то известно три метода.
Первый заключается в использовании оптического излучателя и приемника на противоположных концах оптических волокон, подлежащих сварке. Информация от приемника передается персоналу, производящему сварку.
Второй метод сводится к использованию оптического передатчика на дальнем конце и детектора в точке соединения. Тестовый оптический сигнал выводится из соединяемого оптического волокна на небольшом (примерно 0,5 м) расстоянии от места сварки на изгибе и детектируется приемником, оборудованным измерителем оптической мощности.
Третий метод реализует LID (Local Injection and Detection) - процедуру юстировки, ограниченную исключительно местом соединения. В основу этого метода положено введение тестового оптического сигнала в сердцевину одного из соединяемых оптических волокон и поиск его в сердцевине второго соединяемого волокна путем изгиба.
Метод LID является наиболее эффективным, поскольку, в отличие от метода PAS, качество сварного соединения в большей мере зависит от сварочного аппарата, а не от индивидуального мастерства персонала. В современных сварочных аппаратах для управления процессами юстировки и сварки используются микропроцессоры, с помощью которых возможна оптимизация процесса сварки для получения минимальных (менее 0,1 дБ) потерь в местах соединений оптических волокон.
В процессе оплавления оптические волокна подаются одновременно для предотвращения укорачивания одного из них в месте сварки. Операции оплавления и сваривания, как правило, выполняются автоматически. В современных автоматических сварочных аппаратах для снятия механического напряжения в точке соединения оптических волокон предусмотрен режим прогревания места стыка по окончании процесса сварки. Такой режим называется "режимом релаксации".
Цикл плавления (длительность подачи и сила тока как для предварительного оплавления, так и для сварки и релаксации) для оптических волокон различных производителей и типов различны.
Некоторые сварочные аппараты, кроме рассмотренных выше способов контроля качества места сварки, используют еще и тест на растяжение во избежание нарушения соединения во время манипуляций при выкладке сростков в кассету, а также в дальнейшем, в процессе эксплуатации. Соединенное оптическое волокно прочно закреплено в направляющих платформах (которые используются при юстировке). Под контролем микропроцессора по завершении этапа сварки эти направляющие платформы расходятся в противоположные стороны, образуя строго нормированное продольное усилие на растяжение, приложенное к месту стыка. Считается, что стык, прошедший такое тестирование, более надежен и выполнен более качественно. При невозможности получения стыка, способного пройти этот тест, но удовлетворяющего по параметрам передачи, эту опцию можно отключить.
Особо следует отметить сварку ленточных элементов (ленточных волоконно-оптических кабелей, отличающихся большим количеством оптических волокон). Эту операцию можно проводить, только применяя полностью автоматический сварочный аппарат, с помощью которого можно соединить до 12 оптических волокон приблизительно за 3 минуты, причем средний уровень потерь составит около 0,1-0,15 дБ. Однако для сваривания ленточных элементов необходим опытный, хорошо подготовленный персонал.
Во время сварки оптические волокна размещаются с соответствующим смещением от оси электродов, что обеспечивает равномерное нагревание. До начала процесса сваривания и по его завершении проверяется смещение оптических волокон, состояние торцевых поверхностей, а также деформация.
При сваривании ленточных элементов необходимо, кроме основных процессов, рассмотренных ранее, провести еще три технологические операции: устранить расхождения торцов соединяемых оптических волокон, плавление всех волокон выполнить одновременно с одинаковой температурой, в процессе предварительной оценки измерить уровень вносимых потерь рефлектометром. Если оказалось, что результаты не отвечают требованиям, процесс сварки повторяют.
Как показывает практика, предварительная оценка качества сварных соединений оптических волокон, базирующаяся на методе РАС, может содержать погрешность в диапазоне 5-1000%, поэтому окончательный вывод о качестве сварного соединения стоит делать после измерений рефлектометром.
По мере совершенствования качества сварочного оборудования и технологии сварки возрастают возможности получения сварных соединений оптических волокон высокого качества. Потери на сварных соединениях зависят от нескольких факторов: опыта персонала, геометрических погрешностей свариваемых оптических волокон, а также от материалов, из которых изготовлены волокна. Особенно часто проблемы возникают при сварке оптических волокон различных производителей. Дело в том, что оптические волокна различных производителей изготавливаются с использованием принципиально отличающихся друг от друга технологических процессов. В результате материал оптических волокон - кварцевое стекло - не является идентичным в волокнах различного происхождения, несмотря на то, что параметры оптических волокон, указанные в спецификациях фирм-производителей, отличаются незначительно.
Факторами, определяющими свойства стекла, являются технология изготовления и качество материалов. Многочисленные исследования показали, что тысячные доли процента примесей в кварцевом стекле оказывают большее влияние, чем добавки в десятки процентов тех же компонентов к многокомпонентным стеклам.
Для сварки наибольшее влияние имеют следующие характеристики: плотность, коэффициент теплового расширения, показатель преломления, вязкость и механические характеристики. Эти параметры определяют оптические потери в местах сращивания и должны приниматься во внимание при использовании оптических волокон, произведенных по различным технологиям, в пределах одного элементарного кабельного участка ВОЛС. Особое внимание следует уделять идентификации оптических волокон в кабеле по типу, производителю и технологии изготовления.
Более совершенные аппараты для сварки оптических волокон содержат программы, оптимизирующие процесс сварки для оптических волокон различных типов и различных производителей, однако на практике нередки ситуации, когда, используя стандартные программы, невозможно получить качественную сварку. В этих случаях необходимо самостоятельно корректировать параметры процесса (время и ток, подаваемый на электроды) для достижения оптимальных результатов.
[pagebreak]
Наиболее часто сварка оптических волокон различных производителей производится при оконцовке оптических волокон пигтейлами, а также при ремонтно-восстановительных работах, если эксплуатационный запас кабеля израсходован, и приобретение полностью идентичного кабеля невозможно (к примеру, по причине снятия с производства оптического волокна такого типа, который использовался первоначально) или экономически нецелесообразно.
В общем виде величина потерь в местах сварных соединений может быть представлена как суммарная величина: Dобщ = Dор + Dдм + Dую + Dнм + Dрпп, где: Dобщ - суммарная величина потерь в сварке; Dор - потери из-за осевого рассогласования модовых полей равного диаметра; Dдм - потери из-за разницы диаметров модовых полей; Dую - потери от погрешности угловой юстировки осей оптических волокон; Dнм - потери, обусловленные не-круглостью модовых полей; Dрпп - потери из-за разницы показателей преломления.
Изучение параметров и характеристик различных одномодовых оптических волокон показывает, что разброс величины диаметра модового поля для l = 1310.1330 нм или l = 1500...1550 нм может составлять от 10,5 до 21,7% (9,2 0,5 мкм). Такое рассогласование приводит к появлению потерь от 0,05 дБ до 0,25 дБ (с положительным знаком, когда излучение проходит из волокна с большим диаметром в волокно с меньшим диаметром, и отрицательным - в противоположном направлении). Эти потери будут иметь место, даже если аппарат расположит соосно два волокна с разными диаметрами сердцевин, у которых эксцентриситет пренебрежительно мал. Обычно разброс величины модового поля оптического волокна не превышает 14%, таким образом, величина этой составляющей - не более 0,1 дБ.
Составляющая Dую практически не компенсируется современным сварочным оборудованием. Установлено, что углы между осями сердцевин 0,5°; 1°; 1,5°; 2° вызывают приращение потерь соответственно в 0,08; 0,34; 0,77 и 1,5 дБ. Таким образом, благодаря надлежащей подготовке торцов соединяемых оптических волокон при скалывании можно уменьшить потери - необходимо обеспечить наименьший (не более 0,5°) угол между плоскостями торцов оптических волокон. В этом случае величина потерь не превысит 0,08 дБ.
Составляющая Dнм учитывает влияние некруглости модового поля. По приблизительным оценкам она равна 0,05 дБ.
При соединении сваркой оптических волокон, имеющих неконцентричность модового поля, часто возникает нарушение юстировки сердцевин вследствие действия сил поверхностного натяжения. Это нарушение можно минимизировать следующими способами:
* сокращение времени плавления за счет неполного сваривания оптических волокон или же сокращение длины свободного конца оптического волокна в сварочном устройстве, чтобы концы оптических волокон в процессе сварки могли перемещаться на очень малое расстояние;
* использование компенсационных программ, таких как управление смещением сердцевины с помощью метода умышленного смещения осей.
Такой режим получил название RTC (Real Time Control). В этом режиме после юстировки сердцевин свариваемых оптических волокон и проведения процедуры предварительного оплавления происходит компенсация поперечного смещения сердцевин в сторону, противоположную производной расхождения.
Сварка оптических волокон осуществляется посредством чередования коротких импульсов тока высокой интенсивности с импульсами тока низкой интенсивности (релаксационными импульсами). При этом после сваривания в электрическом поле импульса высокой интенсивности в поле релаксационного импульса происходит перемещение оптических волокон под действием поверхностного натяжения. Количество чередующихся импульсов зависит от смещения сердцевин оптических волокон, которое постоянно контролируется сварочным аппаратом; как правило, количество импульсов не превышает 2-3.
Весьма существенное влияние на общую величину потерь, если свариваются оптические волокна с разными показателями преломления (N) сердцевины, может оказать составляющая Dрпп. Эта составляющая учитывает потери мощности оптического сигнала в результате несоблюдения условия полного внутреннего отражения на месте стыка двух оптических волокон, у которых показатели преломления сердцевин имеют различия. В этом случае часть оптического сигнала проникает через оболочку волокна и рассеивается. Ситуация усугубляется многократным отражением луча от границы "сердцевина/оболочка", каждое из которых (отражений) служит источником потери мощности. На практике нередки случаи, когда даже многократные повторные сварки не позволяют добиться малой величины потерь.
Наибольший вклад в суммарную величину потерь вносят потери от погрешности угловой юстировки осей оптических волокон и потери из-за разницы показателей преломления.
Международная электротехническая комиссия предлагает в качестве типичной характеристики сварного соединения оптических волокон, полученного в полевых условиях, величину вносимых потерь, равную 0,2 дБ (IEC 1073-1). При современном развитии технологии сварки оптических волокон этот показатель вполне достижим даже тем персоналом, который не обладает значительным опытом в этой области.
Соединение оптических волокон методом склеивания
Практически одновременно с методом сварки был разработан метод склеивания оптических волокон. Для получения клеевых соединений используют совмещение и фиксацию оптических волокон: в капилляре, в трубке с прямоугольным сечением, с помощью V-образной канавки и с помощью трех стержней в качестве направляющих. Оптические волокна соединяются поодиночке.
Технология получения таких соединений состоит из следующих этапов:
* подготовка оптических волокон к соединению (очистка, снятие буферных покрытий, скалывание);
* ввод оптического волокна в капилляр;
* наполнение иммерсионной жидкостью, гелем или клеем;
* регулирование соединения, юстировка оптических волокон;
* нанесение адгезивного вещества;
* цементирование адгезивного вещества с помощью ультрафиолетового излучения.
Клей, используемый для оптических волокон, должен иметь коэффициент преломления, близкий к коэффициенту преломления волокон. Он должен обеспечивать фиксированное положение соединенных оптических волокон, защищать место сращивания от воздействий окружающей среды, гарантировать прочность сростка при воздействии нагрузок в осевом направлении. К достоинствам этого метода следует отнести оперативность и отсутствие деформации сердцевин соединяемых оптических волокон. Это способствует тому, что в области стыка - малые потери, обеспечиваются хорошие механические свойства и т.п. Однако ограниченный срок службы и нестабильность во времени, а также весьма высокая чувствительность к повышению температуры и воздействию влажности являются факторами, сдерживающими распространение этого метода получения неразъемных соединений. В настоящее время он уступил свои позиции методу соединения оптических волокон с помощью механических соединителей.
Механические соединители оптических волокон
Механические соединители оптических волокон разрабатывались как более дешевый и быстрый способ сращивания оптических волокон. Применение аппарата для сварки оптических волокон сопряжено с необходимостью соблюдения ряда условий: для работы используется помещение, параметры которого (температурный диапазон, влажность, давление, вибрации и проч.) соответствуют требованиям производителей сварочного оборудования; также необходима организация питания от сети переменного тока с достаточно жестко регламентированными параметрами. При стоимости комплекта оборудования для сварки оптических волокон, составляющей десятки тысяч долларов США, амортизационные отчисления, а также техническое обслуживание и ремонт являются довольно дорогостоящими.
Достаточно высокие требования предъявляются также к персоналу, производящему работы по сварке оптических волокон. Часто этими же лицами производится наладка и обслуживание аппаратов для сварки оптических волокон (очистка направляющих поверхностей и зажимов, замена электродов и проч.), для чего требуются специалисты с высоким уровнем квалификации.
Всех этих сложностей можно избежать, применяя механические соединители оптических волокон. Конструкция оптических соединителей относительно проста. Основными узлами являются направляющие для двух оптических волокон и устройство фиксации волокон. Внутреннее пространство заполняется тиксотропным гелем для защиты открытых участков оптических волокон от воздействия влаги. Одновременно гель обладает иммерсионными свойствами - его показатель преломления близок к показателю преломления сердцевины волокна.
Процедура монтажа оптических соединителей является частью процедуры монтажа промежуточного или оконечного устройства - кабельной муфты, бокса или стойки. Размеры и форма оптических соединителей позволяют устанавливать их в кассету муфты или бокса аналогично сросткам оптических волокон, полученных путем сварки.
Процедура монтажа включает в себя следующие технологические операции:
* разделка кабелей;
* очистка оптических волокон от гидрофобного геля (при его наличии);
* снятие буферных покрытий соединяемых оптических волокон на участках длиной, рекомендуемой производителями оптических соединителей конкретного типа;
* скалывание оптических волокон;
* проверка качества скола волокон;
* введение соединяемых волокон в отверстия с направляющими;
* позиционирование волокон в соединителе для достижения оптимальных параметров соединения;
* фиксация оптических волокон в соединителе;
* тестовые измерения соединения.
Особое место среди оптических механических соединителей занимает RMS (Rotary Mechanical Splice) как наиболее сложный среди аналогов. Процесс его монтажа наиболее трудоемок, однако он позволяет достичь наименьших потерь при соединении одномодовых волокон. В отличие от остальных соединителей, где величина потерь главным образом зависит от качества скола торцевых поверхностей оптических волокон, этот соединитель позволяет юстировать волокна простым вращением вокруг своей оси стеклянных втулок, удерживающих подготовленные оптические волокна, и добиваться наилучших результатов.
Следует отметить, что применение механических соединителей является наиболее быстрым способом соединения оптических волокон. При этом вносимое затухание практически не отличается от затухания, создаваемого сварным соединением. Достаточно устойчивое функционирование механических соединителей в процессе эксплуатации позволяет уже сегодня рекомендовать их для широкого внедрения на телекоммуникационных сетях с невысокими требованиями к качеству соединений, а также в случаях, когда использование аппарата для сварки оптических волокон технологически затруднено или вообще невозможно. В дальнейшем статистика технической эксплуатации, а также совершенствование материалов компонентов механических соединителей, вероятно, определит их более широкое применение для строительства телекоммуникационных волоконно-оптических линий различных уровней.
Обращает на себя внимание тот факт, что механические соединители оптических волокон условно допускают однократное использование, однако на практике встречаются ситуации их многократного применения. Производители гарантируют качество соединения оптических волокон при повторном монтаже соединителя не более 2-3 раз, однако при повторном наполнении внутреннего пространства иммерсионным гелем (в тех конструкциях, где это предусмотрено) такие соединители использовались многократно без ущерба для качества стыков. Некоторыми производителями механических соединителей разработаны механизмы фиксации, предусматривающие использование специального ключа для открытия фиксатора.
Сегодня использование механических соединителей наиболее удобно при проведении аварийного ремонта волоконно-оптическихлиний для технологической операции организации временной вставки.
В данной статье я рассмотрю вопросы о недавних тенденциях в области SEO, которые вносят свои коррективы и новые правила игры.
Ни для кого ни секрет, что рынок услуг в области поисковой оптимизации сегодня и несколько лет назад - это совсем разные вещи. В основном это обусловлено значительно возросшей конкуренцией между владельцами интернет-ресурсов. Да и само количество веб-страниц, ежедневно индексируемых поисковыми машинами, возрастает постоянно чуть ли не в геометрической прогрессии.
В Золотом Веке SEO, большинство веб-мастеров даже и не думали о каких-то поисковых машинах. А если такое все же случалось, то им (веб-мастерам) было достаточно разместить лишь несколько ключевых слов в Meta-тегах. Это были времена, когда каждый, кто хоть немного разбирался в оптимизации сайтов, мог запросто повысить рейтинг своего сайта во всех главных поисковых машинах. Для этого не нужно было и особо стараться.
В наши дни все совсем по-другому. Даже используя ключевые слова, у которых высокий KEI (keyword effectiveness index, индекс эффективности ключевого слова - отношение количества запросов ключевого слова к числу конкурирующих страниц), порой бывает очень трудно достичь высоких рейтингов в SERP (search engine results page, страничка результатов поискового запроса). Но дело не только в этом. Рейтинг - вещь довольно изменчивая (можно сравнить его с морем) и сайт, который несколько дней был на первой странице, потом запросто может спуститься ниже. Эта проблема особенно актуальна для вновь открывающихся веб-сайтов, порталов, интернет-магазинов.
Могу смело сказать, что если вашему интернет-ресурсу менее года, то результаты его раскрутки будут значительно отличаться от ожидаемых. К сожалению, не в лучшую сторону. Поэтому не верьте тем, кто предлагает "очень быструю", "с мгновенным эффектом", "очень дешевую" раскрутку - чаще всего за этим скрывается обычное мошенничество или от этого будет кратковременный эффект.
В вот последствиями такой раскрутки может стать "вылетание" из индексирования поисковой машиной. А это уже от 50 до 70 % аудитории посетителей. Так что сначала подумайте, а только потом действуйте. "Скупой платит дважды" - эту поговорку еще никто не отменял. Вообще, сам процесс раскрутки - довольно долгий и требующий множества усилий.
Еще одним важным моментом, о котором хочется поскорее упомянуть, будет следующее. Мне кажется, что всем веб-мастерам, владельцам сайтов и людям, которые занимаются SEO (сложно их по-другому назвать) нужно на данном этапе развития интернета переключить приоритеты от повышения рейтинга по ключевым словам к фокусировке на привлечение целевой аудитории (трафика), переводя ее в покупателей. На данном этапе лишь малая часть сервисов по продвижению сайтов действует именно по такой схеме.
Приведу небольшой, но характерный пример. Допустим, у вас есть свой интернет-ресурс, который для вас является не просто развлечением (хобби), а это ваш бизнес. Вы в него вкладываете некоторые материальные ресурсы (деньги - на хостинг, раскрутку, дизайн, программирование к примеру). Естественно, в недалеком будущем вы намерены получать с этого сайта прибыль. А вот каким образом этого достичь?
Рассмотрим возможные варианты ответов:
1) Нужно так раскрутить ресурс, чтобы по моим ключевым словам он занимал первые места в Google'е, Yandex'е и Rambler'е.
2) Привлечь тех посетителей (да и побольше) на мой интернет-ресурс, которые в интернете ищут товары / услуги, которые я продаю / предлагаю.
Какой же из них верный? Да оба верны, но каждый по-своему. Дело в том, если придерживаться идеологии из ответа №2, то пользы для вашего бизнеса будет гораздо больше.
Могу себе представить, сколько у вас ко мне накопилось вопросов. Но, стоп! Я прекрасно понимаю людей, которым очень хочется поднять рейтинг сайта с 99-ой до 1-ой позиции в рейтинге по нужному для них ключевому слову. Естественно, это приведет к дополнительному росту трафика посетителей к ним на сайт и увеличению объемов продаж. Жаль только, что есть люди, которые верят, что какая-то фирма по раскрутке сайтов может просто взмахнуть волшебной палочкой и рейтинг вашего сайта возрастет до небывалых высот.
Но дело в том, что даже лучшие профи поисковой оптимизации не волшебники. Они попросту не могут поместить ваш сайт наверх, когда существует сотни (если не тысячи) других сайтов, которые предлагают те же самые услуги, занимаются продажей тех же товаров. Если бы это было так, то среди оптимизаторов был бы не один миллионер :)
SEO утратило всякий смысл?
Ни в коем случае! Но та поисковая оптимизация, которая основана только на достижении высоких позиций с использованием популярных ключевых слов, постепенно становится все менее и менее эффективной. И выходом здесь будет вовсе не использование непопулярных ключевых слов. Необходимо просто расширить свой горизонт раскрутки другими, не менее эффективными методиками.
Если просто взять и пройтись по десятку-другому сайтов, можно заметить одну и ту же типичную тенденцию - использования стандартного набора ключевых слов / фраз в текстах сайтов. Владельцы сайтов так сильно привязаны к идее "побольше заработать", что уже и не думают о посетителях. Зачастую одни и те же фразы встречаются на всех страницах веб-ресурса. А ведь интернет постоянно меняется: появляются новые популярные слова, фразы, развиваются технологии. Ежедневно тысячи пользователей Всемирной Паутины производят все новые и новые запросы к поисковикам. Но множество веб-мастеров не используют эту возможность, а зря.
Теперь хочется остановиться на таком важном понятии для поисковой машины, как "хороший контент".
Что именно он из себя представляет? Только лишь обогащенный ключевыми словами текст? Я думаю, дело не в этом. На данный момент в интернете появилось множество компаний, предлагающих услуги по написанию "хорошего контента". Но чаще всего это попросту сводиться к вышеупомянутому способу с ключевыми словами. Хотя есть и исключения, но работа профессионалов такого уровня обходиться очень недешево.
А может взять да и самим попробовать написать "хороший контент" для своего сайта? Кто, как не вы лучше разбираетесь в его специфике? Можно и нужно попробовать. Главное - чтобы контент был уникальным и ни у кого его больше не было. Ключ к хорошему контенту - ваше творчество. А вот уже использовать ваш творческий потенциал - это уже не "вслепую" копировать статьи у конкурентов.
Важно, чтобы у вас было свое собственное мнение, своя аналитика происходящего. Просто представьте, что сайта с данной тематикой больше ни у кого нет. Вы будете выступать как бы в роли "первопроходца" в данной области интернета. Все эти методы уже давно проверены на практике и очень эффективны. Как для посетителя, так и для поисковой машины.
Для многих вебмастеров SEO (search engine optimization, оптимизация для поисковой машины) - это не что иное, как просто набор трюков и методик, которые несомненно должны поднимать их сайт в рейтингах всех поисковиков. Такое отношение к SEO может и дает временные результаты, тем не менее, здесь содержится большой недостаток: правила постоянно меняются.
Алгоритмы поисковых машин постоянно меняются, как, например, антивирусное программное обеспечение. Ведь в мире постоянно появляются новые вирусы, поэтому они и должны постоянно совершенствовать и вносить коррективы в свои программы. Аналогично обстоит дело и с поисковиками: все в этом мире быстро меняется, а интернет-сфера еще быстрее.
Тем не менее, существует определенный набор правил, по которым поисковики ранжируют сайты, которых должен придерживаться каждый вебмастер в нелегком процессе поисковой оптимизации. Конечно, нет 100% гарантии, что все это работает сейчас или уже появились новые правила игры, но идея остается прежней. Меняются лишь детали, как говорится.
Но если мы не можем применить для оптимизации стандартный набор правил, то что же нам делать? Выход здесь в том, что не нужно всеми силами стараться разобраться в хитростях работы поисковой машины, а просто понять каким образом они работают. У этих самых хитростей есть своя логика работы, которую довольно просто вычислить, что и является их недостатком.
Так что же на самом деле необходимо?
Для достижения высоких позиций в рейтинге (да еще на долгое время) следует понимать, что поисковый робот - это в своем роде живое существо. Конечно, я при этом не имею ввиду, что у них есть мозги, пусть это останется для писателей-фантастов. Тем не менее их поведение и способы работы во многом похожи на работу этого самого мозга.
А теперь остановимся на рассмотрении некоторых функций их "мозга". В общем можно сказать, что им присуща такая специфика, как (если принять интернет за мир с множеством дорог) ходить различными путями, следуя указаниям установленных знаков и собирая всевозможную информация об этой дороге. Затем они направляют собранную информацию группе серверов, которые уже по своим специфическим алгоритмам определяют ее важность для внесения в свои базы.
По каким принципам работают эти алгоритмы? Для начала они создаются людьми, которые прекрасно разбираются в принципах работы интернета и информации, которая в нем содержится. А так как всемирная паутина постоянно изменяется, то эти самые люди и вносят необходимые коррективы в поисковые алгоритмы. По своей сути поисковую машину следует рассматривать, как существо, которое постоянно собирает информацию, сохраняет ее, а потом сортирует исходя из ее важности и с большим удовольствием отсеивает ненужную. Только вот как это она делает и исходя из каких принципов - толком не ясно.
Присмотримся поближе
Понимание того, что из себя представляет поисковая машина на самом деле, попытаемся выяснить в сравнении с анатомией человека. Пусть машина и не дышит, но она содержит много схожего, что необходимо ей для ее виртуальной жизни. А состоит она из следующего:
Легкие: Данный орган у поисковой машины, как и большинство жизненно важных органов, расположены внутри огромных data-центров (сервера, специально предназначенные для хранения информации). Как и организме человека, легкие мы не считаем очень важным органом, тем не менее понимаем, что без них не обойтись и нужно поддерживать их здоровыми.
Руки и ноги: Представим себе, что руки и ноги поисковой машины не что иное, как ссылки на ресурсы, которые она щедро выдает по запросу пользователя. С помощью этого органа мы можем найти все, что нам нужно и получить указатель в виде ссылки на необходимый ресурс. Также, как и тело человека изначально было создано для движения и исследования окружающего мира, аналогично и поисковые машины изначально запрограммированы исследовать всемирную паутину.
Глаза: Глазами поисковой машины являются так называемые пауки (еще их называют роботами или краулерами). Эти самые пауки постоянно просматривают интернет для поиска новых сайтов и следят за изменениями на уже проиндексированных. В данном случае пауки "ползают" по страничкам сайта по его внутренним ссылкам (как по путям), аналогично человеку, который на своем пути видит множество дорог для своего передвижения. К счастью для нас, поисковые роботы движутся по оптико-волоконным проводам, вот поэтому они могут путешествовать по интернету со скоростью света. Это-то и позволяет им посетить все интернет-странички, которые попадаются им на пути.
Мозг: Мозг поисковой машины выполняет те же функции, что и мозг человека: содержит целый набор функций для управления организмом своего хозяина. Также у мозга должен быть свой инстинкт, который должен знать о работе и постоянно контролировать все органы и системы. Вот поэтому поисковой машине никак не обойтись без этого самого мозга, который ей и помогает выжить в этом враждебном мире (пусть в чем-то и виртуальном).
Инстинкт: С помощью инстинкта поисковые машины имеют набор ключевых функций, таких как просматривание сайтов и фильтрация данных, которые нужно или не нужно индексировать. Они запрограммированы игнорировать некоторые типы файлов, не соответствующих определенным критериям. Как мне кажется, в инстинкте поисковой машины главное - это механизм или алгоритм, с помощью которого она индексирует сайты.
Знания: Поисковые машины прекрасно осведомлены о всех тонкостях индексации сайтов. Те знания, которыми они владеют, идут далеко впереди знаний всех пользователей, вебмастеров и оптимизаторов. Поисковая машина знает множество методов сортировки, представления данных, и, естественно, еще и имеет свой специфический набор хитростей и уловок.
Пока поисковый робот путешествует по интернету и индексирует веб-странички, параллельно он отсылает обратно в свой data-центр собранные им данные. Именно в этом центре данные обрабатываются согласно алгоритмов, а спам-фильтры отсеивают ненужное.
Подобно тому, как мы анализируем информацию из статьи в газете согласно своему видению мира, так и поисковики обрабатывает и ранжируют данные в строгом соответствии со своими законами и пониманием работы интернета.
Изучение: Так как поисковая машина ранжирует веб-странички согласно своему видению и пониманию законов функционирования интернета, а эти правила постоянно изменяются, то поисковые алгоритмы постоянно изменяются. Вот тут-то как раз и нужен механизм адаптации или самообучения поисковика.
В то же время, наряду в способностях просматривать странички, поисковые роботы должны уметь определять и наказывать попытки запрещенной раскрутки сайта. При этом благосклонно относится к честным вебмастерам и оптимизаторам.
Вот примеры тех областей, в которых поисковые машины так часто любят менять свои алгоритмы:
* Определения релевантности контента того сайта, на который она нашла ссылку;
* Способность обнаруживать информацию, которая содержится в новых типах данных, к примеру, базы данных, flash и т.п.
* Понимание нечестных методов раскрутки сайтов, таких как размещение "невидимого" текста, ссылок и т.п. Данные технологии рассматриваются поисковой машиной как спам, а пойманные на этом ресурсы попадают в так называемый "черный список";
* Изучение полученных данных, выявление недостатков в индексации, что приводит в действие механизм изменения алгоритма в сторону более эффективного определения релевантности сайта.
Способность к изучению и адаптации к окружающему интернет-пространству изначально закладывается при разработке алгоритмов работы поисковой машины. Ну и, само собой, остается актуальной до следующего обновления алгоритма.
От теории к практике
Все, о чем было сказано выше, касалось лишь аспектов работы поисковой машины. А вот как эти знания применить для раскрутки сайта? Все дело в том, что для правильного выбора стратегии раскрутки необходимо хорошо понимать, каким образом работает эта самая поисковая машина: собирает информацию, ранжирует сайты и т.д.
В свое время, когда одним из основных методов раскрутки было размещение большого количества ключевых слов на страницах сайта, многие вебмастера создавали целые сообщества из сайтов, дабы взаимным обменом ссылок достичь высоких позиций в рейтингах. А вот работает ли эта тактика сегодня? Работает, только результат скорее всего будет временным и краткосрочным.
Ведь поисковая машина, как и человек, хочет выжить в агрессивной окружающей среде. Поэтому, если результаты их работы будут плохими (а вот как раз нечестные методы раскрутки часто ведут к выдаче ненужной посетителю информации), то они медленно, но уверенно перестанут существовать. А ведь при постоянно растущей конкуренции эволюционировать крайне необходимо.
Для примера, пользователю значительно удобнее и проще найти сайт с множеством контента, который ему необходим. Как правило, на таких сайтах он часто обновляется, что позволяет сайту быть актуальным. Поэтому делайте выводы.
Немаловажным моментом остается и обмен ссылками. В данном вопросе намечается тенденция к снижению релевантности обратных ссылок, а обмен ссылками между сайтами разных тематик и вовсе малоэффективен. Но если же вы все же решите поставить обратные ссылки, то обязательно убедитесь, что они ведут на родственные по тематике сайты.
Данная стратегия хорошо работает как для привлечения посетителей, так и для повышения релевантности сайта. Ведь многие пользователи переходят из сайта на сайт по внутренним ссылкам. А если они еще и стоят на авторитетном и посещаемом ресурсе, то это только дополнительный плюс.
И напоследок...
Сам собою напрашивается вывод делать ставку на будущее. И отношение к поисковой машине как живому организму (пусть и в общих чертах) поможет выбрать правильную тактику. Вот когда она в очередной раз придет на ваш сайт, то "накормите" ее вкусным новым контентом, новыми разделами и она обязательно еще к вам вернется. А вот негостеприимных сайтов они не любят, как и быть обманутыми нечестными хозяевами. У роботов память отменная...
Начну эту статью о SEO с простого. На тему о величине частоты употребления ключевых слов написаны, наверное, уже десятки статей и “полезных советов”, но все еще довольно часто встречаются сайты, тексты на которых явно написаны людьми, никогда таких советов не читавших. К сожалению, тенденция к неграмотному составлению набирает своих оборотов.
На различных форумах часто задают вопрос: “Какой является оптимальная частота употребления ключевого слова или фразы?”
Тут однозначино ответа нету. Ответы вариьруются и в сторону уменьшения и увеличени процента ключевых слов. Некоторые рекомендуют 2%, иные специалисты предлагают остановиться на 4-6%. Смелые гуру утверждают, что даже 10% не станут перебором.
Важно запомнить главную деталь: тексты должны быть написаны для читателя. Перенасыщение текста несколькими часто повторяющимися ключевыми фразами заставляет читателя чесать затылок, удивляясь столь кривому тексту. Я не думаю, что после этого ему еще раз захочется посетить ваш ресурс, занести в избранное или порекомендовать своим друзьям. Получить же значительные преференции от поисковых систем столь примитивным способом сегодня сложно.
Поэтому можно порекомендовать формулировать задачу к каждому отдельному тексту следующим образом - выделяется главный запрос и несколько опциональных. В тексте запрос употребляется только в случаях его органичного вхождения в контекст.
Привлекательность контента в деле сбора низкочастотников состоит в том, что для поисковой системы не обязательно наличие словосочетания в исходном виде поискового запроса. Может использоваться другой падеж, другой порядок слов, а в выдаче все будет выглядеть как положено. Думаю, общая идея вам понятна. Да и поисковики уже научились более-менее корректно работать со всей морфологией языка.
Не стоит перегружать текст видоизмененными ключевиками-мастодонтами. Тут уже происходит искуственное завышение частоты ключевых слов. Такие методы раскрутки уж очень не любят поисковики, зачастую помечая (для начала) сайт, а потом и вовсе переставая его индексировать.Употребление фразы “оптимизация и продвижение сайта в интернете” 5-7 раз в различных падежах в тексте объемом в полторы-две тысячи знаков не возбуждает. Ни читателя, ни поисковые системы.
Будьте настоящими. Это мгновенно оценят Ваши читатели и… не удивляйтесь, поисковые машины.
Этимология слова "очевидно" - весьма проста и доступна. "Оче" - "видно" - видно очами, или говря современным языком, то, что очевидно, мы можем увидеть глазами или сознанием, совершенно не напрягая при этом ни первое, ни второе. Возвращаясь к теме статьи - очевидным проявлением раскрученности сайта, является как раз видимость оного сайта в Сети, иными словами "легкая находимость" в бездонном болоте Интернета. Сайт можно легко найти - значит он раскручен. Это очевидно.
Под этим самым, легко найти, подразумевается очень широкий спектр своиств: высокие позициии сайта в поисковых системах и каталогах, множество ссылающихся баннеров на популярных сайтах и пр. и пр. и пр.
Но зачем я рассказываю вам то, что вы и так знаете? Ничего особенного, просто маленькое прояснение ситуации, прежде чем я открою вам глаза на то, как неочевидное становится главенствующим, когда мы смотрим на раскрутку сайта не как на что-то абстрактное, а как на нормальный компонент рекламной политики компании, в который вложены деньги. И который, опять-таки, нормально и без суеты должен эти денюжки отработать и принести нормальную русскую прибыль, обычно исчисляюмую сотнями процентов.
Итак, вы предприниматель, и вы хотите иметь хорошо раскрученный ресурс, представляющий вашу фирму в сети. И целью данного ресурса, является ни больше, не меньше, а привлечение новых клиентов на ваши товары и услуги. Клиенты - это деньги, а деньги - это хорошо. Цели поставлены - начинаем достигать. Все неочевидное постараюсь изложить в порядке возрастания неочевидности.
Раскрутка начинается с создания
И сразу же первый неочевидный аспект - сайт который нравится вам и вашей секретарше может быть совершенно непригоден для раскрутки. Не буду здесь детализировать основные ошибки при создании сайта - сеть просто наводнена подобными перечнями, да и ваш покорный слуга уже не раз писал о несомненной пользе для раскрутки, фреймовых структур, двухсоткилобайтных заставок, и прочих недоразумений горе-сайтостроителей. Просто дам один совет - заказывайте создание сайта там же, где вы планируете заказывать его раскрутку - сэкономите дважды. Первый раз, когда получите скидку за комплексный заказ. Второй раз на том, что не прийдется все переделывать заново (то что переделывать обязательно прийдется, вам подтвердит любой, кто уже имел с этим дело).
Баннеры и Эрмигурт
Баннеры, баннеры- Я здесь предвзят - каюсь - я не люблю баннеры. Равно как не люблю рекламу "Эрмигурта". Я не смотрю на баннеры, я по ним не кликаю, Эрмигурт я не покупаю принципиально, хотя йогурты люблю. Мои знакомые не смотрят на баннеры и не кликают по ним. Когда я работаю через диалап, то частенько отключаю графику вообще. Но- Я не могу отрицать эффективность баннерной рекламы в приложеннии к раскрутке сайта и при определенных условиях.
Условие - баннеры наиболее эффективны, когда они размещены на ресурсе, тематически родственном вашему. Пожалуй, это единственный случай когда я рекомендовал бы финансировать баннерную рекламу. Пусть даже подобное размещение баннеров будет дороже (иногда это вообще невозможно, например когда все родственные ресурсы - это сайты ваших конкурентов) нежели в баннерных сетях. И как правило, это означает индивидуальные переговоры, относительно условий размещения (положение на странице, стоимость) ваших рекламных баннеров, с администрацией каждого сайта в отдельности, в противоположность автоматизированному выбросу в баннерные сети.
Хотя есть неочевидная полезность и баннерных сетей - переходов из оных сетей кот наплакал (по некоторым тематикам имеются исключения), ссылки, ведущие на ваш сайт, могут дать заметный прирост индекса цитирования в некоторых поисковиках. В общем, баннерные сети - хороший дополнительный ускоритель для молодых ресурсов. Но не более того.
Top 10 - "хорошо" или "отлично"?
Моя любимая тема. То что вы всегда хотели узнать, но боялись об этом спросить. А если бы даже и спросили- Ну вы понимаете - рынок есть рынок.
"Мы поможем Вашему сайту попасть в первую десятку ведущих поисковых машин-" "Так как мы используем только честные методы раскрутки, мы можем гарантировать только попадание на одну из первых трех страниц-" "Раскрутка всего за 30 долларов-" Надо ли мне писать о том, Матрица вас имеет? Или вы уже сами это ощущаете?
Как вы уже догадались, речь пойдет о поисковых рейтингах или назовите их как угодно, но суть здесь в том, что за исключением, пожалуй, только постоянного контингента на информационных, развлекательных и прочих часто обновляемых ресурсах ресурсах, наибольшую часть посетителей вашего сайта (и что особенно важно - целевых посетителей) составят именно люди, пришедшие по ссылке из поисковых систем. Когда я пишу это, я имею ввиду, что ваш сайт - это просто некий сайт, рекламирующий услуги и деятельность вашей фирмы.
Эти люди - это ваши клиенты. Это "активные" клиенты. Клиенты, которые сами ищут то, что можете предложить им вы. Я люблю таких клиентов. Вам не надо их в чем-то убеждать, вы можете им просто предложить то, что у вас есть. И если условия их устраивают, они это купят.
Итак, вы решили потратиться и заполучить-таки заветное место в первой десятке по паре-тройке словосочетаний, скажем в Яндексе. И сразу же: Яндекс (Гугль, Рамблер) не приветствует, когда деньги, по праву принадлежащие ему, уплывают куда-то в сторону - и постоянно, мягко, но настойчиво предлагает свою рекламную систему Яндекс.Директ. Но ответьте мне, только честно, часто вы пользуютесь ссылками, выдаваемыми Директом? Вот и я тоже. То ли, это особенности национального менталитета - не смотреть на то, что "подсовывают", а только на то, что найдено самим. То ли, визуально это как-то криво расположено- Факт состоит в том, что за деньги, потраченные на Директ вы получите рекламу- ровно на эти деньги. Как это ни печально, но всенародно-любимый эффект халявы здесь отсутствует.
"Мы гарантируем вам попадание в первую-" - давайте посмотрим, можно ли это гарантировать вообще? Есть Директ от создателей Яндекса. Надежно. Гарантированно. Но за него надо платить постоянно. И есть некая promo-фирма, предлагающая, заплатить один раз и через пару месяцев (это средний срок раскрутки, после которого начинается массовый приток посетителей из поисковых машин) воссиять на небесводе Рунета. Так могут ли они гарантировать это? Возможно ли в принципе гарнтировать что-либо подобное, имея в виду, что алгоритмы ранжирования сайтов тем же Яндексом - тайна за семью печатями. Ответ здесь где-то посередине между ДА и НЕТ. ДА - потому что кто-то в этих топах определенно находится. НЕТ - потому, что есть элемент тайны и везения. И ВОЗМОЖНО - потому, что- просто потому, что это возможно. Все это вопрос времени, денег и целесообразности. Именно целесообразность и эффективность интернет-рекламы - вот самая очевидная неочевидность. И я перехожу к самому неочевидному аспекту, коим вышеупомянутая целесообразность и является.
Как вы думаете, как быстро окупятся средства вложенные на попадание вашего сайта(ов) в первую десятку поисковых машин?
Какие это средства?
Хорошо, прийдется вам поверить мне на слово - гарантированное попадание в первые строки списка, выдаваемого поисковой машиной в ответ на словосочетания, соответствующие роду деятельности вашей компании (а я настаиваю на том, что это самый эффективный вид интернет-рекламы) обойдется вам в несколько тысяч долларов ($3.000 - $10.000 в зависимости от типа деятельности, представленности конкурентов в Сети и т.п.) и пару-тройку месяцев (две-три недели если оооооччень повезет) ожидания до получения нужного эффекта. Я вижу ваши круглые глаза, но "лекарство такого уровня, такого класса-". Это просто реальные деньги, которые весьма близки к себестоимости подобного проекта. Как правило это предполагает создание нескольких сайтов и огромный объем работы по их раскрутке.
Вы готовы платить подобные деньги?
Возможно, вы рассуждаете так: "Ага, я продаю машины. Слово машина в прошлом месяце запрашивали в Яндексе (статистика общедоступна), ну скажем, 25.000 раз. Следовательно, попадание на первую страницу в поисковой машине даст мне, примерно 5.000 посетителей. Первая десятка обеспечит 15.000..". Стоп!
Я хочу купить машину. Мои действия:
* иду на свой-любимый-поисковик.ru
* набираю "машина"
* просматриваю сайты из выданного списка по-порядку, начиная с первого (здесь я намеренно взял упрощенный пример)
* если я достаточно терпелив, то просматриваю, скажем, первые тридцать сайтов.
* я нашел то, что нужно - звоню - еду - покупаю машину
* не найдя желаемое, возвращаюсь к п. 2 и набираю "купить машину" (если я в Интернете недавно) или что-то типа "продажа машин" (если хоть какой-то опыт работы с поисковиками имею).
* Повторяю просмотр.
И ВНИМАНИЕ! - ЕСЛИ Я УЖЕ НА ПЕРВОМ САЙТЕ ИЗ СПИСКА НАХОЖУ ТО ЧТО МНЕ НУЖНО, ТО ДАЛЬШЕ Я НИЧЕГО СМОТРЕТЬ И ИСКАТЬ НЕ БУДУ.
Возможно, пример с машинами не самый удачный (хотя почему бы мне и не наткнуться на первом же сайте на рельную распродажу автомобилей по бросовым ценам) Но, надеюсь, что основную идею я все-таки донес. Если нет, то еще раз но другими словами.
ВАШ САЙТ БУДЕТ ГАРАНТИРОВАННО ПРОСМОТРЕН ТОЛЬКО ЕСЛИ ОН НАХОДИТСЯ НА ПЕРВОМ МЕСТЕ В СПИСКЕ.
Иными словами - идеальным вариантом является, когда ваш сайт будет первым и последним на котором побывает ваш клиент. У поисковых машин, кстати идеальная ситуация подобная - они стремятся обеспечить релевантность запросу такого же уровня - первый просмотренный сайт должен являться и последним.
Ваш сайт может быть не просмотрен потенциальным клинтом, несмотря на то, что он высоко ранжируется поисковой системой и даже если он входит в первую тройку-пятерку списка. И это пожалуй самый неочевидный момент в теме раскрутки сайта.
И если за то, что ваш сайт будет "последним среди просмотренных" и самым нужным ответственен контент вашего ресурса. То за попадание на первое место (которое гарантирует просмотр потенциальным целевым клиентом) собственно и отвечает фирма, взявшаяся за раскрутку сайта.
Можно ли гарантировать первое место? Возможно все - вопрос времени, денег и целесообразности.
В заключение. Когда я хочу помотреть свежие обзоры "железа" я иду на www.ixbt.com - и никакие поисковики, индексы цитирования на это не влияют - это просто пример идеально раскрученного ресурса. Правда совсем из другой оперы, но все же.
Хороший сайт нуждается не в раскрутке, а в мощном и быстром сервере ;)