<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code-Is-Art &#187; Переводы</title>
	<atom:link href="http://www.codeisart.ru/rubric/translation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codeisart.ru</link>
	<description>Статьи по SEO, дизайну и программированию. Переводы на веб-тематику. Исследования и наработки в области интернет-технологий.</description>
	<lastBuildDate>Thu, 17 Dec 2009 12:00:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Учет пользователей с ограниченными возможностями при создании веб-сайта</title>
		<link>http://www.codeisart.ru/understanding-disabilities-when-designing-a-website/</link>
		<comments>http://www.codeisart.ru/understanding-disabilities-when-designing-a-website/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 15:55:22 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[Переводы]]></category>
		<category><![CDATA[Различные мысли]]></category>
		<category><![CDATA[Юзабилити]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=825</guid>
		<description><![CDATA[Установлено, что 75%&#160;населения США и&#160;65%&#160;населения Великобритании имеют доступ к&#160;сети Интернет дома. Перед веб-дизайнерами ставится сложная задача&#160;&#8212;&#160;спроектировать интерфейс так, чтобы он&#160;был понятен и&#160;доступен абсолютно всем. Указания WCAG могут помочь веб-дизайнерам создавать понятные сайты, но&#160;мы&#160;должны использовать нечто большее, чем эти указания, если мы&#160;хотим создавать сайты, доступные пользователям с&#160;ограниченными возможностями, использующих специальные средства.
В&#160;этой статье мы&#160;объясним несколько простых методов, [...]]]></description>
			<content:encoded><![CDATA[<p>Установлено, что 75%&nbsp;населения США и&nbsp;65%&nbsp;населения Великобритании имеют доступ к&nbsp;сети Интернет дома. Перед веб-дизайнерами ставится сложная задача&nbsp;&mdash;&nbsp;спроектировать интерфейс так, чтобы он&nbsp;был понятен и&nbsp;доступен абсолютно всем. Указания <a href="http://www.w3.org/TR/WCAG10/full-checklist.html" rel="nofollow">WCAG</a> могут помочь веб-дизайнерам создавать понятные сайты, но&nbsp;мы&nbsp;должны использовать нечто большее, чем эти указания, если мы&nbsp;хотим создавать сайты, доступные пользователям с&nbsp;ограниченными возможностями, использующих специальные средства.</p>
<p>В&nbsp;этой статье мы&nbsp;объясним несколько простых методов, которые, при внедрении в&nbsp;дизайн веб-сайта, увеличат его доступность и&nbsp;полезность для людей со&nbsp;зрительными, слуховыми, физическими, познавательными недостатками или необучаемостью.</p>
<p><span id="more-825"></span></p>
<h3>Небольшая статистика</h3>
<p>В&nbsp;Великобритании:</p>
<ul>
<li>у&nbsp;2&nbsp;млн.&nbsp;жителей нарушения зрения;</li>
<li>9&nbsp;млн.&nbsp;жителей имеют нарушения слуха;</li>
<li>3.4&nbsp;млн.&nbsp;людей имеют физические нарушения;</li>
<li>1.5&nbsp;млн.&nbsp;людей имеют умственные нарушения;</li>
<li>у 6&nbsp;млн.&nbsp;человек дислексия.</li>
</ul>
<p>В&nbsp;США:</p>
<ul>
<li>у&nbsp;10&nbsp;млн.&nbsp;жителей нарушения зрения;</li>
<li>28&nbsp;млн.&nbsp;жителей имеют нарушения слуха;</li>
<li>8&nbsp;млн.&nbsp;людей имеют физические нарушения;</li>
<li>6.8&nbsp;млн.&nbsp;людей имеют умственные нарушения;</li>
<li>у&nbsp;25&nbsp;млн.&nbsp;человек дислексия.</li>
</ul>
<blockquote><p>Обратите внимание&nbsp;&mdash;&nbsp;методы, применяемые для пользователей с&nbsp;ограниченными возможностями, помогут сделать сайт проще в&nbsp;использовании для каждого.</p></blockquote>
<h3>Нарушение зрения&nbsp;&mdash;&nbsp;слепота</h3>
<p>Большинство слепых людей используют особое программное обеспечение для просмотра информации с&nbsp;экрана, такое как <a href="http://www.freedomscientific.com/products/fs/jaws-product-page.asp" rel="nofollow">JAWS</a> или <a href="http://www.gwmicro.com/Window-Eyes/" rel="nofollow">Windows-Eyes</a>, чтобы читать страницы веб-сайта. Кроме того, некоторые пользователи получают доступ к&nbsp;сайтам с&nbsp;помощью <a href="http://en.wikipedia.org/wiki/Braille" rel="nofollow">устройства Брайля</a>, преобразующего текст веб-сайта в&nbsp;<a href="http://ru.wikipedia.org/wiki/%D0%A8%D1%80%D0%B8%D1%84%D1%82_%D0%91%D1%80%D0%B0%D0%B9%D0%BB%D1%8F" rel="nofollow">шрифт Брайля</a>. Однако, люди, владеющие азбукой Брайля, встречаются намного реже&nbsp;&mdash;&nbsp;многие слепые люди потеряли зрение во&nbsp;время жизни, а&nbsp;не&nbsp;с&nbsp;рождения, а&nbsp;следовательно не&nbsp;обучены системе Брайля.</p>
<p>Ключевые методы доступного и&nbsp;практичного дизайна для слепых пользователей:</p>
<h4>Располагайте инструкции перед полями формы</h4>
<p>Так как программное обеспечение для чтения информации с&nbsp;экрана просматривает содержимое в&nbsp;линейном порядке, необходимо размещать важную информацию о&nbsp;требованиях к&nbsp;заполнению поля формы перед самим полем. Если вы&nbsp;сделаете наоборот, слепые пользователи обнаружат специальные требования после того, как они заполнят поле формы.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/disabilities-1.jpg" alt="Инструкции после поля формы" /></p>
<p>Другой пример, при котором появляется та&nbsp;же проблема, возникает, когда звездочка &laquo;обязательное к&nbsp;заполнению поле&raquo; ставится после поля ввода. Пользователи со&nbsp;слепотой не&nbsp;буду знать, что поле формы обязательно для заполнения, пока не&nbsp;переместятся к&nbsp;следующему.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/disabilities-2.jpg" alt="Звездочка обязательного поля за полем формы" /></p>
<p>Для повышения доступности и&nbsp;практичности для пользователей, страдающих слепотой, требования к&nbsp;заполнению поля формы должны располагаться перед самим полем. Если пользователю необходимо ввести данные в&nbsp;поле формы, то&nbsp;звездочку необходимо поставить внутри подписи к&nbsp;полю. Для большего увеличения доступности и&nbsp;практичности можно поставить перед формой заметку, объясняющую пользователям, что звездочка обозначает обязательное для заполнения поле.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/disabilities-3.jpg" alt="Инструкции и звездочка после поля формы" /></p>
<h4>Создание ссылки &laquo;перейти к&nbsp;основному контенту&raquo;</h4>
<p>Для пользователей, страдающих слепотой, очень полезной будет ссылка &laquo;перейти к&nbsp;основному контенту&raquo;, позволяющая перепрыгнуть через длинную навигацию к&nbsp;главной информации веб-страницы, уменьшая количество содержимого, которое им&nbsp;нужно прослушать. Более того, если на&nbsp;сайте есть часто используемые функции, например, поиск, также будет полезно иметь ссылки для перехода к&nbsp;этим функциям.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/disabilities-4.jpg" alt="Полезные ссылки для перехода" /></p>
<h4>Убедитесь, что текст ссылок информативен</h4>
<p>Слепые пользователи, использующие ПО&nbsp;<a href="http://www.freedomscientific.com/products/fs/jaws-product-page.asp" rel="nofollow">JAWS</a>, могут слушать называния ссылок на&nbsp;веб-странице через опцию &laquo;список ссылок&raquo;. Если текст ссылки неинформативен&nbsp;&mdash;&nbsp;в&nbsp;нем используются лишь фразы вида &laquo;нажмите сюда&raquo; или &laquo;подробнее&raquo;, слепые пользователи никак не&nbsp;смогут определить, куда приведет их&nbsp;эта ссылка.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/disabilities-5.jpg" alt="Список ссылок в JAWS" /></p>
<p>При использовании этой опции рекомендуется писать в&nbsp;тексте ссылки место её&nbsp;назначения. Например, вместо &laquo;нажмите здесь, чтобы узнать больше об&nbsp;Agoo IT&raquo; было&nbsp;бы лучше написать: &laquo;узнайте больше о&nbsp;Agoo IT&raquo;. Слова &laquo;нажмите здесь&raquo; убраны из&nbsp;второго варианта, так как это термин, относящийся к&nbsp;работе с&nbsp;мышкой.</p>
<h4>Создавайте информативные заголовки веб-страниц</h4>
<p>Первое, что услышит пользователь читающего ПО&nbsp;при открытии страницы&nbsp;&mdash;&nbsp;это ее&nbsp;<code>&lt;title&gt;</code>. Следовательно, важно использовать заголовок, который отражает содержимое веб-страницы. Например, страница с&nbsp;контактной информацией должна иметь заголовок &laquo;Наши контакты&raquo;. Слепые пользователи после прослушивания заголовка страницы должны точно определить, попали&nbsp;ли они на&nbsp;правильную страницу и&nbsp;хотят&nbsp;ли прослушать ее&nbsp;содержимое.</p>
<h4>Используйте сжатый альтернативный текст</h4>
<p>Слепые пользователи узнают, что изображено на&nbsp;картинке по&nbsp;ее&nbsp;альтернативному тексту. Когда изображение несет важную информацию, к&nbsp;нему необходимо добавить краткий подходящий альтернативный текст. Например, логотип веб-сайта компании &laquo;ЭЮЯ&raquo; должен быть обозначен, как <code>alt="Компания ЭЮЯ"</code>. Размещение слишком большого количества информации, как, например, &laquo;Компания ЭЮЯ, синий фон с&nbsp;фиолетовым текстом и&nbsp;желтой подсветкой&raquo; может запутать слепых пользователей.</p>
<p>В&nbsp;случае, если изображение чисто декоративное или использовано для разметки, к&nbsp;нему нужно добавить пустой альтернативный текст: alt=&laquo;&raquo;. Тогда этого читающее экран ПО&nbsp;не&nbsp;будет произносить название файла с&nbsp;изображением.</p>
<h4>Создавайте информативные заголовки</h4>
<p>Важно создавать наглядные заголовки, которые семантически отмечаются тегами от&nbsp;<code>&lt;h1&gt;</code> до&nbsp;<code>&lt;h6&gt;</code>. Слепые пользователи часто прослушивают заголовки отдельно от&nbsp;основного содержимого страницы, с&nbsp;помощью списка заголовков. Это позволяет получить быстрый доступ именно к&nbsp;той информации, которая нужна пользователю, вместо прослушивания всей веб-страницы.</p>
<p>Тег <code>&lt;h1&gt;</code> должен содержать главный заголовок, чтобы можно было быстро определить о&nbsp;чем рассказывается на&nbsp;странице.</p>
<h4>Создавайте аудио описание и&nbsp;транскрипции видео файлов</h4>
<p>Слепые пользователи используют аудио описания, чтобы получить дополнительную информацию о&nbsp;важной визуальной составляющей, показываемой в&nbsp;видеофайле. Например, в&nbsp;сцене погони, когда в&nbsp;качестве звукового сопровождения используется только музыкальный фрагмент, необходимо использовать аудио описание, чтобы передать происходящие события, такие как &laquo;два вора спускаются по&nbsp;лестнице, спасаясь от&nbsp;полиции&raquo;&nbsp;&mdash;&nbsp;потому что слепые пользователи не&nbsp;смогут понять, о&nbsp;чем рассказывается в&nbsp;видео файле, слушая только его звуковое сопровождение.</p>
<p>Другая полезная опция для аудио и&nbsp;видео содержимого&nbsp;&mdash;&nbsp;это транскрипции. Транскрипции&nbsp;&mdash;&nbsp;это записанные сводки аудио и&nbsp;видео контента, которые могут содержать дополнительную информацию, такую как комментарии или описания, чтобы может помочь лучше понять содержимое. Транскрипции позволяют слепым пользователям получать доступ к&nbsp;аудио и&nbsp;видео контенту альтернативным способом.</p>
<h5>Помните, что слепые пользователи не&nbsp;могут использовать мышь</h5>
<p>Важно не&nbsp;забывать, что слепые пользователи не&nbsp;используют мышь&nbsp;&mdash;&nbsp;они применяют клавиатуру для навигации по&nbsp;веб-сайту. Поэтому необходимо, чтобы весь функционал и&nbsp;информация сайта, включая управление видео в&nbsp;медиа-плеерах на&nbsp;сайте, были доступны с&nbsp;помощью клавиатуры.</p>
<h3>Нарушения зрения&nbsp;&mdash;&nbsp;слабое зрение</h3>
<p>Люди со&nbsp;слабым зрением используют увеличительное программное обеспечение, чтобы облегчить просмотр веб-сайта. В&nbsp;зависимости от&nbsp;серьезности нарушения зрения, они могут комбинировать увеличительное и&nbsp;читающее экран программное обеспечение, используя такие продукты, как Supernova или ZoomText. При небольших проблемах со&nbsp;зрением пользователи могут просто увеличить размер текста по&nbsp;умолчанию в&nbsp;настройках своих браузеров или изменить цвет, чтобы сделать содержимое сайта удобнее для чтения.</p>
<p>Ключевые принципы доступного и&nbsp;практичного дизайна для пользователей со&nbsp;слабым зрением:</p>
<h4>Не&nbsp;используйте изображения с&nbsp;текстом</h4>
<p>Если это возможно, избегайте изображений с&nbsp;текстом, вместо них лучше применять специально настроенный HTML. Изображения с&nbsp;текстом мешают всем пользователям с&nbsp;нарушениями зрения. Для тех, кто использует увеличивающее ПО,&nbsp;качество изображения потеряется при увеличении, а&nbsp;это сделает текст трудночитаемым. Кроме того, на&nbsp;изображения с&nbsp;текстом не&nbsp;будут влиять цвета, настроенные в&nbsp;веб-браузере или увеличение текста.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/disabilities-6.jpg" alt="Ухудшенное качество увеличенного текста" /></p>
<h4>Убедитесь, что размер текста можно изменять</h4>
<p>Если создавать контент, размер которого может меняться, пользователи с&nbsp;нарушениями зрения будут менять величину текста на&nbsp;веб-странице, чтобы сделать его более читаемым.</p>
<h4>Размещайте ключевую информацию в&nbsp;специальных местах экрана</h4>
<p>Пользователи, которые используют увеличивающее ПО&nbsp;могут видеть только небольшую часть веб-страницы в&nbsp;каждый момент времени и&nbsp;буду искать контент и&nbsp;функционал сайта в&nbsp;специальных местах. Например, функция поиска по&nbsp;веб-сайту обычно располагается в&nbsp;правом верхнем углу страницы, если она находится где-нибудь ещё, то&nbsp;ее&nbsp;могут пропустить.</p>
<h4>Используйте цвета с&nbsp;высоким контрастом</h4>
<p>Для повышения читабельности сайта для людей с&nbsp;нарушениями зрения, убедитесь, что цвета, применяемые на&nbsp;сайте, имеют хороший контраст. Этого можно достичь, проверив выбранные цвета с&nbsp;помощью Juicy Studio color contrast analyzer. Тестируя различные сочетания основного и&nbsp;фонового цветов можно определить, соответствуют&nbsp;ли выбранные цвета рекомендациям WCAG. Кроме того, можно сделать несколько различных цветовых схем, чтобы облегчить читаемость.</p>
<h3>Нарушения слуха</h3>
<p>Люди с&nbsp;нарушениями слуха обычно не&nbsp;пользуются вспомогательным программным обеспечением для улучшения просмотра сайтов. Вместо этого, им&nbsp;требуются сайты, представляющие аудио контент в&nbsp;альтренативных форматах, таких как титры или расшифровки.</p>
<p>Делая аудио контент доступным для пользователей с&nbsp;нарушениями слуха, вы&nbsp;также повышаете его доступность для остальных пользователей, которые находится в&nbsp;ситуации, при которой аудио информацию нельзя прослушать. Например, они могут смотреть видео с&nbsp;выключенным звуком в&nbsp;библиотеке или находиться в&nbsp;шумном месте, где сложно услышать что-либо, могут пользоваться компьютером без аудио колонок.</p>
<p>Ключевые принципы доступного и&nbsp;практичного дизайна для пользователей со&nbsp;нарушениями слуха:</p>
<h4>Создавайте титры для любого видео контента</h4>
<p>Титры создаются вместе с&nbsp;самим видео контентом. Они должны быть синхронизированы с&nbsp;аудио так, чтобы содержимое было целиком понятно без звука.</p>
<h4>Создавайте расшифровки исполняемого аудио</h4>
<p>Если контент роговаривается без видео, как например в&nbsp;подкастах, важно сделать расшифровку. Рекомендуется создавать расшифровки с&nbsp;помощью простого и&nbsp;доступного HTML, а&nbsp;не&nbsp;в&nbsp;виде документа Microsoft Word или Adobe PDF, чтобы как можно более широкая публика получила доступ к&nbsp;ним.</p>
<h3>Физические нарушения</h3>
<p>Люди с&nbsp;физическими нарушениями варьируются от&nbsp;тех, кто имеет временные повреждения, например сломаную руку, до&nbsp;людей с&nbsp;параличем, которые не&nbsp;могут пользоваться ни&nbsp;одной конечностью. В&nbsp;зависимости от&nbsp;тяжести физического нарушения эти пользователи могут заходить на&nbsp;веб-сайты, используя распознающее голос ПО,&nbsp;например Dragon Naturally Speaking. Однако имеется то,&nbsp;что объединяет всех пользователей с&nbsp;физическими нарушениями&nbsp;&mdash;&nbsp;ограничение или отсутствие возможности использования мыши. Это означает, что контент веб-сайта, требующий клика мышкой или хорошей моторики недоступен таким пользователям.</p>
<p>Ключевые принципы доступного и&nbsp;практичного дизайна для пользователей с&nbsp;физическими нарушениями:</p>
<h4>Убедитесь, что весь контент может быть доступен с&nbsp;помощью клавиатуры</h4>
<p>Пользователи с&nbsp;физическими нарушениями имеют ограничения или отсутствие возможности пользования мышкой, и&nbsp;поэтому перемещаются по&nbsp;веб-сайтам с&nbsp;помощью клавиатуры. Функции, зависимые от&nbsp;мышки, такие как обработчик события onchange, обычно используемое с&nbsp;выпадающими меню, осложняют работу при использовании клавиатуры (как только пользователь перемещается на&nbsp;выпадающее меню и&nbsp;нажимает стрелку вниз для выбора, событие onchange мгновенно запускается, и&nbsp;в&nbsp;результате автоматически выбирается первая строка, вне зависимости от&nbsp;того, что хотел пользователь).</p>
<h4>Создавайте состояние focus для ссылок</h4>
<p>Так как пользователи с&nbsp;физическими нарушениями постоянно пользуются клавиатурой для всех действий, важно создавать состояние :focus для ссылок. Это можно осуществить, присваивая другой стиль текста ссылке, из-за чего при наведении курсора цвет или что-либо другое изменяется и&nbsp;делает понятным то,&nbsp;где находится пользователь на&nbsp;странице. Если вставить в&nbsp;CSS следующий пример, ссылки будут становиться черными при наведении курсора либо мышкой, либо клавиатурой.</p>
<pre><code class="css">a:hover, a:focus, a:active {color: #000000;}</code></pre>
<p>В&nbsp;результате получится:</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/disabilities-7.jpg" alt="Ссылка с наведением и без него" /></p>
<h4>Создавайте видимые ссылки перехода</h4>
<p>Ссылки перехода&nbsp;&mdash;&nbsp;это ссылки, становящиеся видимыми при наведении и&nbsp;помогающие пользователям с&nbsp;физическими нарушениями. Пользователи, использующие клавиатуру, должны проходить всю страницу, чтобы добраться до&nbsp;ссылки, которая их&nbsp;интересует, а&nbsp;ссылки перехода позволяют обойти долгую навигацию и&nbsp;уменьшить количество нажатий клавиш, требующееся для нажатия нужной ссылки.</p>
<h4>Убирайте двигающиеся объекты</h4>
<p>Не&nbsp;используйте двигающиеся цели, такие как маятники, потому что они могут показаться пользователям с&nbsp;физическими нарушениями слишком трудными для использования. При пониженной моторике сложно четко контролировать движение мышки и&nbsp;нажимать на&nbsp;объект, пока он&nbsp;перемещается; пользователям, работающим с&nbsp;помощью клавиатуры, может не&nbsp;хватить времени для наведения на&nbsp;нужный объект, пока он&nbsp;не&nbsp;скроется из&nbsp;виду.</p>
<h4>Создавайте большие активные области</h4>
<p>Некоторые пользователи с&nbsp;физическими нарушениями будут использовать мышь для доступа к&nbsp;веб-сайтам. Так как у&nbsp;них снижена моторика, важно, чтобы текст мог быть увеличен для облегчения нажатия на&nbsp;ссылку. Для большего увеличения удобства, сделаете достаточно пробелов между ссылками. Это позволит понизить предел погрешности, а&nbsp;значит пользователь не&nbsp;будет случайно нажимать неправильную ссылку.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/disabilities-8.jpg" alt="Ссылки расположены слишком близко друг к другу" /><br />
<img src="http://www.codeisart.ru/wp-content/uploads/2008/11/disabilities-9.jpg" alt="Ссылки с достаточным растоянием" /></p>
<h4>Правильно называйте ссылки на&nbsp;изображения и&nbsp;элементы управления</h4>
<p>Пользователи, использующие ПО,&nbsp;распознающее голос, перемещаются по&nbsp;веб-сайтам, говоря слова для активирования ссылок и&nbsp;элементов управления. Произносимые слова в&nbsp;основном не&nbsp;отличаются от&nbsp;тех, что показаны на&nbsp;веб-сайте. Поэтому важно убедиться, что все кнопки и&nbsp;изображения на&nbsp;форме корректно созданы, и&nbsp;их&nbsp;название совпадает с&nbsp;текстом или картинкой. Например, если на&nbsp;сайте есть кнопка &laquo;Купить&raquo;, пользователь скажет слово &laquo;Купить&raquo; для нажатия этой кнопки, но&nbsp;если имя кнопки &laquo;Приобрести&raquo;, то&nbsp;пользователь не&nbsp;сможет нажать на&nbsp;нее.</p>
<h3>Нарушения познавательных способностей и&nbsp;необучаемость</h3>
<p>Люди с&nbsp;нарушениями познавательных способностей и&nbsp;необучаемостью могут иметь проблемы с&nbsp;памятью, решением задач, восприятием и&nbsp;и&nbsp;мышлением. Кроме того, страдающие необучаемостью люди могут испытывать трудности при чтении и&nbsp;понимании (дислексия. В&nbsp;целях повышения доступности веб-сайта важно, чтобы содержание было написано простым языком, разметка страницы была несложной, навигация&nbsp;&mdash;&nbsp;понятной и&nbsp;единообразной, а&nbsp;движущиеся объекты отсутствовали и&nbsp;не&nbsp;нарушали восприятие.</p>
<p>Есть несколько других важных принципов доступного и&nbsp;практичного дизайна для пользователей с&nbsp;нарушениями познавательных способностей и&nbsp;необучаемостью:</p>
<h4>Создайте единоообразный дизайн</h4>
<p>Придерживайтесь одного внешнего вида и&nbsp;смысла на&nbsp;всех страницах веб-сайта. Проследите, чтобы вся навигация и&nbsp;главное содержимое находились в&nbsp;одних местах на&nbsp;каждой странице. Кроме того, выберите цветную раскраску различных секций веб-сайта. Пользователи с&nbsp;нарушениями познавательных способностей и&nbsp;необучаемостью смогут легче перемещаться по&nbsp;секциям, раскрашенным в&nbsp;разные цвета. Этого можно достичь, используя одинаковый цвет фона или баннер наверху каждой страницы в&nbsp;секции.</p>
<h4>Сделайте карту сайта</h4>
<p>Карта сайта позволит пользователям с&nbsp;нарушениями познавательных способностей и&nbsp;необучаемостью четко понять состав всего контента, расположенного на&nbsp;сайте. Она также поможет пользователю напрямую открыть любую страницу сайта, если он&nbsp;потерялся.</p>
<h4>Используйте выровненный слева шрифт без засечек с&nbsp;изменяющимся размером</h4>
<p>С&nbsp;целью увеличения читаемости для пользователей с&nbsp;нарушениями познавательных способностей и&nbsp;необучаемостью, используйте шрифт без засечек, размер которого можно менять. Кроме того, используйте выравнивание слева. Текст труднее читать из-за неровных промежутков между словами. Курсив и&nbsp;заглавные буквы тоже необходимо свести к&nbsp;минимуму для повышения читабельности.</p>
<h4>Создавайте полезные сообщения об&nbsp;ошибках</h4>
<p>Если пользователь делает ошибки, помогите ему, создав полезные сообщения о&nbsp;них. Например, если обязательные поля формы не&nbsp;были заполнены, сообщение об&nbsp;ошибке должно сказать пользователю какие поля необходимо заполнить.</p>
<h4>Предложите словесный вывод</h4>
<p>Например, на&nbsp;сайтах организаций <a href="http://www.browsealoud.com/page.asp?pg_id=80002&amp;tile=UK" rel="nofollow">Browse Aloud</a> и&nbsp;<a href="http://www.textic.com/" rel="nofollow">Textic</a> имеется возможность вслух проговарить содержимое веб-сайта при выделении слов на&nbsp;странице. Использование этой функции особенно полезно для пользователей, которым трудно прочитать большие объемы текста.</p>
<h4>Создавайте различные цветовые схемы</h4>
<p>Людям с&nbsp;нарушениями познавательных способностей может помочь выбор различных цветовых схем.</p>
<h3>Заключение</h3>
<p>Я&nbsp;надеюсь, что эта статья немного объяснила то,&nbsp;как пользователи с&nbsp;различными нарушениями просматривают веб-сайты, и&nbsp;как простые изменения играют большую роль в&nbsp;помощи этим просмотрам. Пока этот список не&nbsp;полон, методы, описанные в&nbsp;статье, могут помочь повысить доступность и&nbsp;удобство веб-сайтов для людей со&nbsp;зрительными, слуховыми, физическими, познавательными нарушениями и&nbsp;необучаемостью.</p>
<p>Английская версия статьи&nbsp;&mdash;&nbsp;<a href="http://www.digital-web.com/articles/understanding_disabilities_when_designing_a_website/">Understanding disabilities when designing a website</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/understanding-disabilities-when-designing-a-website/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Все, что вы&#160;знали о&#160;CSS&#160;&#8212;&#160; неправда</title>
		<link>http://www.codeisart.ru/everything-you-know-about-css-is-wrong/</link>
		<comments>http://www.codeisart.ru/everything-you-know-about-css-is-wrong/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 11:00:17 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Переводы]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=814</guid>
		<description><![CDATA[После релиза, IE8&#160;будет поддерживать множество новых параметров для аттрибута дисплея CSS, включая параметры, относящиеся к&#160;таблицам: table, table-row и&#160;table-cell&#160;&#8212;&#160;и&#160;это последний крупный браузер с&#160;их&#160;поддержкой. Это событие обозначит конец сложных методов CSS&#160;разметки и&#160;забьет последний гвоздь в&#160;гроб использования HTML таблиц для верстки. В&#160;итоге, создание сеток разметки табличного вида будет быстрее и&#160;проще.
Применение параметров табличных аттрибутов к&#160;элементам веб-страницы заставляет элементы подражать [...]]]></description>
			<content:encoded><![CDATA[<p>После релиза, <abbr title="Internet Explorer 8">IE8</abbr>&nbsp;будет поддерживать множество новых параметров для аттрибута дисплея CSS, включая параметры, относящиеся к&nbsp;таблицам: <code>table</code>, <code>table-row</code> и&nbsp;<code>table-cell</code>&nbsp;&mdash;&nbsp;и&nbsp;это последний крупный браузер с&nbsp;их&nbsp;поддержкой. Это событие обозначит конец сложных методов CSS&nbsp;разметки и&nbsp;забьет последний гвоздь в&nbsp;гроб использования HTML таблиц для верстки. В&nbsp;итоге, создание сеток разметки табличного вида будет быстрее и&nbsp;проще.</p>
<p>Применение параметров табличных аттрибутов к&nbsp;элементам веб-страницы заставляет элементы подражать свойствам изображения с&nbsp;помощью их&nbsp;табличных эквивалентов. В&nbsp;этой статье я&nbsp;покажу каким образом это будет оказывать большое влияние на&nbsp;способы использования CSS для разметки веб-страниц.</p>
<p><span id="more-814"></span></p>
<p>CSS таблицы решают все проблемы, появляющиеся при использовании абсолютной системы коодинат или флоатов, для создания многострочной разметки в&nbsp;современных браузерах. Задание параметра <code>table</code> для аттрибута <code>display</code> позволит вам отобразить элементы так, как будто они являются элементами таблицы. Главное преимущество табличной разметки CSS&nbsp;&mdash;&nbsp;это возможность легкого определения границ клетки, позволяющее нам добавить к&nbsp;ней фон и&nbsp;прочее без семантических проблем выделения нетабличных элементов, как в&nbsp;HTML таблице документа.</p>
<pre><code class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"&gt;
  &lt;head&gt;
    ⋮ HTML head content…
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id="wrapper"&gt;
      &lt;div id="header"&gt;&lt;/div&gt;
      &lt;div id="main"&gt;
        &lt;div id="nav"&gt;
          ⋮ navigation column content…
        &lt;/div&gt;
        &lt;div id="extras"&gt;
          ⋮ news headlines column content…
        &lt;/div&gt;
        &lt;div id="content"&gt;
          ⋮ main article content…
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>HTML код определяет нужный порядок вывода данных. Первой идет столбец <i>nav</i>, затем <i>extras</i>, последним идет <i>content</i>.</p>
<p>Также нам необходимо написать требуемый CSS код:</p>
<pre><code class="css">#main {
  display: table;
  border-collapse: collapse;
} 

#nav {
  display: table-cell;
  width: 180px;
  background-color: #e7dbcd;
} 

#extras {
  display: table-cell;
  width: 180px;
  padding-left: 10px;
  border-right: 1px dotted #d7ad7b;
} 

#content {
  display: table-cell;
  width: 380px;
  padding-left: 10px;
}</code></pre>
<p>Только что созданная нами <strong class="normal">табличная разметка</strong> будет корректно отображаться как в&nbsp;<abbr title="Internet Explorer 8">IE8</abbr>,&nbsp;так и&nbsp;в&nbsp;Firefox, Safari и&nbsp;Opera.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/css-table1.png" alt="Табличная CSS разметка" width="500" height="410" /></p>
<p>Мы&nbsp;получили разметку из&nbsp;трех столбцов равной высоты без применения особых приемов, таких как ложных столбцов с&nbsp;помощью фоновых рисунков, проблем с&nbsp;размещением или необходимости очищать <code>floats</code>!</p>
<h3>Как это работает?</h3>
<p>Аттрибут <code>display</code> позволяет вам задать ряд табличных параметров, чтобы отображать элементы так, как будто они являются элементами таблицы. Вот доступные параметры отображения:</p>
<ul>
<li><code>table</code> заставляет элемент вести себя, как элемент таблицы;</li>
<li><code>table-row</code> заставляет элемент вести себя, как элемент строки таблицы;</li>
<li><code>table-cell</code> заставляет элемент вести себя, как элемент ячейки таблицы;</li>
<li><code>table-row-group</code> заставляет элемент вести себя, как элемент группы строк таблицы;</li>
<li><code>table-header-group</code> заставляет элемент вести себя, как элемент группы заголовков таблицы;</li>
<li><code>table-footer-group</code> заставляет элемент вести себя, как элемент группы нижнего колонтитула;</li>
<li><code>table-caption</code> заставляет элемент вести себя, как элемент заголовка таблицы;</li>
<li><code>table-column</code> заставляет элемент вести себя, как элемент столбца таблицы;</li>
<li><code>table-column-group</code> заставляет элемент вести себя, как элемент группы столбцов таблицы.</li>
</ul>
<h3>Подождите, разве разметка таблицами&nbsp;&mdash;&nbsp;это правильно?</h3>
<p>Допустим, что вы&nbsp;не&nbsp;совсем согласны с&nbsp;примером, который мы&nbsp;только что привели&nbsp;&mdash;&nbsp;в&nbsp;конце концов, разве зашитники веб стандартов не&nbsp;настаивали годами на&nbsp;том, что вы&nbsp;не&nbsp;должны использовать таблицы для разметки?</p>
<p>HTML элемент <code>table</code>&nbsp;&mdash;&nbsp;это семантическая структура: он&nbsp;описывает, что из&nbsp;себя представляют данные. Поэтому, вам нужно использовать <code>table</code>, только если данные, которые вы&nbsp;размещаете&nbsp;&mdash;&nbsp;табличные, например, финансовая информация. Она обычно размещается на&nbsp;компьютере электронной таблицей, поэтому наверное следует определять её&nbsp;как таблицу в&nbsp;HTML.</p>
<p>С&nbsp;другой стороны, параметр <code>table</code> аттрибута <code>display</code>, просто показывает как что-то должно выглядеть в&nbsp;браузере и&nbsp;не&nbsp;имеет семантического значения!</p>
<blockquote><p>Использование элемента <code>table</code> для вашей разметки говорит агенту пользователя: &laquo;Это табличные данные&raquo;. А&nbsp;применение связки div-ов просит его отборазить их&nbsp;визуально определенным образом, если это возможно.</p></blockquote>
<p>Конечно&nbsp;же, нам не&nbsp;следует использовать <code>display: table;</code> в&nbsp;связке элементов div, когда мы&nbsp;имеем действительно табличные данные. Наш простой пример, описанный выше, заставляет нашу разметку выглядеть так, как будто у&nbsp;нас есть однострочная таблица с&nbsp;тремя ячейками, не&nbsp;требуется большое воображение, чтобы осознать потенциал этой техники для легкого создания комплексных видов разметок.</p>
<h3>Анонимные элементы таблиц</h3>
<p>Таблицы CSS придерживаются обычных правил табличной разметки, которые открывают очень мощное свойство табличных разметок CSS: пропущенные элементы таблиц создаются анонимно самим браузером. Спецификация CSS 2.1&nbsp;утверждает:</p>
<p>Отличные от&nbsp;HTML документальные языки могут не&nbsp;содержать всех элементов модели таблицы CSS 2.1. В&nbsp;этих случаях &laquo;пропущенные&raquo; элементы дожны быть созданы, чтобы табличная модель заработала. Любой элемент таблицы автоматически сгенерирует вокруг себя необходимые анонимные объекты таблицы, состоящие по&nbsp;крайней мере из&nbsp;трех вложенных объектов, соответсвующих элментам &laquo;<code>table</code>&raquo;/&laquo;<code>inline-table</code>&raquo;, &laquo;<code>table-row</code>&raquo;, и&nbsp;&laquo;<code>table-cell</code>&raquo;.</p>
<p>Это значит, что если мы&nbsp;используем <code>display: table-cell;</code> без предварительного размещения ячейки в&nbsp;месте, относящемся к&nbsp;<code>display: table-row;</code>, то&nbsp;строка будет подразумеваться&nbsp;&mdash;&nbsp;браузер будет вести себя так, как будто объявленная строка на&nbsp;самом деле есть.</p>
<p>Давайте используем простой пример, чтобы объяснить этот прием: разметку из&nbsp;трех ячеек, показанную ниже. Мы&nbsp;рассмотрим три разных примера HTML кода, которые приведут к&nbsp;одинаковой визуальной разметке.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/css-table2.png" alt="Табличная CSS разметка - макет" width="600" height="223" /></p>
<p>Сначала пример кода, который может быть использован для создания разметки из&nbsp;трех ячеек:</p>
<pre><code class="html">&lt;div class="container"&gt;
  &lt;div class="row"&gt;
    &lt;div class="cell"&gt;CELL A&lt;/div&gt;
    &lt;div class="cell"&gt;CELL B&lt;/div&gt;
    &lt;div class="cell"&gt;CELL C&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>Набор вложенных элементов div не&nbsp;выглядит как-то особенно, но&nbsp;скоро мы&nbsp;это изменим. CSS тоже очень простой:</p>
<pre><code class="css">.container {
  display: table;
}

.row {
  display: table-row;
}

.cell {
  display: table-cell;
  width: 100px;
  height: 100px;
  border: 1px solid blue;
  padding: 1em;
}</code></pre>
<p>Этот CSS относит элемент с&nbsp;классом &laquo;<code>container</code>&raquo; к&nbsp;<code>display: table;</code>, элемент с&nbsp;классом &laquo;<code>row</code>&raquo; к&nbsp;<code>display: table-row;</code>, а&nbsp;элемент с&nbsp;классом &laquo;<code>cell</code>&raquo;&nbsp;&mdash;&nbsp;к&nbsp;<code>display: table-cell;</code> с&nbsp;заданием его границы, высоты и&nbsp;ширины.</p>
<p>Вышеописанная HTML разметка явно создает элементы для таблицы из&nbsp;строки с&nbsp;тремя ячейками, используя все CSS классы, созданные нами. Однако, мы&nbsp;можем уменьшить код, убирая строковые элементы div вот так:</p>
<pre><code class="html">&lt;div class="row"&gt;
  &lt;div class="cell"&gt;CELL A&lt;/div&gt;
  &lt;div class="cell"&gt;CELL B&lt;/div&gt;
  &lt;div class="cell"&gt;CELL C&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>Несмотря на&nbsp;то,&nbsp;что в&nbsp;этой разметке пропущен элемент, представляющий таблицу, она будет создана браузером, как анонимный элемент. Мы&nbsp;можем ещё сильнее сократить код:</p>
<pre><code class="html">&lt;div class="cell"&gt;CELL A&lt;/div&gt;
&lt;div class="cell"&gt;CELL B&lt;/div&gt;
&lt;div class="cell"&gt;CELL C&lt;/div&gt;</code></pre>
<p>В&nbsp;такой разметке пропущены элементы, описывающие таблицу и&nbsp;её&nbsp;строку, они оба создаются браузером, как анонимные элементы. Даже при пропуске элементов в&nbsp;разметке, конечный результат одинаков.</p>
<h3>Правила создания анонимных элементов таблицы</h3>
<p>Эти анонимные элементы создаются не&nbsp;магией, и&nbsp;они не&nbsp;будут автоматически появляться для любого недостатка вашего HTML кода. Чтобы полностью использовать преимущества анонимных элементов таблицы, желательно ознакомиться с&nbsp;правилами их&nbsp;создания. Если разметка запрашивает предполагаемый элемент, браузер создает анонимную ячейку и&nbsp;записывает ее&nbsp;CSS аттрибуту <code>display</code> одно из&nbsp;значений <code>table</code>, <code>table-row</code>, или <code>table-cell</code>, в&nbsp;зависимости от&nbsp;контекста.</p>
<p>Если у&nbsp;вас есть элемент, определенный, как <code>display: table-cell;</code>, но&nbsp;его непосредственный предок (элемент, содержащий его), не&nbsp;определен, как <code>table-row</code>, будет создан анонимный элемент <code>table-row</code>, чтобы включить в&nbsp;него ячейку и&nbsp;любые последующие родственные элементы, которые также определены <code>table-cell</code>, до&nbsp;тех пор, пока не&nbsp;попадется элемент, не&nbsp;относящийся к&nbsp;<code>table-cell</code>, таким образом они будут помещены в&nbsp;одну и&nbsp;ту&nbsp;же строку. Например, следующая разметка:</p>
<pre><code class="html">&lt;div class="cell"&gt;CELL A&lt;/div&gt;
&lt;div class="cell"&gt;CELL B&lt;/div&gt;
&lt;div class="cell"&gt;CELL C&lt;/div&gt;
&lt;div&gt;Not a cell&lt;/div&gt;</code></pre>
<p>Верхние три элемента div, имеющие класс &laquo;<code>cell</code>&raquo;, определяются в&nbsp;<code>display: table-cell;</code> и&nbsp;будут отображены друг за&nbsp;другом, как если&nbsp;бы они были в&nbsp;однострочной таблице, а&nbsp;последний элемент div не&nbsp;будет включен в&nbsp;ряд, поскольку он&nbsp;не&nbsp;относится к&nbsp;<code>display: table-cell;</code>.</p>
<p>Если элемент относится к&nbsp;<code>display: table-row;</code>, в&nbsp;то&nbsp;время как его предок не&nbsp;определен, как <code>table</code> (или <code>table-row-group</code>), будет создан анонимный элемент, отнесенный к&nbsp;<code>display: table;</code> чтобы включить в&nbsp;него ряд и&nbsp;любые последующие родственные элементы, которые также определены <code>display: table-row;</code>. Также, если элементу, определенному как <code>table-row</code>, не&nbsp;хватает элемента <code>table-cell</code> непосредственно в&nbsp;нем, будет создан анонимный элемент <code>table-cell</code>, чтобы включить в&nbsp;него все элементы, определеные как <code>table-row</code>.</p>
<p>Рассмотрим на&nbsp;примере:</p>
<pre><code class="html">&lt;div class="row"&gt;ROW A&lt;/div&gt;
&lt;div class="row"&gt;ROW B&lt;/div&gt;
&lt;div&gt;Not a row&lt;/div&gt;</code></pre>
<p>Верхние два элемента div, имеющие класс &laquo;<code>row</code>&raquo;, определяются в&nbsp;<code>display: table-row;</code> и&nbsp;будут отображены друг под другом, как если&nbsp;бы они были рядами в&nbsp;одностолбцовой таблице, а&nbsp;последний элемент div не&nbsp;будет включен в&nbsp;эту таблицу.</p>
<p>Аналогично, если элемент отнесен к&nbsp;любому другому параметру <code>display</code> , поддерживающему элементы, которые находятся прямо внутри родительского табличного элемента, такие как <code>table-row-group</code>, <code>table-header-group</code>, <code>table-footer-group</code>, <code>table-column</code>, <code>table-column-group</code> и&nbsp;<code>table-caption</code>, но&nbsp;не&nbsp;имеет предка, опеределенного как <code>display: table;</code>, будет создан анонимный элемент <code>table</code>, чтобы включить в&nbsp;него элемент и&nbsp;любые последующие родственные элементы, с&nbsp;подходящими значениями <code>display</code>.</p>
<h3>Другие полезные аттрибуты таблиц</h3>
<p>При использовании CSS таблиц, из-за того, что элементы соответствуют обычным правилам табличной разметки, вы&nbsp;можете также применять другие табличные CSS аттрибуты. Вот несколько из&nbsp;них, которые могут пригодиться:</p>
<h4>Table-layout</h4>
<p>Присваивание <code>table-layout</code> значение <code>fixed</code> сообщает браузеру, что таблица должна вопроизводиться по&nbsp;фиксированному алгоритму форматирования ширины ячеек. Это полезно в&nbsp;разметке с&nbsp;фиксированной шириной, которую мы&nbsp;создавали ранее.</p>
<h4>Border-collapse</h4>
<p>Так&nbsp;же, как и&nbsp;с&nbsp;обычными HTML таблицами, вы&nbsp;можете использовать аттрибут <code>border-collapse</code> для выбора используемых границ между ячейками таблицы разметки из&nbsp;<code>collapse</code> или <code>separate</code>.</p>
<h4>Border-spacing</h4>
<p>Если вы&nbsp;задали значение <code>separate</code> для аттрибута <code>border-collapse</code>, вы&nbsp;можете использовать аттрибут <code>border-spacing</code> для задания ширины пространства между границами ячеек.</p>
<h4>Создание идеальной сетки</h4>
<p>Создание сетки из&nbsp;равных по&nbsp;высоте элементов всегда было сложностью при использовании традиционных техник CSS разметки, но&nbsp;таблицы CSS очень хорошо подходят для этой задачи. Например, если мы&nbsp;хотим создать галерею картинок, состоящую из&nbsp;сетки изображений с&nbsp;названиями, похожую на&nbsp;нижеизображенную, то&nbsp;использование CSS таблиц сильно облегчает задачу.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/css-table3.png" alt="Табличная CSS разметка - галерея" width="600" height="574" /></p>
<p>Код для нашей галереи выглядит так:</p>
<pre><code class="html">&lt;div class="grid"&gt;
  &lt;div class="row"&gt;
    &lt;div class="image"&gt;
      &lt;img src="images/photo1.jpg" alt="A Lily" /&gt;
      &lt;p&gt;A lily in the gardens of The Vyne Country House&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="image"&gt;
      &lt;img src="images/photo3.jpg" alt="A Fuchsia plant" /&gt;
      &lt;p&gt;Fuchsia plant in my garden&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="row"&gt;
    &lt;div class="image"&gt;
      &lt;img src="images/photo2.jpg" alt="A crazy looking Allium flower" /&gt;
      &lt;p&gt;A crazy looking flower&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="image"&gt;
      &lt;img src="images/photo4.jpg" alt="A Robin sitting on a fence" /&gt;
      &lt;p&gt;
        This robin has been visiting our garden over the summer.
        He is very friendly and doesn't seem to be too worried about sharing the garden with us.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>Каждая ячейка изображения галереи содержит элемент <code>img</code> и&nbsp;заголовка в&nbsp;элементе p,&nbsp;находящегося в&nbsp;div c&nbsp;классом &laquo;<code>image</code>&raquo;. Каждая строка содержится в&nbsp;div с&nbsp;классом &laquo;<code>row</code>&raquo;, а&nbsp;вся галерея располагается в&nbsp;элементе div c&nbsp;классом &laquo;<code>grid</code>&raquo;.</p>
<p>CSS, требуемый для разметки нашей сетки очень прост:</p>
<pre><code class="css">.grid {
  display: table;
  border-spacing: 4px;
}
.row {
  display: table-row;
}
.image {
  display: table-cell;
  width: 240px;
  background-color: #000;
  border: 8px solid #000;
  vertical-align: top;
  text-align: center;
}
.image p {
  color: #fff;
  font-size: 85%;
  text-align: left;
  padding-top: 8px;
}</code></pre>
<p>Этот CSS довольно простой, но&nbsp;вы&nbsp;можете заметить, как мы&nbsp;используем аттрибут <code>border-spacing</code> для управления расстановкой наших ячеек изображений. Это самый легкий способ создания сетки разметки&nbsp;&mdash;&nbsp;и&nbsp;мы&nbsp;предотвратили все проблемы, связанные с&nbsp;равными высотами или хрупкими разметками, создаваемыми с&nbsp;помощью флоатед элементов.</p>
<h3>Применение примеров на&nbsp;практике</h3>
<p>В&nbsp;этой статье были рассмотрены основные примеры использования табличных параметров CSS аттрибута <code>display</code>, служащего долгожданной наградой в&nbsp;борьбе за&nbsp;создание надежных сеток разметки с&nbsp;использованием CSS! Мы&nbsp;разобрали многочисленные табличные параметры <code>display</code>, посмотрели на&nbsp;природу анонимных табличных элементов и&nbsp;открыли несколько полезных свойств таблиц CSS.</p>
<p>Следующий шаг за&nbsp;вами&nbsp;&mdash;&nbsp;в&nbsp;любом случае вы&nbsp;поняли потенциал использования CSS таблиц для создания сеток разметки и&nbsp;теперь сгораете от&nbsp;любопытства. Используя знания, полученные из&nbsp;этой статьи, вы&nbsp;можете начать эксперименты со&nbsp;своими собственными табличными CSS разметками.</p>
<p>Версия на&nbsp;<a href="http://www.digital-web.com/articles/everything_you_know_about_CSS_Is_wrong/">английском</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/everything-you-know-about-css-is-wrong/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Ключевое слово this в JavaScript</title>
		<link>http://www.codeisart.ru/keyword-this-in-javascript/</link>
		<comments>http://www.codeisart.ru/keyword-this-in-javascript/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 23:55:39 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Переводы]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=703</guid>
		<description><![CDATA[Слово this является одним из&#160;наиболее мощных ключевых слов JavaScript. Но&#160;могут возникнуть трудности с&#160;его использованием, если вы&#160;точно не&#160;знаете, как оно работает и&#160;где применяется.
В этой статье я&#160;расскажу, как использовать ключевое слово this в&#160;обработке событий.

Опытным программистам быть может данная статья не&#160;принесет никакой опльзы, но&#160;новичкам несомненно будет полезно ее&#160;изучить.
Владелец
Вопрос, который мы&#160;рассмотрим в&#160;этом пункте&#160;&#8212; это &#171;К&#160;чему мы&#160;обращаемся через ключевое слово [...]]]></description>
			<content:encoded><![CDATA[<p>Слово <code>this</code> является одним из&nbsp;наиболее мощных ключевых слов JavaScript. Но&nbsp;могут возникнуть трудности с&nbsp;его использованием, если вы&nbsp;точно не&nbsp;знаете, как оно работает и&nbsp;где применяется.</p>
<p>В этой статье я&nbsp;расскажу, как использовать ключевое слово <code>this</code> в&nbsp;обработке событий.</p>
<p><span id="more-703"></span></p>
<p>Опытным программистам быть может данная статья не&nbsp;принесет никакой опльзы, но&nbsp;новичкам несомненно будет полезно ее&nbsp;изучить.</p>
<h3>Владелец</h3>
<p>Вопрос, который мы&nbsp;рассмотрим в&nbsp;этом пункте&nbsp;&#8212; это &laquo;К&nbsp;чему мы&nbsp;обращаемся через ключевое слово <code>this</code> в&nbsp;функции <code>doSomething()</code>&raquo;?</p>
<pre><code class="javascript">function doSomething() {
   this.style.color = '#cc0000';
}</code></pre>
<p>В JavaScript <code>this</code> всегда относится к&nbsp;&laquo;владельцу&raquo; выполняемой функции, или, если быть точнее, к&nbsp;объекту, методом которого является функция. Когда мы&nbsp;определяем нашу функцию <code>doSomething()</code> в&nbsp;глобальном пространстве, владельцем является страница или объект window (глобальный обект) JavaScript. Например, аттрибут <code>&laquo;onclick&raquo;</code> принадлежит тому элементу(объекту) <abbr title="HyperText Markup Language">HTML</abbr>, к&nbsp;которому он&nbsp;относится.</p>
<p>Это &laquo;владение&raquo; &mdash; результат объектно-ориентированного подхода JavaScript.</p>
<pre>
------------ window --------------------------------------
|                                          / \           |
|                                           |            |
|                                          this          |
|   ----------------                        |            |
|   | HTML element | &lt;-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          --------------------                          |
|          | onclick property |                          |
|          --------------------                          |
|                                                        |
----------------------------------------------------------
</pre>
<p>Если мы&nbsp;напрямую выполним <code>doSomething()</code>, ключевое слово <code>this</code> будет относиться к&nbsp;окну, и&nbsp;функция попытается изменить <code>style.color</code> окна. Но&nbsp;так как у&nbsp;окна нет объекта <code>style</code>, функция завершается неудачей и&nbsp;вовзратит ошибку.</p>
<h3>Копирование</h3>
<p>Итак, для того, чтобы использовать <code>this</code> в&nbsp;полном объеме, нам нужно позаботится о&nbsp;том, чтобы &laquo;владельцем&raquo; функции, использующей <code>this</code> являлся правильный объект <abbr title="HyperText Markup Language">HTML</abbr>. Например нам нужно скопировать функцию в&nbsp;наш аттрибут <code>&laquo;onclick&raquo;</code>.</p>
<pre><code class="javascript">element.onclick = doSomething;</code></pre>
<p>Функция полностью скопирована в&nbsp;аттрибут <code>&laquo;onclick&raquo;</code> (который теперь становится методом). Теперь при выполнении обработчика событий <code>this</code> относится к&nbsp;элементу <abbr title="HyperText Markup Language">HTML</abbr> и&nbsp;его color поменяется.</p>
<pre>
------------ window --------------------------------------
|                                                        |
|                                                        |
|                                                        |
|   ----------------                                     |
|   | HTML element | &lt;-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          -----------------------          |            |
|          |copy of doSomething()|  &lt;-- copy function    |
|          -----------------------                       |
|                                                        |
----------------------------------------------------------
</pre>
<p>Конечно&nbsp;же мы&nbsp;можем скопировать функцию в&nbsp;несколько обработчиков событий сразу, будь то&nbsp;<code>&laquo;onclick&raquo;</code> или любые другие. Каждый раз <code>this</code> будет относиться к&nbsp;определенному элементу <abbr title="HyperText Markup Language">HTML</abbr>:</p>
<pre>
------------ window --------------------------------------
|                                                        |
|                                                        |
|                                                        |
|   ----------------                                     |
|   | HTML element | &lt;-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          -----------------------          |            |
|          |copy of doSomething()|  &lt;-- copy function    |
|          -----------------------          |            |
|                                           |            |
|   -----------------------                 |            |
|   | another HTML element| &lt;-- this        |            |
|   -----------------------     |           |            |
|               |               |           |            |
|          -----------------------          |            |
|          |copy of doSomething()|  &lt;-- copy function    |
|          -----------------------                       |
|                                                        |
----------------------------------------------------------
</pre>
<p>Таким образом ключевое слово <code>this</code> используется наиболее эффективно. При каждом вызове функции, <code>this</code> относится к&nbsp;тому элементу <abbr title="HyperText Markup Language">HTML</abbr>, который в&nbsp;этот момент обрабатывает событие, элемент <abbr title="HyperText Markup Language">HTML</abbr>, &laquo;владеющий&raquo; копией <code>doSomething()</code>.</p>
<h3>Ссылки</h3>
<p>Однако, если вы&nbsp;используете линейную регистрацию событий:</p>
<pre><code class="javascript">&lt;element onclick="doSomething()"&gt;</code></pre>
<p>Вы не&nbsp;делаете копии функции! Вместо этого вы&nbsp;обращаетесь к&nbsp;ней, и&nbsp;разница огромна! Аттрибут <code>&laquo;onclick&raquo;</code> не&nbsp;содержит саму функцию, а&nbsp;только ее&nbsp;вызов:</p>
<pre><code class="javascript">doSomething();</code></pre>
<p>То есть он&nbsp;говорит &laquo;обратись к&nbsp;<code>doSomething()</code> и&nbsp;выполни ее&raquo;. Обратившись к&nbsp;<code>doSomething()</code>, ключевое слово <code>this</code> относится к&nbsp;глобальному объекту window и&nbsp;функция возвращает сообщения об&nbsp;ошибках.</p>
<pre>
------------ window --------------------------------------
|                                          / \           |
|                                           |            |
|                                          this          |
|   ----------------                        |            |
|   | HTML element | &lt;-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          -----------------------         / \           |
|          | go to doSomething() |          |            |
|          | and execute it      | ---- reference to     |
|          -----------------------       function        |
|                                                        |
----------------------------------------------------------
</pre>
<h3>Разница</h3>
<p>Если вы&nbsp;хотите использовать <code>this</code> для доступа к&nbsp;<abbr title="HyperText Markup Language">HTML</abbr> элементу, обрабатывающему событие, вам нужно убедиться, что ключевое слово <code>this</code> написано именно в&nbsp;аттрибуте <code>&laquo;onclick&raquo;</code>. Только в&nbsp;этом случае оно относится к&nbsp;тому элементу <abbr title="HyperText Markup Language">HTML</abbr>, к&nbsp;которому преписан обработчик событий. То&nbsp;есть если вы&nbsp;выполните</p>
<pre><code class="javascript">element.onclick = doSomething;
alert(element.onclick)</code></pre>
<p>то получите</p>
<pre><code class="javascript">function doSomething()
{
	this.style.color = '#cc0000';
}</code></pre>
<p>Как вы&nbsp;видите, ключевое слово <code>this</code> находится в&nbsp;методе <code>&laquo;onclick()&raquo;</code>. Следовательно, оно относится к&nbsp;элементу <abbr title="HyperText Markup Language">HTML</abbr>.</p>
<p>Но если вы&nbsp;выполните</p>
<pre><code class="javascript">&lt;element onclick="doSomething()"&gt;</code></pre>
<pre><code class="javascript">alert(element.onclick)</code></pre>
<p>то получите</p>
<pre><code class="javascript">function onclick()
{
	doSomething()
}</code></pre>
<p>Это только ссылка на&nbsp;функцию <code>doSomething()</code>. Ключевое слово <code>this</code> не&nbsp;находится в&nbsp;методе <code>&laquo;onclick&raquo;</code> и&nbsp;поэтому не&nbsp;относится к&nbsp;элементу <abbr title="HyperText Markup Language">HTML</abbr>.</p>
<h3>Примеры&nbsp;&#8212; копирование</h3>
<p><code>This</code> записывается в&nbsp;метод <code>&laquo;onclick&raquo;</code> в&nbsp;следующих случаях:</p>
<pre><code class="javascript">element.onclick = doSomething
element.addEventListener('click',doSomething,false)
element.onclick = function () {this.style.color = '#cc0000';}
&lt;element onclick="this.style.color = '#cc0000';"&gt;</code></pre>
<h3>Примеры&nbsp;&#8212; ссылки</h3>
<p>В этих примерах <code>this</code> относится к&nbsp;окну:</p>
<pre><code class="javascript">element.onclick = function () {doSomething()}
element.attachEvent('onclick',doSomething)
&lt;element onclick="doSomething()"&gt;</code></pre>
<p>Заметьте наличие <code>attachEvent()</code>. Главная проблема модели регистрации событий Microsoft в&nbsp;том, что <code>attachEvent()</code> создает ссылку на&nbsp;функцию, а&nbsp;не&nbsp;копирует ее.&nbsp;Поэтому иногда невохможно узнать, какой объект <abbr title="HyperText Markup Language">HTML</abbr> в&nbsp;данный момент обрабатывает событие.</p>
<h3>Комбинации</h3>
<p>При использовании линейной регистрации событий вы&nbsp;также можете пересылать <code>this</code> в&nbsp;функцию, то&nbsp;есть вы&nbsp;все еще можете использовать его:</p>
<pre><code class="javascript">&lt;element onclick="doSomething(this)"&gt;

function doSomething(obj) {
	obj.style.color = '#cc0000';
}</code></pre>
<p>Английский вариант статьи: <a href="http://www.quirksmode.org/js/this.html">The this keyword</a></p>
<blockquote><p><b>Спонсор поста</b>: Агентство &laquo;Web++&raquo;&nbsp;&mdash;&nbsp;продвижение и <a href="http://www.webpp.ru/" title="Создание и продвижение сайтов в Волгограде">создание сайтов в Волгограде</a>.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/keyword-this-in-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SEO vs. SEM</title>
		<link>http://www.codeisart.ru/seo-vs-sem/</link>
		<comments>http://www.codeisart.ru/seo-vs-sem/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 12:26:01 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[Переводы]]></category>
		<category><![CDATA[SEO/SEM]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=651</guid>
		<description><![CDATA[Привлечение посетителей веб-сайта с&#160;помощью поисковых систем делится на&#160;2&#160;большие категории: оптимизация для&#160;поисковых систем (SEO) и&#160;сетевой маркетинг (SEM). Несмотря на&#160;то,&#160;что обе&#160;методики созданы для&#160;одной цели: повышение целевого трафика веб-сайта, их&#160;методы и&#160;цели в&#160;корне различаются. Особенно если учитывать, откуда приходят посетители Вашего сайта, и&#160;самое главное, что&#160;они&#160;увидят целевую страницу, когда зайдут к&#160;Вам.
	
SEO-страницы (страницы, оптимизированные для&#160;поисковых систем) обычно являются главными страницами веб-сайтов [...]]]></description>
			<content:encoded><![CDATA[<p>Привлечение посетителей веб-сайта с&nbsp;помощью поисковых систем делится на&nbsp;2&nbsp;большие категории: оптимизация для&nbsp;поисковых систем (<abbr title="Search Engine Optimization">SEO</abbr>) и&nbsp;сетевой маркетинг (<abbr title="Search Engine Marketing">SEM</abbr>). Несмотря на&nbsp;то,&nbsp;что обе&nbsp;методики созданы для&nbsp;одной цели: повышение целевого трафика веб-сайта, их&nbsp;методы и&nbsp;цели в&nbsp;корне различаются. Особенно если учитывать, откуда приходят посетители Вашего сайта, и&nbsp;самое главное, что&nbsp;они&nbsp;увидят <b>целевую страницу</b>, когда зайдут к&nbsp;Вам.</p>
<p>	<span id="more-651"></span></p>
<p><abbr title="Search Engine Optimization">SEO</abbr>-страницы (страницы, оптимизированные для&nbsp;поисковых систем) обычно являются главными страницами веб-сайтов и&nbsp;содержат обобщенную информацию. <abbr title="Search Engine Marketing">SEM</abbr>-страницы могут&nbsp;быть узкоспециализированными и&nbsp;предлагают более высокий уровень управления. Оба&nbsp;эти&nbsp;типа необходимы для&nbsp;качественной рекламной кампании.</p>
<p>При&nbsp;определение целевой страницы всегда преследуется какая-либо особую цель. Как&nbsp;правило, эта&nbsp;цель состоит в&nbsp;перенаправлении высококачественного трафика на&nbsp;Ваш&nbsp;веб-сайт через поисковую систему. Выбранная страница непосредственно связана с&nbsp;информацией, представленной в&nbsp;выдаче поисковика&nbsp;(<abbr title="Search Engine Result Position">SERP</abbr>).</p>
<h3>Электронная коммерция и&nbsp;SEO</h3>
<p>Когда Вы&nbsp;идете в&nbsp;супермаркет за&nbsp;покупкой, Вы&nbsp;обычно сразу знаете, что будете покупать. Пусть, например, это&nbsp;будут ботинки. Вы&nbsp;заходите в&nbsp;магазин и&nbsp;начинаете присматриваться к&nbsp;каждой, даже&nbsp;самой мелкой вещи на&nbsp;пути в&nbsp;обувной отдел. Ваше&nbsp;внимание могут привлечь интерьер, распродажа электроники или&nbsp;кофейня супермаркета. Этого&nbsp;может&nbsp;быть достаточно, чтобы&nbsp;Вы&nbsp;забыли, зачем пришли, но&nbsp;можете и&nbsp;игнорировать их,&nbsp;пока не&nbsp;достигнете своей&nbsp;конечной цели в&nbsp;обувном отделе.</p>
<p>&laquo;Домашняя&raquo; целевая страница, связанная с&nbsp;естественным поиском (organic&nbsp;search), выглядит примерно также. Большинство целевых страниц, созданных для&nbsp;<abbr title="Search Engine Optimization">SEO</abbr>, должны принимать во&nbsp;внимание, как&nbsp;поисковых роботов, так&nbsp;и&nbsp;людей, которых не&nbsp;интересует что-то&nbsp;определённое. Из-за&nbsp;этого&nbsp;коммерческая направленность таких&nbsp;страниц, в&nbsp;лучшем случае, плохо проработана.</p>
<p>Довольно сложно управлять коммерческим проектом (например, интернет магазин), основанном на&nbsp;<abbr title="Search Engine Optimization">SEO</abbr>. Большинство поисковых систем сначала смотрят на&nbsp;стартовую страницу сайта и&nbsp;ранжируют ее,&nbsp;как&nbsp;самую главную страницу, основываясь на&nbsp;релевантности поисковых запросов. Это&nbsp;заставляет веб-мастера создавать сайт одновременно для&nbsp;поисковиков и&nbsp;для&nbsp;людей, чтобы&nbsp;получить большее число посетителей. В&nbsp;целом, такой&nbsp;подход делает органические целевые страницы (<abbr title="Search Engine Optimization">SEO</abbr>-страницы или&nbsp;страницы, оптимизированные для&nbsp;поисковых систем) более общими, не&nbsp;зависящими от&nbsp;показателей их&nbsp;эффективности. Основная цель таких&nbsp;страниц&nbsp;&mdash; повысить ранг и&nbsp;доступность сайта, это&nbsp;отлично подойдет для&nbsp;работы с&nbsp;новыми посетителями или&nbsp;обычными веб-серферами, но&nbsp;будет неудобно для&nbsp;клиента, который ищет специфический товар или&nbsp;услугу.</p>
<h3>Электронная коммерция и&nbsp;SEM</h3>
<p>Теперь&nbsp;представьте, что&nbsp;снова пришли в&nbsp;этот&nbsp;магазин за&nbsp;новыми ботинками. Но&nbsp;в&nbsp;этот&nbsp;раз&nbsp;Вы&nbsp;были сразу&nbsp;же перемещены в&nbsp;обувной отдел, даже&nbsp;не&nbsp;заходя в&nbsp;магазин. Ничто&nbsp;не&nbsp;отвлекало Ваше&nbsp;внимание, и&nbsp;Вы&nbsp;пришли в&nbsp;обувной отдел, оставаясь настроенными на&nbsp;покупку. Это&nbsp;целевая страница <abbr title="Search Engine Marketing">SEM</abbr>.</p>
<p>Так&nbsp;как&nbsp;страницы с&nbsp;результатами поиска определяются Вашими&nbsp;ключевыми словами, возможности <abbr title="Search Engine Marketing">SEM</abbr> гораздо&nbsp;шире и&nbsp;несут намного больше выгоды коммерческим проектам, особенно в&nbsp;тех&nbsp;случаях, когда&nbsp;у&nbsp;пользователей есть очень специфические запросы.</p>
<p>Использование <abbr title="Search Engine Marketing">SEM</abbr> дает продавцу или&nbsp;веб-мастеру полный контроль того, что&nbsp;пользователь увидит после перехода по&nbsp;ссылке. Это&nbsp;может быть&nbsp;обувной отдел или&nbsp;даже&nbsp;именно та&nbsp;модель ботинок, которую пользователь хочет купить. Клиенты, пришедшие со&nbsp;страницы поиска, уже&nbsp;ориентированы на&nbsp;действие, и&nbsp;это&nbsp;сильно помогает продавцу в&nbsp;использовании преимуществ их&nbsp;мысленных предустановок. Кроме&nbsp;того, чем&nbsp;ближе я&nbsp;к&nbsp;желаемым ботинкам, тем больше я&nbsp;хочу их&nbsp;купить.</p>
<h3>Ощущения и&nbsp;переходы в&nbsp;действии</h3>
<p>Хорошим примером того,&nbsp;чем&nbsp;отличаются целевые страницы <abbr title="Search Engine Optimization">SEO</abbr> и&nbsp;<abbr title="Search Engine Marketing">SEM</abbr>, является сайт &laquo;<cite>zappos.com</cite>&raquo;. Когда&nbsp;слово &laquo;обувь&raquo; (в&nbsp;оригинале&nbsp;&mdash; shoes) ищется через&nbsp;&laquo;Google&raquo;, результаты поиска (сформированные <abbr title="Search Engine Optimization">SEO</abbr>-оптимизаторами) ведут на&nbsp;главную страницу &laquo;<cite><a href="http://www.zappos.com/" rel="nofollow">www.zappos.com</a></cite>&raquo;.</p>
<p>Так&nbsp;как&nbsp;тег <code>&lt;title&gt;</code> этой страницы оптимизирован под&nbsp;<abbr title="Search Engine Optimization">SEO</abbr>, его&nbsp;текст с&nbsp;ключевыми словами выглядит так: &laquo;<samp>Наш&nbsp;обувной магазин представляет повседневную обувь, спортивную обувь, обувь для&nbsp;мужчин и&nbsp;для&nbsp;женщин!</samp>&raquo; При&nbsp;этом, многократные упоминания ключевого слова &laquo;обувь&raquo; заставляют поисковую систему показывать пользователю именно эту&nbsp;страницу, вместо страниц &laquo;заказа&raquo; или &laquo;секции&raquo;, которые обычно и&nbsp;требуются&nbsp;ему.</p>
<p>Переходя по&nbsp;<abbr title="Search Engine Marketing">SEM</abbr>-ссылке из&nbsp;контекстной рекламы на&nbsp;&laquo;<cite>www.zappos.com</cite>&raquo; мы&nbsp;переносимся на&nbsp;подстраницу сайту, более точно связанную с&nbsp;запросом &laquo;обувь&raquo;.</p>
<p>Тег&nbsp;<code>&lt;title&gt;</code> на&nbsp;этой странице оптимизирован под&nbsp;коммерческие ссылки и&nbsp;в&nbsp;корне отличается от&nbsp;<abbr title="Search Engine Optimization">SEO</abbr>-страницы. В&nbsp;нем&nbsp;написано &laquo;<samp>Обувь&nbsp;&mdash; бесплатная доставка и&nbsp;возможность возврата</samp>&raquo;, эта&nbsp;информация имеет высокую релевантность в&nbsp;контекстной рекламе для&nbsp;запроса &laquo;обувь&raquo; и&nbsp;содержит предложение, которое может легко повысить количество обращений к&nbsp;этой странице. И&nbsp;так&nbsp;как эта&nbsp;страница оптимизирована для&nbsp;людей, а&nbsp;не&nbsp;для&nbsp;поисковых систем, нет&nbsp;необходимости заполнять её&nbsp;ключевыми словами и&nbsp;данными meta-тега&mdash;пользователи приходят сюда, чтобы покупать.</p>
<p>Создание двух&nbsp;наборов целевых страниц (одна для&nbsp;<abbr title="Search Engine Optimization">SEO</abbr>, а&nbsp;другая для&nbsp;<abbr title="Search Engine Marketing">SEM</abbr>) важно, если&nbsp;Вы&nbsp;хотите получить лучший трафик от&nbsp;поисковых систем. Тот&nbsp;факт, что&nbsp;целевые страницы <abbr title="Search Engine Optimization">SEO</abbr>, должны быть более общими и&nbsp;менее ориентированы на&nbsp;действие, не&nbsp;означает, что&nbsp;они&nbsp;не&nbsp;способны выполнить Ваши&nbsp;торговые цели. С&nbsp;другой стороны, страницы <abbr title="Search Engine Marketing">SEM</abbr> дают Вам&nbsp;полный контроль, позволяя приводить клиента к&nbsp;тем продуктам, которые ему&nbsp;нужны в&nbsp;подходящее для&nbsp;этого&nbsp;время. Если&nbsp;Вы&nbsp;хотите иметь полный набор возможностей в&nbsp;сети, Вам&nbsp;необходимо комбинировать эти&nbsp;два&nbsp;метода.</p>
<p>Английский вариант статьи &laquo;<a href="http://www.websitemagazine.com/content/blogs/posts/articles/Landing_Pages_SEO_SEM.aspx" hreflang="en" rel="original" rev="translation">Landing&nbsp;Pages:&nbsp;SEO&nbsp;vs.&nbsp;SEM</a>&raquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/seo-vs-sem/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Будущее поиска Google</title>
		<link>http://www.codeisart.ru/future-ofgoogle-search/</link>
		<comments>http://www.codeisart.ru/future-ofgoogle-search/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 05:16:40 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Переводы]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=612</guid>
		<description><![CDATA[Русский вариант статьи о развитии поиска Google с официального блога.
Я&#160;одержим поиском и&#160;очень любознателен. Мне&#160;всегда нравилось узнавать что-нибудь. Кроме&#160;того, я&#160;работаю в&#160;&#171;Google&#187; над&#160;поиском последние 9&#160;лет и&#160;3&#160;месяца. Я&#160;очень часто пользуюсь поиском, но&#160;мне&#160;кажется, что&#160;каждый&#160;раз я&#160;нахожу только 20%&#160;того, что&#160;мог&#160;бы.

В&#160;прошлую субботу отслеживал вещи, звучавшие в&#160;разговорах, которые я&#160;хотел найти после, но&#160;не&#160;смог:

Являются&#160;ли словами &#171;fab&#187;, &#171;goy&#187; и&#160;&#171;eely&#187;?&#171; (в&#160;это&#160;время шла игра в&#160;слова)
В&#160;какое&#160;время открывается &#171;J.C.&#160;Penney&#187; по&#160;субботам?
В&#160;какой&#160;школе [...]]]></description>
			<content:encoded><![CDATA[<p>Русский вариант статьи о развитии поиска Google с <a href="http://googleblog.blogspot.com/2008/09/future-of-search.html">официального блога</a>.</p>
<p>Я&nbsp;одержим поиском и&nbsp;очень любознателен. Мне&nbsp;всегда нравилось узнавать что-нибудь. Кроме&nbsp;того, я&nbsp;работаю в&nbsp;&laquo;Google&raquo; над&nbsp;поиском последние 9&nbsp;лет и&nbsp;3&nbsp;месяца. Я&nbsp;очень часто пользуюсь поиском, но&nbsp;мне&nbsp;кажется, что&nbsp;каждый&nbsp;раз я&nbsp;нахожу только 20%&nbsp;того, что&nbsp;мог&nbsp;бы.<br />
<span id="more-612"></span></p>
<p>В&nbsp;прошлую субботу отслеживал вещи, звучавшие в&nbsp;разговорах, которые я&nbsp;хотел найти после, но&nbsp;не&nbsp;смог:</p>
<ul>
<li>Являются&nbsp;ли словами &laquo;fab&raquo;, &laquo;goy&raquo; и&nbsp;&laquo;eely&raquo;?&laquo; (в&nbsp;это&nbsp;время шла игра в&nbsp;слова)</li>
<li>В&nbsp;какое&nbsp;время открывается &laquo;J.C.&nbsp;Penney&raquo; по&nbsp;субботам?</li>
<li>В&nbsp;какой&nbsp;школе есть&nbsp;команда &laquo;Banana&nbsp;Slugs&raquo;?</li>
<li>Какой&nbsp;талисман у&nbsp;команды &laquo;San&nbsp;Jose&nbsp;State&raquo;?</li>
<li>Какова&nbsp;мощность генераторов <abbr title="Гидроэлектростанция">ГЭС</abbr>?</li>
<li>Какая&nbsp;фамилия у&nbsp;великого ирландского флейтиста с&nbsp;именем Джеймс?</li>
<li>Как&nbsp;называется крупнейший город в&nbsp;России после&nbsp;Москвы и&nbsp;Санкт-Петербурга?</li>
<li>Что&nbsp;старше: &laquo;секвойя&raquo; или&nbsp;&laquo;кипарис&raquo;?</li>
<li>Какое&nbsp;существо является сейчас самым старым и&nbsp;сколько ему&nbsp;лет?</li>
<li>Кто&nbsp;исполняет песню &laquo;Queen&nbsp;of&nbsp;Hearts&raquo;?</li>
<li>Что&nbsp;там&nbsp;за&nbsp;птица летит?</li>
<li>Магазин LF в&nbsp;Сан-Франциско находится на&nbsp;Union&nbsp;Square или&nbsp;Union&nbsp;Street?</li>
<li>Как&nbsp;танцевать &laquo;чарльстон&raquo;?</li>
<li>В&nbsp;какой&nbsp;день недели проходило &laquo;The&nbsp;Lawrence&nbsp;Welk&nbsp;Show&raquo;?</li>
<li>Какие&nbsp;слова в&nbsp;песне &laquo;In&nbsp;the&nbsp;Mood&raquo;?</li>
<li>Какая&nbsp;история связана с&nbsp;названием числа &laquo;googol&raquo;?</li>
</ul>
<p>И&nbsp;это&nbsp;только&nbsp;те, что&nbsp;я&nbsp;помню. При&nbsp;просмотре этого списка становятся очевидными 2&nbsp;вещи:</p>
<ol>
<li>Я&nbsp;мог найти намного больше.</li>
<li>У&nbsp;поиска до&nbsp;сих&nbsp;пор&nbsp;есть возможности обновляться, меняться и&nbsp;прогрессировать.</li>
</ol>
<p>Есть&nbsp;несколько путей развития поиска для&nbsp;удовлетворения нужд пользователя. Давайте рассмотрим несколько моих неотвеченных вопросов субботы и&nbsp;обсудим, как&nbsp;поиск может измениться за&nbsp;следующие 10&nbsp;лет.</p>
<h3>Способы</h3>
<p>Во-первых, почему я&nbsp;не&nbsp;смог найти эти&nbsp;вещи тогда, когда мне&nbsp;это&nbsp;было нужно? Потому&nbsp;что поиск не&nbsp;достаточно доступен и&nbsp;прост. Поиск должен&nbsp;быть более&nbsp;мобильным, он&nbsp;должен быть доступен и&nbsp;легок в&nbsp;использовании в&nbsp;сотовых телефонах и&nbsp;автомобилях, а&nbsp;также в&nbsp;переносных устройствах, которых&nbsp;у&nbsp;нас даже&nbsp;ещё&nbsp;нет.</p>
<p>Например, когда&nbsp;вопрос о&nbsp;самом старом существе возникнет во&nbsp;время лодочной прогулки, всем беседующим будет интересно узнать ответ, но&nbsp;никто не&nbsp;захочет пользоваться неуклюжим и&nbsp;медленным устройством для&nbsp;его&nbsp;поиска. Было&nbsp;бы намного приятнее, если&nbsp;бы у&nbsp;нас&nbsp;было устройство с&nbsp;огромной коммуникабельностью, способное производить поиск без&nbsp;прерываний. Одна надуманная идея: &laquo;Как&nbsp;насчет переносного устройства, которое незаметно ведет поиск, основываясь на&nbsp;словах, получаемых из&nbsp;разговоров, а&nbsp;затем показывает связанные с&nbsp;ними&nbsp;факты?&raquo;</p>
<p>Эта&nbsp;идея показывает нам&nbsp;другой путь изменения способов поиска&nbsp;&mdash; голосовой поиск. Вы&nbsp;должны разговаривать с&nbsp;поисковой системой своим&nbsp;голосом. Также&nbsp;Вам нужна возможность задавать вопросы вербально, или&nbsp;печатая&nbsp;их, как&nbsp;естественные языковые выражения. Вы&nbsp;не&nbsp;должны разбивать всё&nbsp;на&nbsp;ключевые слова.</p>
<p>Кроме&nbsp;того, почему в&nbsp;поиске вообще должны участвовать слова? Почему&nbsp;я&nbsp;не&nbsp;могу представить свой&nbsp;запрос в&nbsp;виде изображения птицы, летящей мимо, и&nbsp;получить ответ поискового устройства, определившего, что&nbsp;это&nbsp;за&nbsp;птица? Почему&nbsp;я&nbsp;не&nbsp;могу записать аудио-отрывок и&nbsp;позволить поисковой системе идентифицировать и&nbsp;проанализировать его&nbsp;(песню или&nbsp;отрывок разговора), а&nbsp;затем&nbsp;рассказать мне&nbsp;любую информацию, связанную с&nbsp;ним? Сервисы, делающие часть&nbsp;этого, доступны сейчас, но&nbsp;они&nbsp;не&nbsp;просты в&nbsp;использовании.</p>
<p>В&nbsp;ближайшие 10&nbsp;лет мы&nbsp;увидим радикальные улучшения в&nbsp;способах поиска, среди&nbsp;которых:</p>
<ul>
<li>мобильные устройства, предлагающие нам&nbsp;более легкий поиск;</li>
<li>доступ к&nbsp;сети Интернет во&nbsp;многие&nbsp;устройства;</li>
<li>разные способы ввода и&nbsp;объяснения запроса голосом, на&nbsp;естественном языке, изображением или&nbsp;звуком.</li>
</ul>
<p>Понятно, что&nbsp;основанный на&nbsp;ключевых словах поиск очень мощен, но&nbsp;он&nbsp;также очень ограничен. Эти&nbsp;новые способы будут одними из&nbsp;самых крупных изменений в&nbsp;поиске.</p>
<h3>Медиа</h3>
<p>Ещё&nbsp;есть медиа-сторона. 10&nbsp;синих ссылок, представленных как&nbsp;результаты интернет поиска, могут&nbsp;быть потрясающими и&nbsp;даже&nbsp;изменить Вашу&nbsp;жизнь, но&nbsp;когда Вы&nbsp;пытаетесь запомнить шаги для&nbsp;&laquo;чарльстона&raquo;, текстовая веб-страница не&nbsp;будет даже&nbsp;близко стоять по&nbsp;полезности с&nbsp;видео. Формат результата играет большую роль.</p>
<p>Универсальный поиск, который мы&nbsp;представили в&nbsp;прошлом мае, был первым важным шагом, который включал в&nbsp;себя&nbsp;изображения, видео, новости, книги и&nbsp;карты&nbsp;&mdash; информацию в&nbsp;основных результатах поиска &laquo;Google&raquo;.</p>
<p>Пока&nbsp;наше&nbsp;представление до&nbsp;сих&nbsp;пор&nbsp;очень линейно (результаты&nbsp;&mdash; это&nbsp;всего&nbsp;лишь список) и&nbsp;однородно. А&nbsp;что&nbsp;если&nbsp;страница результатов начнет полностью изменяться, чтобы на&nbsp;самом&nbsp;деле использовать эти&nbsp;разные типы результатов в&nbsp;чем-то&nbsp;более похожем на&nbsp;ответ, чем&nbsp;просто 10&nbsp;независимых догадок? Что&nbsp;если страницы с&nbsp;результатами соберут лучшие медиа файлы вместе и&nbsp;покажут их&nbsp;так, что&nbsp;самые полезные будут не&nbsp;только первыми, но&nbsp;и&nbsp;самыми большими? Что&nbsp;если мы&nbsp;разместим наши&nbsp;результаты по&nbsp;столбцам, чтобы&nbsp;использовать больше поверхности экрана, доступной на&nbsp;новых, широких мониторах?</p>
<p>Мы&nbsp;всего&nbsp;лишь показали вершину айсберга нашим&nbsp;универсальным поиском, но&nbsp;это&nbsp;важный первый шаг для&nbsp;исследования всего, что&nbsp;мы&nbsp;сможем сделать с&nbsp;медиа-контеном.</p>
<p>В&nbsp;прошлом году нашей&nbsp;целью было использовать преимущества новых типов результатов и&nbsp;развивать дизайн интерфейса. Вы&nbsp;увидите плоды проделанных экспериментов в&nbsp;ближайшие месяцы, но&nbsp;даже&nbsp;эти&nbsp;изменения&nbsp;&mdash; только начало. За&nbsp;следующие 10&nbsp;лет внешний вид поиска значительно изменится. Может&nbsp;быть, он&nbsp;должен содержать ещё&nbsp;больше видео и&nbsp;изображений, может&nbsp;он&nbsp;должен жестко различать относительный вес и&nbsp;точность результатов, может&nbsp;он&nbsp;должен быть более интерактивным во&nbsp;время изменений? Мы&nbsp;ещё&nbsp;не&nbsp;уверены, но&nbsp;мы&nbsp;знаем, что&nbsp;поиск не&nbsp;должен обладать одним&nbsp;качеством (особенно перед лицом взрывного роста популярности онлайн-медиа, который мы&nbsp;сейчас наблюдаем)&nbsp;&mdash; <b>застоем</b>.</p>
<h3>Персонализация</h3>
<p>Механизмы поиска через 10&nbsp;лет будут намного лучше&nbsp;тех, что&nbsp;мы&nbsp;имеем сейчас. &laquo;Google&raquo; сам&nbsp;по&nbsp;себе становится немного лучше каждый&nbsp;день. Мы&nbsp;постоянно пишем и&nbsp;изменяем новые понятия, связанные с&nbsp;поиском, и&nbsp;выпускаем обновления практически ежедневно. Эти улучшения приводят нас&nbsp;к&nbsp;другим механизмам поиска, следовательно, эти&nbsp;механизмы через&nbsp;10&nbsp;лет будут заметно лучше. Настоящий вопрос не&nbsp;в&nbsp;том, будет&nbsp;ли поиск лучше, а&nbsp;в&nbsp;том, чем&nbsp;он&nbsp;будет лучше?</p>
<p>Понятно одно: поисковые механизмы будущего будут лучше частично из-за&nbsp;того, что&nbsp;они&nbsp;смогут понимать больше о&nbsp;Вас, отдельном пользователе. Конечно, Вы&nbsp;будете контролировать персональную информацию, и&nbsp;любая личная информация, которую использует поисковая система, будет предоставляться с&nbsp;Вашего разрешения. Но&nbsp;даже&nbsp;с&nbsp;самой элементарной информацией о&nbsp;пользователе, поисковые системы могут и&nbsp;будут достигать намного лучших результатов поиска.</p>
<p>Возможно, поисковые механизмы будущего будут знать, где&nbsp;Вы&nbsp;находитесь, может&nbsp;они&nbsp;будут знать, что&nbsp;Вы&nbsp;уже&nbsp;знаете или&nbsp;что&nbsp;Вы&nbsp;выучили сегодня, а&nbsp;может&nbsp;они&nbsp;полностью поймут Ваши&nbsp;предпочтения, потому&nbsp;что&nbsp;Вы&nbsp;решили поделиться информацией с&nbsp;нами. Мы&nbsp;неуверны в&nbsp;том, какие личные элементы будут наиболее ценными, но&nbsp;занимаемся исследованиями и&nbsp;экспериментами в&nbsp;персональном поиске сейчас, так&nbsp;как&nbsp;думаем, что&nbsp;это&nbsp;будет очень важно в&nbsp;будущем.</p>
<h3>Местоположение</h3>
<p>Ваше&nbsp;местоположение&nbsp;&mdash; это&nbsp;потенциально полезная сторона персональной информации. При&nbsp;просмотре моих&nbsp;вопросов, ответы на&nbsp;некоторые из&nbsp;них&nbsp;(В&nbsp;какое&nbsp;время открывается &laquo;J.C.&nbsp;Penney&raquo; по&nbsp;субботам? Какова мощность генераторов <abbr title="Гидроэлектростанция">ГЭС</abbr>?) позволяют поисковой системе узнать, что&nbsp;я&nbsp;был в&nbsp;Янктоне и&nbsp;Южной&nbsp;Дакоте, вводя эти&nbsp;запросы. Так&nbsp;как&nbsp;местоположение важно во&nbsp;многих поисковых запросах, принятие во&nbsp;внимание местоположение пользователя и&nbsp;контекст будет основным инструментом при&nbsp;повышении релевантности и&nbsp;легкости поиска в&nbsp;будущем.</p>
<h3>Общество</h3>
<p>Другой элемент персонализации&nbsp;&mdash; это&nbsp;социальная среда. Кто&nbsp;мои&nbsp;друзья и&nbsp;как&nbsp;я&nbsp;к&nbsp;ним&nbsp;отношусь? Как&nbsp;я&nbsp;могу использовать их&nbsp;знания более эффективно?</p>
<p>Например, у&nbsp;меня&nbsp;есть друг, который работает в&nbsp;магазине LF в&nbsp;Лос-Анджелесе (поэтому&nbsp;возник вопрос о&nbsp;LF в&nbsp;Сан-Франциско). Аббревиатура LF&nbsp;сама&nbsp;по&nbsp;себе очень многозначна. Согласно первой странице результатов поиска в&nbsp;&laquo;Google&raquo; она&nbsp;может относиться не&nbsp;только к&nbsp;магазину модной одежды моего&nbsp;друга, но&nbsp;и&nbsp;к&nbsp;&laquo;Leapfrog&nbsp;Enterprises&raquo;, низкой частоте (low&nbsp;frequency), &laquo;Lebhar-Friedman&raquo;, &laquo;Li&nbsp;&amp;&nbsp;Fung Investment Group&raquo;, &laquo;LF&nbsp;Driscoll Construction Management&raquo;, крупному форматеу (large&nbsp;format), или&nbsp;дизайну будущего концепт-кара &laquo;Lexus&raquo;.</p>
<p>Сейчас пользователь, набирающий &laquo;LF&raquo;, должен выяснять, какой&nbsp;результат правильный, чтобы&nbsp;разобраться с&nbsp;многозначным термином, но&nbsp;это&nbsp;то, в&nbsp;чем&nbsp;поисковая система должна улучшиться. Например, мы&nbsp;поймем семантику вопроса о&nbsp;расположении LF в&nbsp;Сан-Франциско и&nbsp;сделаем вывод, что&nbsp;LF&nbsp;&mdash; это&nbsp;магазин. Или&nbsp;возможно, система сможет проанализировать мою&nbsp;социальную схему и&nbsp;понять, что&nbsp;один из&nbsp;моих&nbsp;друзей работает в&nbsp;LF, что&nbsp;я&nbsp;видел этого друга в&nbsp;выходные, и&nbsp;что в&nbsp;этом контексте LF&nbsp;относится к&nbsp;его&nbsp;месту работы. Алгоритмический анализ социальной схемы пользователя для&nbsp;дальнейшего улучшения запроса или&nbsp;его&nbsp;разбора может стать очень полезным в&nbsp;будущем.</p>
<h3>Язык</h3>
<p>Вышеописанные примеры показывают, как&nbsp;способы внедрения медиа-контента и&nbsp;различные формы персонализации помогают сильно улучшить поиск, но&nbsp;как&nbsp;же&nbsp;язык? Мы&nbsp;знаем, что&nbsp;есть случаи, при&nbsp;которых ответ существует в&nbsp;сети, но&nbsp;не&nbsp;на&nbsp;понятном Вам&nbsp;языке. Поэтому&nbsp;&laquo;Google&raquo; работает над&nbsp;машинным переводом. Мы&nbsp;хотим открыть мощь веб-поиска любому человеку, говорящему на&nbsp;любом&nbsp;языке. Основная идея&nbsp;&mdash; если&nbsp;ответ существует в&nbsp;сети&nbsp;где-либо на&nbsp;любом языке, мы&nbsp;получим его&nbsp;для&nbsp;Вас, переведем и&nbsp;возвратим на&nbsp;Вашем родном&nbsp;языке. Это&nbsp;очень перспективная идея, позволяющая действительно изменить способ освоения сети пользователями и&nbsp;их&nbsp;общения друг&nbsp;с&nbsp;другом, в&nbsp;основном на&nbsp;языках, в&nbsp;которых доступно не&nbsp;так&nbsp;много родных слов.</p>
<h3>Заключение</h3>
<p>Мы&nbsp;все&nbsp;знакомы с&nbsp;принципом&nbsp;&laquo;80&mdash;20&raquo;, в&nbsp;котором последние&nbsp;20% решения&nbsp;&mdash; это&nbsp;80%&nbsp;работы. Поиск&nbsp;&mdash; это&nbsp;принцип&nbsp;&laquo;90&mdash;10&raquo;. Сегодня у&nbsp;нас&nbsp;есть 90%&nbsp;решения. Я&nbsp;могу ответить на&nbsp;все&nbsp;мои&nbsp;неотвеченные субботние вопросы, не&nbsp;идеально и&nbsp;просто, но&nbsp;могу сделать это&nbsp;с&nbsp;помощью текущих средств поиска. Однако, оставшиеся 10%&nbsp;проблемы на&nbsp;самом деле требуют 90%&nbsp;(скорее&nbsp;всего больше&nbsp;90%) работы.</p>
<p>Создание элегантных, подходящих и&nbsp;релевантных решений вопросов мобильности, способов поиска, медиа, персонализации, местоположения, социализации и&nbsp;языка займет десятилетия.</p>
<p><dfn>Поиск</dfn>&nbsp;&mdash; это&nbsp;наука, которая&nbsp;будет развиваться и&nbsp;улучшаться сотни&nbsp;лет. Его&nbsp;можно сравнить с&nbsp;биологией и&nbsp;физикой в&nbsp;15&mdash;16&nbsp;веках. Это&nbsp;новая наука, в&nbsp;которой мы&nbsp;всё&nbsp;время делаем большие и&nbsp;интересные открытия. Однако, может пройти 100&nbsp;или&nbsp;больше&nbsp;лет, пока&nbsp;мы&nbsp;получим микроскопы и&nbsp;понятие о&nbsp;так&nbsp;называемых молекулах и&nbsp;атомах поиска. Так&nbsp;же как&nbsp;и&nbsp;в&nbsp;биологии с&nbsp;физикой, несколько веков назад, крупнейшие достижения ещё&nbsp;не&nbsp;наступили. Это&nbsp;делает отрасль поиска в&nbsp;интернете такой захватывающей.</p>
<p>Итак, как&nbsp;звучит наше&nbsp;прямое определение идеальной поисковой системы?</p>
<blockquote>
<p>&laquo;Ваш&nbsp;лучший друг с&nbsp;мгновенным доступом ко&nbsp;всем мировым фактам и&nbsp;фотографической памятью обо&nbsp;всём, что&nbsp;Вы&nbsp;видели и&nbsp;знаете&raquo;</p>
</blockquote>
<p>Эта&nbsp;поисковая система может привязать ответы к&nbsp;Вам, основываясь на&nbsp;Ваших предпочтениях, существующих знаниях и&nbsp;лучшей доступной информации, она&nbsp;может попросить пояснений и&nbsp;представить ответы с&nbsp;любыми установками и&nbsp;в&nbsp;лучшем формате. Эта&nbsp;идеальная поисковая система могла&nbsp;бы легко и&nbsp;изящно утолить мою&nbsp;субботнюю жажду. Я&nbsp;очень горд&nbsp;тем, что&nbsp;&laquo;Google&raquo; за&nbsp;свои&nbsp;первые 10&nbsp;лет изменил ожидания о&nbsp;качестве информации и&nbsp;того, как&nbsp;быстро и&nbsp;легко она&nbsp;должна получаться. Но&nbsp;я&nbsp;ещё&nbsp;сильнее заинтересован&nbsp;тем, чего&nbsp;&laquo;Google&raquo; может&nbsp;достичь в&nbsp;будущем.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/future-ofgoogle-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Качество поиска Google (продолжение)</title>
		<link>http://www.codeisart.ru/google-search-quality-continuation/</link>
		<comments>http://www.codeisart.ru/google-search-quality-continuation/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 21:48:10 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[Переводы]]></category>
		<category><![CDATA[SEO/SEM]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=428</guid>
		<description><![CDATA[Несколько недель назад Udi Manber представил группу, ответственную за&#160;качество поиска. В&#160;предыдущих статьях из&#160;этой серии говорилось о&#160;ранжировании документов.
Ранжирование веб-документов является ядром того, что&#160;делает поиск в&#160;Google таким эффективным. Но&#160;поиск не&#160;ограничивается одним ранжированием и&#160;включает много других составляющих.
В&#160;этой статье я&#160;опишу принципы, которым мы следуем при&#160;развитии всего механизма поиска, и&#160;то, как&#160;они связаны с&#160;ключевыми аспектами поиска. Также, я&#160;опишу, как&#160;мы убеждаемся, что [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/08/google-search-quality.png" alt="Качество поиска Google" width="195" height="192" class="left" />Несколько недель назад Udi Manber <a href="http://www.codeisart.ru/some-principles-google-ranking/">представил группу, ответственную за&nbsp;качество поиска</a>. В&nbsp;<a href="http://www.codeisart.ru/rubric/google/">предыдущих статьях</a> из&nbsp;этой серии <a href="http://www.codeisart.ru/%d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8-%d1%80%d0%b0%d0%bd%d0%b6%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-google/">говорилось о&nbsp;ранжировании документов</a>.</p>
<p>Ранжирование веб-документов является ядром того, что&nbsp;делает поиск в&nbsp;Google таким эффективным. Но&nbsp;поиск не&nbsp;ограничивается одним ранжированием и&nbsp;включает много других составляющих.</p>
<p>В&nbsp;этой статье я&nbsp;опишу принципы, которым мы следуем при&nbsp;развитии всего механизма поиска, и&nbsp;то, как&nbsp;они связаны с&nbsp;ключевыми аспектами поиска. Также, я&nbsp;опишу, как&nbsp;мы убеждаемся, что находимся на&nbsp;верном пути в&nbsp;этих сложных и&nbsp;многочисленных экспериментах.</p>
<p><span id="more-428"></span></p>
<p>Позвольте представиться. Я&nbsp;Ben Gomes, работаю над&nbsp;поиском в&nbsp;Google с&nbsp;1999&nbsp;года и&nbsp;занимаюсь в&nbsp;основном оптимизацией качества поиска. Мне посчастливилось внести свой вклад в&nbsp;большинство аспектов механизма поиска, от&nbsp;просмотра сети до&nbsp;ранжирования. Чаще всего я&nbsp;занимаюсь разработкой интерфейсов и&nbsp;функций поиска.</p>
<p>Обычная реакция друзей на&nbsp;то, что&nbsp;я&nbsp;работаю над&nbsp;пользовательским интерфейсом поиска Google&nbsp;&mdash; это вопрос: &laquo;Чем ты занимаешься? Он&nbsp;же никогда не&nbsp;меняется&raquo;. Затем они подозрительно смотрят на&nbsp;меня и&nbsp;говорят: &laquo;Лучшее&nbsp;&mdash; враг хорошего. Google хорош таким, какой он&nbsp;есть&nbsp;&mdash; простая и быстрая веб-страница. Зачем ее как-то&nbsp;изменять?&raquo;</p>
<p>Чтобы ответить на&nbsp;этот вопрос, позвольте начать с&nbsp;основной нашей цели в&nbsp;веб-поиске: <b>предоставить веб-страницы, которые Вам требуются так быстро, как&nbsp;это возможно</b>.</p>
<p>Поиск сам по&nbsp;себе не&nbsp;является конечной точкой&nbsp;&mdash; это всего лишь средство. Эта цель кажется очевидной, но&nbsp;она кардинально отличает механизм поиска от&nbsp;других сайтов в&nbsp;сети, успех которых измеряется тем, как&nbsp;долго пользователи остаются на&nbsp;них. Мы&nbsp;же измеряем наши достижения в&nbsp;поиске отчасти тем, как&nbsp;быстро Вы покинете наш сайт. Есть несколько правил, которые мы используем, чтобы предоставить нужную Вам информацию так быстро, как&nbsp;это возможно:</p>
<ul>
<li>
<h3>Минимальный код веб-страницы</h3>
<p>Маленькая страница быстро скачивается и,&nbsp;как&nbsp;правило, быстрее показывается браузером. Это достигается минималистической эстетикой дизайна, использование дополнительных эффектов в&nbsp;интерфейсе замедляет страницу без&nbsp;получения большой выгоды.</p>
</li>
<li>
<h3>Простое представление сложных алгоритмов</h3>
<p>Многие функции поискового механизма требуют алгоритмов большой сложности и&nbsp;огромного количество анализируемых данных. Важно &laquo;спрятать&raquo; все эти сложности за&nbsp;понятным и&nbsp;интуитивным пользовательским интерфейсом.</p>
<p>Коррекция написания запросов, выделение значимых частей в&nbsp;тексте, поиск ссылок на&nbsp;сайты&nbsp;&mdash; это примеры функций, которые требуют сложных алгоритмов, которые постоянно улучшаются и&nbsp;оптимизируются. С&nbsp;точки зрения пользователя изменения в&nbsp;поиске почти невидимы, Google просто работает лучше.</p>
</li>
<li>
<h3>Поиск, работающий везде!</h3>
<p>Расширенные возможности поиска должны быть сделаны так, чтобы алгоритмы и&nbsp;интерфейс можно было адаптировать для&nbsp;работы на&nbsp;всех языках и&nbsp;во&nbsp;всех странах. Например, проблема коррекции произношения в&nbsp;Китае, где пользовательские запросы часто не&nbsp;разбиваются на&nbsp;слова, или&nbsp;Иврит и&nbsp;Арабский язык, где текст пишется справа на&nbsp;лево.</p>
</li>
<li>
<h3>Принятие правильных решений</h3>
<p>Принятие правильных решений&nbsp;&mdash; опыт, опыт, много опыта. Мы стараемся убедиться в&nbsp;том, что&nbsp;получили правильные результаты экспериментов. Даже планы, выглядящие, как&nbsp;перспективные, могут провалиться на&nbsp;простых тестах.</p>
</li>
</ul>
<p>С&nbsp;этим связаны несколько проблем. Например, показ большего количества текста (или&nbsp;изображений) для&nbsp;каждого результата может помочь Вам в&nbsp;выборе лучшего результата. Но&nbsp;страница результатов, содержащая слишком много информации, дольше загружается и&nbsp;визуально обрабатывается. Поэтому каждый кусок информации, который мы добавляем к&nbsp;странице результатов должен быть тщательно продуман, чтобы убедиться, что&nbsp;выгода для&nbsp;пользователя перевешивает затраты, связанные с&nbsp;этой дополнительной информацией. Это относится ко&nbsp;всем частям процесса поиска, от&nbsp;печатания запроса до&nbsp;результатов сканирования и&nbsp;дальнейших исследований.</p>
<p>С&nbsp;чего Вы начинаете поиск? С&nbsp;набора запроса. Очень часто, если Вы не&nbsp;знаете, как&nbsp;правильно пишется слово, результат разочаровывает Вас. Коррекция правописания, которая кажется простой и&nbsp;очевидной функцией, скрывает в&nbsp;себе множество технических проблем.</p>
<p>Например, ни&nbsp;в&nbsp;одном обычном английском словаре не&nbsp;будет корректного правописания Britney Spears. Мы провели огромный анализ миллиардов страниц в&nbsp;сети и&nbsp;логов наших запросов, чтобы определить какие слова являются &laquo;настоящими&raquo;, а&nbsp;какие&nbsp;&mdash; орфографическими ошибками.</p>
<p>Система, выполняющая для&nbsp;Вас коррекцию правописания, должна за&nbsp;долю секунды рассмотреть огромное количество слов, которые Вы могли иметь ввиду (намного большее, чем в&nbsp;любом словаре, сделанном вручную) и&nbsp;выбрать наиболее похожие на&nbsp;запрос, набранный Вами.</p>
<p>Когда мы уверены, что&nbsp;Вы на&nbsp;самом деле хотели напечатать что-то&nbsp;другое, мы предоставляем результатам некоторую свободу, стараемся отвлечь Вас от&nbsp;просмотра первого результата на&nbsp;странице. Коррекция правописания находится на&nbsp;линии  взгляда и&nbsp;окрашена в&nbsp;ярко-красный цвет. Мы убеждаемся, что&nbsp;ничто не&nbsp;окрашено красным цветом, кроме текста требующего внимания (пока что&nbsp;такого не было).</p>
<p>Алгоритмы, используемые в&nbsp;коррекции правописания, постоянно улучшаются. Сейчас они работают с&nbsp;большим количеством языков и&nbsp;намного лучше, чем раньше, определяют, когда пользователь сделал ошибку в&nbsp;правописании.</p>
<p>Следующей задачей после корректной формулировки запроса является правильный выбор страницы из&nbsp;списка результатов. Для&nbsp;каждой страницы мы представляем заголовок, <abbr title="Uniform Resource Locator">URL</abbr> и&nbsp;короткий фрагмент из&nbsp;ее содержимого. Страницы, не&nbsp;имеющие подходящего заголовка, часто игнорируются пользователями. Одно из&nbsp;самых больших недавних изменений&nbsp;&mdash; это поиск на&nbsp;странице правильного заголовка, который не&nbsp;включен в&nbsp;<abbr title="Hypertext Markup Language">HTML</abbr>-тег заголовка &laquo;<code>title</code>&raquo;. Чтобы &laquo;увидеть&raquo; заголовок, который автор страницы задумал, мы анализируем <abbr title="Hypertext Markup Language">HTML</abbr>-код страницы специальным алгоритмом. Согласитесь, страница с&nbsp;отсутствующим заголовком может быть Вами проигнорирована, но&nbsp;если она содержит интересующее содержание? Поиск не&nbsp;указанного заголовка&nbsp;— это намного лучше, чем, если Вы будете игнорировать релевантную страницу из-за&nbsp;отсутствия заголовка.</p>
<p>После заголовка идет фрагмент страницы, и&nbsp;ключевым новшеством было то, каким образом Google определяет нужный фрагмент. В&nbsp;то&nbsp;время, как&nbsp;другие поисковики показывают Вам первые две строки веб-страницы, Google отображает фрагменты страницы, в&nbsp;которых встречаются ключевые слова Вашего поиска. Эксперты информационного поиска называют это &laquo;ключевые слова в&nbsp;контексте&raquo;.</p>
<p>Выделение ключевых слов визуально практически неотличимо от&nbsp;более простых стилей фрагментов, но&nbsp;это то, что&nbsp;помогает в&nbsp;принятии Вами решения о&nbsp;том, на&nbsp;какую страницу зайти. Эта простота скрывает настоящую сложность, когда мы выбираем фрагмент страницы, который будет выводиться под&nbsp;заголовком, нам нужно просмотреть текст релевантного результата, чтобы найти самую подходящую часть (содержащую ключевые слова), вместо того, чтобы просто показать несколько первых строк.</p>
<p>Мы улучшаем поиск подходящих фрагментов страниц алгоритмами для&nbsp;определения релевантности частей страницы. Изменения колеблются от&nbsp;сложных (подсвечивание синонимов слов Вашего запроса в&nbsp;результатах) до&nbsp;более простых. Вот пример, на&nbsp;котором пользователь ищет &laquo;<kbd>arod</kbd>&raquo; и&nbsp;Вы видите, что&nbsp;Alex и&nbsp;Rodriguez выделены в&nbsp;фрагменте результата поиска, основываясь на&nbsp;нашем анализе того, что&nbsp;Вы могли действительно иметь ввиду его.</p>
<p><a href="http://www.codeisart.ru/wp-content/uploads/2008/08/google-search-quality-1.png"><img src="http://www.codeisart.ru/wp-content/uploads/2008/08/google-search-quality-1.png" alt="Результат запроса «arod»" width="500" height="155" /></a></p>
<p>Как&nbsp;более очевидный пример, мы выделим и&nbsp;покажем Вам информацию о&nbsp;дате создания страниц, на&nbsp;которых она имеется. Эти даты отображаются в&nbsp;мириадах форматов, которые мы научились понимать и&nbsp;представлять единообразно, чтобы Вы могли их&nbsp;найти и&nbsp;понять.</p>
<p><a href="http://www.codeisart.ru/wp-content/uploads/2008/08/google-search-quality-2.png"><img src="http://www.codeisart.ru/wp-content/uploads/2008/08/google-search-quality-2.png" alt="Информация о дате создания страниц" width="500" height="281" /></a></p>
<p>Одна из&nbsp;самых распространенных нужд пользователей, когда Вы вводите название веб-сайта, который знаете, и&nbsp;мы представляем ссылки для&nbsp;быстрого вызова. Они позволяют добраться до&nbsp;ключевых разделов сайта и&nbsp;являются простым дополнением к&nbsp;результатам поиска, которое добавляет лишь небольшое, но&nbsp;заметное количество текста на&nbsp;страницу.</p>
<p><a href="http://www.codeisart.ru/wp-content/uploads/2008/08/google-search-quality-3.png"><img src="http://www.codeisart.ru/wp-content/uploads/2008/08/google-search-quality-3.png" alt="Ссылки быстрого вызова" width="500" height="135" /></a></p>
<p>А&nbsp;что&nbsp;если Вы не&nbsp;нашли того, что&nbsp;искали, среди самых подходящих результатов? В&nbsp;этом случае Вам, вероятно, нужно попробовать другой запрос. Мы&nbsp;помогаем Вам в&nbsp;этом, представляя ряд измененных запросов с&nbsp;результатами, даже если среди них не&nbsp;будет нужного, они могут намекнуть на&nbsp;другие (вероятно более успешные) направления для&nbsp;улучшения запроса.</p>
<p>Измененные запросы, помещенные внизу страницы, не&nbsp;отвлекают пользователя, но&nbsp;помогают, если остальные результаты поиска не&nbsp;содержали требуемой информации.</p>
<p>Я&nbsp;описал несколько ключевых аспектов поиска, которые мы изменяем с&nbsp;каждым днем. Но&nbsp;как, делая эти изменения, мы понимаем, что&nbsp;они успешны и&nbsp;что&nbsp;мы не&nbsp;ошиблись? Мы постоянно оцениваем наши изменения, разделяя их&nbsp;с&nbsp;Вами! Запуская предполагаемые изменения для&nbsp;небольшой части наших пользователей, наблюдаем, помогают&nbsp;ли они поиску, или&nbsp;мешают. Есть много показателей, по&nbsp;которым определяется, на&nbsp;правильном мы пути или&nbsp;нет. Процесс измерения этих алгоритмов, сам по&nbsp;себе&nbsp;&mdash; наука с&nbsp;большим количеством потенциальных ловушек. Наша экспериментальная методология позволяет рассмотреть предел возможностей и&nbsp;запустить те, которые работают лучше всех. Для&nbsp;каждой запускаемой нами дополнительно функции поиска, проводим большое число экспериментов, скрытых от&nbsp;пользователей.</p>
<p>Итак, позвольте мне ответить на&nbsp;вопрос, с&nbsp;которого я&nbsp;начал: Мы действительно постоянно изменяем страницу результатов поиска в&nbsp;Google. И&nbsp;нет, мы не&nbsp;испортим то&nbsp;хорошее, что&nbsp;уже есть. Почему? Вы не&nbsp;дадите нам сделать это!</p>
<p>Оригинал статьи &laquo;<a href="http://googleblog.blogspot.com/2008/08/search-quality-continued.html" hreflang="en" rel="original" rev="translation">Search quality, continued</a>&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/google-search-quality-continuation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Яндекс жаждет международного признания</title>
		<link>http://www.codeisart.ru/russian-search-leader-yandex-is-hungry-for-international-renown/</link>
		<comments>http://www.codeisart.ru/russian-search-leader-yandex-is-hungry-for-international-renown/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 06:41:42 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Yandex]]></category>
		<category><![CDATA[Переводы]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=521</guid>
		<description><![CDATA[Российский поисковый гигант &#171;Яндекс&#187; представил недавно несколько новостей. 8&#160;лет роста позволили его&#160;доходу возрасти от&#160;400&#160;тысяч долларов до&#160;объявленных 167&#160;миллионов долларов в&#160;2007&#160;году. И,&#160;как&#160;ранее сообщалось в&#160;этом&#160;году, компания, на&#160;данный момент состоящая из&#160;1200 работников, планирует выйти на&#160;фондовую биржу NASDAQ этой&#160;осенью.
		
Самый недавний очерк о&#160;компании был&#160;написан в&#160;лондонской &#171;Times&#187;, которая столкнула её&#160;лицом к&#160;лицу с&#160;&#171;Google&#187;. Вкратце, репортер &#171;Times&#187; Марк Франчетти вместе с&#160;соучредителем и&#160;исполнительным директоров &#171;Яндекса&#187; [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/08/yandex.png" alt="Яндекс жаждет международного признания" width="168" height="72" class="left" />Российский поисковый гигант &laquo;<a href="http://www.yandex.ru/" rel="nofollow">Яндекс</a>&raquo; представил недавно несколько новостей. 8&nbsp;лет роста позволили его&nbsp;доходу возрасти от&nbsp;<b>400&nbsp;тысяч долларов</b> до&nbsp;объявленных <b>167&nbsp;миллионов долларов</b> в&nbsp;2007&nbsp;году. И,&nbsp;как&nbsp;ранее сообщалось в&nbsp;этом&nbsp;году, компания, на&nbsp;данный момент состоящая из&nbsp;<var>1200</var> работников, планирует выйти на&nbsp;фондовую биржу <abbr title="National Association of Securities Dealers Automated Quotation">NASDAQ</abbr> этой&nbsp;осенью.</p>
<p>		<span id="more-521"></span></p>
<p>Самый недавний очерк о&nbsp;компании был&nbsp;написан в&nbsp;лондонской &laquo;<a href="http://business.timesonline.co.uk/tol/business/industry_sectors/technology/article4596416.ece" rel="nofollow">Times</a>&raquo;, которая столкнула её&nbsp;лицом к&nbsp;лицу с&nbsp;&laquo;Google&raquo;. Вкратце, репортер &laquo;Times&raquo; Марк Франчетти вместе с&nbsp;соучредителем и&nbsp;исполнительным директоров &laquo;Яндекса&raquo; Аркадием Волож позиционирует компанию, как&nbsp;серьезного конкурента &laquo;Mountain&nbsp;View&raquo;, веб-гиганта евразийского масштаба. Например, она&nbsp;владеет <var>55%</var>&nbsp;Российского рынка. &laquo;Google&raquo;, в&nbsp;свою очередь, удерживает&nbsp;<var>21%</var>.</p>
<p>Сейчас вызовы, бросаемые обеими сторонами, довольно интересно наблюдать. &laquo;Google&raquo; буквально в&nbsp;прошлом месяце купил российскую компанию контекстной рекламы &laquo;<a href="http://www.begun.ru/" rel="nofollow">Бегун</a>&raquo;, которой ранее владел &laquo;<a href="http://www.rambler.ru/" rel="nofollow">Rambler&nbsp;Media</a>&raquo;, за&nbsp;140&nbsp;миллионов долларов. По-видимому это&nbsp;было сделано чтобы извлечь выгоду из&nbsp;уверенного роста российского интернет сектора и&nbsp;инвестировать в&nbsp;больший кусок &laquo;пирога&nbsp;поиска&raquo; в&nbsp;регионе. Хотя&nbsp;&laquo;Google&raquo; контролирует сегмент меньший, чем&nbsp;&laquo;Яндекс&raquo;, его&nbsp;позиции не&nbsp;так&nbsp;непоколебимы, как&nbsp;в&nbsp;западных частях мира.</p>
<p>Конечно, &laquo;Яндекс&raquo; понимает&nbsp;это, и&nbsp;не&nbsp;теряет времени, а&nbsp;работает для&nbsp;собственного роста. Это&nbsp;проявляется как&nbsp;на&nbsp;российском рынке, так&nbsp;и&nbsp;вне&nbsp;границы России. На&nbsp;этой неделе было объявлено, что&nbsp;&laquo;Яндекс&raquo; значительно улучшил свои&nbsp;каналы данных к&nbsp;Украине. А&nbsp;немного раньше сообщили об&nbsp;апгрейде поискового механизма, для&nbsp;поддержки так&nbsp;называемых мировых стандартов, и&nbsp;усовершенствовании работы пользователя с&nbsp;видео, для&nbsp;достойной конкуренции с&nbsp;постоянно развивающимся &laquo;Google&raquo;.</p>
<p>Пока&nbsp;еще&nbsp;рост &laquo;Яндекса&raquo; не&nbsp;сильно влияет на&nbsp;мировые позиции &laquo;Google&raquo;, как&nbsp;замечают в&nbsp;&laquo;Times&raquo;. 33&nbsp;миллиона россиян сообщают, что&nbsp;пользуются Интернет. Эта&nbsp;цифра, по&nbsp;прогнозам, удвоится через 5&nbsp;лет. И&nbsp;это, без&nbsp;сомнения, немалое количество. Однако, учитывая недавние оценки населения России, которое составляет примерно 142 миллиона, что&nbsp;ниже объявленных в&nbsp;2002&nbsp;году 145&nbsp;миллионов, скорость освоения веб-сервисов даже&nbsp;близко не&nbsp;сравнить с&nbsp;западным населением. Например, в&nbsp;<abbr title="Соединённые Штаты Америки">США</abbr>, с&nbsp;населением около 300&nbsp;миллионов, более <var>70%</var>&nbsp;имеют доступ в&nbsp;Интернет, это&nbsp;<var>219</var>&nbsp;миллионов пользователей. Европа, в&nbsp;целом, находится в&nbsp;шаге от&nbsp;отметки <var>50%</var>. Такие страны, как&nbsp;Германия, Норвегия, Великобритания, Швейцария, Дания и&nbsp;Швеция показывают результаты, подобные <abbr title="Соединённые Штаты Америки">США</abbr>. Франция&nbsp;&mdash; около&nbsp;<var>55%</var>.</p>
<p>Как&nbsp;было сказано, &laquo;Яндекс&raquo; извлекает выгоду из&nbsp;постепенно растущего российского интернет-развития. Согласно поисковой компании &laquo;Quintura&raquo;, &laquo;Яндекс&raquo; стал чем-то вроде нарицательного слова в&nbsp;своей родной стране, и&nbsp;планирует двигаться дальше в&nbsp;этом&nbsp;направлении, а&nbsp;так&nbsp;же&nbsp;обновить свой&nbsp;логотип, сделав его&nbsp;полностью кириллическим, вместо почти англоязычного, использующегося сейчас.</p>
<p>Без&nbsp;лишних слов становится понятно, что&nbsp;за&nbsp;последние годы Западный интернет-рынок стал очень интернациональным, а&nbsp;компании Китая и,&nbsp;в&nbsp;немного меньшей мере, России получили статус тяжеловесов или&nbsp;почти-тяжеловесов. Это&nbsp;относится к&nbsp;поиску так же, как&nbsp;и&nbsp;к&nbsp;социальным сетям, видео каналам или&nbsp;веб-программам. И&nbsp;,наверное, можно с&nbsp;уверенностью сказать, что&nbsp;эти&nbsp;тенденции будут продолжаться. Конечно, очень маловероятно, что&nbsp;в&nbsp;результате &laquo;Google&raquo; останется в&nbsp;убытке.</p>
<p>Практически все&nbsp;крупные рынки по&nbsp;всему миру имеют область для&nbsp;расширения. Однако Китай и&nbsp;Россия имеют больше хорошей почвы, для&nbsp;того чтобы&nbsp;вырастить финансовое благополучие, так&nbsp;сказать.</p>
<p>Оригинал статьи&nbsp;&mdash; &laquo;<a href="http://mashable.com/2008/08/24/yandex-russia-search/" hreflang="en" rel="original" rev="translation">Russian Search Leader Yandex is&nbsp;Hungry for&nbsp;International Renown</a>&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/russian-search-leader-yandex-is-hungry-for-international-renown/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Бесплатный перевод статей</title>
		<link>http://www.codeisart.ru/%d0%b1%d0%b5%d1%81%d0%bf%d0%bb%d0%b0%d1%82%d0%bd%d1%8b%d0%b9-%d0%bf%d0%b5%d1%80%d0%b5%d0%b2%d0%be%d0%b4-%d1%81%d1%82%d0%b0%d1%82%d0%b5%d0%b9/</link>
		<comments>http://www.codeisart.ru/%d0%b1%d0%b5%d1%81%d0%bf%d0%bb%d0%b0%d1%82%d0%bd%d1%8b%d0%b9-%d0%bf%d0%b5%d1%80%d0%b5%d0%b2%d0%be%d0%b4-%d1%81%d1%82%d0%b0%d1%82%d0%b5%d0%b9/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 13:20:05 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[Переводы]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=502</guid>
		<description><![CDATA[Уважаемые посетители, предлагаем Вашему вниманию бесплатный перевод статей
Если Вас&#160;интересует какая-либо статья, написанная на&#160;английском языке, и&#160;Вы хотели бы&#160;прочесть ее&#160;на&#160;русском, мы&#160;предлагаем бесплатно перевести&#160;ее.
Подробности на&#160;странице &#171;Переводы&#187;.
]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/08/translate-english-russian.jpg" alt="Бесплатный перевод статей" width="87" height="112" class="left" />Уважаемые посетители, предлагаем Вашему вниманию <strong>бесплатный перевод статей</strong></p>
<p>Если Вас&nbsp;интересует какая-либо статья, написанная на&nbsp;английском языке, и&nbsp;Вы хотели бы&nbsp;прочесть ее&nbsp;на&nbsp;русском, мы&nbsp;предлагаем <b>бесплатно</b> перевести&nbsp;ее.</p>
<p>Подробности на&nbsp;странице &laquo;<a href="http://www.codeisart.ru/translations/" title="Перевод статей">Переводы</a>&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/%d0%b1%d0%b5%d1%81%d0%bf%d0%bb%d0%b0%d1%82%d0%bd%d1%8b%d0%b9-%d0%bf%d0%b5%d1%80%d0%b5%d0%b2%d0%be%d0%b4-%d1%81%d1%82%d0%b0%d1%82%d0%b5%d0%b9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6&#160;PHP&#160;трюков, как&#160;сделать код&#160;короче</title>
		<link>http://www.codeisart.ru/php-coding-tips-to-write-less-code/</link>
		<comments>http://www.codeisart.ru/php-coding-tips-to-write-less-code/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 10:03:59 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Переводы]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=429</guid>
		<description><![CDATA[Недавно нашел англоязычную статью, в&#160;которой описывались приемы сокращения PHP-кода. Признаюсь, некоторые методы мне&#160;были известны, а&#160;о&#160;некоторых я&#160;даже не&#160;подозревал. Поэтому решили выложить русскоязычный вариант статьи, думаю Вы&#160;найдете в&#160;ней&#160;что-то новое для&#160;себя.
		
PHP&#160;&#8212; хороший язык, но&#160;в&#160;нем всегда полно сюрпризов. И&#160;сегодня я&#160;увидел интересную статью в&#160;блоге Арнольда Дэниэлса. Он&#160;рассуждает о&#160;&#171;временных&#160;переменных&#187; в&#160;РНР. Этот&#160;прием полезен для&#160;&#171;ленивых&#187; разработчиков, которые даже&#160;не&#160;задумываются о&#160;названиях переменных. Они&#160;предпочитают такое наименование, [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно нашел англоязычную <a href="http://www.alexatnet.com/node/100" title="6 PHP coding tips to write less code" hreflang="en" rel="original" rev="translation">статью</a>, в&nbsp;которой описывались приемы сокращения <abbr title="Hypertext Preprocessor">PHP</abbr>-кода. Признаюсь, некоторые методы мне&nbsp;были известны, а&nbsp;о&nbsp;некоторых я&nbsp;даже не&nbsp;подозревал. Поэтому решили выложить русскоязычный вариант статьи, думаю Вы&nbsp;найдете в&nbsp;ней&nbsp;что-то новое для&nbsp;себя.</p>
<p>		<span id="more-429"></span></p>
<p><abbr title="Hypertext Preprocessor">PHP</abbr>&nbsp;&mdash; хороший язык, но&nbsp;в&nbsp;нем всегда полно сюрпризов. И&nbsp;сегодня я&nbsp;увидел интересную статью в&nbsp;блоге Арнольда Дэниэлса. Он&nbsp;рассуждает о&nbsp;&laquo;<a href="http://blog.adaniels.nl/?p=58" hreflang="en">временных&nbsp;переменных</a>&raquo; в&nbsp;РНР. Этот&nbsp;прием полезен для&nbsp;&laquo;ленивых&raquo; разработчиков, которые даже&nbsp;не&nbsp;задумываются о&nbsp;названиях переменных. Они&nbsp;предпочитают такое наименование, как&nbsp;&laquo;<code>${0}</code>&raquo; и&nbsp;&laquo;<code>0</code>&raquo;&nbsp;&mdash; ведь&nbsp;это&nbsp;хорошее название для&nbsp;переменной, почему&nbsp;нет&hellip;</p>
<p>Но&nbsp;я&nbsp;уверен, что&nbsp;когда нет&nbsp;переменной, нет&nbsp;и&nbsp;проблемы. Поэтому приведу&nbsp;несколько приемов, которые делают Ваш&nbsp;код короче и&nbsp;труднее для&nbsp;восприятия&nbsp;:)</p>
<ol>
<li>
<h3>Используйте <code>||</code>&nbsp;(или) и&nbsp;<code>&amp;&amp;</code>&nbsp;(и) вместо&nbsp;<code>if</code></h3>
<p class="bold">Много кода:</p>
<pre><code class="php">$status = fwrite($h, 'some text');
if(!$status) {
    log('Writing failed');
}</code></pre>
<p class="bold">Меньше кода:</p>
<pre><code class="php">${0} = fwrite($h, 'some text');
if(!${0}) log('Writing failed');</code></pre>
<p class="bold">Еще меньше кода:</p>
<pre><code class="php">fwrite($h, 'some text') or log('Writing failed');</code></pre>
</li>
<li>
<h3>Используйте &laquo;тернарный оператор&raquo;</h3>
<p class="bold">Много кода:</p>
<pre><code class="php">if($age &lt; 16) {
    $message = 'Welcome!';
}
else {
  $message = 'You are too old!';
}</code></pre>
<p class="bold">Меньше кода:</p>
<pre><code class="php">$message = 'You are too old!';
if($age &lt; 16) {
    $message = 'Welcome!';
}</code></pre>
<p class="bold">Еще меньше кода:</p>
<pre><code class="php">$message = ($age &lt; 16) ? 'Welcome!' : 'You are too old!';</code></pre>
</li>
<li>
<h3>Используйте &laquo;<code>for</code>&raquo; вместо &laquo;<code>while</code>&raquo;</h3>
<p class="bold">Много кода:</p>
<pre><code class="php">$i = 0;
while($i &lt; 100) {
  $source[] = $target[$i];
  $i += 2;
}</code></pre>
<p class="bold">Меньше кода:</p>
<pre><code class="php">for($i = 0; $i &lt; 100; $source[] = $target[$i+=2]);</code></pre>
</li>
<li>
<p>В&nbsp;некоторых случаях <abbr title="Hypertext Preprocessor">PHP</abbr>&nbsp;требует от&nbsp;вас&nbsp;создания переменной. Например, при&nbsp;получении массива элементов, когда массив возвращается функцией:</p>
<pre><code class="php">$ext = pathinfo('file.png')['extension'];</code></pre>
<p>Результат: <samp><b>Parse&nbsp;error:</b> syntax&nbsp;error, unexpected&nbsp;&#8217;[' in&nbsp;&hellip; on&nbsp;line&nbsp;&hellip;</samp></p>
<p>Чтобы справиться с&nbsp;этими ситуациями Вы&nbsp;можете создать несколько небольших функций для&nbsp;быстрого вызова часто используемых операций:</p>
<pre><code class="php">// Возвращает ссылку на создаваемый объект
function &amp;r($v) {
	return $v;
}

// Возвращает сдвиг массива
function &amp;a(&amp;$a, $i) {
	return $a[$i];
}
</code></pre>
</li>
<li>
<h3>Исследуйте язык, который используете</h3>
<p><abbr title="Hypertext Preprocessor">PHP</abbr>&nbsp;&mdash;&nbsp;очень мощный язык и&nbsp;содержит множество функций и&nbsp;интересных аспектов, которые могут сделать Ваш&nbsp;код рациональнее и&nbsp;короче.</p>
</li>
<li>
<h3>Пишите комментарии</h3>
<p>В&nbsp;тех случаях, когда лучше написать больше кода и&nbsp;потом легко его читать, не&nbsp;ленитесь. Потратьте на&nbsp;пару секунд больше и&nbsp;напишите комментарий и&nbsp;более читаемую структуру. Это&nbsp;единственный прием из&nbsp;списка, который действительно может помочь <b>сэкономить часы, а&nbsp;не&nbsp;минуты.</b></p>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/php-coding-tips-to-write-less-code/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Технологии ранжирования Google</title>
		<link>http://www.codeisart.ru/%d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8-%d1%80%d0%b0%d0%bd%d0%b6%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-google/</link>
		<comments>http://www.codeisart.ru/%d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8-%d1%80%d0%b0%d0%bd%d0%b6%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-google/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 21:28:50 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[Переводы]]></category>
		<category><![CDATA[SEO/SEM]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=324</guid>
		<description><![CDATA[Продолжение статьи Амита Сингла, руководителя команды разработчиков, рассказывающего об особенностях алгоритмов ранжирования Google.
В этой части рассказывается об алгоритмах автоматизации и искусственного интеллекта, применяемых в поисковой системе.
В моей прошлой статье я описал некоторые принципы, по которым Google производит ранжирование. Как продолжение обсуждения о качестве поиска, я бы хотел рассказать Вам подробнее о некоторых наших технологиях.

Основная технология [...]]]></description>
			<content:encoded><![CDATA[<p>Продолжение <a href="http://www.codeisart.ru/some-principles-google-ranking/" title="Инженер Google, об алгоритмах ранжирования">статьи</a> Амита Сингла, руководителя команды разработчиков, рассказывающего об <strong class="normal">особенностях алгоритмов ранжирования Google</strong>.</p>
<p>В этой части рассказывается об алгоритмах автоматизации и искусственного интеллекта, применяемых в поисковой системе.</p>
<p>В моей прошлой статье я описал некоторые принципы, по которым Google производит ранжирование. Как продолжение обсуждения о качестве поиска, я бы хотел рассказать Вам подробнее о некоторых наших технологиях.</p>
<p><span id="more-324"></span></p>
<p>Основная технология нашей <strong class="normal">системы ранжирования</strong> пришла из области науки &laquo;Информационного поиска&raquo; (Information Retrieval или IR). IR-сообщество исследует поиск почти 50 лет. Оно использует статистику особенностей слов, таких, как частота слов, для <strong class="normal">ранжирования страниц</strong>. IR заложило для нас твердый фундамент, и мы построили на нем огромную систему, используя ссылки, структуру страниц и многие другие новшества.</p>
<p>В последнее десятилетие сущность поиска изменилась от &laquo;дайте мне то, что я сказал&raquo;  до  &laquo;дайте мне то, что я хочу&raquo;. Ожидания пользователей от поиска справедливо выросли. Мы много работаем над удовлетворением ожиданий каждого пользователя, и для это нам необходимо как можно лучше понимать страницы сайтов, запросы и наших пользователей. За последнее десятилетие мы довели технологии до понимания этих трех компонентов (процесса поиска) до совершенно новых измерений.</p>
<p>На протяжении всей статьи, когда речь будет идти о запросах в Google, они будут заключены в квадратные скобки [ ], для обозначения начала и конца запроса. (Страницы и результаты поиска часто меняются, поэтому, со временем, некоторые примеры, используемые здесь, будут работать не так, как описано.)</p>
<h3>Понимание страниц</h3>
<p>За годы мы глубоко продвинулись в технологии краулинга и индексирования. В результате мы получаем очень большой и свежий каталог. Кроме размеров и актуальности, мы добавили в наш каталог и другие улучшения. Одна из ключевых технологий, которую мы разработали для понимания страниц, привязывает логически-важные понятия к странице, даже если она их не содержит.</p>
<p>Допустим, мы найдем официальный сайт Sprovieri Gallery в Лондоне по запросу на итальянском [galleria sprovieri londra], хотя на сайте нет ни слова London, ни Londra. В США пользователь, ищущий [cool tech pc vancouver, wa] найдет страницу www.cooltechpc.com несмотря на то, что нигде на странице не указано, что они находятся в Ванкувере. Другие нами разработанные технологии включают в себя распознавание более важных и менее важных слов на странице и свежесть информации на сайте.</p>
<h3>Понимание запросов</h3>
<p>Важно понимать, что ищут наши пользователи (больше, чем просто слова в их запросе). Мы достигли некоторых заметных успехов в этом направлении, включающих в себя лучшую в своем роде систему распознавания текстового содержимого, развитую систему синонимов и очень мощную систему анализирования.</p>
<p>Многие пользователи время от времени используют нашу систему распознавания содержимого. Системе известно, что кто-то, вводящий в строке поиска [kofee annan], на самом деле ищет мистера Кофи Аннана, и подсказывает ему об этом: Did you mean: kofi annan; тогда как если кто-то ищет [kofee beans], то ему на самом деле нужны coffee beans (кофейные бобы).</p>
<p>Сделать это для разных языков и с высокой точностью довольно сложно, но мы хорошо справляемся.</p>
<p><dfn>Синонимы</dfn>&nbsp;&mdash; это фундамент нашей работы по пониманию запросов. Это одна из самых сложных проблем, решаемых нами в Google. Даже если что-то очевидно для человека, это может быть неразрешимой проблемой для автоматического языкового обработчика.</p>
<p>Как пользователь, я не хочу слишком много думать о том, какие слова мне использовать для запросов. Часто я даже не знаю, какие слова правильные. Здесь включается в работу наша система синонимов. Она может выполнять сложные модификации запросов, то есть она знает, что слово ‘Dr’, в запросе [Dr Zhivago], означает Doctor, в то время как в [Rodeo Dr] оно значит Drive. Пользователь, который ищет [back bumper repair] получает результаты для rear bumper repair. Для [Ramstein ab] мы автоматически получим результат для Ramstein Air Base,  а при запросе [ b&#038;b ab] мы будем искать Bed and Breakfasts in Alberta, Canada.</p>
<p>Мы достигли такого уровня понимания запросов для практически сотни различных мировых языков, этим я действительно горжусь!</p>
<p>Другая технология, которую мы используем в нашей системе ранжирования &mdash; это поиск идеи. Обнаружение главной идеи запроса позволяет возвратить намного более релевантные результаты. Например, наши алгоритмы поймут, что в запросе [new york times square church] пользователь ищет известную церковь на Times Square, а не статьи из New York Times. Но мы не останавливаемся на поиске идей, мы добавляем правильные идеи, когда, например, кто-то ищет [PC and its impact on people], то на самом деле он ищет impact of computers on society (влияние компьютеров на общество), а пользователю, ищущему [rainforest instructional activities for vocabulary], нужны rain forest lesson plans. Наши алгоритмы анализа запросов имеют множество встроенных современных методик, и, повторюсь, мы делаем это практически для всех языков, с которыми мы работаем.</p>
<h3>Понимание пользователей</h3>
<p>Наша работа по пониманию намерений пользователя нацелена на возврат результатов, которые действительно хотят пользователи получить, а не просто тех, которые они написали  в своем запросе. Эта работа начинается с системы локализации мирового уровня. И добавляет нашу улучшенную технологию индивидуализации и несколько других больших шагов, таких как Универсальный Поиск, сделанных нами в понимании намерений пользователей.</p>
<p>Наш упор на принцип &laquo;наиболее релевантные запросу результаты&raquo; отражается в нашей работе по локализации. Один и тот же запрос, написанный в различных странах, даст абсолютно разные результаты. Пользователь, ищущий [bank] в США, должен получить Американские банки, в то время как пользователь в Великобритании ищет Bank Fashion line или British financial institutions. Результаты этого запроса должны содержать местные финансовые подразделения в других англоговорящих странах, таких как Австралия, Канада, Новая Зеландий, ЮАР.</p>
<p>Настоящее веселье начинается, когда этот запрос вводится в не-англоговорящей стране, например в Египте, Израиле, Японии, России, Саудовской Аравии, Швейцарии. Также, запрос [football] относится к совершенно различным видам спорта в США, Австралии и Великобритании.</p>
<p>Эти примеры в основном показывают, как мы получаем правильные местные версии одинаковых смысловых значений в различных странах (финансовые подразделения, спорт и т.д.). Однако, один и тот же запрос можно иметь совершенно разное значение в разных странах.</p>
<p>Например, [Côte d'Or] это географический регион во Франции, но это крупный производитель шоколада в соседней, франкоговорящей Бельгии; и да, эти вещи мы тоже получаем правильно.</p>
<h3>Персонализация</h3>
<p><dfn>Персонализация</dfn>&nbsp;&mdash; это еще одна сильная особенность нашей поисковой системы, которая подгоняет результаты поиска для каждого пользователя.</p>
<p>Пользователи, которые &quot;залогинились&quot; во время поиска и имеют включенный  журнал посещений, получают результаты, которые более релевантны для них, чем общие результаты Google. Например, пользователь, который имеет множество запросов, относящихся к футболу, получит более «футбольные» результаты на запрос [giants], тогда как другие пользователи могут получить результаты, относящиеся к бейсбольной команде. Аналогично, если вы стремитесь получить результаты из какого-то интернет-магазина, вам лучше искать товар на этом сайте. По нашим оценкам, пользователи, получающие персональные результаты, находят их более релевантными, чем неперсонализированные результаты.</p>
<p>Другой случай пользовательских намерений можно рассмотреть на примере запроса [chevrolet magnum]. Magnum на самом деле делается компанией Dodge, а не Chevrolet. Поэтому, мы показываем результаты для Dodge Magnum с пометкой See results for: dodge magnum.</p>
<p>Наша работа над Универсальным Поиском &mdash; это ещё один пример нашего толкования намерений пользователя для предоставления им того, что они (иногда) на самом деле хотят. Т.е., кто ищет [bangalore], получают не только нужные веб-страницы, также ему становится доступна карта, видео, жизнь на улицах Бангалоре и т.д., и плюч ко всему еще и новости/блоги о Бангалоре.</p>
<p>В заключение, позвольте мне коротко упомянуть последнее улучшение, сделанное нами в механизме поиска: Cross Language Information Retrieval (CLIR). Это позволяет пользователям сначала получить информацию не на их родном языке, а затем, используя технологию перевода Google, мы делаем информацию доступной. Я называю это улучшение &laquo;дайте мне то, что мне нужно, на любом языке&raquo;. Пользователь, который ищет биографию Тони Блэра в России, набирающий [Тони Блэр биография] получает предложение посмотреть результаты, переведенные с английского.  Аналогично, пользователь, ищущий песни из фильмов Дисней в Египте с запросом [أغاني أفلام ديزني], получит предложение посмотреть английские результаты.</p>
<p>Нам очень нравится CLIR, так как он действительно помогает нам в нашей миссии по организации информации в мире и приданию ей универсальной доступности и пользы.</p>
<p>Я могу продолжать показывать примеры современных технологий, которые мы разработали, чтобы сделать нашу систему ранжирования настолько хорошей, какой она является, но на самом деле решение проблемы поиска еще далеко за горами. Многие запросы до сих пор не получают удовлетворяющих результатов в Google, и наличие каждого такого запроса &mdash; это возможность улучшить и дополнить нашу систему ранжирования. Я уверен, что с таким количеством технологий, разрабатываемых нашей группой, мы сделаем большие улучшения в наших алгоритмах ранжирования в ближайшем будущем.</p>
<h3>Заключение</h3>
<p>Я надеюсь, что две мои статьи о <strong class="normal">ранжировании Google</strong> дали понять, что мы живем и дышим поиском, и нам это нравится больше, чем когда-либо. Наше старание служить пользователям по всему миру беспрецендентно. Мы гордимся сами собой, запуская очередной алгоритм в нашу <strong class="normal">систему ранжирования</strong>. Мы усердно работаем каждый день, чтобы сделать ее еще лучше.</p>
<p>Первая часть статьи: <a href="http://www.codeisart.ru/some-principles-google-ranking/" title="Инженер Google, об алгоритмах ранжирования">Инженер Google, об алгоритмах ранжирования</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/%d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8-%d1%80%d0%b0%d0%bd%d0%b6%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Инженер Google, об алгоритмах ранжирования</title>
		<link>http://www.codeisart.ru/some-principles-google-ranking/</link>
		<comments>http://www.codeisart.ru/some-principles-google-ranking/#comments</comments>
		<pubDate>Sat, 02 Aug 2008 18:20:32 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[Переводы]]></category>
		<category><![CDATA[SEO/SEM]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=253</guid>
		<description><![CDATA[Инженер компании Google рассказывает о некоторых принципах алгоритмов ранжирования.
Позвольте представиться. Меня зовут Амит Сингал. Я работаю в Google руководителем команды, ответственной за ранжирование.
Вот уже восемнадцать лет я работаю в сфере поисковых технологий, начав в 1990 года выпускником по специальности &#171;компьютерные науки&#187;. В научных кругах &#171;поисковые алгоритмы&#187; называют &#171;Информационный поиск&#187; (Information Retrieval или IR). Я пришел [...]]]></description>
			<content:encoded><![CDATA[<p>Инженер компании Google рассказывает о некоторых принципах <strong class="normal">алгоритмов ранжирования</strong>.</p>
<p>Позвольте представиться. Меня зовут Амит Сингал. Я работаю в Google руководителем команды, ответственной за ранжирование.</p>
<p>Вот уже восемнадцать лет я работаю в сфере поисковых технологий, начав в 1990 года выпускником по специальности &laquo;компьютерные науки&raquo;. В научных кругах &laquo;поисковые алгоритмы&raquo; называют &laquo;Информационный поиск&raquo; (Information Retrieval или IR). Я пришел в Google в 2000 году и с тех пор работаю над <strong class="normal">алгоритмами ранжирования Google</strong>.</p>
<p><span id="more-253"></span></p>
<p><strong class="normal">Ранжирование Google</strong>&nbsp;&mdash; это набор взаимосвязанных алгоритмов, используемых для поиска документов, наиболее релевантных для запроса пользователя. Мы используем эти алгоритмы для сотен миллионов запросов в день из набора миллиардов и миллиардов страниц. Эти алгоритмы работают для каждого запроса, введенного в большинство служб поиска Google.</p>
<p>Так как поиск в сети&nbsp;&mdash; это самая используемая служба Google, а также самая широкоизвестная, те же <strong class="normal">алгоритмы ранжирования</strong> используются, с некоторыми изменениями, в других службах поиска, таких как Images, News, YouTube, Maps, Product Search, Book Search и других.</p>
<p>Самый частозадаваемый мне вопрос о ранжировании Google: <q>Как Вы это делаете?</q>. Конечно, для создания такой современной системы как наша, требуется очень много, и я постараюсь рассказать о некоторых технологиях в следующей статье. Сегодня, я бы хотел вкратце объяснить основные принципы ранжирования Google:</p>
<ol>
<li>наиболее релевантные запросу результаты;</li>
<li>стараться сделать алгоритмы как можно проще;</li>
<li>полная автоматизация, никакого ручного вмешательства в работу алгоритмов.</li>
</ol>
<p>Первый принцип очевиден. Работая над поисковым движком, мы хотим быть абсолютно уверены в том, что каждый пользователь получит наиболее релевантные результаты своего запроса. Мы обычно называем это принципом «не пропустить ни один запрос». Всякий раз когда мы возвращаем менее, чем идеальные результаты для любого запроса пользователей на любом языке мира в любой стране&nbsp;&mdash; это вдохновляет нас на улучшение алгоритмов и приближение их к идеальным.</p>
<p>Второй принцип также очевиден. Разве не желает каждый программист или системный проектировщик, чтобы его система оставалась простой и понятной? Во время работы поисковой системы, когда мы получаем большое количество запросов от пользователей, на которые нужно ответить, и плюс ко всему учитывая все языки мира. И гораздо легче обрабатывать запрос множеством простых алгоритмов, результаты которых будут собраны и обработаны финальным.</p>
<p>Мы много работаем над упрощением нашей системы без ухудшения качества результата. Это постоянная проблема, но она стоит наших трудов. Мы делаем около десяти изменений алгоритмов ранжирования каждую неделю, тщательно рассматриваем их до запуска. Наши инженеры абсолютно точно понимают, почему страница была ранжирована именно таким образом для данного запроса. Система, в которой легко разобраться, позволяет нам быстро делать усовершенствования. Вот, что подразумевает принцип &laquo;Старайтесь делать проще&laquo;.</p>
<p>Ни одно обсуждение алгоритмов ранжирования Google не обходится без распространенного, но ошибочного, вопроса: <q>Google вручную редактирует свои результаты?</q>. Позвольте мне в ответ на это просто назвать наш третий принцип:  &laquo;Никакого ручного вмешательства&raquo;. На наш взгляд, сеть была создана людьми. Вы одни из тех, кто создает страницы и посещает их. Мы используем вклад человека в наших алгоритмах. Финальное упорядочение результатов определяется исключительно нашими алгоритмами, использующими достижения и разработки огромного Интернет-сообщества, а не вручную, т.е. весь процесс происходит полностью автоматически.</p>
<p>Мы считаем, что субъективное мнение каждого индивидуума является субъективным, а информация, выбранная нашими алгоритмами из огромной массы человеческих знаний, записанных на веб-страницах и ссылках на них гораздо выше, чем субъективное мнение.</p>
<p>Вторая причина, по которой мы принципиально против ручного вмешательство в результаты ранжирования&nbsp;&mdash; это то, что неверно обработанный запрос является поводом для улучшения наших алгоритмов.</p>
<p>Совершенствуя основной алгоритм, мы не просто улучшаем тот один запрос, мы совершенствуем целый класс запросов, причем всегда для всех языков мира. Однако, я должен добавить, что так же существуют правила для написания сайтов, рекомендованные Google, и мы принимаем меры в отношении сайтов, нарушающих наши правила или по некоторым другим причинам (таким, как требования закона, детская порнография, вирусы/вредоносное ПО, и т.д.).</p>
<p>В заключение хочу сказать, что наша страсть к механизмам поиска сейчас намного сильнее, чем когда-либо и моя работа лучшая в мире <img src='http://www.codeisart.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Продолжение статьи (Часть 2): <a href="http://www.codeisart.ru/%d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8-%d1%80%d0%b0%d0%bd%d0%b6%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-google/" title="Технологии ранжирования Google">Технологии ранжирования Google</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/some-principles-google-ranking/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>С чего начать ссылочную кампанию?</title>
		<link>http://www.codeisart.ru/s-chego-nachat-ssylochnuyu-kampaniyu/</link>
		<comments>http://www.codeisart.ru/s-chego-nachat-ssylochnuyu-kampaniyu/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 12:34:06 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[Переводы]]></category>
		<category><![CDATA[SEM]]></category>
		<category><![CDATA[SEO/SEM]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=236</guid>
		<description><![CDATA[Данная статья является переводом одного поста на известном блоге SEOmoz. Описаны некоторые моменты, которые нам показались интересными и которые можно использовать в Ваших кампаниях получения ссылок. Статья на английском.
Занимаясь SEO, как для себя, для клиентов, на работе, я научился многим вещам, касающимся проведению ссылочной кампании. Вести ссылочную кампанию можно разными способами. Хотя я полностью ЗА [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/08/how-to-start.jpg" alt="How to start?" width="300" height="288" class="left" />Данная статья является переводом одного поста на известном блоге <a href="http://www.seomoz.org" hreflang="en" rel="external nofollow">SEOmoz</a>. Описаны некоторые моменты, которые нам показались интересными и которые можно использовать в Ваших кампаниях получения ссылок. Статья на <a href="http://www.seomoz.org/blog/divide-and-conquer-creating-and-managing-your-link-campaign" hreflang="en" rel="original" rev="translation">английском</a>.</p>
<p>Занимаясь <abbr title="Search Engine Optimization">SEO</abbr>, как для себя, для клиентов, на работе, я научился многим вещам, касающимся проведению ссылочной кампании. Вести ссылочную кампанию можно разными способами. Хотя я полностью ЗА создание полезного контента на сайте, ссылки на который будут расти естественным путем, но чаще бывает так, что это проще сказать, чем сделать. Если Вы не хотите прибегать к поиску ссылок, то можно прибегнуть к достаточно старомодному методу, а именно спрашивать их напрямую.</p>
<p><span id="more-236"></span></p>
<ul>
<li>Нужна ли мне эта ссылка?</li>
<li>Каким образом я могу получить эту ссылку?</li>
<li>Какой анкор может соответствовать этой ссылке?</li>
<li>Имеется ли вообще возможность заполучить эту ссылку?</li>
<li>Какое значение имеет эта ссылка для меня?</li>
</ul>
<p>Это вопросы, которые я задаю себе во время поиска подходящих ссылок. Ответы на них помогают мне решить, какой подход я выберу и насколько далеко я зайду, чтобы получить необходимую ссылку.</p>
<p>Всем известно, что ссылочную кампанию стоит начинать с проведения тщательного анализа внешних ссылок конкурентов.</p>
<p>Именно на этом этапе и начинается сбор информации, но при этом важно отслеживать всё с точностью до документов &laquo;Word&raquo; или &laquo;Excel&raquo;, т.к. в них тоже может содержаться полезная информация. На протяжении всего продвижения Вы будете создавать карту ссылок всей Вашей тематики. Достаточно скоро Вы соберете обширный список родственных веб-сайтов. Эти ссылки Вам пригодятся в дальнейшем.</p>
<p>Я использую шаблон поиска <cite>http://*.domain.ru</cite>, чтобы получить полное представление о том, где упоминаются сайты моих конкурентов (применяйте абсолютно любые средства, о которых Вам известно).</p>
<p>Когда Вы заходите на сайты, связанные с нужной Вам тематикой, ищите ссылки вида &laquo;добавить <abbr title="Uniform Resource Locator">URL</abbr>&raquo; или &laquo;рекомендовать сайт&raquo;. Иногда процесс добавления происходит так же просто, как например заполнить форму и нажать &laquo;Отправить&raquo;. Либо же если подобных ссылок не найдено, то нужно тщательно исследовать сайт. Например, была одна страница научных исследований, с которой я хотел связать мой сайт, но на ней не было никакой контактной информации или ссылки типа &laquo;добавить <abbr title="Uniform Resource Locator">URL</abbr>&raquo;, которую бы я мог легко найти. Как оказалось, ссылка &laquo;добавить <abbr title="Uniform Resource Locator">URL</abbr>&raquo; была скрыта. Найти её я смог только с помощью поиска в исходнике страницы по запросу &laquo;<samp>addURL</samp>&raquo;. Вы так же можете вместо использования формы найти адрес электронной почты, используя для поиска символ &laquo;<var>@</var>&raquo; при просмотре кода сайта.</p>
<h3>Планирование&nbsp;&mdash; ключ к успеху</h3>
<p>Когда у Вас будет готовый список, займитесь планированием, разделяя ваш список потенциальных ссылок по разным категориям.<br />
	Категории могут включать:</p>
<ul>
<li>авторитетные ссылки (.edu, .gov, и т.д.)</li>
<li>ссылки на блоги</li>
<li>ссылки на новостные группы</li>
<li>форумные ссылки</li>
<li>и т.д.</li>
</ul>
<p>В зависимости от тематики продвигаемого сайта Ваш список может быть дальше разбит на категории. Например, если Ваш сайт относится к &laquo;энергетике&raquo;, у Вас могут получиться следующие категории:</p>
<ul>
<li>нефтяные и газовые сайты</li>
<li>сайты бензиновой тематики </li>
<li>сайты об альтернативных источниках энергии</li>
<li>сайты о солнечной энергии</li>
<li>и т.д.</li>
</ul>
<p>Формирование вашего списка таким образом помогает выбрать анкор для Ваших ссылок.<br />
	Вероятно, вы будете использовать &laquo;нефте-газовые&raquo; анкоры для сайтов, посвященных нефти и газу, энергетические анкоры для сайтов об энергии и т.д. Это также помогает Вам выбрать, с какой страницей Вы хотите их связать. Допустим, какая-либо Ваша внутренняя страница подходит для их контента больше, чем Ваша главная страница. Внимательно учитывайте такие возможности, т.к. получение ссылок на Ваши внутренние страницы очень важно и обычно трудновыполнимо.</p>
<p>Как только всё спланировано, Вы готовы действовать.<br />
	Но стоп! Самая большая ошибка, которую вы можете сделать на этом этапе&nbsp;&mdash; это попытаться контактировать со всеми сайтами из Вашего списка одновременно. Важно сначала придумать подход и попробовать его пару раз, перед тем как Вы решите, что он стоящий. Если Вы разошлете электронные письма пяти сайтам и не получите никакого ответа, то Вы поймете, что Ваш подход нужно изменить или улучшить. В этом случае Вы можете придумать что-нибудь еще и отправить это другим 5 потенциальным клиентам. Поступая так, Вы в итоге создадите подход, который работает, и Вам не придется тратить весь Ваш список потенциальных клиентов на одну плохую попытку. Помните: то, что работает для кого-то, не будет работать для всех. Подход, который работает для сайтов электронной коммерции, не будет обязательно работать для блогов, а подход к &laquo;.edu&raquo; сайтам может не работать для &laquo;.gov&raquo; и т.д.</p>
<h3>Иногда не помешает схитрить</h3>
<p>Когда я готов начать активную ссылочную кампанию, одна из самых распространенных проблем, которые появляются&nbsp;&mdash; это отсутствие контактной информации. Это может провратить налаживание связей в достаточно трудоемкий процесс. Поэтому, иногда (или часто) необходимо применить хитрость и в нахождении нужной информации, и в получении этой ссылки.</p>
<p>Например, мне нужно было получить ссылку на известный блог. К сожаления, я нигде не смог найти ни единого упоминания о контактной информации. Так как имя хозяина блога было указано после каждого сообщения, я с помощью &laquo;Google&raquo; нашел его в &laquo;LinkedIn&raquo;. Там я пригласил его присоединиться к моей сети, сказав ему, что я его большой фанат (Фанат получения ссылок!). Это заняло около двух недель, но в итоге он согласился. После небольшой электронной переписки он включил мой сайт в нужный пост блога. Миссия выполнена! Кроме того, у меня сейчас есть его личный <abbr title="Electronic Mail">e-mail</abbr> адрес. Так появляются связи, которые могут, помочь в будущем.</p>
<p>В другой раз, когда я следил за блогом и терпеливо ждал своего шанса, хозяйка блога написала о том, что в общем-то не любит всю мою тематику (новости/медиа). Она была очень сильно убеждена, что новости не стоит больше читать, потому что все они имеют негативную окраску. Большинство решило бы, что шанс упущен, но я сразу же увидел перспективу! Мой план включал в себя связь с ней, сочувствие и понимание ее мыслей и, в основном, согласие с ее мнением. Затем я спросил, не хочет ли она посмотреть на наш сайт и написать статью о том, как мы можем расширить сферу деятельности. Я не просил размещать статью в ее блоге, но она всеравно это сделала (ведь каждому нужен свежий контент). Миссия снова завершена!</p>
<p>Я считаю, что если Вам удобно схитрить или иногда &laquo;сказать не всю правду&raquo;, делайте это. До тех пор, пока это никому не вредит.</p>
<h3>Отслеживайте ваш прогресс</h3>
<p>Когда Вы начали получать ответы, попробуйте отмечать Ваши результаты разными цветами где-нибудь на бумаге или в подходящей программе (например зеленый&nbsp;&mdash; &laquo;ссылка получена&raquo;&raquo;, красный&nbsp;&mdash; &laquo;не повезло&raquo;, фиолетовый&nbsp;&mdash; &laquo;на сообщение ответили&raquo;, синий&nbsp;&mdash; &laquo;нет ответа&raquo; и т.д.). Поддержание модели Вашего прогресса по ссылкам в безупречном виде не только помогает Вам с определением степени Вашего успеха и тактики, но и дает Вам возможность в наглядной форме отчитаться перед начальством.</p>
<p>Записывайте дату контакта с владельцем потенциальной ссылки, как Вы с ними связались (<abbr title="Electronic Mail">e-mail</abbr>, форма на сайте, комментарий и т.д.), какой подход Вы использовали, и другую информацию, имеющую отношение к делу.</p>
<p>Мой личные списки потенциальных ссылок порой занимают до 8 страниц. Я также пополняю эти списки каждый раз, как только попадаю на страницу или сайт, связанный по тематике моим.</p>
<p>А должность редактора схожих категорий в различных каталогах помогает мне оставаться информированным о перспективных сайтах схожих с моими. Поэтому мой список растет&hellip; и растет&hellip;, и растет.</p>
<p>Есть много путей для начала ссылочной кампании и я уверен, что у каждого человека есть свой собственный стиль. Я также понимаю, что для некоторых из Вас эта статья будет являться &laquo;Ссылочной кампанией №101&raquo;, но я искренне надеюсь, что кто-нибудь найдет применение методам и стратегиям, описанным в ней.</p>
<p>Так же рекомендую для ознакомления статью, описывающую некоторые элементы <a href="http://www.codeisart.ru/strategiya-polucheniya-ssylok-dlya-malogo-byznesa/">стратегии получения ссылок для малого бизнеса</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/s-chego-nachat-ssylochnuyu-kampaniyu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Расширение объекта Date языка JavaScript</title>
		<link>http://www.codeisart.ru/%d1%80%d0%b0%d1%81%d1%88%d0%b8%d1%80%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-date-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0-javascript/</link>
		<comments>http://www.codeisart.ru/%d1%80%d0%b0%d1%81%d1%88%d0%b8%d1%80%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-date-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0-javascript/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 10:12:43 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Переводы]]></category>
		<category><![CDATA[ООП]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=190</guid>
		<description><![CDATA[Перевод статьи о расширении объектов JavaScript.
Оригинал статьи тут
Большинство приложений, особенно бизнес-приложений, как правило, требуют множество операций с датой и временем. Код этих операций может быть упрощен, если объект Date ядра JavaScript расширить собственными дополнительными методами. Данная статья рассказывает о том, как добавлять в объект Date пользовательские методы, значительно упрощающие работу с датой в языке JavaScript [...]]]></description>
			<content:encoded><![CDATA[<p>Перевод статьи о расширении объектов JavaScript.<br />
Оригинал статьи <a href="http://www.digital-web.com/articles/javascript_date_object_with_user_methods/">тут</a></p>
<p>Большинство приложений, особенно бизнес-приложений, как правило, требуют <strong class="normal">множество операций с датой и временем</strong>. Код этих операций может быть упрощен, если <strong class="normal">объект Date ядра JavaScript расширить собственными дополнительными методами</strong>. Данная статья рассказывает о том, как добавлять в <strong class="normal">объект Date</strong> пользовательские методы, значительно упрощающие <strong class="normal">работу с датой в языке JavaScript</strong> и которые будут наследоваться <strong class="normal">каждым экземпляром данного объекта</strong>. Описанная в данной статье техника так же может быть применима ко всем <strong class="normal">объектам ядра JavaScript</strong>.</p>
<p>Практически все созданные нами методы могут быть использованы самостоятельно, без необходимости создания остальных. Но нужно помнить, что некоторые методы зависят от copy(), lastday(), getDaysBetween() и getMonthsBetween().</p>
<p>Безусловно, все наши методы могут быть реализованы как глобальные функции, но, <strong class="normal">расширяя класс Date</strong>, мы получаем несколько преимуществ:</p>
<ul>
<li>при <strong class="normal">расширении объекта Date языка JavaScript</strong>,  глобальное пространство имен меньше загромождается, код более читаем, и производительность немного выше (хотя это только наносекунды);</li>
<li>наши методы будут обладать всеми преимуществами объектно-ориентированного программирования;</li>
</ul>
<p><span id="more-190"></span></p>
<p>Итак, приступим.</p>
<h2>Как это работает?</h2>
<p>Техника расширения использует преимущества реализации объектов в JavaScript. В основном, когда программисты говорят об объектно-ориентированном программировании (ООП), они подразумевают С++, Java или PHP. В этих языках строго типизированный класс определяет каждый объект – это все определяется до выполнения программы. Но JavaScript – <strong class="normal">это язык, основанный на прототипах</strong>. Функция-конструктор определяет каждый из объектов, а их методы могут быть расширены во время выполнения программы. Реализованные методы и свойства относятся к свойству прототипов функции конструктора, которое, по сути, также является объектом. Методы и свойства создаются объявлением, и новые или существующие экземпляры объектов наследуют их.</p>
<pre><code class="javascript">Date.prototype.method_name = function ([arguments]) {
  // Здесь идет код
};</code></pre>
<p>В этом примере анонимная функция присваивается атрибуту method_name объекта prototype. Синтаксис вызова метода:</p>
<pre><code class="javascript">date_instance.method_name([arguments]);</code></pre>
<p>Внутри кода метода ключевое слово this обращается к экземпляру объекта.<br />
Теперь понятно, как это работает, давайте сделаем встроенный объект Date немного более полезным!</p>
<h2>Копирование дат</h2>
<p>В языке языке JavaScript присваивание объектов создает ссылку на объект, а не его копию. В следующем коде переменная date1 инициализирована значением 10 Февраля 2008 и это значение присвоено date2.  Так как date2 не является копией date1, изменение числа на 20-ое касается только date1 и Alert выдает обе даты – 20 Февраля 2008. Они фактически являются одной и той же копией даты.</p>
<pre><code class="javascript">var date1 = new Date(2008, 1, 10);
var date2 = date1;
date2.setDate(20);
alert(date1 + &quot;\n&quot; + date2);</code></pre>
<p>Для копирования даты её нужно преобразовать в базовое значение (строковое, числовое или булевое) и создать новую дату. Метод getTime() идеально подходит для этого. Он возвращает внутреннее представление даты с точностью до миллисекунды и может быть использован в качестве аргумента для конструктора даты:</p>
<pre><code class="javascript">var oldDate = new Date(); // сегодня
var dateCopy = new Date(oldDate.getTime());</code></pre>
<p>Вместо написания этих строк везде, где они нужны, или создания глобальной функции мы добавим наследуемый метод copy() в конструктор Date:</p>
<pre><code class="javascript">Date.prototype.copy = function () {
  return new Date(this.getTime());
};</code></pre>
<p>Вот пример его использования:</p>
<pre><code class="javascript">var oldDate = new Date(2008, 1, 10);
var newDate = oldDate.copy();

newDate.setDate(20);
alert(oldDate + &quot;\n&quot; + newDate);</code></pre>
<p>Изменение newDate не влияет на oldDate. Даты, показанные в Alert это 10 февраля 2008 и 20 февраля 2008. Этот метод полезен, если вам нужно произвести несколько арифметических операций с датой, сохранив начальное её значение.</p>
<h2>Получение информации о дате</h2>
<p>Наши следующие четыре метода созданы для получения имени или аббревиатуры для недели или месяца. Создаются два массива: один для названий дней недели, второй для месяцев. Методы getDay() или getMonth() объекта Date возвращают указатель, использующийся для доступа к значению массива дней или месяцев.</p>
<p>Кроме описанных выше проблем с использованием глобальных функций здесь есть другая угроза. Массивы (всех переменных) – это не константы, и они очень чувствительны к изменениям. Константы могут быть объявлены ключевым словом const в новых версиях языка JavaScript, но это не поддерживается большинством браузеров. К счастью, JavaScript предлагает альтернативные решения.</p>
<p>Массивы можно создать как свойства конструктора даты, исключая их из глобального пространства имен. Это можно сделать двумя способами: как статические атрибуты или наследуемые атрибуты. Примером статического атрибута служит PI, который является статическим атрибутом объекта Math. Массивы добавляются в конструктор Date с помощью присваивания, как это показано ниже:</p>
<pre><code class="javascript">Date.DAYNAMES = [&quot;Sunday&quot;, &quot;Monday&quot;, &quot;Tuesday&quot;, &quot;Wednesday&quot;, &quot;Thursday&quot;, ..., &quot;Friday&quot;, &quot;Saturday&quot;];
Date.MONTHNAMES = [&quot;January&quot;, &quot;February&quot;, &quot;March&quot;, &quot;April&quot;, &quot;May&quot;, &quot;June&quot;, &quot;July&quot;, ..., &quot;August&quot;, &quot;September&quot;, &quot;October&quot;, &quot;November&quot;, &quot;December&quot;];</code></pre>
<p>Получить доступ к массивам можно  следующим образом:</p>
<pre><code class="javascript">Date.DAYNAMES[index];</code></pre>
<p>Второй вариант – это <strong class="normal">создание аттрибутов массива в объекте prototype конструктора даты</strong>:</p>
<pre><code class="javascript">Date.prototype.DAYNAMES = [&quot;Sunday&quot;, &quot;Monday&quot;, &quot;Tuesday&quot;, &quot;Wednesday&quot;, &quot;Thursday&quot;, ..., &quot;Friday&quot;, &quot;Saturday&quot;];
Date.prototype.MONTHNAMES = [&quot;January&quot;, &quot;February&quot;, &quot;March&quot;, &quot;April&quot;, &quot;May&quot;, &quot;June&quot;, &quot;July&quot;, ..., &quot;August&quot;, &quot;September&quot;, &quot;October&quot;, &quot;November&quot;, &quot;December&quot;];</code></pre>
<p>Разница между этими двумя подходами в том, что они наследуются и доступны методам Date только при использовании ключевого слова this (этот метод будет использоваться на протяжении всей статьи).</p>
<p>Существует третий вариант – мы можем делать и то, и другое. Например:</p>
<pre><code class="javascript">Date.DAYNAMES = [&quot;Sunday&quot;, &quot;Monday&quot;, &quot;Tuesday&quot;, &quot;Wednesday&quot;, &quot;Thursday&quot;, ..., &quot;Friday&quot;, &quot;Saturday&quot;];
Date.prototype.DAYNAMES = Date.DAYNAMES;</code></pre>
<p>(Поднимая тему статических атрибутов и методов, необходимо упомянуть, что представленные методы могут быть не статическими, но относящимися к объекту prototype. Потребуются небольшие изменения, чтобы преобразовать эти методы в статические.)</p>
<p>А вот возможность сделать ваш код интернациональным. Код DAYNAMES и MONTHNAMES может быть отделен от других методов, так что можно установить названия дней и месяцев на разных языках:</p>
<pre><code class="javascript">Date.prototype.DAYNAMES = [&quot;Dimanche&quot;, &quot;Lundi&quot;, &quot;Mardi&quot;, &quot;Mercredi&quot;, &quot;Jeudi&quot;, ..., &quot;Vendredi&quot;, &quot;Samedi&quot;];
Date.prototype.MONTHNAMES = [&quot;Janvier&quot;, &quot;Fevrier&quot;, &quot;Mars&quot;, &quot;Avril&quot;, &quot;Mai&quot;, ..., &quot;Juin&quot;, &quot;Juillet&quot;, &quot;Aout&quot;, &quot;Septembre&quot;, &quot;Octobre&quot;, &quot;Novembre&quot;, &quot;Decembre&quot;];</code></pre>
<p>С массивами на месте, четыре метода могут быть заданы следующим образом:</p>
<pre><code class="javascript">Date.prototype.getFullDay = function() {
  return this.DAYNAMES[this.getDay()];
};
Date.prototype.getDayAbbr = function() {
  return this.getFullDay().slice(0, 3);
};

Date.prototype.getFullMonth = function() {
  return this.MONTHNAMES[this.getMonth()];
};
Date.prototype.getMonthAbbr = function() {
  return this.getFullMonth().slice(0, 3);
};</code></pre>
<p>А вот образец использования этих методов:</p>
<pre><code class="javascript">var example_date = new Date(2008, 1, 20);
alert("Day: " + example_date.getFullDay() +
  "\nDay abbr: " + example_date.getDayAbbr() +
  "\nMonth: " + example_date.getFullMonth() +
  "\nMonth Abbr: " + example_date.getMonthAbbr());</code></pre>
<p>Alert покажет:<br />
Day: Wednesday<br />
Day abbr: Wed<br />
Month: February<br />
Month: Abbr Feb</p>
<h2>Задание формата времени дня</h2>
<p><strong class="normal">Объект Date</strong> содержит 2 метода для получения строкового представления времени суток: toTimeString() и toLocaleTimeString(). Формат строки зависит от настроек клиента и может отличаться у разных пользователей. В общем, это все хорошо, но может не работать в вашем приложении. Следующие два метода возвращают определенный формат:<br />
Первый возвращает время в формате “чч:мм:сс am/pm” с двумя цифрами в каждом числе.</p>
<pre><code class="javascript">Date.prototype.to12HourTimeString = function () {
  var h = thi  s.getHours();
  var m = "0" + this.getMinutes();
  var s = "0" + this.getSeconds();
  var ap = "am";

  if (h >= 12) {
      ap = "pm";

      if (h >= 13)
        h -= 12;
    } else if (h == 0)
      h = 12;
    }
  h = "0" + h;
  return h.slice(-2) + ":" +
           m.slice(-2) + ":" +
           s.slice(-2) + " " + ap;
};</code></pre>
<p>Второй метод возвращает время в 24-часовом формате, также с двумя цифрами в каждом числе.</p>
<pre><code class="javascript">Date.prototype.to24HourTimeString = function () {
  var h = "0" + this.getHours();
  var m = "0" + this.getMinutes();
  var s = "0" + this.getSeconds();
  return h.slice(-2) + ":" + m.slice(-2) + ":" + s.slice(-2);
};</code></pre>
<p>Наверное, в этом коде интересно только использование slice(). Чтобы сделать числа двузначными, к ним  добавляется ведущий ноль, и затем slice() используется для захвата крайних справа 2 цифр. Если число меньше 10, включается дополнительный ведущий ноль. Эти методы используются вот так:</p>
<pre><code class="javascript">var dte = new Date(2008, 1, 20, 19, 30, 5);
alert(dte.to12HourTimeString() + "\n" + dte.to24HourTimeString());</code></pre>
<p>Alert покажет:<br />
07:30:05 pm<br />
19:30:05</p>
<h2>Получение количества дней в месяце</h2>
<p>Бывает, что необходимо узнать количество дней в месяце.  Для этого можно использовать массив с дополнительным кодом для Февраля, но есть способ проще. JavaScript переполнит даты, созданные с недопустимыми значениями. Например, если мы создадим дату 33 февраля 2008 как:</p>
<pre><code class="javascript">var d = new Date(2008, 1, 33);
alert(d);</code></pre>
<p>Дата, созданная и отображенная в окне, &#8211; это 4 марта 2008 (2008 год – високосный).<br />
Следовательно, мы можем сказать, что последний день месяца – и число дней в месяце – это «нулевой» день следующего месяца – один день до первого. Следующий месяц  вычисляется как текущий месяц (date.getMonth()) плюс один. JavaScript возвратит Январь следующего месяца, если прибавить 1 к Декабрю, то есть года переводятся так же, как и месяцы. Последний день месяца вычисляется так:</p>
<pre><code class="javascript">Date.prototype.lastday = function() {
  var d = new Date(this.getFullYear(), this.getMonth() + 1, 0);
  return d.getDate();
};</code></pre>
<p>Число дней в месяце любой даты находится следующим образом:</p>
<pre><code class="javascript">var d = new Date(2008, 1, 5);
alert(d.lastday());</code></pre>
<p>Окно предупреждения покажет число дней в месяце: в этом примере – 29. (Второй аргумент, 1, в конструкторе Date это Февраль, Январь – 0.)</p>
<h2>Поиск количества дней между двумя датами</h2>
<p>Деловые проекты часто нуждаются в определении количества дней между двумя датами. Мы создадим метод getDaysBetween() – но сначала давайте добавим ещё один атрибут к прототипу конструктора даты, названный msPERDAY. Его значение – это число миллисекунд в 24 часах. Все что нам нужно – эта строка кода:</p>
<pre><code class="javascript">Date.prototype.msPERDAY = 1000 ∗ 60 ∗ 60 ∗ 24;</code></pre>
<p>Другими словами, 1000 миллисекунд в секунде, 60 секунд в минуте, 60 минут в одном часе, 24 часа в сутках.</p>
<p>В большинстве случаев, определение количества дней между двумя датами исключает учет времени. Это требование мы будем использовать. Между 1 февраля и 10 февраля 9 дней, не обращая внимания на время – в одной дате может быть 01 00 часов, а в другой 23 00, но разница &#8211; всё равно 9 дней.  Несмотря на это даты JavaScript включают время, так что необходимо корректирование:</p>
<pre><code class="javascript">Date.prototype.getDaysBetween = function(d) {
  d = d.copy();

  d.setHours(this.getHours(), this.getMinutes(), this.getSeconds(), ...
    this.getMilliseconds());

  var diff = d.getTime() - this.getTime();
  return (diff)/this.msPERDAY;
};</code></pre>
<p>В данном коде, новая дата создается с таким же значением, что и аргумент, чтобы избежать изменения исходной даты. Временная часть новой даты поставлена, чтобы соответствовать времени даты, вызывающей метод,  исключающий влияние времени дня.<br />
Метод используется следующим образом:</p>
<pre><code class="javascript">var today = new Date();
var birthday = new Date(2008, 9, 31);
var days = today.getDaysBetween(birthday);

if (days > 0)
  alert(days + " days 'til my birthday.");
else if (days < 0)
  alert(days + " days since my birthday.");
else
  alert("It's my birthday!!");</code></pre>
<p>Если дата, используемая как аргумент позже, чем дата, вызывающая метод, то возвращается положительное значение. Отрицательное значение возвращается, если аргумент – более ранняя дата. Может возвращаться и абсолютное значение, но знание того, какая дата была раньше, может быть важным, как в примере.</p>
<h2>Использование представлений данных как аргумента</h2>
<p>Метод getDaysBetween(d), показанный выше, принимает <strong class="normal">объект Date</strong> в качестве своего аргумента, но может быть удобнее использовать другие типы данных для представления даты. Конструктор Date имеет четыре различных процедуры:</p>
<pre><code class="javascript">new Date(); // без аргумента, использует текущее время и дату
new Date("Feb 20, 2008 10:20:05"); // символьное представление даты
new Date(2008, 1, 20, 10, 20, 05); // числовое представление даты
new Date(milliseconds); // число миллисекунд</code></pre>
<p>Любой из методов, которые мы создаем, использующий дату как аргумент, может быть преобразован, чтобы принимать любые аргументы, распознанные конструктором данных, с добавлением следующего кода:</p>
<pre><code class="javascript">Date.prototype.getDaysBetween = function(d) {
  var d2;

  // дополнительный код для свойств аргументов
  if (arguments.length == 0) {
    d2 = new Date():
  } else if (d instanceof Date) {
    d2 = new Date(d.getTime());
  } else if (typeof d == "string") {
    d2 = new Date(d);
  } else if (arguments.length >= 3) {
    var dte = [0, 0, 0, 0, 0, 0];
    for (var i = 0; i < arguments.length; i++) {
      dte  [i] = arguments[i];
    }
    d2 = new Date(dte[0], dte[1], dte[2], dte[3], dte[4], ...
      dte[5]);
  } else if (typeof d == "number") {
    d2 = new Date(d);
  } else {
    return null;
  }

  if (d2 == "Invalid Date")
    return null;
  // Конец дополнительного кода

  d2.setHours(this.getHours(), this.getMinutes(), ...
    this.getSeconds(), this.getMilliseconds());

  var diff = d2.getTime() - this.getTime();
  return (diff)/this.msPERDAY;
};</code></pre>
<p>Если используемый аргумент не преобразуется в дату, конструктор создает экземпляр даты со значением “Invalid Date”. В этом случае возвращается ноль.<br />
(Мы всегда будем считать, что аргумент – это дата, чтобы уберечь статью от путаницы.)</p>
<h2>Добавление дней, недель, месяцев и лет к дате</h2>
<p>Для изменения даты прибавлением (или вычитанием) числа к ней используются 4 метода – addDays(), addWeeks(), addMonths() и addYears(). Каждый  метод берет числовой аргумент, означающий количество дней, месяцев или лет, которые нужно добавить как подходящие к методу. Код для этих методов следующий:</p>
<pre><code class="javascript">Date.prototype.addDays = function(d) {
  this.setDate( this.getDate() + d );
};

Date.prototype.addWeeks = function(w) {
  this.addDays(w ∗ 7);
};

Date.prototype.addMonths= function(m) {
  var d = this.getDate();
  this.setMonth(this.getMonth() + m);

  if (this.getDate() < d)
    this.setDate(0);
};

Date.prototype.addYears = function(y) {
  var m = this.getMonth();
  this.setFullYear(this.getFullYear() + y);

  if (m < this.getMonth()) {
    this.setDate(0);
  }
};</code></pre>
<p>Первый метод, addDays(), использует тот же принцип, что и метод lastDay(). Метод getDate() объекта даты возвращает число дней в месяце (от 1 до 31). К нему прибавляется количество дополнительных дней, и затем метод setDate объекта Date устанавливает день месяца на новое значение. Когда число, используемое как дата превышает (или становится меньше чем) количество дней в месяце, JavaScript отсчитывает дни вперед(или назад) до правильной даты.<br />
Метод addWeeks() преобразует недели в дни, а затем использует метод addDays() для  изменения даты. Если, например, дата – Среда, то новая дата будет – Среда.</p>
<p>Методы addMonths() и addYears() работают также, как addDays(). Они используют <strong class="normal">методы объекта Date getMonth и setMonth() или getFullYear и setFullYear()</strong> соответствено. У этих методов есть корректировка для согласования неравных длин месяцев или лет.</p>
<p>Добавляя месяцы, нужно ожидать, что новая дата будет тем же днем месяца – если месяц прибавлен ко 2 января какого-либо года, то результат должен быть 2 февраля - но, если месяц добавлен к 31 января, то результат без корректировки это 3 марта( 2 марта если год – високосный). Для наших целей должен был получиться последний день Февраля, поэтому есть тест для проверки является ли день месяца, полученный в результате, меньше, чем исходная дата. Если получилось так, это показывает, что дата отодвинулась в месяц, следующий за тем, который нам нужен. Отладка использует тот же способ, что и метод lastDay(): дата устанавливается на нулевой день.</p>
<p>Метод addYears имеет похожие проблемы в високосные годы. Прибавляя год к  29 февраля, получим 1 марта, поэтому необходимо вернуться в 28.<br />
Методы могут использоваться вот так:</p>
<pre><code class="javascript">var date = new Date(2008, 1, 1); // 1ое февраля 2008
alert(date.addDays(7));
alert(date.addWeeks(3));
alert(date.addMonths(2));
alert(date.addYears(-2));</code></pre>
<p>Alert-ы покажут 8 февраля, 29 февраля, 29 апрель.</p>
<h2>Добавление дней недели</h2>
<p>В некоторых бизнес приложениях считаются только дни недели – может появиться проблема во время подсчета даты окончания проекта, а вы не хотите работать в выходные! Следующий метод добавляет количество дней недели, считающихся выходными, так что период между начальной и новой датами включает в себя требуемое число дней в неделе.</p>
<pre><code class="javascript">Date.prototype.addWeekDays = function(d) {
  var startDay = this.getDay();  //текущий день недели от 0 до 6
  var wkEnds = 0;  //число нужных выходных
  var partialWeek = d % 5;  //количество дней для неполной недели

  if (d < 0) {  //вычитание дней недели
    wkEnds = Math.ceil(d/5); //отрицательное количество выходных

    switch (startDay) {
    case 6:  //начинаем с субботы, на 1 выходной меньше
      if (partialWeek  0 &#038;&#038; wkEnds < 0)
        wkEnds++;
      break;
    case 0:  //начальный день - воскресенье
      if (partialWeek  0)
        d++;  //уменьшаем добавленные дни
      else
        d—;  // увеличиваем добавленные дни
      break;
    default:
      if (partialWeek <= -startDay)
      wkEnds—;
    }
  }
  else if (d > 0) {  //adding weekdays
    wkEnds = Math.floor(d/5);
    var w = wkEnds;
    switch (startDay) {
    case 6:
      // Если начальный день – суббота и
      // неделя полная, нужно уменьшить дни на 1
      // неделя неполная, нужно увеличить дни на 1
      if (partialWeek 0)
        d--;
      else
        d++;
      break;
    case 0:
      //Sunday
      if (partialWeek 0 &#038;&#038; wkEnds > 0)
        wkEnds—;
      break;
    default:
      if (5 – day < partialWeek)
        wkEnds++;
    }
  }

  d += wkEnds ∗ 2;
  this.addDays(d);
};</code></pre>
<p>Метод addWeekDays() вычисляет количество выходных дней, которые будут нужны в диапазоне дат, и добавляет его к требуемым дням недели. Эта сумма прибавляется к дате, с помощью нашего метода addDays(). addWeekDays() всегда вычисляет дату с понедельника по пятницу включительно. Например, сейчас суббота и мы завершаем планирование проекта, который начинается в понедельник. Мы определили, что проект займет 50 дней и хотим вычислить дату завершения. Следующий код сделает это:</p>
<pre><code class="javascript">var today = new Date(2008, 1, 23);
var endDate = today.copy();
endDate.addWeekDays(50);
alert(endDate);
Alert покажет 2 мая 2008.
К несчастью, менеджеры решили, что проект должен быть перенесен, так что он закончится 31 октября. Они хотят знать, когда вам нужно начать.
var endDate = new Date(2008, 9, 31);
var startDate = endDate.copy();
startDate.addWeekDays(-50);
alert(startDate);</code></pre>
<p>Alert покажет 22 августа 2008, последний день, когда проект можно начать, разумно ожидая закончить его в последний день октября.</p>
<p>Этот код не считает выходные или другие дни, когда фирма не работает. Для подсчета выходных мы можем добавить в addWeekDays() цикл, который повышает число требуемых дней в диапазоне от начальной даты до конечной на 1 в каждый выходной день. Вот пример функции:</p>
<pre><code class="javascript">function due_date(start_date, workDays) {
  var dueDate = new Date();
  var days = 0;
  var holidays = 0;

  do {
    dueDate.setYear(start_date.getFullYear());
    dueDate.setMonth(start_date.getMonth());
    dueDate.setDate(start_date.getDate());

    days = workDays + holidays;
    dueDate.addWeekDays(days);

    // Ваш собственный поиск.
    // Поиск по базе данных или массиву
    // выходных дней между  start_date и dueDate
    holidays = [query-results]

  } while (days != workDays + holidays);

  return dueDate;
}</code></pre>
<p>(Функция due_date() не является средством объекта Date, так как она требует внешний источник данных, который может измениться.)<br />
Функция due_date() предполагает, что существует источник данных (массив или база данных), содержащий даты всех выходных дней вашей компании, и что у вас есть возможность сделать запрос к этой таблице, возвращающий количество выходных дней, встретившихся между двумя датами.</p>
<p>Цикл начинается с установки dueDate на start_date. Он добавляет число выходных дней (с нулевым  начальным значением) к рабочим дням и использует метод addWeekDays() для получения срока выполнения. Запрос получает количество выходных дней между начальной датой и сроком завершения( исключая те, что выпадают на субботу и воскресенье). Если количество выходных в сумме с начальным числом рабочих дней даёт количество дней, использующихся для вычисления значения конечной даты, то работа окончена. В противном случае, значение срока завершения сбрасывается, и цикл запускается ещё раз с новым количеством выходных.</p>
<h2>Вычисление времени между двумя датами</h2>
<p>Во многих деловых приложениях необходимо определить время между двумя датами в днях, месяцах, годах или днях недели. Мы уже создали метод для подсчета дней между двуся датами: getDaysBetween().</p>
<p>Вместе с addWeekDays() может работать getWeekDays(). Она вычисляет количество дней между двумя датами. Так же, как addWeekDays, этот метод не учитывает выходные дни при вычислении, но его можно включить в функцию, которая сделает это.</p>
<pre><code class="javascript">Date.prototype.getWeekDays = function(d) {

  var wkEnds = 0;
  var days = Math.abs(this.getDaysBetween(d));
  var startDay = 0, endDay = 0;

  if (days) {
    if (d < this) {
      startDay = d.getDay();
      endDay = this.getDay();
    } else {
      startDay = this.getDay();
      endDay = d.getDay();
    }
    wkEnds = Math.floor(days/7);

    if (startDay != 6 &#038;&#038; startDay > endDay)
      wkEnds++;

    if (startDay != endDay &#038;&#038; (startDay  6 || endDay  6) )
      days-;

    days -= (wkEnds ∗ 2);
  }
  return days;
};</code></pre>
<p>Этот код определяет, какое количество выходных дней необходимо вычесть из общего количества дней между двумя датами. Кроме того, в отличие от других методов, он возвращает абсолютное значение вместо числа со знаком. Вот пример его использования:</p>
<pre><code class="javascript">var endDate = new Date(2007, 11, 5); // 5-е декабря 2007
var startDate = new Date(2008, 1, 20); // 20-е февраля 2008
alert(startDate.getWeekDays(endDate));</code></pre>
<p>Alert покажет 55, число выходных дней между двумя датами.</p>
<p>Простой алгоритм, вычисляющий количество месяцев между двумя датами может выглядеть так:</p>
<pre><code class="javascript">var d1 = this.getFullYear() ∗ 12 + this.getMonth();
var d2 = d.getFullYear() ∗ 12 + d.getMonth();
return d2 - d1;</code></pre>
<p>Данный алгоритм  будет работать для дат, содержащих в себе несколько лет, когда разбиение на месяцы не так существенно.<br />
Подсчет количества месяцев между двумя датами осложняется, так как бывают неполные месяцы для каждой из дат – очевидно, что между 1 января и 28 февраля больше 1 месяца. Дни, включаемые в часть месяца, зависят от хронологического порядка дат. Нам требуются только дни от даты до конца месяца или с 1-го дня месяца до даты. Нам также нужно возвратить отрицательное значение, если дата, используемая как аргумент, стоит раньше другой.</p>
<pre><code class="javascript">Date.prototype.getMonthsBetween = function(d) {
  var sDate, eDate;
  var d1 = this.getFullYear() ∗ 12 + this.getMonth();
  var d2 = d.getFullYear() ∗ 12 + d.getMonth();
  var sign;
  var months = 0;

  if (this == d) {
    months = 0;
  } else if (d1 == d2) { //тот же год и месяц
    months = (d.getDate() - this.getDate()) / this.lastday();
  } else {
    if (d1 <  d2) {
      sDate = this;
      eDate = d;
      sign = 1;
    } else {
      sDate = d;
      eDate = this;
      sign = -1;
    }

    var sAdj = sDate.lastday() - sDate.getDate();
    var eAdj = eDate.getDate();
    var adj = (sAdj + eAdj) / sDate.lastday() - 1;
    months = Math.abs(d2 - d1) + adj;
    months = (months ∗ sign)
  }
  return months;
};</code></pre>
<p>Две даты конвертируются в количество полных месяцев от общей точки – год 1. Затем происходит разветвление  кода, в зависимости от хронологического порядка дат. Если даты одинаковы, то номер месяцев - ноль. Если даты относятся к одному году и месяцу, то число месяцев – это разница между датами, поделенная на количество дней в месяце. Иначе, создаются переменные ссылочного типа, показывающие, какая дата более ранняя. После этого вычисляется количество дней, оставшихся в начальной дате, и количество дней в последнем месяце, которое является днем месяца, затем полученная сумма делится на количество дней в более раннем из двух месяцев.</p>
<p>Количество дней в начальном месяце используется как делитель, потому что сумма будет равна номеру дней в начальном месяце, если даты одинаковы.<br />
После создания getMonthsBetween() можно легко написать метод, вычисляющий количество лет между двумя датами. Только необходимо разделить количество месяцев между ними на 12:</p>
<pre><code class="javascript">Date.prototype.getYearsBetween = function(d) {
  var months = this.getMonthsBetween(d);
  return months/12;
};</code></pre>
<p>Метод особого назначения getAge() может быть написан, используя getYearsBetween() следующим образом:</p>
<pre><code class="javascript">Date.prototype.getAge = function() {
  var today = new Date();
  return this.getYearsBetween(today).toFixed(2);
};</code></pre>
<p>А использовать его можно вот так:</p>
<pre><code class="javascript">var dateOfBirth = new Date(yob, mob, dob);
var age = dateOfBirth.getAge();</code></pre>
<p>Последний метод, sameDayEachWeek(), немного отличается от остальных. Он возвращает массив с датами для определенного дня недели – от воскресенья  до субботы – для каждой недели между двумя датами. Его можно использовать в приложении, которое требует планирование постоянных событий.</p>
<pre><code class="javascript">Date.prototype.sameDayEachWeek = function (day, date) {
  var aDays = new Array();
  var eDate, nextDate, adj;

  if (this > date) {
    eDate = this;
    nextDate = date.copy();
  } else {
    eDate = date;
    nextDate = this.copy();
  }

  adj = (day - nextDate.getDay() + 7) % 7;
  nextDate.setDate(nextDate.getDate() + adj);

  while (nextDate < eDate) {
    aDays[aDays.length] = nextDate.copy();
    nextDate.setDate(nextDate.getDate() + 7);
  }
  return aDays;
};</code></pre>
<p>Метод использует в качестве аргументов значение дня недели (от 0 - для воскресенья, до 6 - для субботы) и дату.<br />
Первая часть кода вычисляет, какая дата является ранней. В ней генерируется дата для увеличения, nextDate, которая является копией более ранней даты, как начальной точки, и ссылку к более поздней дате, как конечной точки. Новый объект Date используется для nextDate, так что он может быть изменен без влияния на начальную дату.<br />
Затем вычисляется дата первого дня недели, который нам необходим. Перед добавлением необходимо произвести вычитание из переменной date, так как вычитание приводит строку в числовую форму (если просматривается переменная строкового типа), таким будет произведено сложение чисел, а не их конкатенация (т. е. объединение строк, а не арифметическая операция сложения).<br />
После этого, в цикле выполняется nextDate для каждого из семи дней, до тех пор, пока дата не выйдет из диапазона. Каждый проход добавляет новый объект Date в возвращаемый массив.<br />
Метод можно использовать следующим образом:</p>
<pre><code class="javascript">var enddate = new Date(2008, 0, 5); // 5ое января 2008
var date = new Date(2008, 1, 10); // 10ое февраля 2008

var listofdays = date.sameDayEachWeek(2, enddate); // 2 = вторник
alert("Tuedays in range are:\n\n" + listofdays.join("\n"));</code></pre>
<p>Команда Alert выдаст следующее:<br />
Tuedays in range are:</p>
<p>Tue Jan 08 2008 00:00:00 GMT-0600 (Central Standard Time)<br />
Tue Jan 15 2008 00:00:00 GMT-0600 (Central Standard Time)<br />
Tue Jan 22 2008 00:00:00 GMT-0600 (Central Standard Time)<br />
Tue Jan 29 2008 00:00:00 GMT-0600 (Central Standard Time)<br />
Tue Feb 05 2008 00:00:00 GMT-0600 (Central Standard Time)</p>
<h2>Заключение</h2>
<p>Многие из показанных методов могут быть использованы самостоятельно, без остальных. Главное помнить о том, что некоторые методы зависят от copy(), lastday(), getDaysBetween() и getMonthsBetween(), а некоторые – от трех созданных свойств. Таким образом, Вы сможете написать только нужный Вашему проекту код.</p>
<p>Также, методы могут быть добавлены в любой другой встроенный конструктор объектов – Array, String, Math, Object – используя такой же способ: присваивать их атрибуту prototype.</p>
<p>Надеемся, Вы найдете эту статью полезной в Вашей работе.  Вы с легкостью сможете <strong class="normal">расширить встроенные объекты JavaScript</strong> с помощью вашего собственного кода и <strong class="normal">добавить Ваши собственные методы</strong>. <strong class="normal">Добавление методов через prototype</strong> делает Ваш код более понятным и добавляет ему преимущества в выполнении (благодаря способу обработки ссылок на <strong class="normal">объекты в JavaScript</strong> – сначала он ищет локальные объекты и затем проходит по цепочке прототипов, глобальное пространство – это последнее место, где JavaScript выполнит поиск).</p>
<blockquote><p><b>Спонсор поста</b>: Агентство &laquo;Web++&raquo;&nbsp;&mdash;&nbsp;создание и <a href="http://www.webpp.ru/service/seo" title="Создание и продвижение сайтов в Волгограде">продвижение сайтов в Волгограде</a>.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/%d1%80%d0%b0%d1%81%d1%88%d0%b8%d1%80%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-date-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Работа со строками в JavaScript</title>
		<link>http://www.codeisart.ru/%d0%a0%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81%d0%be-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b0%d0%bc%d0%b8-%d0%b2-javascript/</link>
		<comments>http://www.codeisart.ru/%d0%a0%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81%d0%be-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b0%d0%bc%d0%b8-%d0%b2-javascript/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 10:46:09 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Переводы]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=155</guid>
		<description><![CDATA[Описание работы со строками в языке JavaScript. Выделение подстроки, склейка строк и прочие методы.]]></description>
			<content:encoded><![CDATA[<p>Перевод статьи &laquo;Strings&raquo;<br />Оригинал: <a href="http://www.quirksmode.org/js/strings.html" hreflang="en" rel="original" rev="translation">quirksmode.org/js/strings.htm</a></p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/07/string.jpg" alt="string" width="182" height="264" class="left" />В&nbsp;этой статье речь пойдет о&nbsp;том, что&nbsp;такое <strong class="normal"><dfn>строки</dfn> в&nbsp;JavaScript</strong> и&nbsp;методах работы с&nbsp;ними.</p>
<p><dfn>Строки</dfn>&nbsp;&mdash; это&nbsp;просто группы символов, такие&nbsp;как &laquo;<samp>JavaScript</samp>&raquo;, &laquo;<samp>Hello&nbsp;world!</samp>&raquo;, &laquo;<samp>http://www.quirksmode.org</samp>&raquo; или&nbsp;даже &laquo;<samp>14</samp>&raquo;. Для&nbsp;программирования на&nbsp;JavaScript Вам&nbsp;необходимо знать, что&nbsp;такое строки и&nbsp;как&nbsp;с&nbsp;ними работать, т.&nbsp;к.&nbsp;использовать их&nbsp;придется очень часто. Многие вещи, такие&nbsp;как <abbr title="Uniform Resource Locator">URL</abbr>-страницы, значения <abbr title="Cascading Style Sheets">CSS</abbr>-параметров и&nbsp;элементов ввода форм&nbsp;&mdash; все&nbsp;является строками.</p>
<p>Сначала постараюсь объяснить <strong class="normal"><a href="http://www.codeisart.ru/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81%D0%BE-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%D0%BC%D0%B8-%D0%B2-javascript/#basics">основы</a> работы со строками</strong>, затем&nbsp;&mdash; разницу между <a href="http://www.codeisart.ru/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81%D0%BE-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%D0%BC%D0%B8-%D0%B2-javascript/#strings-numbers">строками и&nbsp;числами</a> в&nbsp;JavaScript. Даже если у&nbsp;Вас есть опыт программирования на&nbsp;другом языке, внимательно прочтите эту&nbsp;часть. В&nbsp;конце я&nbsp;расскажу о&nbsp;самых важных <strong class="normal"><a href="http://www.codeisart.ru/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81%D0%BE-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%D0%BC%D0%B8-%D0%B2-javascript/#method-property">методах и&nbsp;свойствах</a> строк в&nbsp;JavaScript</strong>.</p>
<p><span id="more-155"></span></p>
<h3 id="basics">Основы работы со строками</h3>
<p>Давайте рассмотрим основы работы со&nbsp;строками в&nbsp;JavaScript.</p>
<h4>Использование кавычек</h4>
<p>Когда Вы объявляете <strong class="normal">строки в&nbsp;JavaScript</strong> или работаете с&nbsp;ними, всегда заключайте их&nbsp;в&nbsp;одинарные или&nbsp;двойные кавычки. Этим&nbsp;Вы объясняете браузеру, что&nbsp;он&nbsp;имеет дело со&nbsp;строкой. Не смешивайте использование кавычек в&nbsp;коде, если Вы&nbsp;начали строку с&nbsp;одинарной кавычки, а&nbsp;закончили двойной, JavaScript не&nbsp;поймет, что&nbsp;Вы&nbsp;имели в&nbsp;виду. Как правило, я&nbsp;использую одинарные кавычки для работы со&nbsp;строками, так&nbsp;как&nbsp;двойные кавычки я&nbsp;решил использовать для <abbr title="Hypertext Markup Language">HTML</abbr>, а&nbsp;одинарные&nbsp;&mdash; для JavaScript. Конечно,&nbsp;Вы&nbsp;можете делать все&nbsp;по-другому, но&nbsp;я&nbsp;советую вам&nbsp;придумать подобное правило для&nbsp;себя.</p>
<p>Давайте представим две строки, которые мы&nbsp;будем использовать на&nbsp;протяжении всей статьи:</p>
<pre><code class="javascript">var a = &#39;Hello world!&#39;;
var b = &#39;I am a student.&#39;;</code></pre>
<p>Сейчас мы&nbsp;объявили две переменные, &laquo;<var>a</var>&raquo; и &laquo;<var>b</var>&raquo;, и&nbsp;присвоили им&nbsp;строковые значения. После этого мы&nbsp;можем с&nbsp;ними работать, но&nbsp;сначала решим одну проблему: допустим, я&nbsp;написал:</p>
<pre><code class="javascript">var b = &#39;I&#39;m a student.&#39;;</code></pre>
<p>Строка содержит в&nbsp;себе лишнюю одинарную кавычку, и&nbsp;JavaScript думает, что&nbsp;строка закончена и&nbsp;выводит сообщение об&nbsp;ошибке, не&nbsp;понимая, что&nbsp;следует дальше. Поэтому Вам&nbsp;нужно <strong class="normal">экранировать кавычку</strong>, сообщая браузеру, что&nbsp;её&nbsp;нужно рассматривать как&nbsp;символ, а&nbsp;не&nbsp;как&nbsp;окончание строки. Это&nbsp;осуществляется с&nbsp;помощью &laquo;обратного&nbsp;слеша&raquo; перед кавычкой:</p>
<pre><code class="javascript">var b = &#39;I\&#39;m a student.&#39;;</code></pre>
<p>Заметьте,&nbsp;что&nbsp;Вы&nbsp;можете вставлять в&nbsp;строку двойные кавычки без&nbsp;их&nbsp;экранирования. Так как&nbsp;Вы&nbsp;используете одинарные кавычки, как&nbsp;начало и&nbsp;конец строки,</p>
<pre><code class="javascript">var b = &#39;I\&#39;m a &quot;student&quot;.&#39;;</code></pre>
<p>воспринимается без&nbsp;проблем. Двойные кавычки автоматически рассматриваются, как&nbsp;части строки, а&nbsp;не&nbsp;команды.</p>
<h4>Встроенные функции</h4>
<p>После определения строк можно начать их&nbsp;использование. Например,&nbsp;Вы&nbsp;можете <strong class="normal">соединить одну строку с&nbsp;другой</strong>, или&nbsp;взять из&nbsp;строки&nbsp;&laquo;<var>b</var>&raquo; подстроку, состоящую из&nbsp;второго&mdash;четвертого символов и&nbsp;вставить их&nbsp;в&nbsp;середину строки&nbsp;&laquo;<var>a</var>&raquo;, или&nbsp;определить какой символ стоит двенадцатым в&nbsp;&laquo;<var>a</var>&raquo;, сколько символов в&nbsp;&laquo;<var>b</var>&raquo;, есть&nbsp;ли&nbsp;в&nbsp;них&nbsp;буква&nbsp;&laquo;q&raquo;&nbsp;и&nbsp;т.&nbsp;д.</p>
<p>Для&nbsp;этого Вы&nbsp;можете использовать встроенные функции, которые JavaScript предопределяет для&nbsp;каждой строки. Одна&nbsp;из&nbsp;них&nbsp;&mdash; &laquo;length&raquo;&nbsp;&mdash; возвращает длину строки. То&nbsp;есть&nbsp;если Вы&nbsp;хотите вычислить длину &laquo;Hello world!&raquo;, напишите:</p>
<pre><code class="javascript">var c = &#39;Hello world!&#39;.length;</code></pre>
<p>Ранее&nbsp;мы&nbsp;присвоили эту&nbsp;строку переменной&nbsp;&laquo;<var>а</var>&raquo;. Таким&nbsp;образом, Вы&nbsp;сделали переменную&nbsp;&laquo;<var>a</var>&raquo; строкой, поэтому&nbsp;к&nbsp;ней&nbsp;тоже&nbsp;применима функция &laquo;length&raquo;, и&nbsp;следующая операция даст такой&nbsp;же&nbsp;результат:</p>
<pre><code class="javascript">var c = a.length;</code></pre>
<p>Запомните,&nbsp;что&nbsp;Вы&nbsp;можете использовать &laquo;length&raquo; для&nbsp;любой строки&nbsp;&mdash; это&nbsp;встроенная функция. Вы&nbsp;можете <strong class="normal">вычислить длину любой строки</strong>, например: &laquo;<code>location.href</code>&raquo; или&nbsp;&laquo;<code>document.title</code>&raquo; или&nbsp;объявленной Вами.</p>
<p>Ниже я&nbsp;представлю список распространенных встроенных методов и&nbsp;свойств.</p>
<h4 id="strings-numbers">Строки и числа</h4>
<p>В&nbsp;некоторых языках программирования от&nbsp;Вас требуется указывать, является ли&nbsp;переменная числом или&nbsp;строкой, перед&nbsp;тем, как&nbsp;делать с&nbsp;ней что-либо&nbsp;ещё. JavaScript проще относится к&nbsp;разнице между строками и&nbsp;числами. Фактически Вы&nbsp;даже&nbsp;можете складывать числа со&nbsp;строками:</p>
<pre><code class="javascript">var c = a + 12;</code></pre>
<p>В&nbsp;некоторых языках программирования обработка такой строки приведет к&nbsp;ошибке. Всё&nbsp;же&nbsp;&laquo;<var>a</var>&raquo;&nbsp;&mdash; это строка, а&nbsp;&laquo;12&raquo;&nbsp;&mdash; число. Однако JavaScript пытается решить проблему, предполагая, что&nbsp;&laquo;12&raquo;&nbsp;&mdash; тоже&nbsp;строка. Таким&nbsp;образом&nbsp;&laquo;<var>с</var>&raquo; принимает значение &laquo;<samp>Hello&nbsp;world!12</samp>&raquo;. Значит,&nbsp;если&nbsp;Вы&nbsp;используете &laquo;+&raquo; со&nbsp;строкой и&nbsp;числом, JavaScript пытается сделать из&nbsp;числа строку. Если&nbsp;же&nbsp;Вы&nbsp;применяете математические операции к&nbsp;строке, JavaScript пробует превратить её&nbsp;в&nbsp;число. При&nbsp;отсутствии возможности перевода строки в&nbsp;число (например, из-за&nbsp;наличия в&nbsp;ней&nbsp;букв), JavaScript возвращает <abbr title="Not a Number">NaN</abbr>&nbsp;&mdash; &laquo;Not&nbsp;a&nbsp;Number&nbsp;&mdash; не&nbsp;является числом&raquo;.</p>
<p>Наконец, в&nbsp;JavaScript нет&nbsp;разницы между целыми величинами и&nbsp;числами с&nbsp;плавающей точкой.</p>
<h4>Число&nbsp;&rarr; строка</h4>
<p>Для&nbsp;<strong class="normal">преобразования числа в&nbsp;строку</strong> введите:</p>
<pre><code class="javascript">var c = (16 * 24) / 49 + 12;
d = c.toString();</code></pre>
<p>После&nbsp;этого&nbsp;Вы&nbsp;можете применять к&nbsp;&laquo;<var>d</var>&raquo; все&nbsp;строковые методы, а&nbsp;&laquo;<var>c</var>&raquo; все&nbsp;ещё&nbsp;содержит число.</p>
<h4>Строка&nbsp;&rarr; число</h4>
<p>Если&nbsp;Вы&nbsp;хотите преобразовать строку в&nbsp;число, сначала&nbsp;убедитесь, что&nbsp;она&nbsp;состоит только из&nbsp;символов <var>0&mdash;9</var>. Для&nbsp;этого я&nbsp;просто умножаю строку на&nbsp;<var>1</var>.</p>
<pre><code class="javascript">var c = &#39;1234&#39;;
d = c * 1;</code></pre>
<p>Так&nbsp;как&nbsp;умножение производится только с&nbsp;числами, JavaScript превращает строку в&nbsp;число, если это&nbsp;возможно. В&nbsp;противном случае, результат&nbsp;&mdash;&nbsp;<abbr title="Not a Number">NaN</abbr>.</p>
<p>Заметим, если написать:</p>
<pre><code class="javascript">var c = &#39;1234&#39;;
d = c + 0;</code></pre>
<p>Результатом будет &laquo;<samp>12340</samp>&raquo;, потому&nbsp;что&nbsp;JavaScript использует&nbsp;&laquo;+&raquo; для&nbsp;соединения строк, а&nbsp;не&nbsp;их&nbsp;сложения.</p>
<h3 id="method-property">Строковые свойства и методы</h3>
<p>Так&nbsp;что&nbsp;же&nbsp;мы&nbsp;можем делать со&nbsp;строками? Объединение&nbsp;&mdash; это&nbsp;особый случай, но&nbsp;все остальные команды (методы) могут использоваться с&nbsp;любой строкой с&nbsp;помощью конструкции:</p>
<pre><code class="javascript">имя_строки.метод();</code></pre>
<h3>Список встроенных методов JavaScript для&nbsp;работы со&nbsp;строками</h3>
<ul>
<li><a href="#concat" rel="bookmark">Конкатенация&nbsp;(+)</a></li>
<li><a href="#indexOf" rel="bookmark">indexOf</a></li>
<li><a href="#lastIndexOf" rel="bookmark">lastIndexOf</a></li>
<li><a href="#charAt" rel="bookmark">charAt</a></li>
<li><a href="#length" rel="bookmark">length</a></li>
<li><a href="#split" rel="bookmark">split</a></li>
<li><a href="#substring" rel="bookmark">substring</a></li>
<li><a href="#substr" rel="bookmark">substr</a></li>
<li><a href="#toLowerCase" rel="bookmark">toLowerCase и toUpperCase</a></li>
</ul>
<h4 id="concat">Конкатенация&nbsp;&mdash; объединение строк</h4>
<p>Во-первых, Вы&nbsp;можете объединить строки, сложив их&nbsp;вместе, вот&nbsp;так:</p>
<pre><code class="javascript">document.write(a + b);</code></pre>
<p>в&nbsp;результате получится: &laquo;<samp>Hello&nbsp;world!I&nbsp;am&nbsp;a&nbsp;student.</samp>&raquo;. Но,&nbsp;конечно&nbsp;же,&nbsp;Вы&nbsp;хотите, чтобы&nbsp;между предложениями был&nbsp;пробел. Для&nbsp;этого запишем код следующим образом:</p>
<pre><code class="javascript">document.write(a + &#39; &#39; + b);</code></pre>
<p>Так&nbsp;мы&nbsp;соединим три строки: &laquo;<var>а</var>&raquo;, &laquo;<var>&#39;&nbsp;&#39;</var>&raquo; (один&nbsp;пробел) и&nbsp;&laquo;<var>b</var>&raquo;, в&nbsp;итоге получив: &laquo;<samp>Hello&nbsp;world!&nbsp;I&nbsp;am&nbsp;a&nbsp;student.</samp>&raquo;</p>
<p>Вы&nbsp;можете использовать даже&nbsp;числа или&nbsp;вычисления, например:</p>
<pre><code class="javascript">document.write (a + 3 * 3 + b);</code></pre>
<p>Сейчас&nbsp;мы&nbsp;соединяем строку&nbsp;&laquo;<var>а</var>&raquo;, затем результат выражения &laquo;<code>3 * 3</code>&raquo;,  рассматриваемый как&nbsp;строка, и&nbsp;&laquo;<var>b</var>&raquo;, получая: &laquo;<samp>Hello&nbsp;world!<span style="color:#f00;">9</span>I&nbsp;am&nbsp;a&nbsp;student.</samp>&raquo;</p>
<p>При&nbsp;использовании сложения нужно быть внимательным. Команда</p>
<pre><code class="javascript">document.write (a + 3 + 3 + b);</code></pre>
<p>соединяет 4&nbsp;строки: &laquo;<var>а</var>&raquo;, &laquo;<var>3</var>&raquo;, &laquo;<var>3</var>&raquo; и&nbsp;&laquo;<var>b</var>&raquo;, потому&nbsp;что&nbsp;&laquo;+&raquo; в&nbsp;данном случае означает &laquo;соединить&nbsp;строки&raquo;, а&nbsp;не&nbsp;&laquo;сложить&raquo; и&nbsp;в&nbsp;результате: &laquo;<samp>Hello&nbsp;world!<span style="color:#f00;">33</span>I&nbsp;am&nbsp;a&nbsp;student.</samp>&raquo;. Если&nbsp;Вы&nbsp;хотите сложить <var>3</var> и&nbsp;<var>3</var> перед созданием строки, используйте скобки.</p>
<pre><code class="javascript">document.write (a + (3 + 3) + b);</code></pre>
<p>Данное выражение соединяет строку &laquo;<var>а</var>&raquo;, результат выражения &laquo;<code>3&nbsp;+&nbsp;3</code>&raquo;  и&nbsp;&laquo;<var>b</var>&raquo;, в&nbsp;итоге: &laquo;<samp>Hello&nbsp;world!<span style="color:#f00;">6</span>I&nbsp;am&nbsp;a&nbsp;student.</samp>&raquo;.</p>
<h4 id="indexOf">indexOf</h4>
<p>Один&nbsp;из&nbsp;самых широко используемых встроенных методов это&nbsp;&laquo;indexOf&raquo;. Каждый символ имеет свой индекс, содержащий номер его&nbsp;позиции в&nbsp;строке. Заметим,&nbsp;что индекс первого символа&nbsp;&mdash; <var>0</var>, второго&nbsp;&mdash; <var>1</var> и&nbsp;т.&nbsp;д. Таким&nbsp;образом, индекс символа &laquo;w&raquo; в&nbsp;сроке &laquo;<var>а</var>&raquo;&nbsp;&mdash;&nbsp;<var>6</var>.</p>
<p>Используя &laquo;indexOf&raquo; мы&nbsp;можем вывести индекс символа. Напишите &laquo;<kbd>.indexOf(&#39;&nbsp;&#39;)</kbd>&raquo; после названия строки и&nbsp;вставьте искомый символ между кавычками. Например:</p>
<pre><code class="javascript">var a = &#39;Hello world!&#39;;
document.write(a.indexOf(&#39;w&#39;));</code></pre>
<p>возвратит&nbsp;<var>6</var>. Если&nbsp;символ встречается несколько раз, этот&nbsp;метод возвращает первое вхождение. То&nbsp;есть</p>
<pre><code class="javascript">document.write(a.indexOf(&#39;o&#39;));</code></pre>
<p>возвратит&nbsp;<var>4</var>, потому&nbsp;что&nbsp;это индекс первой&nbsp;&laquo;o&raquo; в&nbsp;строке.</p>
<p>Вы&nbsp;также можете искать комбинацию символов. (Конечно, это&nbsp;тоже&nbsp;строка, но,&nbsp;чтобы&nbsp;избежать путаницы, я&nbsp;не&nbsp;буду называть&nbsp;её&nbsp;так). &laquo;indexOf&raquo; возвращает позицию первого символа комбинации. Например:</p>
<pre><code class="javascript">document.write(a.indexOf(&#39;o w&#39;));</code></pre>
<p>тоже возвратит&nbsp;<var>4</var>, потому&nbsp;что это&nbsp;индекс &laquo;o&raquo;.</p>
<p>Более&nbsp;того, возможен поиск символа после определенного индекса. Если&nbsp;Вы&nbsp;введете</p>
<pre><code class="javascript">document.write(a.indexOf(&#39;o&#39;, 5));</code></pre>
<p>то&nbsp;получите индекс первой &laquo;o&raquo;, следующей за&nbsp;символом с&nbsp;индексом&nbsp;<var>5</var> (это&nbsp;пробел), то&nbsp;есть&nbsp;результат будет&nbsp;&mdash;&nbsp;<var>7</var>.</p>
<p>Если&nbsp;символ или&nbsp;комбинация не&nbsp;встречается в&nbsp;строке, &laquo;indexOf&raquo; возвратит&nbsp;&laquo;<samp>-1</samp>&raquo;. Это,&nbsp;по&nbsp;сути,&nbsp;самое популярное применение &laquo;indexOf&raquo;: проверка существования определенной комбинации символов. Оно&nbsp;является ядром скрипта, определяющего браузер. Для&nbsp;определения&nbsp;<abbr title="Internet Explorer">IE</abbr> Вы&nbsp;берете строку:</p>
<pre><code class="javascript">navigator.userAgent;</code></pre>
<p>и&nbsp;проверяете, содержит&nbsp;ли&nbsp;она&nbsp;&laquo;<var>MSIE</var>&raquo;:</p>
<pre><code class="javascript">if(navigator.userAgent.indexOf(&#39;MSIE&#39;) != -1) {
//Какие-либо дествия с Internet Explorer
}</code></pre>
<p>Если&nbsp;индекс &laquo;<var>MSIE</var>&raquo;&nbsp;&mdash; не&nbsp;&laquo;<var>-1</var>&raquo; (если&nbsp;&laquo;<var>MSIE</var>&raquo; встречается где-либо&nbsp;в&nbsp;строке), то&nbsp;текущий браузер&nbsp;&mdash;&nbsp;<abbr title="Internet Explorer">IE</abbr>.</p>
<h4 id="lastIndexOf">lastIndexOf</h4>
<p>Также&nbsp;существует метод &laquo;lastIndexOf&raquo;, который&nbsp;возвращает последнее вхождение символа или&nbsp;комбинации. Он&nbsp;действует противоположно &laquo;indexOf&raquo;.  Команда</p>
<pre><code class="javascript">var b = &#39;I am a student.&#39;;
document.write(b.lastIndexOf(&#39;t&#39;));</code></pre>
<p>возвратит&nbsp;<var>13</var>, потому&nbsp;что&nbsp;это&nbsp;индекс последней&nbsp;&laquo;t&raquo; в&nbsp;строке.</p>
<h4 id="charAt">charAt</h4>
<p>Метод &laquo;charAt&raquo; возвращает символ, стоящий на&nbsp;указанной позиции. Например, когда Вы&nbsp;вводите</p>
<pre><code class="javascript">var b = &#39;I am a student.&#39;;
document.write(b.charAt(5));</code></pre>
<p>в&nbsp;результате получается &laquo;<samp>a</samp>&raquo;, так&nbsp;как&nbsp;это&nbsp;символ на&nbsp;шестой позиции (помните,&nbsp;что&nbsp;индекс первого символа начинается&nbsp;с&nbsp;<var>0</var>).</p>
<h4 id="length">length</h4>
<p>Метод &laquo;length&raquo; возвращает длину строки.</p>
<pre><code class="javascript">var b = &#39;I am a student.&#39;;
document.write(b.length);</code></pre>
<p>возвратит&nbsp;&laquo;15&raquo;. Длина строки на&nbsp;<var>1</var> больше, чем индекс последнего символа.</p>
<h4 id="split">split</h4>
<p>&laquo;<dfn>split</dfn>&raquo;&nbsp;&mdash; это специальный метод, позволяющий разделить строку по&nbsp;определенным символам. Используется, когда&nbsp;результат необходимо заносить в&nbsp;массив, а&nbsp;не&nbsp;в&nbsp;простую переменную. Давайте разделим &laquo;<var>b</var>&raquo; по&nbsp;пробелам:</p>
<pre><code class="javascript">var b = &#39;I am a student.&#39;
var temp = new Array();
temp = b.split(&#39; &#39;);</code></pre>
<p>Теперь строка разбита на&nbsp;4&nbsp;подстроки, которые помещаются в&nbsp;массив &laquo;<var>temp</var>&raquo;. Сами пробелы исчезли.</p>
<pre><code class="javascript">temp[0] = &#39;I&#39;;
temp[1] = &#39;am&#39;;
temp[2] = &#39;a&#39;;
temp[3] = &#39;student&#39;;</code></pre>
<h4 id="substring">substring</h4>
<p>Метод &laquo;substring&raquo; используется для&nbsp;выделения части строки. Синтаксис метода: &laquo;<code>.substring(первый_индекс, последний_индекс)</code>&raquo;. Например:</p>
<pre><code class="javascript">var a = &#39;Hello world!&#39;;
document.write(a.substring(4, 8&#41;);</code></pre>
<p>возвратит &laquo;<samp>o&nbsp;wo</samp>&raquo;, от&nbsp;первой&nbsp;&laquo;o&raquo; (индекс&nbsp;4) до&nbsp;второй (индекс&nbsp;7). Заметьте,&nbsp;что&nbsp;&laquo;r&raquo; (индекс&nbsp;8&#41; не&nbsp;является частью подстроки.</p>
<p>Также можно написать:</p>
<pre><code class="javascript">var a = &#39;Hello world!&#39;;
document.write(a.substring(4));</code></pre>
<p>Это&nbsp;даст целую подстроку &laquo;<samp>o&nbsp;world!</samp>&raquo;, начиная от&nbsp;символа с&nbsp;индексом&nbsp;<var>4</var> и&nbsp;до&nbsp;конца строки.</p>
<h4 id="substr">substr</h4>
<p>Также&nbsp;есть&nbsp;метод &laquo;substr&raquo;, работающий немного по-другому. В&nbsp;качестве второго аргумента он&nbsp;использует не&nbsp;номер индекса, а&nbsp;количество символов. То&nbsp;есть</p>
<pre><code class="javascript">document.write(a.substr(4, 8&#41;);</code></pre>
<p>возвращает 8&nbsp;символов, начиная от&nbsp;символа с&nbsp;индексом&nbsp;<var>4</var>&nbsp;(&laquo;o&raquo;), то&nbsp;есть&nbsp;в&nbsp;результате получаем: &laquo;<samp>o&nbsp;world!</samp>&raquo;</p>
<h4 id="toLowerCase">toLowerCase и&nbsp;toUpperCase</h4>
<p>Наконец, 2&nbsp;метода, которые иногда могут Вам пригодиться: &laquo;toLowerCase&raquo; переводит всю строку в нижний регистр, а&nbsp;&laquo;toUpperCase&raquo;&nbsp;&mdash; в верхний.</p>
<pre><code class="javascript">var b = &#39;I am a student.&#39;;
document.write(b.toUpperCase());</code></pre>
<p>В результате получим &laquo;<samp>I&nbsp;AM&nbsp;A&nbsp;STUDENT.</samp>&raquo;.</p>
<blockquote><p><b>Спонсор поста</b>: Агентство &laquo;Web++&raquo;&nbsp;&mdash;&nbsp;создание и <a href="http://www.webpp.ru/service/seo/" title="Создание и продвижение сайтов в Волгограде">раскрутка сайтов в Волгограде</a>.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/%d0%a0%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81%d0%be-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b0%d0%bc%d0%b8-%d0%b2-javascript/feed/</wfw:commentRss>
		<slash:comments>43</slash:comments>
		</item>
	</channel>
</rss>
