<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Codeisart.Ru - блог группы веб-разработчиков</title>
	
	<link>http://www.codeisart.ru</link>
	<description>Статьи по интернет маркетингу, поисковой оптимизации и веб-программированию.</description>
	<lastBuildDate>Tue, 08 Nov 2011 13:43:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/codeisart" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="codeisart" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">codeisart</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/codeisart" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fcodeisart" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fcodeisart" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><item>
		<title>Надежность в аутсорсинге</title>
		<link>http://www.codeisart.ru/outsourcing-and-freelance/</link>
		<comments>http://www.codeisart.ru/outsourcing-and-freelance/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 12:02:40 +0000</pubDate>
		<dc:creator>Elena</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[Аутсорсинг]]></category>
		<category><![CDATA[Фриланс]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1895</guid>
		<description><![CDATA[Проблема. Пришел проект, который компания не может в данный момент выполнить своими силами. Причин этого может быть масса, начиная от того, что все свои специалисты заняты на других проектах, или просто «не потянут», и заканчивая тем, что есть задания не по профилю (например, программинг для дизайн-студий). Что делать? Возможных вариантов решения также достаточно. Во-первых, можно отказаться от проекта, объяснив заказчику ситуацию. А если клиент перспективный, [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/N5sdYpu459vqkyspDprBXi_HgTk/0/da"><img src="http://feedads.g.doubleclick.net/~a/N5sdYpu459vqkyspDprBXi_HgTk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/N5sdYpu459vqkyspDprBXi_HgTk/1/da"><img src="http://feedads.g.doubleclick.net/~a/N5sdYpu459vqkyspDprBXi_HgTk/1/di" border="0" ismap="true"></img></a></p><p>Проблема. Пришел проект, который компания не может в данный момент выполнить своими силами. Причин этого может быть масса, начиная от того, что все свои специалисты заняты на других проектах, или просто «не потянут», и заканчивая тем, что есть задания не по профилю (например, программинг для дизайн-студий). Что делать?</p>
<p><span id="more-1895"></span></p>
<p>Возможных вариантов решения также достаточно. Во-первых, <strong>можно отказаться от проекта</strong>, объяснив заказчику ситуацию. А если клиент перспективный, или проект очень интересный? В таком случае <strong>можно проект взять и тянуть время</strong>&#8230; Не очень разумное решение для репутации компании, не правда ли?</p>
<p>Далее, можно судорожно <strong>начать искать нового сотрудника</strong>. Но, хорошего специалиста быстро не найти, а если это и удастся, то и зарплата у него должна быть соответствующая.</p>
<p>Или тратить время на обучение посредственного, отрывая от работы и без того занятых сотрудников. При всем этом, увеличение штата актуально (и даже более эффективно, чем другие варианты) только при прогнозировании дальнейшего наращивания оборотов. Если сложившаяся ситуация — явление временное, в скором времени новый сотрудник может остаться без работы, но на зарплате.</p>
<p>Вариант четвертый — отдать проект на реализацию за пределы компании. Самый перспективный вариант. Здесь есть два типа сотрудничества — фриланс и аутсорс.</p>
<p>Нельзя сказать, что одно лучше, другое хуже. Каждый проект, каждая ситуация уникальны. В одном случае выгоднее будет воспользоваться услугами аутсорс-компании, в другом — фрилансера. Аутсорс — не есть хорошо, фриланс — не есть плохо. Есть отличные фрилансеры, которые делают качественно, быстро и недорого. Есть. Но их, к сожалению, несоизмеримо меньше. Шанс «нарваться» очень велик. В то же время, есть ситуации, когда работа с фрилансером — единственно верное решение.</p>
<p>Также и аутсорс не всегда хорош. Не каждая студия готова сотрудничать с аутсорс-компанией. Да, аутсорсинговые компании дают гарантии, но ваше спокойствие будет стоить денег. При этом, отдали проект на аутсорс — получили качественный результат, а что происходило между этими этапами — проблема только аутсорсера. И, учитывая большой спрос на аутсорс-услуги, можно говорить о том, что многие готовы платить за свое спокойствие, за свою репутацию.</p>
<h3>Фриланс</h3>
<p>Плюсы:</p>
<ul>
<li>дешевле аутсорса;</li>
<li>меньше сроки (пока не говорим о том, как фрилансеры их затягивают).</li>
</ul>
<p>Минусы:</p>
<ul>
<li>неизвестность — начинать работать с фрилансером — большая лотерея, рискуете потерять деньги, время, репутацию;</li>
<li>срыв сроков (это профессиональная особенность, наверное);</li>
<li>фрилансер не может масштабироваться под проект. Один фрилансер, скорее всего, не сможет сделать проект по всем модулям. Сотрудничество с несколькими фрилансерами влечет за собой необходимость их координировать, что сделать сложно.</li>
</ul>
<p>Когда работать с фрилансером выгодно? Когда на проект отведен малый бюджет. Когда есть надежный, проверенный фрилансер, который сделает работу качественно/ недорого/ быстро. Когда недостатки работы с фрилансером не сильно отразятся на репутации компании, например, если вы делаете проект для себя и есть большое желание сэкономить.</p>
<h3>Аутсорсинг</h3>
<p>Плюсы:</p>
<ul>
<li>юридические гарантии — договор с фиксированными сроками и мерами ответственности сторон (возможно заключить договор и с фрилансером, но на практике используется крайне редко);</li>
<li>качество — компании, которые делают некачественный продукт, не выходят на рынок аутсорсинговых услуг, а если такое и случается, не задерживются на нем;</li>
<li>спокойствие заказчика — отдали проект, получили качественный результат, не нужно контролировать процесс реализации;</li>
<li>надежность — аутсорс-компании рискуют своей репутацией, им не выгодно делать «плохо», восстанавливать репутацию — во много раз сложнее, чем фрилансеру.</li>
</ul>
<p>Минусы:</p>
<ul>
<li>дороже, чем фриланс (за счет «+» приведенных выше);</li>
<li>выше сроки — за счет согласований, оформления документов, тестирования готового проекта и других нюансов. Бюрократия, но в то же время — это и есть те самые гарантии для заказчика.</li>
</ul>
<p>Работать по аутсорсу выгоднее, если для вас важны гарантии, если вам нужна уверенность в том, что если вы заплатили деньги — значит работа будет сделана. Если вы студия, которая дорожит своей репутацией.</p>
<p>В любом случае, выбор делать вам на основании объективных (плюсы, минусы) и субъективных факторов (возможный негативный опыт сотрудничества и др.).</p>
<p><strong>В бизнесе правильное решение = максимальная прибыль + минимальные издержки + ваше комфортное состоянии.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/outsourcing-and-freelance/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Размышления: Интернет-маркетинг в регионах, все ли так плохо?</title>
		<link>http://www.codeisart.ru/internet-marketing-in-the-regions-whether-all-that-bad/</link>
		<comments>http://www.codeisart.ru/internet-marketing-in-the-regions-whether-all-that-bad/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 20:08:24 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[Оффтопик]]></category>
		<category><![CDATA[продвижение сайтов]]></category>
		<category><![CDATA[Различные мысли]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1728</guid>
		<description><![CDATA[Как думаете, как сильно пользуются спросом услуги Интернет маркетинга в&#160;регионах? Все ли&#160;там глухо, как я&#160;часто слышал от&#160;москвичей? Делюсь своими мыслями и соображениями по тому поводу. Я&#160;многократно писал, что живу и&#160;работаю в&#160;городе-герое Волгограде в&#160;сфере Интернет маркетинга. Не&#160;могу не&#160;похвастаться, наше агентство этой осенью претерпело большие изменения, а&#160;именно регистрация нового юридического лица в&#160;связи открытия нового направления, переезд в&#160;новый [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/YQGysf7cL3w7BgcCwgkQGpAO230/0/da"><img src="http://feedads.g.doubleclick.net/~a/YQGysf7cL3w7BgcCwgkQGpAO230/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/YQGysf7cL3w7BgcCwgkQGpAO230/1/da"><img src="http://feedads.g.doubleclick.net/~a/YQGysf7cL3w7BgcCwgkQGpAO230/1/di" border="0" ismap="true"></img></a></p><p>Как думаете, как сильно пользуются спросом услуги Интернет маркетинга в&nbsp;регионах? Все ли&nbsp;там глухо, как я&nbsp;часто слышал от&nbsp;москвичей?</p>
<p>Делюсь своими мыслями и соображениями по тому поводу.</p>
<p><span id="more-1728"></span></p>
<p>Я&nbsp;многократно писал, что живу и&nbsp;работаю в&nbsp;городе-герое Волгограде в&nbsp;сфере Интернет маркетинга. Не&nbsp;могу не&nbsp;похвастаться, наше агентство этой осенью претерпело большие изменения, а&nbsp;именно регистрация нового юридического лица в&nbsp;связи открытия нового направления, переезд в&nbsp;новый офис, расширение штата. Работаем, развиваемся, и&nbsp;слава богу <img src='http://www.codeisart.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Наше основное направление&nbsp;&mdash; Интернет маркетинг, ядром нашей клиентуры являются региональные компании, которые перешагнули барьер страха неизвестности и&nbsp;обратились к&nbsp;нам за&nbsp;помощью.</p>
<h3>Барьер страха неизвестности</h3>
<p>Да,&nbsp;и&nbsp;это действительно барьер!&nbsp;В Москве и&nbsp;СПБ давно уже представить не&nbsp;могут, чтобы компания обходилась без собственного сайта, благо столичные Интернет-агентства проводят множественные семинары/вебинары для ТОП-менеджеров и&nbsp;сумели воспитать для себя аудиторию. У&nbsp;нас, к&nbsp;сожалению, пока не&nbsp;так. Самый главный вопрос, возникающий у&nbsp;наших клиентов: а&nbsp;куда уходят деньги? Ведь страшно инвестировать в&nbsp;то,&nbsp;что не&nbsp;понимаешь и&nbsp;не&nbsp;можешь &laquo;пощупать&raquo;. Ну&nbsp;дам я&nbsp;вам денег, а&nbsp;куда они расходуются? Вернутся ли&nbsp;они, и&nbsp;где гарантии?</p>
<p>По&nbsp;хорошему счету, чтобы более-менее доступно ответить на&nbsp;эти вопрос, требуется разъяснить основы SEO и&nbsp;контекстной рекламы, а&nbsp;так же&nbsp;расчета эффективности, что не&nbsp;всегда с&nbsp;первого раза понятно.</p>
<h4>Правдивая ложь</h4>
<p>Смешно вспоминать, был случай, слава богу один, когда я,&nbsp;отчаявшись объяснять, самые базовые принципы ранжирования сказал потенциальному клиенту, что за&nbsp;N-ое количество зеленых купюр в&nbsp;качестве взятки поисковику он&nbsp;повышает позиции вашего сайта, на&nbsp;что клиент с&nbsp;улыбкой ответил &laquo;А,&nbsp;ну&nbsp;понятно, у&nbsp;нас же&nbsp;все так и&nbsp;делается, давайте работать!&raquo;.</p>
<p>Правда, некий прогресс за&nbsp;3&nbsp;года заметен! Теперь где-то в&nbsp;15%&nbsp;от&nbsp;обращений спрашивают &laquo;Сколько будет стоит сделать сайт, и&nbsp;чтобы он&nbsp;светился в&nbsp;поисковых системах?&raquo;, а&nbsp;не&nbsp;просто сделать сайт.&nbsp;В большинстве случаев клиент уже знает зачем ему сайт, т.&nbsp;е.&nbsp;преследует определенную цель, что меня очень радует!</p>
<h3>Я покажу тебе дверь, войти в нее ты должен сам</h3>
<p>Из&nbsp;многочасовых лекций, разъяснений зачем нужен сайт, а&nbsp;возможно, почему он&nbsp;не&nbsp;нужен, я&nbsp;выявил то,&nbsp;что клиент понимает конкретные цифры, не&nbsp;абстрактное оперирование такими, казалось бы,&nbsp;элементарными выражениями, как покупка ссылок или поднятие ставок, а&nbsp;числовыми значениями, в&nbsp;которых выражается ROI от&nbsp;вложений в&nbsp;Интернет-рекламу и&nbsp;время их&nbsp;достижения.</p>
<p><b>Заказчик вкладывает деньги, он&nbsp;хочет знать, как скоро они вернутся и&nbsp;в&nbsp;каком проценте!</b> Это понимают все, от&nbsp;мала до&nbsp;велика. Но&nbsp;будьте готовы дать гарантии подтвержденные юридически договором, на&nbsp;слово вам верить никто не&nbsp;будет.</p>
<h3>Мы скажем Вам, что это эффективно!</h3>
<p>Чтож, аудиторию нужно воспитывать, чем мы&nbsp;и&nbsp;занимаемся. Зимой 2010&nbsp;года, в&nbsp;конце января планируем проведение 2х&nbsp;дневной конференции на&nbsp;тему &laquo;Интернет маркетинг для бизнеса&raquo;, которая пройдет в&nbsp;здании Волгоградского Государственного Университета, в&nbsp;рамках ежегодной научной конференции. Анонс конференции и&nbsp;точную дату проведения выложим обязательно для волгоградских читателей нашего блога.</p>
<p>Вывод: в&nbsp;регионах на&nbsp;SEO и&nbsp;прочих услугах Интернет-маркетинга &laquo;рыбы словить можно&raquo;, даже порой довольно крупной, совсем не&nbsp;все так плохо!</p>
<h4>Полезная информация</h4>
<p><b>Обратите внимание на&nbsp;молодую биржу ссылок</b> <a href="http://www.seotina.com/">Seotina.com</a>. Пока что количество площадок не&nbsp;велико около 200&nbsp;штук, но&nbsp;думаю ближайшее время значительно увеличится. Очень хочется, чтобы в&nbsp;базе было как можно меньше ГС&nbsp;и&nbsp;как можно больше качественных сайтов, подождем, посмотрим.</p>
<p>Из&nbsp;плюсов биржи:</p>
<ul>
<li>полный манейбек, в&nbsp;случае снятия ссылок со&nbsp;страницы вебмастером или выпадения из&nbsp;индекса;</li>
<li>поддержка paypal и&nbsp;webmoney;</li>
<li>оплаты/хранение денег в&nbsp;евро;</li>
<li>30%&nbsp;от&nbsp;дохода рефералов первый год, далее 5%&nbsp;&laquo;пожизненно&raquo;.</li>
</ul>
<p>И&nbsp;по&nbsp;словам представителей биржи, ближайшее время планируется слияние со &nbsp;<noindex><a href="http://spidersmarket.com/" rel="nofollow">spidersmarket.com</a></noindex>, а следовательно &#8212; увеличение базы.</p>
<p>Очень рекомендовал бы&nbsp;добавить в&nbsp;функционал биржи возможность размещения ссылок &laquo;навсегда&raquo;, что в&nbsp;последнее время стало модным.</p>
<p><b>Интересно почитать:</b></p>
<ul>
<li><a href="http://rotorweb.ru/mysli-vslux/as-we-ordered-our-competitors-website.html">Как мы заказывали сайт у конкурентов</a></li>
<li><a href="http://tods-blog.com.ua/blogging/findtext/">Где взять тексты для сайта или тематического блога </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/internet-marketing-in-the-regions-whether-all-that-bad/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Python: Получение последнего сообщения из Twitter</title>
		<link>http://www.codeisart.ru/python-the-latest-messages-from-twitter/</link>
		<comments>http://www.codeisart.ru/python-the-latest-messages-from-twitter/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 21:13:40 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1681</guid>
		<description><![CDATA[Пишем сейчас на&#160;Django сайт, где требуется получать последнее сообщение из&#160;Twitter аккаунта корпоративного микроблога. Некоторое время назад я&#160;показывал, как это можно сделать в&#160;PHP, теперь пишу тоже самое на&#160;Python. Небольшие отличия есть, а&#160;именно&#160;&#8212; мы&#160;получаем данные из&#160;Twitter API в&#160;формате JSON (используется библиотека simplejson), а&#160;не&#160;в&#160;XML, как это было в&#160;PHP версии. Можно без проблем использовать и&#160;XML, просто с&#160;JSON мне удобнее [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/plqdkybPwyUOYZE2tFo0Xwycu0A/0/da"><img src="http://feedads.g.doubleclick.net/~a/plqdkybPwyUOYZE2tFo0Xwycu0A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/plqdkybPwyUOYZE2tFo0Xwycu0A/1/da"><img src="http://feedads.g.doubleclick.net/~a/plqdkybPwyUOYZE2tFo0Xwycu0A/1/di" border="0" ismap="true"></img></a></p><p>Пишем сейчас на&nbsp;Django сайт, где требуется получать последнее сообщение из&nbsp;Twitter аккаунта корпоративного микроблога. Некоторое время назад я&nbsp;показывал, как <a href="http://www.codeisart.ru/php-extracting-the-last-twitter-record/">это можно сделать в&nbsp;PHP</a>, теперь пишу тоже самое на&nbsp;Python.</p>
<p><span id="more-1681"></span></p>
<p>Небольшие отличия есть, а&nbsp;именно&nbsp;&mdash; мы&nbsp;получаем данные из&nbsp;Twitter API в&nbsp;формате JSON (используется библиотека <a href="http://pypi.python.org/pypi/simplejson/">simplejson</a>), а&nbsp;не&nbsp;в&nbsp;XML, как это было в&nbsp;PHP версии. Можно без проблем использовать и&nbsp;XML, просто с&nbsp;JSON мне удобнее работать.</p>
<p>Аналогично реализовано кеширование твитта в локальный файл и обновление через определенный промежуток времени.</p>
<p>Код, вся дополнительная информация в комментариях:</p>
<pre><code class="python">from django.conf import settings
from time import time
import urllib, os, simplejson

class Twitter:
  """
  Скачиваем последнее сообщение из Twitter пользователя.

  Требуется:
  - библиотека simplejson (http://pypi.python.org/pypi/simplejson/)
  - библиотека urllib
  - библиотека os
  - метод time.time()

  Необходимо в settings.py добавить переменные:

  TWITTER_ACCOUNT = 'Skaizer' # Логин пользователя, чью ленту будем читать.
  TWITTER_CACHE_PERIOD = 3600 # Частота обновления кеша в миллисекундах, когда 0, кеш игнорируется.
  TWITTER_CACHE_FILE = 'last_twitt.txt'; # Имя файла, куда будем дампить кеш. Строится путь относительно MEDIA_ROOT.

  """
  def __init__(self):
    self.twitt_file = getattr(settings,'MEDIA_ROOT','./') + getattr(settings,'TWITTER_CACHE_FILE','last_twitt.txt')
    self.cache_period = getattr(settings,'TWITTER_CACHE_PERIOD',0)
    self.username = getattr(settings,'TWITTER_ACCOUNT',None)

  def returnLastTwitt(self):
    """
    Возвращаем кеш, если он имеется, и по времени существует не менее установленного в конфигах периода.
    Иначе возвращаем сообщение из инета.
    """
    if self.cache_period !=0:
      if os.path.exists(self.twitt_file):
        if self.cache_period > self.getCacheDateDiff():
          return self.getLastFromCache()
    return self.getLastFromWeb()

  def getLastFromWeb(self):
    """
    Скачивает твиттер ленту в Интернет и выбирает последнее сообщение
    """
    feed = 'http://twitter.com/statuses/user_timeline/' + self.username + '.json';
    feed_obj  = simplejson.loads(urllib.urlopen(feed).read())
    last_twitt = feed_obj[0]['text']
    self.cache_twitt(last_twitt.encode("utf_8"))
    return last_twitt

  def cache_twitt(self, msg):
    """
    Записывает последний твитт в локальный файл
    """
    handle = open(self.twitt_file,'w')
    handle.write(msg)
    handle.close()

  def getCacheDateDiff(self):
    """
    Считает, как давно был создан файл кеша в миллисекундах.
    """
    diff = float(time()) - float(os.path.getmtime(self.twitt_file))
    return diff

  def getLastFromCache(self):
    """
    Возвращает закешированное сообщение из файла.
    """
    handle = open(self.twitt_file,'r')
    cached_twitt = handle.read()
    handle.close()
    return cached_twitt

  def getLast(self):
    if not self.username:
      return False
    return self.returnLastTwitt()</code></pre>
<p>Вот так класс используется:</p>
<pre><code class="python">def last_twitt():
    t = Twitter()
    return {
      'last_twitt' : t.getLast(),
    }</code></pre>
<p>Все просто, без заморочек, пользуйтесь на здоровье.</p>
<p><b>PS</b>: Кстати у нас новый осенний логотип, очень симпатично получилось на наш взгляд.</p>
<p><b>Интересно почитать:</b></p>
<ul>
<li><a href="http://rotorweb.ru/mysli-vslux/kak-dobavit-raznye-ikonki-k-punktam-menyu-ispolzuya-tolko-css.html">Как добавить разные иконки к пунктам меню, используя только CSS</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/python-the-latest-messages-from-twitter/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Часть 1. Алгоритм шинглов для веб-документов</title>
		<link>http://www.codeisart.ru/part-1-shingles-algorithm-for-web-documents/</link>
		<comments>http://www.codeisart.ru/part-1-shingles-algorithm-for-web-documents/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 09:26:10 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[Алгоритмы]]></category>
		<category><![CDATA[SEO/SEM]]></category>
		<category><![CDATA[шинглы]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1585</guid>
		<description><![CDATA[Ранее я&#160;показал элементарную реализацию алгоритма шинглов, позволяющую определять, являются&#160;ли два документа почти дубликатами или нет. В&#160;этот раз я&#160;поясню реализацию алгоритма, описанную Зеленковым&#160; Ю.&#160;Г. и&#160;Сегаловичем И.В. в&#160;публикации &#171;Сравнительный анализ методов определения нечетких дубликатов для Web-документов&#187;. Этим я&#160;начинаю серию из&#160;трех теоретических статей, в&#160;которых постараюсь доступным языком описать принцип алгоритмов шинглов, супершинглов и&#160;мегашинглов для сравнение веб-документов. В&#160;публикации об&#160;алгоритмах [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/raFnlyJ0p2zgerz0F1mLUSFNo28/0/da"><img src="http://feedads.g.doubleclick.net/~a/raFnlyJ0p2zgerz0F1mLUSFNo28/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/raFnlyJ0p2zgerz0F1mLUSFNo28/1/da"><img src="http://feedads.g.doubleclick.net/~a/raFnlyJ0p2zgerz0F1mLUSFNo28/1/di" border="0" ismap="true"></img></a></p><p>Ранее я&nbsp;показал <a href="http://www.codeisart.ru/python-shingles-algorithm/">элементарную реализацию алгоритма шинглов</a>, позволяющую определять, являются&nbsp;ли два документа почти дубликатами или нет. В&nbsp;этот раз я&nbsp;поясню реализацию алгоритма, описанную Зеленковым&nbsp; Ю.&nbsp;Г. и&nbsp;Сегаловичем И.В. в&nbsp;публикации &laquo;<a href="http://rcdl2007.pereslavl.ru/papers/paper_65_v1.pdf">Сравнительный анализ методов определения нечетких дубликатов для Web-документов</a>&raquo;.</p>
<p>Этим я&nbsp;начинаю серию из&nbsp;трех теоретических статей, в&nbsp;которых постараюсь доступным языком описать принцип алгоритмов шинглов, супершинглов и&nbsp;мегашинглов для сравнение веб-документов.</p>
<p><span id="more-1585"></span></p>
<p>В&nbsp;публикации об&nbsp;алгоритмах поиска почти дубликатов предлагается версия алгоритма шинглов, использующая случайную выборку 84х случайных шинглов.</p>
<p>Почему именно 84?&nbsp;Использование 84х случайно выбранных значений контрольных сумм позволит легко модифицировать алгоритм до&nbsp;алгоритма супершинглов и&nbsp;мегашинглов, которые гораздо менее ресурсоемки. Их&nbsp;я&nbsp;опишу ближайшее время.</p>
<p><i>Рекомендую вооружиться ручкой и&nbsp;листком бумаги и&nbsp;фигурально представлять в&nbsp;виде рисунка каждый из&nbsp;этапов, описанных ниже.</i></p>
<h3>Итак, алгоритм шинглов для веб-документов</h3>
<p>Разберем, через какие этапы проходит текст, подвергшийся сравнению:</p>
<ol>
<li>канонизация текста;</li>
<li>разбиение на&nbsp;шинглы;</li>
<li>вычисление хэшей шинглов с&nbsp;помощью 84х статических функций;</li>
<li>случайная выборка 84&nbsp;значений контрольных сумм;</li>
<li>сравнение, определение результата.</li>
</ol>
<h4>1.&nbsp;Канонизация текста</h4>
<p>Что такое канонизация текста я&nbsp;описывал в&nbsp;своей прошлой статье об&nbsp;алгоритме шинглов. Но&nbsp;в&nbsp;коротко повторюсь. Канонизация текста приводит оригинальный текст к&nbsp;единой нормальной форме.</p>
<p>Текст очищается от&nbsp;предлогов, союзов, знаков препинания, HTML тегов, и&nbsp;прочего не&nbsp;нужного &laquo;мусора&raquo;, который не&nbsp;должен участвовать в&nbsp;сравнении. В&nbsp;большинстве случаев так&nbsp;же предлагается удалять из&nbsp;текста прилагательные, так как они не&nbsp;несут смысловой нагрузки.</p>
<p>Так&nbsp;же на&nbsp;этапе канонизации текста можно приводить существительные к&nbsp;именительному падежу, единственному числу, либо оставлять от&nbsp;них только корни.</p>
<p>С&nbsp;канонизацию текста можно экспериментировать и&nbsp;экспериментировать, простор для действий тут широк.</p>
<p>На&nbsp;выходе имеем текст, очищенный от&nbsp;&laquo;мусора&raquo;, и&nbsp;готовый для сравнения.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/08/shingles-1.png" alt="Процесс канонизации текста" /></p>
<h4>2.&nbsp;Разбиение на&nbsp;шинглы</h4>
<p>Шинглы (англ)&nbsp;&mdash; чешуйки, выделенные из&nbsp;статьи подпоследовательности слов.</p>
<p>Необходимо из&nbsp;сравниваемых текстов выделить подпоследовательности слов, идущих друг за&nbsp;другом по&nbsp;10&nbsp;штук (длина шингла). Выборка происходит внахлест, а&nbsp;не&nbsp;встык.</p>
<p>Таким образом, разбивая текст на&nbsp;подпоследовательности, мы&nbsp;получим набор шинглов в&nbsp;количестве равному количеству слов минус длина шингла плюс один (кол_во_слов&nbsp;&mdash; длина_шингла + 1).</p>
<p>Напоминаю, что действия по&nbsp;каждому из&nbsp;пунктов выполняются для каждого из&nbsp;сравниваемых текстов.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/08/shingles-2.png" alt="Процесс разбиения текста на шинглы" /></p>
<h4>3.&nbsp;Вычисление хэшей шинглов с&nbsp;помощью 84х статических функций</h4>
<p>Вот этот этап самый интересный. Принцип алгоритма шинглов заключается в&nbsp;сравнении случайной выборки контрольных сумм шинглов (подпоследовательностей) двух текстов между собой.</p>
<p>Проблема алгоритма заключается в&nbsp;количестве сравнений, ведь это напрямую отражается на&nbsp;производительности. Увеличение количества шинглов для сравнения характеризуется экспоненциальным ростом операций, кто критически отразится на&nbsp;производительности.</p>
<p>Предлагается представить текст в&nbsp;виде набора контрольных сумм, рассчитанных через 84х уникальные между собой статические хэш функции.</p>
<p>Поясню: для каждого шингла рассчитывается 84&nbsp;значения контрольной суммы через разные функции (например SHA1, MD5, CRC32 и&nbsp;т.д., всего 84&nbsp;функции). Итак каждый из&nbsp;текстов будет представлен, можно сказать, в&nbsp;виде двумерного массива из&nbsp;84х строк, где каждая строка характеризует соответствующую из&nbsp;84х функций контрольных сумм.</p>
<p>Из&nbsp;полученных наборов будут случайным образом отобраны 84&nbsp;значения для каждого из&nbsp;текстов и&nbsp;сравнены между собой в&nbsp;соответствии функции контрольной суммы, через которую каждый из&nbsp;них был рассчитан. Таким образом, для сравнения будет необходимо выполнить всего 84&nbsp;операции.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/08/shingles-3.png" alt="Нахождение контрольных сумм шинглов" /></p>
<h4>4.&nbsp;Случайная выборка 84&nbsp;значений контрольных сумм</h4>
<p>Как я&nbsp;описывал выше, сравнивать элементы каждого из&nbsp;84х массивов между собой&nbsp;&mdash; ресурсоемко. Для увеличения производительности выполним случайную выборку контрольных сумм для каждой из&nbsp;84х строк двумерного массива, для обоих текстов. Например, будем выбирать самое минимальное значение из&nbsp;каждой строки.</p>
<p>Итак, на&nbsp;выходе имеем набор из&nbsp;минимальных значений контрольных сумм шинглов для каждой из&nbsp;хэш функций.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/08/shingles-4.png" alt="Случайная выборка шинглов" /></p>
<h4>5.&nbsp;Сравнение, определение результата</h4>
<p>И&nbsp;последний этап&nbsp;&mdash; сравнение. Сравниваем между собой 84&nbsp;элемента первого массива с&nbsp;соответствующими 84ю элементами второго массива, считаем отношение одинаковых значений, из&nbsp;этого получаем результат.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/08/shingles-5.png" alt="Сравнение, результат" /></p>
<h3>Заключение</h3>
<p>Надеюсь, я&nbsp;доступно смог изложить теорию нахождения почти дубликатов для веб-документов, описанную в публикации Зеленкова&nbsp; Ю.&nbsp;Г. и&nbsp;Сегаловича И.В. не&nbsp;вдаваясь в&nbsp;особенности реализации на&nbsp;конкретном языке программирования.</p>
<p>Во&nbsp;второй статье цикла я&nbsp;собираюсь описать алгоритм супершинглов для веб-документов.</p>
<p>Надеюсь было интересно, удачи.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/part-1-shingles-algorithm-for-web-documents/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>301 редирект для 1800 страниц на одном домене</title>
		<link>http://www.codeisart.ru/mass-301-redirects-the-response-of-search-engines/</link>
		<comments>http://www.codeisart.ru/mass-301-redirects-the-response-of-search-engines/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 08:00:53 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[SEO/SEM]]></category>
		<category><![CDATA[Редирект]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1558</guid>
		<description><![CDATA[На&#160;днях мы&#160;завершили работу над второй версией информационного интернет портала города Волгограда &#171;VLG Navigator&#187;. Сайт подвергся переработке на&#160;100%, особенно каталог, что повлекло за&#160;собой изменение URL адресов абсолютно всех объектов, разделов и&#160;подразделов в&#160;каталоге. На&#160;момент переноса в&#160;каталоге было порядка 1800&#160;организаций, для которых нужно было изменить адреса и&#160;не&#160;допустить падения трафика с&#160;поисковых систем. С&#160;технической точки зрения перенос&#160;&#8212; не&#160;проблема. На&#160;серверном уровне [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/seGZ3ofLxIM9g1kRmgfxw3eHydc/0/da"><img src="http://feedads.g.doubleclick.net/~a/seGZ3ofLxIM9g1kRmgfxw3eHydc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/seGZ3ofLxIM9g1kRmgfxw3eHydc/1/da"><img src="http://feedads.g.doubleclick.net/~a/seGZ3ofLxIM9g1kRmgfxw3eHydc/1/di" border="0" ismap="true"></img></a></p><p>На&nbsp;днях мы&nbsp;завершили работу над второй версией информационного интернет портала города Волгограда &laquo;<a href="http://www.vlg-nav.ru/" title="Информационный портал Волгограда">VLG Navigator</a>&raquo;. Сайт подвергся переработке на&nbsp;100%, особенно каталог, что повлекло за&nbsp;собой изменение URL адресов абсолютно всех объектов, разделов и&nbsp;подразделов в&nbsp;каталоге.</p>
<p>На&nbsp;момент переноса в&nbsp;каталоге было порядка 1800&nbsp;организаций, для которых нужно было изменить адреса и&nbsp;не&nbsp;допустить падения трафика с&nbsp;поисковых систем.</p>
<p><span id="more-1558"></span></p>
<p>С&nbsp;технической точки зрения перенос&nbsp;&mdash; не&nbsp;проблема. На&nbsp;серверном уровне проверяется открытый URL, и&nbsp;если он&nbsp;соответствует одному из&nbsp;старых адресов, то&nbsp;происходит 301&nbsp;редирект на&nbsp;новый. Процесс редиректа осуществлен на&nbsp;уровне PHP.</p>
<p>Но&nbsp;меня больше интересовало поведение поисковых систем, на,&nbsp;так сказать, массовый перенос адресов (повторюсь, на&nbsp;сайте изменено около 1800&nbsp;адресов страниц). Не&nbsp;упадет&nbsp;ли посещаемость, не&nbsp;упадут&nbsp;ли позиции в&nbsp;выдаче? Пока не&nbsp;попробуешь, наверняка утверждать ничего нельзя.</p>
<p>Ранее мне приходилось менять адреса на&nbsp;сайтах, но&nbsp;в&nbsp;более мелких масштабах. Тогда, процесс переноса прошел идеально.</p>
<p>Для того, чтобы ускорить процесс переноса, как только новая версия портала была запущена, я&nbsp;произвел генерацию новой карты сайта Sitemap.XML и&nbsp;пропинговал поисковики об&nbsp;ее&nbsp;изменении.</p>
<h3>Промежуточные результаты</h3>
<p>Прошло 4&nbsp;дня с&nbsp;момента запуска. По&nbsp;статистике Google Analytics <b>посещаемость не&nbsp;упала</b>, новые URL пока <b>отсутствуют в&nbsp;выдаче Яндекс</b>, но&nbsp;<b>имеются в&nbsp;Google</b>. Правда старые по-прежнему так&nbsp;же фигурируют в&nbsp;выдаче гугла. То&nbsp;есть для одного объекта в&nbsp;каталоге выдается старый и&nbsp;новый URL, чтож, подождем подольше, ведь для обновления старых адресов поисковой робот должен на&nbsp;них зайти для повторной переиндексации.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/06/vlg-nav-search.jpg" alt="Дублирование одного объекта в каталоге" /></p>
<p>На&nbsp;данный момент поисковик видит просто 2&nbsp;страницы, которые являются почти дублями, и&nbsp;ему не&nbsp;известно, что новые страницы предназначены для перекрытия старых.</p>
<p>Будем ждать, о&nbsp;результатах отпишусь.</p>
<p><b>В рамках акции</b> &laquo;<a href="http://www.codeisart.ru/obmen-postovimi/" title="Акция обмена постовыми">Обмен постовыми</a>&raquo;:</p>
<ul>
<li>Список блогов, которые проводят <a href="http://chekalov.com/?p=2849">обмен постовыми</a>.</li>
<li>Тут проводят <a href="http://denis-chekalov.livejournal.com/105240.html">интервью с блоггерами</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/mass-301-redirects-the-response-of-search-engines/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Сравнение значений в шаблонах Django</title>
		<link>http://www.codeisart.ru/comparison-of-values-in-django-templates/</link>
		<comments>http://www.codeisart.ru/comparison-of-values-in-django-templates/#comments</comments>
		<pubDate>Fri, 15 May 2009 09:57:49 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1493</guid>
		<description><![CDATA[Недавно столкнулся с&#160;проблемой, связанной с&#160;ограниченностью шаблонного языка Django, а&#160;именно невозможностью сравнить два значения между собой (больше, меньше и&#160;т.д.). Варианты вроде: {% if some_val > 4 %} &#60;p&#62;Истина&#60;/p&#62; {% else %} &#60;p&#62;Ложь&#60;/p&#62; {% endif %} вызывают ошибку. В&#160;поисках решения я&#160;нагуглил библиотеку, разработанную Джеймсом Беннеттом (James Bennett)&#160;&#8212;&#160;django-template-utils. Для использования достаточно добавить библиотеку в&#160;Python окружение, можно посредством установки: [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/CMHeXGOKp908hmva4rXqHBXAhpw/0/da"><img src="http://feedads.g.doubleclick.net/~a/CMHeXGOKp908hmva4rXqHBXAhpw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CMHeXGOKp908hmva4rXqHBXAhpw/1/da"><img src="http://feedads.g.doubleclick.net/~a/CMHeXGOKp908hmva4rXqHBXAhpw/1/di" border="0" ismap="true"></img></a></p><p>Недавно столкнулся с&nbsp;проблемой, связанной с&nbsp;ограниченностью шаблонного языка Django, а&nbsp;именно невозможностью сравнить два значения между собой (больше, меньше и&nbsp;т.д.). Варианты вроде:</p>
<pre><code class="html">{% if some_val > 4 %}
&lt;p&gt;Истина&lt;/p&gt;
{% else %}
&lt;p&gt;Ложь&lt;/p&gt;
{% endif %}</code></pre>
<p>вызывают ошибку.</p>
<p>В&nbsp;поисках решения я&nbsp;нагуглил библиотеку, разработанную Джеймсом Беннеттом (James Bennett)&nbsp;&mdash;&nbsp;<a href="http://django-template-utils.googlecode.com/">django-template-utils</a>.</p>
<p><span id="more-1493"></span></p>
<p>Для использования достаточно добавить библиотеку в&nbsp;Python окружение, можно посредством установки:</p>
<pre><code class="bash">tar zxvf template_utils-0.4p2.tar.gz
cd&nbsp;template_utils-0.4p2
python setup.py install
</code></pre>
<p>А&nbsp;можно просто добавить приложение в&nbsp;<code>INSTALLED_APPS</code> проекта.</p>
<p>В&nbsp;результате вам будут доступны функции сравнения значений, и&nbsp;другие полезные возможности в&nbsp;шаблонах Django.</p>
<p>Например проверка значения на&nbsp;условие &laquo;<i>меньше или равно 4х</i>&raquo;:</p>
<pre><code class="html">{% load comparison %}
{% if_less_or_equal some_val 4 %}
&lt;p&gt;Истина&lt;/p&gt;
{% else %}
&lt;p&gt;Ложь&lt;/p&gt;
{% endif_less_or_equal %}</code></pre>
<p>Ссылка на&nbsp;библиотеку: <a href="http://django-template-utils.googlecode.com/">django-template-utils.googlecode.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/comparison-of-values-in-django-templates/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Python, Django: Автоматический ресайз загружаемых изображений</title>
		<link>http://www.codeisart.ru/python-django-automatically-resize-uploaded-images/</link>
		<comments>http://www.codeisart.ru/python-django-automatically-resize-uploaded-images/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 21:46:57 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1476</guid>
		<description><![CDATA[На&#160;данный момент мы&#160;занимаемся разработкой городской социальной сети. Не&#160;&#171;убийцы&#187; Вконтакте и&#160;Одноклассников, ее&#160;задачи будут в&#160;корне иными. В&#160;качестве программной основы был выбран Django, написанный на&#160;языке Python. Разрабатывая интерфейс управления личной информацией необходимо было решить задачу: при загрузке пользователем собственной фотографии, ее&#160;размер должен быть не&#160;более некоторых значений, определенных настройками системы, если фото больше, то&#160;необходимо произвести ресайз с&#160;сохранением пропорций. В&#160;этой [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/sVHSYN1YvkZDhSP55oqwVcLzsjc/0/da"><img src="http://feedads.g.doubleclick.net/~a/sVHSYN1YvkZDhSP55oqwVcLzsjc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sVHSYN1YvkZDhSP55oqwVcLzsjc/1/da"><img src="http://feedads.g.doubleclick.net/~a/sVHSYN1YvkZDhSP55oqwVcLzsjc/1/di" border="0" ismap="true"></img></a></p><p>На&nbsp;данный момент мы&nbsp;занимаемся разработкой городской социальной сети. Не&nbsp;&laquo;убийцы&raquo; Вконтакте и&nbsp;Одноклассников, ее&nbsp;задачи будут в&nbsp;корне иными. В&nbsp;качестве программной основы был выбран Django, написанный на&nbsp;языке Python.</p>
<p>Разрабатывая интерфейс управления личной информацией необходимо было решить задачу: при загрузке пользователем собственной фотографии, ее&nbsp;размер должен быть не&nbsp;более некоторых значений, определенных настройками системы, если фото больше, то&nbsp;необходимо произвести ресайз с&nbsp;сохранением пропорций.</p>
<p>В&nbsp;этой статья я&nbsp;представлю наше решение поставленной задачи. Возможно, оно окажется не&nbsp;оптимальным, поэтому с&nbsp;удовольствием выслушаю ваши комментарии!</p>
<p><span id="more-1476"></span></p>
<h3>Django, ресайз изображений</h3>
<p>Функция ресайза изображения. Автоматически изменяет размер, сохраняя пропорции:</p>
<pre><code class="python">def imageResize(data, output_size):
  &quot;&quot;&quot;
  Resize image for thumbnails and preview
  data&nbsp;&mdash;&nbsp;image for resize
  output_size&nbsp;&mdash;&nbsp;turple, contains width and height of&nbsp;output image, for example (200, 500)
  &quot;&quot;&quot;

  from PIL import Image

  image = Image.open(data)
  m_width = float(output_size[0])
  m_height = float(output_size[1])
  if&nbsp;image.mode not in&nbsp;('L', 'RGB'):
    image = image.convert('RGB')
  w_k = image.size[0]/m_width
  h_k = image.size[1]/m_height
  if&nbsp;output_size < image.size:
    if w_k > h_k:
      new_size = (m_width, image.size[1]/w_k)
    else:
      new_size = (image.size[0]/h_k, m_height)
  else:
    new_size = image.size
  return image.resize(new_size,Image.ANTIALIAS)</code></pre>
<p>Например, при максимально возможных размерах изображения <i>200&times;500&nbsp;px</i>,&nbsp;загружая изображения на&nbsp;<i>1024&times;768&nbsp;px</i>,&nbsp;новые изображения будут&nbsp;&mdash;&nbsp;<i>200&times;150&nbsp;px</i>.</p>
<p>Далее перекрываем стандартный джанговский <code class="python">models.ImageField</code>, расширяя метод <code class="python">save_form_data</code>, в&nbsp;котором и&nbsp;будем производить ресайз:</p>
<pre><code class="python">class AvatarImageField(models.ImageField):
  def save_form_data(self, instance, data):
    from StringIO import StringIO
    from django.core.files.uploadedfile import SimpleUploadedFile, UploadedFile

    if&nbsp;data and isinstance(data, UploadedFile):
      image = imageResize(data, settings.AVATAR_SIZE)
      new_image = StringIO()
      image.save(new_image, 'JPEG', quality=85)
      data = SimpleUploadedFile(data.name, new_image.getvalue(), data.content_type)

      # Удаление старого файла
      previous = u'%s%s' % (settings.MEDIA_ROOT, instance.avatar)
      if&nbsp;os.path.isfile(previous):
        os.remove(previous)
      # -
    super(AvatarImageField, self).save_form_data(instance, data)</code></pre>
<p>Определяем функцию, которая будет возвращать путь к&nbsp;директории сохранения файла, а&nbsp;так&nbsp;же имя файла. Она будет возвращать нужный путь для <code class="python">upload_to</code> файлового поля.  В&nbsp;нашем случае имя файла генерируется некоторой хэш-функцией:</p>
<pre><code class="python">  def make_upload_path(instance, filename, prefix = False):
    # Переопределение имени загружаемого файла.
    from utils.hashfunc import get_hash

    filename = 'a_' + get_hash('md5') + '.jpg'
    return u&quot;%s/%s&quot; % (settings.AVATAR_UPLOAD_DIR, filename)</code></pre>
<p>И,&nbsp;собственно, сама модель данных, поле <code class="python">avatar</code> определяется нашим перекрытым классом <code class="python">AvatarImageField</code>, следовательно, наследует всю его функциональность:</p>
<pre><code class="python">class Avatars(models.Model):
  user = models.ForeignKey(User, unique=True)
  avatar = AvatarImageField(
    upload_to=make_upload_path,
    null = False,
    blank = False,
    )</code></pre>
<p>Готово. Теперь все загружаемые изображение, превышающие определенные в&nbsp;системе размеры будут ресайзиться, сохраняя пропорции.</p>
<p><b>С удовольствием готов ответить на вопросы, а так же выслушать конструктивную критику этого метода!</b></p>
<h3>Говорим спасибо</h3>
<p>Выражаю благодарность <a href="http://softwaremaniacs.org/about/">Ивану Сагалаеву</a> за&nbsp;его ресурс о&nbsp;программировании в&nbsp;целом и&nbsp;в&nbsp;частности на&nbsp;Python. На&nbsp;этапе ознакомления с&nbsp;Django почти с&nbsp;не&nbsp;покидали его страницы.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/python-django-automatically-resize-uploaded-images/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>8 Характеристик удачного пользовательского интерфейса</title>
		<link>http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/</link>
		<comments>http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 21:19:49 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[Юзабилити]]></category>
		<category><![CDATA[Дизайн]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1452</guid>
		<description><![CDATA[Перевод статьи о юзабилити: 8 Characteristics Of Successful User Interfaces. Существует много информации о&#160;различных методах проектирования пользовательского интерфейса, которую вы&#160;можете использовать, создавая веб-сайт или интерфейс программы. Я&#160;составил список из&#160;8&#160;характеристик, которые считаю залогом успешного пользовательского интерфейса: Доступность Минимализм Уверенность Отзывчивость Соответствие контексту Привлекательность Эффективность Снисходительность Доступность Доступность&#160;&#8212;&#160;наиболее важный элемент дизайна! По&#160;сути, вся цель пользовательского интерфейса состоит [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/ZuHTf0AXsgLDfE65RfZx_Gq9i_E/0/da"><img src="http://feedads.g.doubleclick.net/~a/ZuHTf0AXsgLDfE65RfZx_Gq9i_E/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ZuHTf0AXsgLDfE65RfZx_Gq9i_E/1/da"><img src="http://feedads.g.doubleclick.net/~a/ZuHTf0AXsgLDfE65RfZx_Gq9i_E/1/di" border="0" ismap="true"></img></a></p><p><b>Перевод</b> статьи о юзабилити: <a href="http://www.usabilitypost.com/2009/04/15/8-characteristics-of-successful-user-interfaces/">8 Characteristics Of Successful User Interfaces</a>.</p>
<p>Существует много информации о&nbsp;различных методах проектирования пользовательского интерфейса, которую вы&nbsp;можете использовать, создавая веб-сайт или интерфейс программы.</p>
<p>Я&nbsp;составил список из&nbsp;8&nbsp;характеристик, которые считаю залогом успешного пользовательского интерфейса:</p>
<ol>
<li><a href="http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/#clear">Доступность</a></li>
<li><a href="http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/#concise">Минимализм</a></li>
<li><a href="http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/#familiar">Уверенность</a></li>
<li><a href="http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/#responsive">Отзывчивость</a></li>
<li><a href="http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/#consistent">Соответствие контексту</a></li>
<li><a href="http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/#attractive">Привлекательность</a></li>
<li><a href="http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/#efficient">Эффективность</a></li>
<li><a href="http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/#forgiving">Снисходительность</a></li>
</ol>
<p><span id="more-1452"></span></p>
<h3 id="clear">Доступность</h3>
<p>Доступность&nbsp;&mdash;&nbsp;наиболее важный элемент дизайна! По&nbsp;сути, вся цель пользовательского интерфейса состоит в&nbsp;том, чтобы дать возможность пользователям взаимодействовать с&nbsp;вашей системой. Если человек не&nbsp;сможет понять, как ваше приложение работает, он&nbsp;будет только запутан и&nbsp;в&nbsp;итоге разочарован. Вот почему, разрабатывая интерфейс вашего приложения или веб-сайта, обязательно позаботьтесь чтобы он&nbsp;был интуитивно понятен вашему пользователю.</p>
<p style="display: block; text-align:center;"><img src="http://www.codeisart.ru/wp-content/uploads/2009/04/wordpress_tooltips.png" alt="Подсказки в WordPress" /><i>Что делает эта кнопка? Наведем курсор и&nbsp;прочитаем.</i></p>
<h3 id="concise">Минимализм</h3>
<p>Большая загруженность&nbsp;&mdash;&nbsp;враг хорошего пользовательского интерфейса. Легко попасть в&nbsp;ловушку избыточной доступности&nbsp;&mdash;&nbsp;добавляя все больше и&nbsp;больше управляющих элементов, вы&nbsp;делаете огромную ошибку&nbsp;&mdash;&nbsp;загромождаете интерфейс. Ваш интерфейс растет, и&nbsp;пользователь будет вынужден много читать, чтобы понять что, где и&nbsp;для чего располагается.</p>
<p>Делайте вещи понятными, но&nbsp;с&nbsp;минимальной загруженностью. Если вы&nbsp;можете описать возможности одним предложением, вместо трех&nbsp;&mdash;&nbsp;сделайте это. Когда вы&nbsp;можете подписать элемент одним словом, вместо двух&nbsp;&mdash;&nbsp;сделайте это. Берегите время ваших пользователей, пусть удобство и&nbsp;минимализм требуют много времени, но&nbsp;ваши усилия будут вознаграждены.</p>
<p style="display: block; text-align:center;"><img src="http://www.codeisart.ru/wp-content/uploads/2009/04/osx_volume.png" alt="Контроль звука OS X" /><i>Панель регулировки уровня звука в&nbsp;OS&nbsp;X.&nbsp;Коротко и&nbsp;доступно, ничего лишнего.</i></p>
<h3 id="familiar">Уверенность</h3>
<p>Многие дизайнеры стремятся сделать интерфейсы &laquo;интуитивно понятными&raquo;. Но&nbsp;что &laquo;интуитивно&raquo; в&nbsp;действительности означает? Это означает, что пользователи должны инстинктивно понимать и&nbsp;осмысливать возможности проекта. Но&nbsp;как вы&nbsp;можете сделать что-то интуитивно понятным? Вы&nbsp;проектируете знакомые для себя вещи, и&nbsp;то,&nbsp;что для вас может показаться очевидным, для пользователей может отталкивать и&nbsp;вызывать сложности.</p>
<p>Попросите ваших родственников и&nbsp;знакомых выполнить какие-либо действия через ваш интерфейс, например, заказать товар, если ваш интерфейс подразумевает продажу чего-либо. Наблюдайте за&nbsp;каждым действием пользователя, за&nbsp;ошибками, которые он&nbsp;совершает. Таким образом вы&nbsp;соберете ряд упущений в&nbsp;интерфейсе, которые усложняют взаимодействие системы с&nbsp;пользователем. И&nbsp;только после исправления проблемных мест, ваш интерфейс может быть готов к&nbsp;работе.</p>
<p style="display: block; text-align:center;"><img src="http://www.codeisart.ru/wp-content/uploads/2009/04/goplan_tabs.png" alt="Интерфейс с закладками" /><i>Интуитивно понятный интерфейс GoPlan. Надписи на&nbsp;вкладках дают понять пользователю содержимое раздела.</i></p>
<h3 id="responsive">Отзывчивость</h3>
<p>Отзывчивость означает несколько вещей. Интерфейс веб-сайта должен работать очень быстро. Длительное ожидание загрузки страницы раздражает. Позаботьтесь о&nbsp;том, чтобы сайт загружался максимально быстро, даже на&nbsp;медленных интернет-каналах.</p>
<p>Так&nbsp;же отзывчивость означает некоторую постоянную форму взаимодействия с&nbsp;пользователем. Интерфейс должен информировать пользователя о&nbsp;происходящем. Например, вы&nbsp;нажимаете кнопку отправки сообщения. Если сообщение отправляется посредством AJAX, было&nbsp;бы разумно выводить состояния отправки, например &laquo;Отправка&#8230;&raquo;, &laquo;Сообщение отправлено&raquo; или &laquo;Ошибка отправки сообщения&raquo;. Когда пользователь видит процесс выполнения, он&nbsp;чувствует себя спокойнее. Особенно это заметно на&nbsp;медленных интернет-каналах.</p>
<p style="display: block; text-align:center;"><img src="http://www.codeisart.ru/wp-content/uploads/2009/04/gmail_loading.png" alt="Интерактивная загрузка Gmail" /><i>Во&nbsp;время загрузки Gmail отображается прогресс-бар.</i></p>
<h3 id="consistent">Соответствие контексту</h3>
<p>При выборе определенных решений при создании дизайна принимайте в&nbsp;расчет тип содержимого страницы. Разные страницы могут содержать контент разного типа. Адаптируйте каждую страницу под соответствующий ей&nbsp;контент, создайте элементы управления, которые упростят пользователю работы с&nbsp;сайтом, и&nbsp;постарайтесь сделать. Но&nbsp;не&nbsp;забывайте про минимализм!</p>
<p>Таким образом, поработав с&nbsp;вашими элементами управления, пользователь привыкнет к&nbsp;ним и&nbsp;дальнейшая работа с&nbsp;вашим ресурсов будет для него &laquo;обыденным&raquo; делом.</p>
<p style="display: block; text-align:center;"><img src="http://www.codeisart.ru/wp-content/uploads/2009/04/microsoft_office_ui.png" alt="Элементы управления MS Office" /><i>Элементы управления MS&nbsp;Office, различные для каждого типа контента.</i></p>
<h3 id="attractive">Привлекательность</h3>
<p>Хоть это может быть несколько спорным моментом, но&nbsp;я&nbsp;считаю, что хороший интерфейс должен быть привлекательным. Привлекательный пользователю интерфейс делает работу с&nbsp;ним приятной. Да,&nbsp;вы&nbsp;можете сделать интерфейс простым в&nbsp;использовании, эффективности и&nbsp;оперативности, и&nbsp;он&nbsp;будет отлично справляться со&nbsp;своей задачей,&nbsp;&mdash;&nbsp;но&nbsp;если вы&nbsp;дополните этот список достоинств еще и&nbsp;привлекательностью&nbsp;&mdash;&nbsp;работа с&nbsp;ним будет чистым удовольствием!</p>
<p>Но&nbsp;сложно сделать интерфейс, который будет нравиться всем. У&nbsp;каждого свои предпочтения, и&nbsp;что покажется одному красивым, у&nbsp;другого будет вызывать отвращение. Тем не&nbsp;менее, пользователей можно разделить на&nbsp;некоторые социальные/демографические группы, среди которых будут и&nbsp;группы вашей целевой аудитории. Например, интерфейс для группы &laquo;молодые мамы&raquo; будет в&nbsp;корне отличаться от&nbsp;&laquo;менеджеров по&nbsp;продаже автозапчастей&raquo;.</p>
<p style="display: block; text-align:center;"><img src="http://www.codeisart.ru/wp-content/uploads/2009/04/google_chrome.png" alt="Интерфейс Google Chrome" /><i>Интерфейс Google Chrome.</i></p>
<h3 id="efficient">Эффективность</h3>
<p>Пользовательский интерфейс&nbsp;&mdash;&nbsp;это инструмент управления. Он&nbsp;предоставляет доступ к&nbsp;различным функциям вашего приложения или веб-сайта. Хороший интерфейс должен давать возможность пользователю с&nbsp;наименьшими усилиями выполнить интересующее его действие.</p>
<p>Очень важно понять, что пользователь чаще всего хочет выполнить на&nbsp;определенной странице. Не&nbsp;нужно выводить списком все возможности вашего проекта, чаще всего пользователю интересна только небольшая часть этого списка.</p>
<p>Позаботьтесь о&nbsp;том, чтобы пользователь смог моментально найти наиболее полезные и&nbsp;самые требуемые функции, это очень упростит его общение с&nbsp;проектом.</p>
<p style="display: block; text-align:center;"><img src="http://www.codeisart.ru/wp-content/uploads/2009/04/iphone_photo_options.png" alt="Apple Iphone управление фотографиями" /><i>Три самых часто выполняемых действий над фотографиями в&nbsp;Apple Iphone объединены в&nbsp;общий список с&nbsp;моментальным доступом.</i></p>
<h3 id="forgiving">Снисходительность</h3>
<p>Никто и&nbsp;ничто не&nbsp;совершенно. Будьте готовы к&nbsp;тому, что пользователи будут делать ошибки при работе с&nbsp;вашим проектом. Это может происходить как по&nbsp;вашей вине, так и&nbsp;по&nbsp;вине пользователя. Вы&nbsp;должны грамотно обрабатывать все возможные ошибки&nbsp;&mdash;&nbsp;это будет одним из&nbsp;главных показателей качества вашего проекта. Не&nbsp;стоит наказывать пользователя&nbsp;&mdash;&nbsp;разработайте &laquo;снисходительный&raquo; интерфейс.</p>
<p>Вы&nbsp;должны беречь данные от&nbsp;случайных действий пользователя. Например, если кто-то удаляет важную информацию, предоставьте возможность ее&nbsp;восстановления. Когда пользователь переходит на&nbsp;несуществующие страницы, не&nbsp;пугайте его ошибками сервера, вместо этого предоставьте список альтернативных направлений, по&nbsp;которым он&nbsp;может проследовать.</p>
<p>Мне нравится, как сделана страница <a href="http://yandex.ru/asdasdasdasd/asdasd/asdasd" rel="nofollow" title="404 ошибка Яндекса">404&nbsp;ошибки у&nbsp;Яндекса</a>.</p>
<p style="display: block; text-align:center;"><img src="http://www.codeisart.ru/wp-content/uploads/2009/04/gmail_undo.png" alt="Отмена удаления в Gmail" /><i>Случайно удалено важная информация в&nbsp;Gmail. Не&nbsp;проблема, можем отменить действие!</i></p>
<h3>Заключение</h3>
<p>Работая над достижением одной из&nbsp;этих характеристик, вы&nbsp;можете создать проблемы для достижения другой. Например, старясь сделать интерфейс более понятным, вы&nbsp;можете добавить много описаний и&nbsp;объяснений, что в&nbsp;конечном итоге сделает интерфейс еще более громоздким и&nbsp;неудобным. Или урезая материал для достижения минимализма, может сделать вещи непонятными рядовому пользователю. Для достижения баланса необходимо мастерство и&nbsp;много времени, и&nbsp;помните, что ваши дизайнерские решения, скорее всего, будут различными в&nbsp;разных проектах. Что актуально для одного, для другого может быть не&nbsp;допустимо.</p>
<p>С&nbsp;удовольствием выслушаю ваши комментарии по&nbsp;поводу этой статьи.</p>
<p><b>В рамках акции</b> «<a title="Акция обмена постовыми" href="http://www.codeisart.ru/obmen-postovimi/">Обмен постовыми</a>»:</p>
<ul>
<li>Выполняем <a href="http://seocekret.ru/delaem-analiz-optimizacii-sajta/">анализ оптимизации сайта</a>.</li>
</ul>
<p><b>Спонсоры поста:</b></p>
<ul>
<li>HANDGEN.RU&nbsp;&mdash;&nbsp;качественное <a href="http://www.handgen.ru/">размножение статей</a>, более 95% уникальности;</li>
<li>Студия Web++&nbsp;&mdash;&nbsp;<a href="http://www.webpp.ru/">создание сайтов Волгоград</a>, интернет реклама, продвижение в поисковых системах.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/8-characteristics-of-successful-user-interfaces/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Стоит ли публиковать свой лучший контент на сторонних ресурсах?</title>
		<link>http://www.codeisart.ru/is-it-worth-it-to-publish-content-on-a-third-party-resources/</link>
		<comments>http://www.codeisart.ru/is-it-worth-it-to-publish-content-on-a-third-party-resources/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 20:59:04 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[SEM]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1447</guid>
		<description><![CDATA[В&#160;продвижении контентного интернет-ресурса (новостной сайт, блог) порой бывает полезно писать статьи для других сайтов со&#160;ссылкой на&#160;свой ресурс. Большинство блоггеров и&#160;владельцев новостных порталов с&#160;удовольствием согласятся разместить вашу статью у&#160;себя, конечно при условии, что материал адекватен. Они получают бесплатный полезный контент, а&#160;вы&#160;драгоценный трафик и&#160;подписчиков, что крайне важно, особенно для молодого сайта. Когда вы&#160;пишете статью для себя, есть [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/gwAfCOqrunmzR471CYb9rg_b_TI/0/da"><img src="http://feedads.g.doubleclick.net/~a/gwAfCOqrunmzR471CYb9rg_b_TI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/gwAfCOqrunmzR471CYb9rg_b_TI/1/da"><img src="http://feedads.g.doubleclick.net/~a/gwAfCOqrunmzR471CYb9rg_b_TI/1/di" border="0" ismap="true"></img></a></p><p>В&nbsp;продвижении контентного интернет-ресурса (новостной сайт, блог) порой бывает полезно писать статьи для других сайтов со&nbsp;ссылкой на&nbsp;свой ресурс. Большинство блоггеров и&nbsp;владельцев новостных порталов с&nbsp;удовольствием согласятся разместить вашу статью у&nbsp;себя, конечно при условии, что материал адекватен. Они получают бесплатный полезный контент, а&nbsp;вы&nbsp;драгоценный трафик и&nbsp;подписчиков, что крайне важно, особенно для молодого сайта.</p>
<p><span id="more-1447"></span></p>
<p>Когда вы&nbsp;пишете статью для себя, есть вероятность, что она не&nbsp;принесет ожидаемого результата, особенно если ваш сайт еще не&nbsp;достаточно развит. Для молодого контентного сайта крайне необходимо на&nbsp;первых порах своего существования увеличивать количество подписчиков, ведь подписчики&nbsp;&mdash;&nbsp;самая качественная целевая аудитория!</p>
<p>Когда вы&nbsp;публикуете статью на&nbsp;стороннем ресурсе, во&nbsp;первых вы&nbsp;получаете ссылки на&nbsp;ваш сайт, во&nbsp;вторых&nbsp;&mdash;&nbsp;полезный трафик! Минус здесь в&nbsp;том, что вы&nbsp;фактически отдаете свои идеи чужому сайту. Так&nbsp;же необходимо, чтобы ваш сайт уже имел некоторое количество полезного контента, иначе новых посетителей будете нечем заинтересовать, и&nbsp;они просто уйдут.</p>
<h3>Как же стоит поступать?</h3>
<p>Нужно комбинировать оба метода! При написании поста постарайтесь его разбить на&nbsp;2&nbsp;части. Первую часть вы&nbsp;публикуете на&nbsp;внешнем ресурсе, а&nbsp;вторую у&nbsp;себя на&nbsp;сайте. В&nbsp;первой части обязательно поместите ссылку на&nbsp;вторую, как на&nbsp;продолжение. Таким образом, вы&nbsp;привлекаете на&nbsp;свой сайт полезную аудиторию и&nbsp;закрепляете за&nbsp;собой собственные идеи!</p>
<p>Если ваш сайт посвящен компьютерной тематике, рекомендую писать статьи для <b>Habrahabr.ru</b>, полезнее аудитории в&nbsp;RUнете вы&nbsp;не&nbsp;найдете! Но&nbsp;будьте готовы к&nbsp;так называемому хабраэффекту&nbsp;&mdash;&nbsp;на&nbsp;ваш сайт в&nbsp;один момент будут переходить тысячи читателей этой социалки, важно, чтобы сервер выдержал эту нагрузку.</p>
<p><b>Спонсоры поста:</b></p>
<ul>
<li>HANDGEN.RU&nbsp;&mdash;&nbsp;качественное <a href="http://www.handgen.ru/">размножение статей</a>, более 95% уникальности;</li>
<li>Студия Web++&nbsp;&mdash;&nbsp;<a href="http://www.webpp.ru/">создание сайтов Волгоград</a>, интернет реклама, продвижение в поисковых системах.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/is-it-worth-it-to-publish-content-on-a-third-party-resources/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Округлые уголки, CSS</title>
		<link>http://www.codeisart.ru/okruglye-ugolki-css-urok-1/</link>
		<comments>http://www.codeisart.ru/okruglye-ugolki-css-urok-1/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 13:03:48 +0000</pubDate>
		<dc:creator>Octane</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1432</guid>
		<description><![CDATA[В этой статье мы рассмотрим пример создания панелей веб-сайта с округлыми углами на заранее известном сплошном цвете фона, при этом панели будут как угодно изменять свои размеры. I. Начнем работу с Adobe Photoshop: Создадим новое изображение (Ctrl+N) небольшого размера, например: 300х200 пикселей, на белом фоне; Воспользуемся инструментом Rounded Rectangle Tool (U). Поставим радиус округления углов [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/-sDhrb_F4Bom96cakZDZhjxuPpQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/-sDhrb_F4Bom96cakZDZhjxuPpQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-sDhrb_F4Bom96cakZDZhjxuPpQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/-sDhrb_F4Bom96cakZDZhjxuPpQ/1/di" border="0" ismap="true"></img></a></p><p>В этой статье мы рассмотрим пример создания панелей веб-сайта с округлыми углами на заранее известном сплошном цвете фона, при этом панели будут как угодно изменять свои размеры.</p>
<p><span id="more-1432"></span></p>
<p><b>I. </b>Начнем работу с Adobe Photoshop:</p>
<ol>
<li>Создадим новое изображение (Ctrl+N) небольшого размера, например: 300х200 пикселей, на белом фоне;</li>
<li>Воспользуемся инструментом <q>Rounded Rectangle Tool</q> (U). Поставим радиус округления углов <q>Radius</q> равным 10 пикселей, и управление размерностью добавляемого объекта <q>Round Rectangle Options</q> &#8212; Unconstrained<br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-1.gif" alt="" /><br />Выберем какой-нибудь цвет для панели, например: <span style="border: 1px solid #222; background: #74c44c;">&nbsp;#74c44c&nbsp;</span><br />Используем данный инструмент на нашем холсте, затем нажмем правой кнопкой мыши в панели <q>Слои (Layers)</q> по названию появившегося слоя <q>Shape 1</q> и выберем пункт <q>Resterize Layer</q>. В итоге должно получиться что-то похожее на изображение ниже:<br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-2.gif" alt="" /></li>
<li>Увеличим масштаб изображения до максимального (Ctrl++) и используя инструмент <q>Crop Tool</q> (C) выделим левый верхний угол нашей фигуры (Rounded Rectangle) как показано на рисунке<br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-3.gif" alt="" /><br />Т.е. захватим только область где идет скругление углов, все что залито сплошным не попадет в зону выреза. Далее нажмем правой кнопкой мыши внутри выделенного прямоугольника и выберем пункт <q>Crop</q>, получим:<br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-4.gif" alt="" /></li>
<li>Сохраним полученное изображение в файл, для этого нажмем Ctrl+Shift+Alt+S или выберем пункт <q>Save for Web (Сохранить для Веб)</q> в меню <q>File (Файл)</q>. В появившемся окне проделаем следующие настройки:
<ol style="list-style-type: lower-alpha;">
<li><q>GIF</q> &#8212; формат в который будем сохранять изображение;</li>
<li><q>Adaptive</q> &#8212; режим коррекции цветом, в нашем случае является наилучшим;</li>
<li>Параметры уменьшающие качество и четкость изображения (Dieter, Lossy, Web Snap) выключаем и ставим на минимум;</li>
<li>Убираем галочку напротив <q>Transparency (Прозрачность)</q>;</li>
<li>Выберем количество цветов <q>Colors</q> так чтобы не было потери качества;</li>
<li>Параметр <q>Matte</q> устанавливаем в значение <q>none</q></li>
<li>Далее нажимаем кнопку <q>Save (Сохранить)</q> и сохраняем изображение, например под именем: <q>panel_top_left.gif</q><br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-5.gif" alt="" /></li>
</ol>
</li>
<li>Проделаем пункты 3-4 с тремя оставшимися углами, в итоге получим набор изображений:
<ol style="list-style-type: lower-alpha;">
<li><img src="http://www.codeisart.ru/files/css/lesson_1/img/panel_top_left.gif" alt="panel_top_left" class="left" /> <q>panel_top_left.gif</q> &#8212; левый верхний угол;</li>
<li><img src="http://www.codeisart.ru/files/css/lesson_1/img/panel_top_right.gif" alt="panel_top_right" class="left" /> <q>panel_top_right.gif</q> &#8212; правый верхний угол;</li>
<li><img src="http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_left.gif" alt="panel_bottom_left" class="left" /> <q>panel_bottom_left.gif</q> &#8212; левый нижний угол;</li>
<li><img src="http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_right.gif" alt="panel_bottom_right" class="left" /> <q>panel_bottom_right.gif</q> &#8212; правый нижний угол.</li>
</ol>
</li>
</ol>
<p>На этом работа с Adobe Photoshop закончена.</p>
<p><b>II. </b>Далее действия могут производится в любом текстовом редакторе, например <q>Notepad (Блокнот)</q>. Рекомендуем воспользоваться специализированным решением, например <q>Adobe Dreamweaver</q>, <q>ActiveState Komodo Edit</q>, <q>PSPad</q> и др.</p>
<ol>
<li>Создадим <q>html</q> &#8212; документ (далее планируется что, читатель данной статьи обладает начальными знаниями HTML и CSS);</li>
<li>Добавим 4 вложенных друг в друга тега &lt;div&gt;
<pre><span style="color: #009;">&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;</span>Hello World !<span style="color: #009;">&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</span></pre>
</li>
<li>Опишем для первого тега &lt;div&gt; класс и назовем его <q>panel</q>:
<pre><span style="color: #f0f;">.panel {</span> <span style="color: #009;"><strong>background:</strong> #74c44c url(panel_top_left.gif) top left no-repeat;</span> <span style="color: #f0f;">}</span></pre>
<p>		Цвет фона следует задать только у первого (родителького) тега &lt;div&gt;;</p>
</li>
<li>Далее относительно <q>родительского</q> тега &lt;div&gt; опишем стили для всех вложенных тегов &lt;div&gt;:
<pre><span style="color: #f0f;">.panel div {</span>
<span style="color: #009;">	<strong>background:</strong> url(panel_top_right.gif) top right no-repeat;</span>
<span style="color: #f0f;">}</span>
<span style="color: #f0f;">.panel div div {</span>
<span style="color: #009;">	<strong>background:</strong> url(panel_bottom_left.gif) bottom left no-repeat;</span>
<span style="color: #f0f;">}</span>
<span style="color: #f0f;">.panel div div div {</span>
<span style="color: #009;">	<strong>background:</strong> url(panel_bottom_right.gif) bottom right no-repeat;</span>
<span style="color: #f0f;">}</span></pre>
<p>Т.е. для каждого тега &lt;div&gt; задаем в виде неповторяющегося фона ранее созданные изображения. Для первого тега &lt;div&gt; фоном будет изображение <q>panel_top_left.gif</q>, которое с помощью комбинации параметров <q>top left</q> свойства <q>background</q> разместим в верхнем левом углу. Изображение <q>panel_top_right.gif</q>, являющееся фоном первого вложенного тега &lt;div&gt; в тег &lt;div&gt; с классом <q>panel</q> с помощью комбинации параметров <q>top right</q> свойства <q>background</q> разместим в верхнем правом углу и т.д.</p>
</li>
<li>Опишем отступ текста от краев панели и применим некоторое оформление к тексту, который будет содержаться внутри панели:
<pre><span style="color: #f0f;">.panel div div div {</span>
<span style="color: #009;">	<strong>background:</strong> url(panel_bottom_right.gif) bottom right no-repeat;</span>
	<span style="color: #009;"><strong>padding:</strong> 15px;</span>
	<span style="color: #009;"><strong>color:</strong> #fff;</span>
	<span style="color: #009;"><strong>text-align:</strong> center;</span>
<span style="color: #f0f;">}</span></pre>
</li>
<li>Соберем теперь все это в один документ:
<pre><span style="color: #009;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=windows-1251&quot; /&gt;
&lt;title&gt;Округлые уголки (CSS: Урок № 1)&lt;/title&gt;</span>
<span style="color: #f0f;"><strong>&lt;style type=&quot;text/css&quot;&gt;</strong>
.panel {</span>
	<span style="color: #009;"><strong>background:</strong> #74c44c url(panel_top_left.gif) top left no-repeat;
	width: 200px;</span>
<span style="color: #f0f;">}
.panel div {</span>
	<span style="color: #009;"><strong>background:</strong> url(panel_top_right.gif) top right no-repeat;</span>
<span style="color: #f0f;">}
.panel div div {</span>
	<span style="color: #009;"><strong>background:</strong> url(panel_bottom_left.gif) bottom left no-repeat;</span>
<span style="color: #f0f;">}
.panel div div div {</span>
	<span style="color: #009;"><strong>background:</strong> url(panel_bottom_right.gif) bottom right no-repeat;
	<strong>padding:</strong> 15px;
	<strong>color:</strong> #fff;
	<strong>text-align:</strong> center;</span>
<span style="color: #f0f;">}
<strong>&lt;/style&gt;</strong></span>
<span style="color: #009;">&lt;/head&gt;
&lt;body&gt;
	&lt;div class=&quot;<strong>panel</strong>&quot;&gt;
		&lt;div&gt;
			&lt;div&gt;
				&lt;div&gt;</span>Hello World !<span style="color: #009;">&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</span></pre>
<p>		и получим результат:</p>
<div style="background: #74c44c url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_left.gif) top left no-repeat !important; width: 200px; margin: 10px 0;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_right.gif) top right no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_left.gif) bottom left no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_right.gif) bottom right no-repeat !important; padding: 15px; color: #fff; text-align: center;">Hello World !</div>
</div>
</div>
</div>
<div style="background: #74c44c url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_left.gif) top left no-repeat !important; width: 200px; margin: 10px 0;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_right.gif) top right no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_left.gif) bottom left no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_right.gif) bottom right no-repeat !important; padding: 15px; text-align: center;">Наша панель может изменять свои размеры, как в высоту, так и в ширину, при этом качество округления уголков не теряется</div>
</div>
</div>
</div>
<div style="background: #74c44c url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_left.gif) top left no-repeat !important; width: 300px; margin: 10px 0;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_right.gif) top right no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_left.gif) bottom left no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_right.gif) bottom right no-repeat !important; padding: 15px; text-align: center;">Создавайте сайты так,<br />чтобы они радовали глаз!</div>
</div>
</div>
</div>
</li>
</ol>
<p><strong>Заключение:</strong> данный способ позволяет создать эффект округления уголков контейнеров, находящихся на заранее известном сплошном цвете фона (в нашем случае белый), как создать такой эффект в случае градиентного или текстурированного фона, рассмотрим в следующей статье.<br />Так же стоит отметить, что при наличии большого количества разноцветных панелей, сделанных таким способом, получается большое количество запросов на сервер, например, у нас есть 5 цветов панелей, по 4 файла на каждую, уже получается 20 изображений, в этом случае такой способ не рекомендуется использовать. О том как уменьшить количество запросов изображений на сервер, а так же почему лучше использовать фоновые изображения рассмотрим отдельно в ближайших статьях.</p>
<p><small>P.S.: Когда Все браузеры будут поддерживать CSS3, такой пример можно будет осуществить по средством одного тега &lt;div&gt; и одного CSS-класса к нему, т.к. будет существовать возможность задать сразу несколько фоновых рисунков для одного элемента.</small></p>
<blockquote><p>Статья перенесена из нашего корпоративного блога ввиду полной переделки сайта. Подробнее <a href="http://www.codeisart.ru/webpp-records-replace/">можно узнать тут</a>.</p>
</blockquote>
<p>Компания <i>Web++</i>&nbsp;&mdash;&nbsp;<a title="Создание сайтов в Волгограде" href="http://www.webpp.ru/">создание сайтов Волгоград</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/okruglye-ugolki-css-urok-1/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Текстура дерева</title>
		<link>http://www.codeisart.ru/tekstura-dereva/</link>
		<comments>http://www.codeisart.ru/tekstura-dereva/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 13:00:42 +0000</pubDate>
		<dc:creator>Octane</dc:creator>
				<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Текстуры]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1427</guid>
		<description><![CDATA[В этой статье мы рассмотрим несколько необычный способ создания текстуры дерева в&#160;Photoshop. Отличие его заключается в&#160;том, что часть работы выполняется в&#160;специально написанной мною программе &#171;Wood Texture Generator&#187;, которая при помощи B-Spline&apos;ов строит изображение похожее на&#160;древесную поверхность. Сначала рассмотрим, что&#160;же такое &#171;B-Spline&#187; и&#160;каким образом мы&#160;будем применять его, чтобы получить текстуру дерева. &#171;B-Spline&#187;&#160;&#8212; это плавная кривая, построенная [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/1gecQBAa2y5uzGmTlZ8HA9D65sc/0/da"><img src="http://feedads.g.doubleclick.net/~a/1gecQBAa2y5uzGmTlZ8HA9D65sc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/1gecQBAa2y5uzGmTlZ8HA9D65sc/1/da"><img src="http://feedads.g.doubleclick.net/~a/1gecQBAa2y5uzGmTlZ8HA9D65sc/1/di" border="0" ismap="true"></img></a></p><p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-0.jpg" alt="Текстура дерева" style="width:435px;height:96px;margin-right:-100px;" /></p>
<p>В этой статье мы рассмотрим несколько необычный способ <strong style="font-weight:normal;">создания текстуры дерева</strong> в&nbsp;<abbr title="Профессиональный графический пакет для работы с растровой графикой">Photoshop</abbr>. Отличие его заключается в&nbsp;том, что часть работы выполняется в&nbsp;специально написанной мною программе &laquo;<a href="http://www.codeisart.ru/tekstura-dereva/#wtg" title="Генератор текстуры дерева">Wood Texture Generator</a>&raquo;, которая при помощи B-Spline&apos;ов строит изображение похожее на&nbsp;древесную поверхность.</p>
<p><span id="more-1427"></span></p>
<p>Сначала рассмотрим, что&nbsp;же такое &laquo;B-Spline&raquo; и&nbsp;каким образом мы&nbsp;будем применять его, чтобы получить <strong style="font-weight:normal;">текстуру дерева</strong>.</p>
<p>&laquo;B-Spline&raquo;&nbsp;&mdash; это плавная кривая, построенная минимум по&nbsp;3-м точкам. Допустим, у&nbsp;нас есть набор точек вида (x,y): A(10,400), B(200,10), C(300,400), D(400,10), E(500,400). Соединим их последовательно прямой.</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-1.png" alt="Текстура дерева" style="width:465px;height:370px;margin-right:-100px;" /></p>
<p>Теперь поверх изображения построим по&nbsp;этим точкам &laquo;B-Spline&raquo; (изображен красным цветом).</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-2.png" alt="Рисунок 2" style="width:465px;height:370px;" /></p>
<p>Как видим B-Spline&apos;овая кривая проходит через середины отрезков и&nbsp;не&nbsp;касается вершин, поэтому требуется минимум 3&nbsp;точки.</p>
<h1>Создание текстуры дерева</h1>
<p>Думаю, для понимания процесса, теории будет достаточно. Перейдем непосредственно к&nbsp;работе, запустим <strong style="font-weight:normal;">&laquo;Wood Texture Generator&raquo;</strong> и&nbsp;нажмем &laquo;Новая текстура&raquo;&nbsp;(Ctrl+N).</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-3.png" alt="Рисунок 3" style="width:465px;height:332px;" /></p>
<p>В результате мы получили изображение похожее на&nbsp;<strong style="font-weight:normal;">текстуру дерева</strong>, но&nbsp;такой результат нас не&nbsp;устраивает, попробуем получить более реалистичную картинку. Для этого уберем галочку с&nbsp;переключателя &laquo;Очищать&raquo;&nbsp;(Ctrl+C) и&nbsp;выберем более светлый оттенок коричневого в&nbsp;RGB-палитре &laquo;Цвет пера&raquo;, немного уменьшим &laquo;y&raquo;&nbsp;&mdash; постоянный шаг по&nbsp;оси&nbsp;&laquo;Y&raquo; и&nbsp;&laquo;dy&raquo;&nbsp;&mdash; максимальное значение случайной величины, прибавляемой на&nbsp;каждом шаге&nbsp;к&nbsp;&laquo;y&raquo;. Затем снова выполним команду &laquo;Новая текстура&raquo;&nbsp;(Ctrl+N).</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-4.png" alt="Рисунок 4" style="width:465px;height:332px;" /></p>
<p>Получилось уже&nbsp;что-то более похожее на&nbsp;<strong style="font-weight:normal;">текстуру дерева</strong>, но&nbsp;пока не&nbsp;совсем&nbsp;то, что хотелось&nbsp;бы. Сохраним это изображение в&nbsp;&laquo;bmp-файл&raquo;, для этого нужно нажать &laquo;Сохранить изображение&raquo;&nbsp;(Ctrl+Shift+S). Затем откроем его в&nbsp;&laquo;Photoshop&raquo;.</p>
<p>Чтобы повысить качество изображения, применим фильтр &laquo;Motion Blur&raquo;.</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-5.png" alt="Рисунок 5" style="width:370px;height:440px;" /></p>
<p>В&nbsp;появившемся окне нужно установить значение угла движения &laquo;Angle&raquo; равным &nbsp;0&deg; и&nbsp;дистанцию &laquo;Distance&raquo; не&nbsp;более&nbsp;20-ти, чтобы сохранить четкость изображения.</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-6.png" alt="Рисунок 6" style="width:322px;height:384px;" /></p>
<p>Далее сделаем темные линии прерывистыми, перейдем в&nbsp;&laquo;Filter Gallery&raquo;.</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-7.png" alt="Рисунок 7" style="width:256px;height:185px;" /></p>
<p>В появившемся окне переходим к&nbsp;группе фильтров &laquo;Brush Stokes&raquo; и&nbsp;выбираем фильтр &laquo;Spatter&raquo;. Установим ползунок &laquo;Spray Radius&raquo; в&nbsp;положение&nbsp;1, а&nbsp;&laquo;Smoothness&raquo;&nbsp;&mdash; в&nbsp;положение&nbsp;14.</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-8.png" alt="Рисунок 8" style="width:465px;height:294px;" /></p>
<p>Получим достаточно реалистичное изображение полированной древесной поверхности.</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-9.png" alt="Рисунок 9" style="width:465px;height:200px;" /></p>
<p>Экспериментируя с&nbsp;различными фильтрами &laquo;Photoshop&raquo; и&nbsp;параметрами Wood Texture Generator&apos;а можно получать различные <strong style="font-weight:normal;">качественные деревянные текстуры</strong>.</p>
<p><img src="http://www.codeisart.ru/files/photoshop/wtg/img/wtg-10.png" alt="Рисунок 10" style="width:465px;height:420px;" /></p>
<p>Вы можете скачать &laquo;<a id="wtg" href="http://www.codeisart.ru/files/wtg.zip" title="Генератор текстуры дерева">Wood Texture Generator</a>&raquo; c&nbsp;нашего сайта. Программа распространяется бесплатно и&nbsp;не&nbsp;может продаваться. Авторские права принадлежат студии &laquo;<a href="http://www.webpp.ru/">Web++</a>&raquo;.</p>
<p>В программе &laquo;Wood Texture Generator&raquo; нет никакой &laquo;защиты&nbsp;от&nbsp;дурака&raquo;, обработки исключений и&nbsp;методов оптимизации вычислений, поэтому если она зависнет при попытке открыть файл неправильного формата или при нехватке памяти в&nbsp;результате длительных вычислений, не&nbsp;нужно ругаться и&nbsp;писать, что программа не&nbsp;работает, значит вы сделали что-то неправильно. При малых значениях шага&nbsp;по&nbsp;&laquo;x&raquo; и&nbsp;по&nbsp;&laquo;y&raquo; процесс генерации текстуры может быть достаточно долгим, в&nbsp;некоторых случаях может показаться, что программа &laquo;не&nbsp;отвечает&raquo;, не&nbsp;спешите сразу завершать процесс, подождите некоторое время, такие паузы связаны с&nbsp;большим объемом вычислений, т.&nbsp;к. на&nbsp;рисование минимального отрезка кривой необходимо 1000 интераций цикла.</p>
<blockquote><p>Статья перенесена из нашего корпоративного блога ввиду полной переделки сайта. Подробнее <a href="http://www.codeisart.ru/webpp-records-replace/">можно узнать тут</a>.</p>
</blockquote>
<p>Компания <i>Web++</i>&nbsp;&mdash;&nbsp;<a title="Создание сайтов в Волгограде" href="http://www.webpp.ru/">создание сайтов Волгоград</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/tekstura-dereva/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Перенос контента со старого блога</title>
		<link>http://www.codeisart.ru/webpp-records-replace/</link>
		<comments>http://www.codeisart.ru/webpp-records-replace/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 12:59:51 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[Оффтопик]]></category>
		<category><![CDATA[Web++]]></category>
		<category><![CDATA[Различные мысли]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1439</guid>
		<description><![CDATA[Последние 3&#160;недели мы&#160;были заняты переработкой сайта нашей веб-студии. Кстати, за&#160;это время мы&#160;перешли на&#160;новую платформу разработки сайтов&#160;&#8212; Django Framework, функционирующую на&#160;языке Python, впечатлений масса! Думаю, ближайшее время найдем, что рассказать интересного об&#160;этом фреймворке. Итак, подразумевалось, что на&#160;нашем новом сайте будет вестись корпоративный блог о&#160;жизни нашей веб-студии. Поэтому было решено перенести некоторые записи со&#160;старого блога (www.webpp.ru/blog/) на&#160;CODEISART.RU. [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/W2SPCrUYewUY_yTnc9cWGH9-690/0/da"><img src="http://feedads.g.doubleclick.net/~a/W2SPCrUYewUY_yTnc9cWGH9-690/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/W2SPCrUYewUY_yTnc9cWGH9-690/1/da"><img src="http://feedads.g.doubleclick.net/~a/W2SPCrUYewUY_yTnc9cWGH9-690/1/di" border="0" ismap="true"></img></a></p><p>Последние 3&nbsp;недели мы&nbsp;были заняты переработкой сайта нашей веб-студии. Кстати, за&nbsp;это время мы&nbsp;перешли на&nbsp;новую платформу разработки сайтов&nbsp;&#8212; Django Framework, функционирующую на&nbsp;языке Python, впечатлений масса! Думаю, ближайшее время найдем, что рассказать интересного об&nbsp;этом фреймворке.</p>
<p><span id="more-1439"></span></p>
<p>Итак, подразумевалось, что на&nbsp;нашем новом сайте будет вестись корпоративный блог о&nbsp;жизни нашей веб-студии. Поэтому было решено перенести некоторые записи со&nbsp;старого блога (www.webpp.ru/blog/) на&nbsp;CODEISART.RU.</p>
<p>Со&nbsp;старого адреса будет происходить перенаправление с&nbsp;кодом 301&nbsp;(301&nbsp;редирект) на&nbsp;новые адреса, по&nbsp;мере их&nbsp;переноса.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/webpp-records-replace/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Онлайн сервис конвертации HTML в PDF</title>
		<link>http://www.codeisart.ru/online-convert-html-to-pdf/</link>
		<comments>http://www.codeisart.ru/online-convert-html-to-pdf/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 13:08:26 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[Ссылки]]></category>
		<category><![CDATA[Различные мысли]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1412</guid>
		<description><![CDATA[Иногда было&#160;бы очень удобно перевести наиболее интересную статью из&#160;HTML формата в&#160;PDF для удобного хранения на&#160;компьютере. Набрел на&#160;очень удобный сервис для этой цели&#160;&#8212;&#160;HTML to PDF Converter. Вам достаточно ввести адрес страницы и&#160;в&#160;считанные секунды откроется окно загрузки созданного PDF файла. Качество PDF вполне приемлемое! К&#160;сожалению, в&#160;последнее время крайне трудно выделять время для написания постов в&#160;блог. Работы много, [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/0qpse-TYFZtkkJCmkOXHsAWdmfs/0/da"><img src="http://feedads.g.doubleclick.net/~a/0qpse-TYFZtkkJCmkOXHsAWdmfs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/0qpse-TYFZtkkJCmkOXHsAWdmfs/1/da"><img src="http://feedads.g.doubleclick.net/~a/0qpse-TYFZtkkJCmkOXHsAWdmfs/1/di" border="0" ismap="true"></img></a></p><p><img class="left" src="http://www.codeisart.ru/wp-content/uploads/2009/04/html-website-to-pdf-convert.png" alt="HTML to PDF Converter" />Иногда было&nbsp;бы очень удобно перевести наиболее интересную статью из&nbsp;HTML формата в&nbsp;PDF для удобного хранения на&nbsp;компьютере.</p>
<p>Набрел на&nbsp;очень удобный сервис для этой цели&nbsp;&mdash;&nbsp;<a href="http://html-pdf-converter.com/">HTML to PDF Converter</a>. Вам достаточно ввести адрес страницы и&nbsp;в&nbsp;считанные секунды откроется окно загрузки созданного PDF файла. Качество PDF вполне приемлемое!</p>
<p><span id="more-1412"></span></p>
<blockquote><p>К&nbsp;сожалению, в&nbsp;последнее время крайне трудно выделять время для написания постов в&nbsp;блог. Работы много, с&nbsp;головой ушли в&nbsp;свои проекты. Тем не&nbsp;менее, с&nbsp;апреля будем стараться писать чаще. Накопилось довольно много интересных мыслей, о&nbsp;которых хочется рассказать.</p></blockquote>
<p><b>В рамках акции</b> «<a title="Акция обмена постовыми" href="http://www.codeisart.ru/obmen-postovimi/">Обмен постовыми</a>»:</p>
<ul>
<li>Оптимизация на лету! <a href="http://slovu.net/archives/110">Сжимаем CSS и JS</a>.</li>
<li>Вопрос-Ответ: <a href="http://www.web-article.com.ua/2009/servis-vopros-otvet-raskrutka-saita/">где взять новых посетителей</a>?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/online-convert-html-to-pdf/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Продвигать статьями или покупными ссылками?</title>
		<link>http://www.codeisart.ru/promote-purchase-articles-or-links/</link>
		<comments>http://www.codeisart.ru/promote-purchase-articles-or-links/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 22:54:09 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[SEO/SEM]]></category>
		<category><![CDATA[продвижение статьями]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1371</guid>
		<description><![CDATA[Как вы&#160;думаете, какая техника продвижения наиболее эффективная? От&#160;продвижение покупными ссылками можно получить более быструю отдачу, чем от&#160;продвижения статьями, но&#160;размещение статей &#171;навсегда&#187; позволит свести к&#160;минимуму затраты на&#160;дальнейшую поддержку сайта. Я&#160;выскажу свое мнение по&#160;этому поводу. Итак, как лучше продвигать сайт, статьями или ссылками? Каждая из&#160;техник имеет свои плюсы и&#160;свои минусы, давайте их&#160;рассмотрим. Продвижение покупными ссылками Отрицательная сторона: [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/MPzMKVVY4B_SKIsPV1licsYJ5KE/0/da"><img src="http://feedads.g.doubleclick.net/~a/MPzMKVVY4B_SKIsPV1licsYJ5KE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/MPzMKVVY4B_SKIsPV1licsYJ5KE/1/da"><img src="http://feedads.g.doubleclick.net/~a/MPzMKVVY4B_SKIsPV1licsYJ5KE/1/di" border="0" ismap="true"></img></a></p><p>Как вы&nbsp;думаете, какая техника продвижения наиболее эффективная? От&nbsp;продвижение покупными ссылками можно получить более быструю отдачу, чем от&nbsp;<strong class="normal">продвижения статьями</strong>, но&nbsp;размещение статей &laquo;навсегда&raquo; позволит свести к&nbsp;минимуму затраты на&nbsp;дальнейшую поддержку сайта. Я&nbsp;выскажу свое мнение по&nbsp;этому поводу.</p>
<p><span id="more-1371"></span></p>
<p>Итак, как лучше продвигать сайт, статьями или ссылками? Каждая из&nbsp;техник имеет свои плюсы и&nbsp;свои минусы, давайте их&nbsp;рассмотрим.</p>
<h3>Продвижение покупными ссылками</h3>
<p><b>Отрицательная сторона:</b> как правило, покупные ссылки выглядят неестественно. Они размещаются в&nbsp;футере страницы, в&nbsp;блоке с&nbsp;заголовком &laquo;Реклама&raquo;, или где-либо на&nbsp;странице блоком, заполненным только ссылками. Поисковые системы активно ведут борьбу с&nbsp;покупными ссылками, это противоречит их&nbsp;идеологии&nbsp;&mdash;&nbsp;ссылки должны ставиться по&nbsp;доброй воле, а&nbsp;не&nbsp;за&nbsp;материальное вознаграждение. Сайты, продающие ссылки банятся поисковыми системами или попадают под фильтр.</p>
<p>Отследить покупные ссылки достаточно просто. Биржи размещают ссылки на&nbsp;страницах сайта относительно их&nbsp;URL, если добавить любой параметр к&nbsp;адресу, например <code class="html">/?some_param=foo</code>, содержимое страницы не&nbsp;изменится, за&nbsp;исключением покупных ссылок, они исчезнут, т.к. URL изменился.</p>
<p><b>Положительная сторона:</b> продвижение покупными ссылками, как правило, дает более быструю отдачу, чем <strong class="normal">продвижение статьями</strong>, так как ссылки покупаются на&nbsp;страницах с&nbsp;уже присвоенным рейтингом. Заплатив определенную сумму, можно разместить ссылку на&nbsp;странице, скажем с&nbsp;PR&nbsp;7,&nbsp;которая будет перекачивать ссылочный вес на&nbsp;ваш сайт. И&nbsp;скорее всего после ближайшего АПа вы&nbsp;уже почувствуете положительный результат.</p>
<p>Я&nbsp;не&nbsp;спорю, без покупки ссылок очень сложно продвинуть сайт в&nbsp;ТОП по&nbsp;ВЧ&nbsp;и&nbsp;некоторым СЧ,&nbsp;но&nbsp;что если часть бюджета, выделяемого на&nbsp;покупку ссылок тратить на&nbsp;размещение статей?</p>
<h3>Продвижение статьями</h3>
<p><a href="http://www.codeisart.ru/seo-articles-promotion/">Что такое продвижение статьями</a> я&nbsp;рассказывал ранее, но&nbsp;коротко все-таки поясню. Пишется тематическая статья, в&nbsp;тексте ставятся ссылки на&nbsp;продвигаемый ресурс. Далее статья размещается на&nbsp;площадке, как правило, на&nbsp;неограниченный срок. Индексируется и&nbsp;передает ссылочный вес реципиенту.</p>
<p><b>Отрицательная сторона:</b> продвижение статьями более трудоемкий процесс, чем покупка ссылок. Статью необходимо написать, расставить в&nbsp;ней ключевые слова, найти тематические площадки, договориться о&nbsp;размещении и&nbsp;проверять ее&nbsp;индексируемость. Частично эти проблемы может решить биржа статей, о&nbsp;которой речь пойдет чуть ниже.</p>
<p><strong class="normal">Продвижение статьями</strong> достаточно дорогостоящий метод, написание одной статьи может обойтись от&nbsp;3$&nbsp;до&nbsp;15$, написание 20&nbsp;статей уже обойдется в&nbsp;60$-300$, а&nbsp;их&nbsp;ведь еще нужно разместить на&nbsp;площадках. Значительно сократить бюджет на&nbsp;написание статей поможет услуга &laquo;Размножение статей&raquo;, заказать которую вы&nbsp;<a href="http://forum.searchengines.ru/showthread.php?t=315792" title="Услуга размножения статей">можете у&nbsp;нас</a>.</p>
<p><b>Положительная сторона:</b> ссылки в&nbsp;статьях смотрятся естественно! Они окружены полезным тематическим контентом, обогащенным ключевыми словами. На&nbsp;мой взгляд, это главное преимущество статей! Поисковики обожают уникальный контент и&nbsp;с&nbsp;доверием относятся к&nbsp;ссылкам в&nbsp;нем.</p>
<p>Я&nbsp;не&nbsp;могу предположить, каким методом можно определить, что статья размещена с&nbsp;целью умышленного воздействия на&nbsp;результаты поисковой выдачи. Вы&nbsp;фактически покупаете страницу на&nbsp;сайте, которая имеет реальный URL, статья никак не&nbsp;выдает своего предназначения, и&nbsp;площадка не&nbsp;подвергнется наказаниям со&nbsp;стороны поисковых систем.</p>
<p>Статьи, как правило, размещаются &laquo;навсегда&raquo;, т.е. на&nbsp;все время существования площадки. Каждый раз, размещая статьи &laquo;навсегда&raquo;, вы&nbsp;сводите к&nbsp;минимуму дальнейшие затраты на&nbsp;поддержку позиций сайта, так как размещенные ранее статьи никуда не&nbsp;делись, они работают и&nbsp;по&nbsp;прежнему передают ссылочный вес, за&nbsp;них не&nbsp;нужно платить дополнительные деньги. Периодически размещая статьи, вы&nbsp;увеличиваете постоянную ссылочную базу продвигаемого ресурса, которая будет подпитывать его на&nbsp;протяжении всего существования.</p>
<h4>Продвижение статьями на практике</h4>
<p>Я&nbsp;являюсь сторонником <strong class="normal">продвижения статьями</strong>. На&nbsp;практике убедился в&nbsp;эффективности этой методики и&nbsp;результаты радуют! Практически все проекты, над которыми я&nbsp;работаю, продвигаются <a href="http://forum.searchengines.ru/showthread.php?t=315792" title="Услуга размножения статей">размноженными статьями</a>, и&nbsp;иногда только статьями, без применения иных методов.</p>
<p><a href="http://www.liex.ru/cbfe0ee51b97f22b011bdeb6dfe537e2.htm"><img src="http://www.codeisart.ru/wp-content/uploads/2009/03/liexru-logo.png" class="left" alt="Биржа статей Liex.ru" /></a>Единственная сложность продвижения статьями&nbsp;&mdash;&nbsp;поиск тематических площадок, некоторые я&nbsp;нахожу на&nbsp;<a href="http://forum.searchengines.ru/" title="Форум о поисковых системах">форуме SE</a>,&nbsp;но&nbsp;этого бывает мало. Поэтому большинство статей я&nbsp;размещаю через биржу <a href="http://www.liex.ru/cbfe0ee51b97f22b011bdeb6dfe537e2.htm" title="Биржа статей">Liex.Ru</a>, которая является, на&nbsp;мой взгляд, наиболее удобной для этих целей!</p>
<p>Особенно мне нравится пакетная загрузка статей, это очень актуально в&nbsp;моем случае, т.к. после размножения статей получается несколько сотен и&nbsp;вручную их&nbsp;размещать очень сложно.</p>
<p>Так&nbsp;же в&nbsp;<a href="http://www.liex.ru/cbfe0ee51b97f22b011bdeb6dfe537e2.htm" title="Биржа статей">Liex.Ru</a> имеется возможность создания фильтров. Фильтры предназначены для выборки площадок в&nbsp;соответствии с&nbsp;пользовательскими требованиями. Вы&nbsp;можете выбрать все площадки, возрастом более одного года, размещенные в&nbsp;DMOZ и&nbsp;ЯК,&nbsp;с&nbsp;PR=6 главной страницы и&nbsp;т.д. Опций довольно много.</p>
<p>Найти качественные тематические площадки можно установив опции &laquo;принимает только тематические статьи&raquo; и&nbsp;&laquo;жесткая модерация&raquo;.</p>
<p>Я&nbsp;произвожу размещение статей &laquo;навсегда&raquo;, но&nbsp;в&nbsp;вашем случае, возможно, это не&nbsp;обязательно.</p>
<p>Работаю с&nbsp;<a href="http://www.liex.ru/cbfe0ee51b97f22b011bdeb6dfe537e2.htm" title="Биржа статей">Liex.ru</a> уже довольно давно, да,&nbsp;конечно есть некоторые неудобства, но&nbsp;в&nbsp;целом она отвечает всем моим требованиям.</p>
<h3>Заключение</h3>
<p>Можно&nbsp;ли продвигать только статьями? Несомненно можно, но&nbsp;нужно подходить к&nbsp;этому с&nbsp;умом. Не&nbsp;стоит полагаться только на&nbsp;статьи, продвигая сайты в&nbsp;ТОП по&nbsp;ВЧ,&nbsp;все-таки при жесткой конкуренции без покупных ссылок не&nbsp;обойтись. Но&nbsp;размещение статей должно стать важной частью вашей стратегии продвижения, потому как создает постоянную базу качественных ссылок продвигаемому сайту!</p>
<p><b>В рамках акции</b> «<a title="Акция обмена постовыми" href="http://www.codeisart.ru/obmen-postovimi/">Обмен постовыми</a>»:</p>
<ul>
<li>Как <a href="http://fewal.ru/yandeks/zavisimost-tic-ot-tematiki-sajta">зависит тИЦ от тематики сайта</a>?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/promote-purchase-articles-or-links/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>WordPress плагины, повышающие безопасность блога</title>
		<link>http://www.codeisart.ru/wordpress-plugins-to-enhance-security/</link>
		<comments>http://www.codeisart.ru/wordpress-plugins-to-enhance-security/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 22:00:11 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1358</guid>
		<description><![CDATA[Небольшая подборка плагинов, повышающих безопасность блога на WordPress. Limit Login Attempts: Плагин блокирует пользователя на&#160;20&#160;минут, если он&#160;ввел неправильный пароль 4&#160;раза подряд (это значение может быть изменено). Хороший способ защиты от&#160;брутфорса. Sabre: если на&#160;вашем WordPress блоге открытая регистрация пользователей, то&#160;это может повлечь за&#160;собой автоматическое создание спам-аккаунтов. Как правило этим занимаются боты, а&#160;не&#160;человек персонально. Плагин Sabre создает [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/13x8NBC6juDZd4ZuA9Zu1ZSBMkw/0/da"><img src="http://feedads.g.doubleclick.net/~a/13x8NBC6juDZd4ZuA9Zu1ZSBMkw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/13x8NBC6juDZd4ZuA9Zu1ZSBMkw/1/da"><img src="http://feedads.g.doubleclick.net/~a/13x8NBC6juDZd4ZuA9Zu1ZSBMkw/1/di" border="0" ismap="true"></img></a></p><p>Небольшая подборка плагинов, повышающих <strong class="normal">безопасность блога на WordPress</strong>.</p>
<p><span id="more-1358"></span></p>
<ul>
<li><a href="http://wordpress.org/extend/plugins/limit-login-attempts/" title="Limit Login Attempts">Limit Login Attempts</a>: Плагин блокирует пользователя на&nbsp;20&nbsp;минут, если он&nbsp;ввел неправильный пароль 4&nbsp;раза подряд (это значение может быть изменено). Хороший способ защиты от&nbsp;брутфорса.</li>
<li><a href="http://wordpress.org/extend/plugins/sabre/" title="Sabre">Sabre</a>: если на&nbsp;вашем WordPress блоге открытая регистрация пользователей, то&nbsp;это может повлечь за&nbsp;собой автоматическое создание спам-аккаунтов. Как правило этим занимаются боты, а&nbsp;не&nbsp;человек персонально. Плагин Sabre создает защиту от&nbsp;автоматического создания спам-аккаунтов, путем размещения в&nbsp;форме регистрации каптчу или простой математический пример.</li>
<li><a href="http://wordpress.org/extend/plugins/semisecure-login-reimagined/" title="Semisecure Login">Semisecure Login</a>: увеличивает безопасность при авторизации пользователей, используя открытый ключ для шифрование пароля на&nbsp;клиентской стороне. Далее пароль расшифровывается закрытым ключем на&nbsp;сервере и&nbsp;происходит авторизация. Работает на&nbsp;JavaScript и&nbsp;PHP.</li>
<li><a href="http://wordpress.org/extend/plugins/bad-behavior/" title="Bad Behavior">Bad Behavior</a>: проверяет IP-адрес пользователя в&nbsp;базе спам-адресов <a href="http://en.wikipedia.org/wiki/Project_Honey_Pot" title="Project Honey Pot">Project Honey Pot</a>. Если IP&nbsp;присутствует в&nbsp;базе, доступ к&nbsp;вашему блоку с&nbsp;этого адреса блокируется.</li>
<li><a href="http://wordpress.org/extend/plugins/secure-wordpress/" title="Secure WordPress">Secure WordPress</a>: плагин прячет информацию о&nbsp;версии вашего Wodrpress, а&nbsp;так&nbsp;же установленных плагинах путем размещения в&nbsp;их&nbsp;директории пустых файлов index.php.</li>
</ul>
<p><b>Все плагины совсемстимы с&nbsp;Wordpress 2.7!</b></p>
<p>Какие плагины используете вы&nbsp;для защиты своих блогов?</p>
<p><b>PS:</b> Обновили иллюстрацию в шапке блога в связи наступления весны, думаю получилось симпатично <img src='http://www.codeisart.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p><b>В рамках акции</b> «<a title="Акция обмена постовыми" href="http://www.codeisart.ru/obmen-postovimi/">Обмен постовыми</a>»:</p>
<ul>
<li>Как организовать <a href="http://lexnevermind.com/post_1220254167.html">рекламу Вконтакте</a>? Метод автоматизации рассылок.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/wordpress-plugins-to-enhance-security/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Быстрый поиск DOM-элементов</title>
		<link>http://www.codeisart.ru/js-core-fast-dom-element-traversing/</link>
		<comments>http://www.codeisart.ru/js-core-fast-dom-element-traversing/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 20:02:01 +0000</pubDate>
		<dc:creator>Octane</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[js-core]]></category>
		<category><![CDATA[Работа с DOM]]></category>
		<category><![CDATA[Element Traversal]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1344</guid>
		<description><![CDATA[В&#160;новых браузерах для&#160;перемещения по&#160;DOM-дереву появилась возможность использовать интерфейс «Element&#160;Traversal», который позволяет искать элементы, исключая текстовые узлы так,&#160;как&#160;это&#160;происходит в&#160;Internet&#160;Explorer, при&#160;использовании стандартных firstChild, lastChild, nextSibling и&#160;previousSibling, что&#160;увеличивает скорость поиска элементов. В&#160;браузерах, поддерживающих «Element&#160;Traversal», доступны новые&#160;методы: firstElementChild&#160;— первый дочерний элементы; lastElementChild&#160;— последний дочерний элементы; nextElementSibling&#160;— следующий элементы; previousElementSibling&#160;— предыдущий элементы; childElementCount&#160;— количество дочерних элементов. Эти&#160;методы работают с&#160;узлами, у&#160;которых [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/PFymRX6lNwhHEfazThqWjWzwlQU/0/da"><img src="http://feedads.g.doubleclick.net/~a/PFymRX6lNwhHEfazThqWjWzwlQU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PFymRX6lNwhHEfazThqWjWzwlQU/1/da"><img src="http://feedads.g.doubleclick.net/~a/PFymRX6lNwhHEfazThqWjWzwlQU/1/di" border="0" ismap="true"></img></a></p><p><img src="http://www.codeisart.ru/wp-content/uploads/2009/02/sticker1.png" alt="js-core dom traversing" width="141" height="141" class="left" />В&nbsp;новых браузерах для&nbsp;перемещения по&nbsp;<abbr title="Document Object Model">DOM</abbr>-дереву появилась возможность использовать интерфейс «Element&nbsp;Traversal», который позволяет искать элементы, исключая текстовые узлы так,&nbsp;как&nbsp;это&nbsp;происходит в&nbsp;Internet&nbsp;Explorer, при&nbsp;использовании стандартных <code>firstChild</code>, <code>lastChild</code>, <code>nextSibling</code> и&nbsp;<code>previousSibling</code>, что&nbsp;увеличивает скорость поиска элементов.</p>
<p><span id="more-1344"></span></p>
<p>В&nbsp;браузерах, поддерживающих «<a href="http://www.w3.org/TR/ElementTraversal/" rel="external nofollow">Element&nbsp;Traversal</a>», доступны новые&nbsp;методы:</p>
<ul>
<li><code>firstElementChild</code>&nbsp;— первый дочерний элементы;</li>
<li><code>lastElementChild</code>&nbsp;— последний дочерний элементы;</li>
<li><code>nextElementSibling</code>&nbsp;— следующий элементы;</li>
<li><code>previousElementSibling</code>&nbsp;— предыдущий элементы;</li>
<li><code>childElementCount</code>&nbsp;— количество дочерних элементов.</li>
</ul>
<p>Эти&nbsp;методы работают с&nbsp;узлами, у&nbsp;которых <code>nodeType&nbsp;==&nbsp;1</code>, например, метод <code>childElementCount</code> показывает не&nbsp;сколько всего&nbsp;дочерних узлов, а&nbsp;количество дочерних элементов, т.&nbsp;е.&nbsp;узлов с&nbsp;<code>nodeType&nbsp;==&nbsp;1</code>.</p>
<p>Все&nbsp;конечно хорошо и&nbsp;удобно, но&nbsp;нельзя забывать о&nbsp;огромной армии пользователей старых браузеров, поэтому напишем функции, которые позволят кросс-браузерно выполнять поиск дочерних элементов.</p>
<p>Для&nbsp;начала проверим, поддерживает&nbsp;ли браузер интерфейс «Element&nbsp;Traversal»?</p>
<pre><code class="javascript">var traversal = typeof document
                           .createElement('div')
                               .childElementCount != 'undefined';</code></pre>
<p>В&nbsp;итоге переменная <code>traversal</code> будет&nbsp;иметь значение <code>true</code> или&nbsp;<code>false</code>, опираясь на&nbsp;которое мы&nbsp;будем&nbsp;выбирать, какой из&nbsp;способов перемещения по&nbsp;<abbr title="Document Object Model">DOM</abbr>-дереву использовать.</p>
<p>Следующая функция будет&nbsp;искать первый дочерний элемент:</p>
<pre><code class="javascript">var firstChild = traversal ? function(node) {
    // для новых браузеров достаточно
    // воспользоваться встроенным методом
    return node.firstElementChild;
} : function(node) {
    // для старых браузеров
    // находим первый дочерний узел
    node = node.firstChild;
    // ищем в цикле следующий узел,
    // пока не встретим элемент с nodeType == 1
    while(node &amp;&amp; node.nodeType != 1) node = node.nextSibling;
    // возвращаем результат
    return node;
};</code></pre>
<p>Рассмотрим простой пример использования:</p>
<p class="bold">XHTML</p>
<pre><code class="html">&lt;div id=&quot;test&quot;&gt;
    text node
    &lt;div&gt;First&lt;/div&gt;
    text node
    &lt;div&gt;Last&lt;/div&gt;
    text node
&lt;/div&gt;</code></pre>
<p class="bold">JavaScript</p>
<pre><code class="javascript">var node = document.getElementById('test');
var text = firstChild(node).innerHTML;
alert(text); // → First</code></pre>
<p>Аналогично будет выглядет функция <code>lastChild</code>:</p>
<pre><code class="javascript">var lastChild = traversal ? function(node) {
    return node.lastElementChild;
} : function(node) {
    node = node.lastChild;
    while(node &amp;&amp; node.nodeType != 1) node = node.previousSibling;
    return node;
};</code></pre>
<p>Используем:</p>
<pre><code class="javascript">text = lastChild(node).innerHTML;
alert(text); // → Last</code></pre>
<p>Назовем функции поиска следующего и&nbsp;предыдущего элемента «next» и&nbsp;«previous» соответственно:</p>
<pre><code class="javascript">var next = traversal ? function(node) {
    return node.nextElementSibling;
} : function(node) {
    while(node = node.nextSibling) if(node.nodeType == 1) break;
    return node;
};
var previous = traversal ? function(node) {
    return node.previousElementSibling;
} : function(node) {
    while(node = node.previousSibling) if(node.nodeType == 1) break;
    return node;
};</code></pre>
<p>И&nbsp;рассмотрим их&nbsp;работу на&nbsp;простеньком примере:</p>
<p class="bold">XHTML</p>
<pre><code class="html">&lt;div&gt;
    text node
    &lt;div id=&quot;first&quot;&gt;First&lt;/div&gt;
    text node
    &lt;div id=&quot;last&quot;&gt;Last&lt;/div&gt;
    text node
&lt;/div&gt;</code></pre>
<p class="bold">JavaScript</p>
<pre><code class="javascript">var node = document.getElementById('first');
var text = next(node).innerHTML;
alert(text); // → Last
node = document.getElementById('last');
text = previous(node).innerHTML;
alert(text); // → First</code></pre>
<p>Чтобы&nbsp;получить коллекцию дочерних узлов, среди&nbsp;которых могут&nbsp;содержаться, ненужные нам&nbsp;текстовые узлы, в&nbsp;интерфейсе <abbr title="Document Object Model">DOM</abbr> предусмотрен метод <code>childNodes</code>, но&nbsp;большинство браузеров поддерживает и&nbsp;более&nbsp;удобный метод <code>children</code>, который возвращает коллекцию, состоящую только из&nbsp;элементов.</p>
<p>Проверим, поддерживает ли&nbsp;браузер метод <code>children</code>?</p>
<pre><code class="javascript">var children = typeof document
                          .createElement('div')
                              .children != 'undefined';</code></pre>
<p>И&nbsp;напишем функцию поиска:</p>
<pre><code class="javascript">var child = children ? function(node) {
    return node.children;
} : function(node) {
    var list = node.childNodes,
    length = list.length,
    i = -1,
    array = [];
    while(++i &lt; length)
        if(list[i].nodeType == 1)
            array.push(list[i]);
    return array;
};</code></pre>
<p>Ну&nbsp;и&nbsp;конечно рассмотрим работу на&nbsp;примере:</p>
<p class="bold">XHTML</p>
<pre><code class="html">&lt;div id=&quot;test&quot;&gt;
    text node
    &lt;div&gt;First&lt;/div&gt;
    text node
    &lt;div&gt;Last&lt;/div&gt;
    text node
&lt;/div&gt;</code></pre>
<p class="bold">JavaScript</p>
<pre><code class="javascript">var node = document.getElementById('test');
var count = child(node).length;
alert(count); // → 2</code></pre>
<p>Все&nbsp;эти&nbsp;методы, но&nbsp;в&nbsp;более&nbsp;функциональном виде, используются в&nbsp;новых версиях <a href="http://www.js-core.ru/">JavaScript&nbsp;фреймворка&nbsp;js-core</a>. А&nbsp;так&nbsp;же,&nbsp;для&nbsp;поиска всех&nbsp;дочерних элементов по&nbsp;имени <abbr title="Cascading Style Sheets">CSS</abbr>-класса, атрибутам или&nbsp;просто по&nbsp;имени&nbsp;тега, когда&nbsp;это&nbsp;возможно, используется «<a href="http://www.w3.org/TR/selectors-api/" rel="external nofollow">Selectors&nbsp;API</a>», что&nbsp;позволяет добиться хороших результатов в&nbsp;тестах на&nbsp;производительность.</p>
<p>Кстати, Microsoft как&nbsp;всегда&nbsp;«радует», в&nbsp;Internet&nbsp;Explorer&nbsp;8&nbsp;<abbr title="Release Candidate 1">RC1</abbr> синтаксис методов <code>querySelector</code> и&nbsp;<code>querySelectorAll</code> ограничен версией&nbsp;<abbr title="Cascading Style Sheets Level 2">CSS2</abbr> <img src='http://www.codeisart.ru/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>Еще&nbsp;подготовил более&nbsp;симпатичную страничку с&nbsp;<a href="http://js-core.googlecode.com/svn/trunk/index.html">примерами</a> использования&nbsp;js-core, на&nbsp;которой можно&nbsp;посмотреть пошаговое выполнение некоторых операций.</p>
<p><b>В рамках акции</b> «<a title="Акция обмена постовыми" href="http://www.codeisart.ru/obmen-postovimi/">Обмен постовыми</a>»:</p>
<ul>
<li>Молодой блог об IT&nbsp;&mdash;&nbsp;<a href="http://ksm.kolo.ws/">kSM’s blog</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/js-core-fast-dom-element-traversing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Внутренняя поисковая оптимизация: ручное редактирование мета-тегов и тега заголовка страницы</title>
		<link>http://www.codeisart.ru/internal-search-engine-optimization-manual-editing-of-meta-tags-and-title-tag/</link>
		<comments>http://www.codeisart.ru/internal-search-engine-optimization-manual-editing-of-meta-tags-and-title-tag/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 08:35:44 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[SEO/SEM]]></category>
		<category><![CDATA[Внутренняя оптимизация сайта]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1264</guid>
		<description><![CDATA[Решил открыть серию статей на&#160;тему внутренней оптимизации сайта для поисковых систем. В&#160;них я&#160;буду рассказывать о&#160;техниках программирования и&#160;элементах проектирования веб-сайта, на&#160;которые стоит обратить внимание при разработке. Учитывая внутреннюю оптимизацию на&#160;этапе создания сайта, вы&#160;облегчите дальнейшую работу SEO-специалиста и&#160;возможно исключите дополнительные финансовые затраты! Итак, первая статья, вводная, из&#160;цикла &#171;Внутренняя оптимизация сайта&#187;, о&#160;необходимости предоставления администратору веб-ресурса возможности вручную редактировать [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/7qLKlhMT5k-bkJZcAz_AcENLL7M/0/da"><img src="http://feedads.g.doubleclick.net/~a/7qLKlhMT5k-bkJZcAz_AcENLL7M/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7qLKlhMT5k-bkJZcAz_AcENLL7M/1/da"><img src="http://feedads.g.doubleclick.net/~a/7qLKlhMT5k-bkJZcAz_AcENLL7M/1/di" border="0" ismap="true"></img></a></p><p><img src="http://www.codeisart.ru/wp-content/uploads/2009/02/seo-internal.png" alt="Иллюстрация к статьям из цикла Внутренняя поисковая оптимизация" title="Иллюстрация к статьям из цикла Внутренняя поисковая оптимизация" class="left" />Решил открыть серию статей на&nbsp;тему <strong class="normal">внутренней оптимизации сайта</strong> для поисковых систем. В&nbsp;них я&nbsp;буду рассказывать о&nbsp;техниках программирования и&nbsp;элементах проектирования веб-сайта, на&nbsp;которые стоит обратить внимание при разработке. Учитывая внутреннюю оптимизацию на&nbsp;этапе создания сайта, вы&nbsp;облегчите дальнейшую работу SEO-специалиста и&nbsp;возможно исключите дополнительные финансовые затраты!</p>
<p>Итак, первая статья, вводная, из&nbsp;цикла &laquo;<strong>Внутренняя оптимизация сайта</strong>&raquo;, о&nbsp;необходимости предоставления администратору веб-ресурса возможности вручную редактировать мета-теги и&nbsp;тег заголовка страниц. Статья больше рассчитана на&nbsp;web-разработчиков, чем SEO-специалистов.</p>
<p><span id="more-1264"></span></p>
<h3>Внутренняя оптимизация сайта&nbsp;&mdash;&nbsp;вводная</h3>
<p>Ниже коротко опишу назначение 2х&nbsp;тегов, которые используются поисковыми системами. Если вы&nbsp;знакомы с&nbsp;основами поисковой оптимизации, можете смело пропускать данное введение, я&nbsp;уверен, что информация, которую я&nbsp;в&nbsp;нем изложу, вам известна.</p>
<h4>Тег заголовка страницы &lt;title&gt;</h4>
<p>Тег <code class="html">&lt;title&gt;</code>, отображается поисковыми системами в&nbsp;выдаче как заголовок станицы.</p>
<pre><code class="html">&lt;title&gt;Карта Волгограда Интерактивный навигатор по городу Волгограду&lt;/title&gt;</code></pre>
<p>Является крайне важным тегом! В&nbsp;него необходимо поместить информацию, прочитав которую пользователь решит перейти на&nbsp;ваш сайт.</p>
<p>В&nbsp;<code class="html">&lt;title&gt;</code> нужно помещать текст, обогащенный ключевыми словами, так как поисковая система в&nbsp;дальнейшем будет учитывать его в&nbsp;алгоритмах ранжирования, как один из&nbsp;важнейших факторов, на&nbsp;основе которых будет определяться позиция страницы в&nbsp;поисковой выдачи.</p>
<p>Сложность заполнения тегов <code class="html">&lt;title&gt;</code> заключается в&nbsp;том, что необходимо составлять текст, дружественный как пользователям, так и&nbsp;поисковым системам. Поэтому просто наполнить его ключевыми словами не&nbsp;получится, текст будет нечитабельный и&nbsp;не&nbsp;привлекателен для пользователей, на&nbsp;вашу ссылку будут крайне редко кликать, даже если она будет на&nbsp;первых позициях в&nbsp;выдаче.</p>
<p>Главное не&nbsp;забывать, что мы&nbsp;работаем на&nbsp;увеличение целевой аудитории сайта, а&nbsp;воздействие на&nbsp;поисковую выдачу&nbsp;&mdash;&nbsp;средство достижения нашей цели!</p>
<p>Длину заголовка страницы рекомендую делать не&nbsp;более 7-ми слов.</p>
<h4>Мета тег description</h4>
<p>Следующий тег, заслуживающий внимания&nbsp;&mdash;&nbsp;мета тег description.</p>
<pre><code class="html">&lt;meta name=&quot;description&quot; content=&quot;VLG Navigator интернет-портал по городу Волгограду. Интерактивная Карта Волгограда, товары и услуги Волгограда.&quot; /&gt;</code></pre>
<p>Определяет содержимое каждой HTML-страницы. Первоначально данный тег использовался поисковыми системами в&nbsp;качестве сниппета (<i>текста под заголовком страницы в&nbsp;поисковой выдаче</i>). Правда на&nbsp;текущий момент сниппеты в&nbsp;основном всегда формируются интеллектуально&nbsp;&mdash;&nbsp;из&nbsp;текста страницы выбирается часть, наиболее релевантная запросу пользователя, она и&nbsp;будет являться сниппетом. Тем не&nbsp;менее, иногда замечаю, что сниппет для страницы был сформирован из&nbsp;текста, находящегося в&nbsp;мета теге description, посему он&nbsp;пока важен для нас.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/02/seo-tags-example.png" alt="Пример поисковой выдачи" title="Пример поисковой выдачи" /></p>
<blockquote><p><b>Важно!</b> Распространенная ошибка среди веб-мастеров&nbsp;&mdash;&nbsp;одинаковые HTML-заголови и&nbsp;описание для всех страниц сайта. Этого необходимо избегать! Возьмите за&nbsp;правило, для каждой из&nbsp;страниц прописывать уникальные HTML-заголовки и&nbsp;информацию для мета тега description!</p></blockquote>
<p>На&nbsp;этом <b>вводная часть окончена</b>.</p>
<h3>На&nbsp;что обратить внимание при разработке?</h3>
<p>Итак, вернемся к&nbsp;особенностям разработки веб-сайта. Представьте, вы&nbsp;создаете новостной сайт. Каждая новость будет иметь уникальный URL и&nbsp;название, которое отображается где-нибудь на&nbsp;странице списка новостей.</p>
<p>Так как каждая новость будет представлена отдельной страницей на&nbsp;сайте, то&nbsp;необходимо определиться, что будет содержать тег заголовка <code class="html">&lt;title&gt;</code> и&nbsp;мета тег description? В&nbsp;качестве HTML-заголовка страницы можно было&nbsp;бы взять название новости, но&nbsp;не&nbsp;всегда это практично, особенно если нет возможности добавить в&nbsp;название нужное количество ключевых слов, сохраняя естественность текста. Получается тупиковая ситуация, какой из&nbsp;нее можно найти выход?</p>
<p>Все очень просто, предоставьте администратору сайта возможность заполнять содержимое HTML-заголовка страницы <code class="html">&lt;title&gt;</code>, а&nbsp;так&nbsp;же мета-тега description при создании новости.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/02/seo-form-extend.png" alt="Пример дополнительных полей формы" title="Пример дополнительных полей формы" /></p>
<p>Да,&nbsp;в&nbsp;вашей форме добавиться 2&nbsp;дополнительных поля, а&nbsp;в&nbsp;базе данных 2&nbsp;столбца, но&nbsp;это значительно упростит дальнейшую работу SEO-специалисту по&nbsp;продвижению вашего сайта. Без дополнительных доработок сайта ему будет доступен интерфейс редактирования информации, важной для поисковых систем.</p>
<h4>Поля могут быть не&nbsp;обязательными для заполнения</h4>
<p>Можно сделать эти дополнительные поля в&nbsp;форме не&nbsp;обязательными для заполнения. В&nbsp;таком случае, если они были оставлены не&nbsp;заполненными, информация для HTML-заголовка страницы будет браться из&nbsp;наименования новости, которое является обязательным, а&nbsp;описание, например, формироваться из&nbsp;первых 200&nbsp;символов текста самой новости.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/02/seo-tags-block-scheme.png" alt="Блок-схема формирования содержимого тегов" title="Блок-схема формирования содержимого тегов" /></p>
<h3>Заключение</h3>
<p>Порой достаточно сложно переделать уже функционирующий в&nbsp;сети проект согласно указаниям SEO-специалиста. Поэтому, прежде чем приступать к&nbsp;разработке, проконсультируйтесь с&nbsp;SEO-специалистом на&nbsp;тему <strong class="normal">внутренней оптимизации сайта</strong>. Следуя его указаниям, вы&nbsp;сэкономите свое драгоценное время и&nbsp;время программистов, которые с&nbsp;вами работают.</p>
<p><a href="http://wordpress.org/extend/plugins/all-in-one-seo-pack/" title="Wordpress плагин">All in&nbsp;One SEO Pack</a>&nbsp;&mdash;&nbsp;Wordpress плагин, предоставляющий возможность вручную редактировать мета-теги и&nbsp;тег заголовка.</p>
<p><b>Интересно почитать:</b></p>
<ul>
<li>Ответы на вопросы новичков от rotorweb.ru: <a href="http://rotorweb.ru/xhtmlcss-verstka/kak-vstavit-uglovoj-flash-banner-na-sajt.html" title="Как вставить угловой flash-баннер на сайт">Как вставить угловой flash-баннер на сайт</a>.</li>
<li>Веб-аналитика: <a href="http://www.seo-study.ru/seo-software/veb-analitika-instrumentyi-otslezhivaniya-povedeniya-polzovateley/" title="Инструменты отслеживания поведения пользователей">инструменты отслеживания поведения пользователей</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/internal-search-engine-optimization-manual-editing-of-meta-tags-and-title-tag/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP: Получение последнего сообщения из Twitter-блога</title>
		<link>http://www.codeisart.ru/php-extracting-the-last-twitter-record/</link>
		<comments>http://www.codeisart.ru/php-extracting-the-last-twitter-record/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 17:45:39 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1244</guid>
		<description><![CDATA[Написал небольшой скрипт, который получает последнее сообщение из&#160;Twitter-блога указанного пользователя. Имеет функцию кеширования&#160;&#8212;&#160;сохраняет сообщение в&#160;текстовом файле, что позволяет избежать необходимости каждый раз загружать и&#160;обрабатывать RSS-ленту микроблога. Через определенный промежуток времени кеш обновляется из&#160;web. Как работает Писал данный скрипт для одного из&#160;разрабатываемых проектов. Принцип прост: грузится RSS-лента нужного вам пользователя, выбирается последняя запись и,&#160;при необходимости, кешируется [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/ZZ2i1ECz7oyKh7DhClWQq2ZUvXw/0/da"><img src="http://feedads.g.doubleclick.net/~a/ZZ2i1ECz7oyKh7DhClWQq2ZUvXw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ZZ2i1ECz7oyKh7DhClWQq2ZUvXw/1/da"><img src="http://feedads.g.doubleclick.net/~a/ZZ2i1ECz7oyKh7DhClWQq2ZUvXw/1/di" border="0" ismap="true"></img></a></p><p>Написал небольшой скрипт, который получает последнее сообщение из&nbsp;Twitter-блога указанного пользователя. Имеет функцию кеширования&nbsp;&mdash;&nbsp;сохраняет сообщение в&nbsp;текстовом файле, что позволяет избежать необходимости каждый раз загружать и&nbsp;обрабатывать RSS-ленту микроблога. Через определенный промежуток времени кеш обновляется из&nbsp;web.</p>
<p><span id="more-1244"></span></p>
<h3>Как работает</h3>
<p>Писал данный скрипт для одного из&nbsp;разрабатываемых проектов. Принцип прост: грузится RSS-лента нужного вам пользователя, выбирается последняя запись и,&nbsp;при необходимости, кешируется в&nbsp;текстовом файле. XML обрабатывается через <code class="php">DOMDocument</code>.</p>
<p>Атрибут <code class="php">public $cache_file</code> определяет расположение файла кеша.</p>
<p>Атрибут <code class="php">public $cache_period</code> отвечает за&nbsp;частоту обновления кеша. Указывается в&nbsp;секундах (3600&nbsp;соответствует 1&nbsp;часу). Если значение равно 0,&nbsp;кеш игнорируется.</p>
<p>Все остальное, думаю, понятно. Если есть вопросы, задавайте.</p>
<p>Кстати возник вопрос, если интегрировать этот скрипт в&nbsp;какой-либо сайт, допустим в&nbsp;блог, увеличит&nbsp;ли это частоту посещения сайта роботом поисковиков? Ведь с&nbsp;каждым новым обновлением в&nbsp;твиттере будет изменяться частичка контент почти на&nbsp;всех страницах сайта.</p>
<h3>Скомпонованный код</h3>
<pre><code class="php">class GetLastTwitt{

    public $cache_file = './last_twitt.txt';
    public $cache_period = 3600;

    private $username;
    private $dom;

    function __construct($username){
        $this->username = $username;
    }

    private function setEnv(){
        $feed_url = 'http://twitter.com/statuses/user_timeline/'.$this->username.'.rss';

        $this->dom = new DOMDocument();
        $this->dom->load($feed_url);
    }

    private function returnLastTwitt (){
        if&nbsp;($this->cache_period != 0)
            if&nbsp;(file_exists($this->cache_file))
                if&nbsp;($this->cache_period > $this->getCacheDateDiff())
                    return $this->getLastFromCache();

        return $this->getLastFromWeb($this->username);
    }

    private function getLastFromWeb($username){
        $this->setEnv();
        $rows = $this->dom->getElementsByTagName('item');
        $last_twitt = $rows->item(0)->getElementsByTagName('title')->item(0)->nodeValue;
        $this->cache_twitt($last_twitt);
        return $last_twitt;
    }

    private function cache_twitt($msg){
        $handle = fopen($this->cache_file,'w');
        fwrite($handle, $msg);
        fclose($handle);
    }

    private function getCacheDateDiff(){
        return date('U')&nbsp;&#8212; filemtime($this->cache_file);
    }

    private function getLastFromCache(){
        $handle = fopen($this->cache_file,'r');
        $cached_twitt = fread($handle, filesize($this->cache_file));
        fclose($handle);
        return $cached_twitt;
    }

    final function getLast(){
        return $this->returnLastTwitt();
    }

}

$a = new GetLastTwitt('skaizer');
echo $a-&gt;getLast();</code></pre>
<p><b>Скомпонованный готовый скрипт можно</b> <a class="attach zip" href="http://www.codeisart.ru/files/last_twitt.zip">скачать здесь</a>.</p>
<p><img title="Twitter icon" alt="Twitter icon" src="http://www.codeisart.ru/wp-content/uploads/2009/01/twitter-icon.png" class="left"/>У вас есть Twitter аккаунт?<br />
Если да, можете подписаться на мой <a title="Аккаунт Skaizer на Twitter" rel="nofollow" href="http://twitter.com/skaizer" style="text-decoration: line-through;">микроблог</a>, а я, в свою очередь, подпишусь на ваш.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/php-extracting-the-last-twitter-record/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Как использовать Twitter в целях рекламы?</title>
		<link>http://www.codeisart.ru/how-to-use-twitter-for-marketing-purposes/</link>
		<comments>http://www.codeisart.ru/how-to-use-twitter-for-marketing-purposes/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 10:58:40 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[SEO/SEM]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1226</guid>
		<description><![CDATA[Сегодня, в&#160;Интернет необычайно популярным сервисом стал Twitter&#160;&#8212;&#160;микроблоггинг. Что это такое? Зарегистрировавшись в&#160;Twitter, вы&#160;можете оставлять сообщения длиною не&#160;более 140&#160;символов. Но&#160;встает вопрос, кому оно надо? Что мешает завести себе обычный блог на&#160;бесплатном хостинге и&#160;писать туда полноценные посты? Давайте разберемся! Представим ситуацию, вы&#160;занимаетесь веб-серфингом, и&#160;вдруг наткнулись на&#160;крайне интересный материал. Вы&#160;хотите рассказать о&#160;нем своим друзьям/читателям, но&#160;писать в&#160;автономный блог статью [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/bfmKvOoGmJyAYHodmmCg6HuRtmY/0/da"><img src="http://feedads.g.doubleclick.net/~a/bfmKvOoGmJyAYHodmmCg6HuRtmY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bfmKvOoGmJyAYHodmmCg6HuRtmY/1/da"><img src="http://feedads.g.doubleclick.net/~a/bfmKvOoGmJyAYHodmmCg6HuRtmY/1/di" border="0" ismap="true"></img></a></p><p><a title="Twitter-блог имени Skaizer" href="http://twitter.com/skaizer"><img title="Twitter icon" alt="Twitter icon" src="http://www.codeisart.ru/wp-content/uploads/2009/02/twitter_icon.png" class="left" /></a>Сегодня, в&nbsp;Интернет необычайно популярным сервисом стал <a title="Twitter микроблоги" href="http://twitter.com/">Twitter</a>&nbsp;&mdash;&nbsp;микроблоггинг. Что это такое?</p>
<p>Зарегистрировавшись в&nbsp;Twitter, вы&nbsp;можете оставлять сообщения длиною не&nbsp;более 140&nbsp;символов. Но&nbsp;встает вопрос, кому оно надо? Что мешает завести себе обычный блог на&nbsp;бесплатном хостинге и&nbsp;писать туда полноценные посты? Давайте разберемся!</p>
<p><span id="more-1226"></span></p>
<p>Представим ситуацию, вы&nbsp;занимаетесь веб-серфингом, и&nbsp;вдруг наткнулись на&nbsp;крайне интересный материал. Вы&nbsp;хотите рассказать о&nbsp;нем своим друзьям/читателям, но&nbsp;писать в&nbsp;автономный блог статью с&nbsp;кратким описанием ссылки&nbsp;&mdash;&nbsp;как-то не&nbsp;серьезно. Можно собрать несколько подобных ссылок и&nbsp;выложить полноценную подборку, но&nbsp;это потребует дополнительных усилий и&nbsp;времени, а&nbsp;вам нужно, чтобы друзья/читатели узнали о&nbsp;материале прямо сейчас. Вот тут вам и&nbsp;поможет Twitter! Вы&nbsp;выкладываете мини-пост у&nbsp;себя в&nbsp;микроблоге со&nbsp;ссылкой на&nbsp;материал, и&nbsp;он&nbsp;публикуется автоматически на&nbsp;домашних страничках всех аккаунтах, которые следят за&nbsp;изменениями вашего микроблога. Достаточно удобно! Конечно, это далеко не&nbsp;главная его &laquo;фишка&raquo;, уверен, что каждый находит в&nbsp;нем свою изюминку.</p>
<p>Twitter имеет социальную направленность&nbsp;&mdash;&nbsp;работает с&nbsp;людьми, дает возможность им&nbsp;общаться друг с&nbsp;другом, делиться полезной информацией, так почему&nbsp;бы не&nbsp;воспользоваться им&nbsp;в&nbsp;целях рекламы?</p>
<p>Многие пользователи имеют у&nbsp;себя в&nbsp;follower&#8217;ах (читателях) более 100&nbsp;человек, это значит, что каждый опубликованный пост прочитают более 100&nbsp;раз. А&nbsp;если в&nbsp;посте размещена ссылка или рекламная информация? Скорее всего, большинство пользователей перейдет по&nbsp;ссылке, и&nbsp;рекламодатель получит на&nbsp;свой сайт дополнительный трафик, возможно, некоторые из&nbsp;перешедших станут постоянными посетителями.</p>
<h3>Как использовать Twitter в&nbsp;рекламных целях?</h3>
<p>Как показала практика, Twitter отличная площадка для рекламы. Иногда можно получить достаточно хороший прирост посетителей, в&nbsp;том числе постоянных. Все, что от&nbsp;вас требуется создать аккаунт с&nbsp;достаточным количеством читателей.</p>
<p>Но&nbsp;конечно, не&nbsp;все так просто, для начала необходимо сформировать группу читателей, и&nbsp;крайне желательно заинтересованных в&nbsp;ваших услугах.</p>
<h3>Как увеличить количество follower&#8217;ов?</h3>
<p>Заинтересуйте полезным материалом посетителей вашего микроблога! Публикуйте интересные ссылки, и&nbsp;очень желательно на&nbsp;сайты определенной тематики. Сделайте ваш микроблог тематическим! Это необходимо, чтобы получить максимальный процент конверсии.</p>
<p>PR-менеджер компании по&nbsp;продвижению сайтов с&nbsp;удовольствием закажет размещение рекламных ссылок в&nbsp;вашем микроблоге, если будет видеть тематичность вашего Twitter-аккаунта!</p>
<p>Если вы&nbsp;имеете собственный сайт, то&nbsp;можете в&nbsp;информации о&nbsp;себе разместить ссылку на&nbsp;ваш Twitter-аккаунт.</p>
<p>Больше комментируйте посты в&nbsp;сторонних блогах, желательно определенной тематики. В&nbsp;качестве ссылки на&nbsp;ваш сайт ставьте ссылку на&nbsp;Twitter-аккаунт.</p>
<p>Попросите друзей, которые зарегистрированы в&nbsp;Twitter, чтобы они стали вашими follower&#8217;ами, имеется большая вероятность, что их&nbsp;друзья увидят ваши посты так&nbsp;же.</p>
<p><img title="Twitter icon" alt="Twitter icon" src="http://www.codeisart.ru/wp-content/uploads/2009/01/twitter-icon.png" class="left"/>У вас есть Twitter аккаунт? Если да, можете подписаться на мой <a title="Аккаунт Skaizer на Twitter" rel="nofollow" href="http://twitter.com/skaizer" style="text-decoration: line-through;">микроблог</a>, а я, в свою очередь, подпишусь на ваш. С каждым днем Twitter нравится все больше и больше!</p>
<p><b>Интересно почитать:</b></p>
<ul>
<li>Вы дизайнер, работаете в Photoshop? Прочитайте статью о том, <a href="http://rotorweb.ru/adobe-photoshop/avtomatizaciya-rutinnoj-raboty-v-photoshop.html" title="Как автоматизировать рутинную работу в Photoshop">как автоматизировать рутинную работу в Photoshop</a>.</li>
<li>Используете Twitter? TwitterFox&nbsp;&mdash;&nbsp;<a href="http://tods-blog.com.ua/software/twitterfox/" title="Плагин для удобной работы с твиттером">Firefox плагин для удобной работы с твиттером</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/how-to-use-twitter-for-marketing-purposes/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Как изменилось SEO за последние 2 года?</title>
		<link>http://www.codeisart.ru/how-seo-last-2-years/</link>
		<comments>http://www.codeisart.ru/how-seo-last-2-years/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 22:54:55 +0000</pubDate>
		<dc:creator>VitaliyRodnenko</dc:creator>
				<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[Оффтопик]]></category>
		<category><![CDATA[SEO/SEM]]></category>
		<category><![CDATA[Различные мысли]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1199</guid>
		<description><![CDATA[На&#160;одном из&#160;зарубежных форумов был поднят этот вопрос. Мнения разделились. Одни считают, что стратегии продвижения сайта всегда меняются. Необходимо постоянно подстраивать свой сайт, чтобы получать максимальную отдачу от&#160;SEO. Другие уверены, что основные принципы SEO остаются неизменными в&#160;течении последних 5&#160;лет. У меня несколько иная точка зрения. Лично мое мнение, что SEO перешло на&#160;более качественный уровень. Да,&#160;сегодня, как [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/LEHsGnXD6Z9cBH4j5HgVPuTAgFA/0/da"><img src="http://feedads.g.doubleclick.net/~a/LEHsGnXD6Z9cBH4j5HgVPuTAgFA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/LEHsGnXD6Z9cBH4j5HgVPuTAgFA/1/da"><img src="http://feedads.g.doubleclick.net/~a/LEHsGnXD6Z9cBH4j5HgVPuTAgFA/1/di" border="0" ismap="true"></img></a></p><p><img src="http://www.codeisart.ru/wp-content/uploads/2009/02/seo-time-machine.png" class="left" title="Машина времени SEO" alt="Машина времени SEO" />На&nbsp;одном из&nbsp;зарубежных форумов был поднят этот вопрос. Мнения разделились.</p>
<p>Одни считают, что стратегии продвижения сайта всегда меняются. Необходимо постоянно подстраивать свой сайт, чтобы получать максимальную отдачу от&nbsp;SEO. Другие уверены, что основные принципы SEO остаются неизменными в&nbsp;течении последних 5&nbsp;лет.</p>
<p>У меня несколько иная точка зрения.</p>
<p><span id="more-1199"></span></p>
<p>Лично мое мнение, что SEO перешло на&nbsp;более качественный уровень. Да,&nbsp;сегодня, как и&nbsp;раньше необходим качественный контент на&nbsp;сайте, валидный HTML код, жирные ссылки, внутренняя перелинковка и&nbsp;так далее. Но&nbsp;все-таки, чем отличается SEO сегодня от&nbsp;SEO, которое было 2&nbsp;года назад?</p>
<p>Порывшись в&nbsp;голове, я&nbsp;могу выделить следующее:</p>
<ul>
<li>Сегодня в&nbsp;большинстве случаев &laquo;голого&raquo; SEO не&nbsp;достаточно. Да,&nbsp;вы&nbsp;можете вывести сайт на&nbsp;первые позиции поисковика, но&nbsp;как заставить людей покупать? Помимо вывода в&nbsp;ТОП необходимо грамотно разработать целевые страницы, разместить на&nbsp;них контент, который подвигнет посетителя превратиться в&nbsp;вашего покупателя. Клиенты SEO-специалистов все больше и&nbsp;больше начинают понимать, что тупо вывести в&nbsp;ТОП сайт в&nbsp;большинстве случаев недостаточно. Я&nbsp;не&nbsp;говорю, что 2&nbsp;года назад это было не&nbsp;актуально, просто уделялось гораздо меньше внимания.</li>
<li>
<p>SEO теряет самостоятельность. Лично я&nbsp;рассматриваю SEO лишь как часть кампании по&nbsp;продвижению бизнеса в&nbsp;Интернет. Быстрых результатов можно достичь, работая с&nbsp;системами контекстной рекламы. Наши заказчики начинают понимать, что выделяя бюджет в&nbsp;контекстную рекламу можно моментально добиться положительного результата. В&nbsp;этом, на&nbsp;мой взгляд, заслуга Яндекса, который проводит много открытых семинаров, посвященных контекстной рекламе.</p>
<p>Так&nbsp;же качественных посетителей на&nbsp;сайт можно привлечь через рекламу в&nbsp;социальных сетях, которые с&nbsp;каждым днем становятся все популярнее!</p>
<p>Я&nbsp;хочу сказать, что помимо SEO существует масса эффективных методов продвижения в&nbsp;Интернет, и&nbsp;SEO является неотъемлемой частью этой кампании.</p>
</li>
<li>SEO&#8217;шники стали меньше внимания уделять мета-тегам, хотя иногда встречаются &laquo;оптимизаторы&raquo;, ломающие голову, что&nbsp;же вписать в&nbsp;мета тег keywords,полагая, что это принесет им&nbsp;лишние позиции в&nbsp;поисковике.</li>
<li>Google PageRank стал не&nbsp;основной целью. Раньше показателем авторитетности сайта уверено считали PR.&nbsp;И&nbsp;была существовало твердое мнение, что чем выше PR,&nbsp;тем выше сайт будет в&nbsp;выдаче. На&nbsp;сегодняшний день практически всем понятно, что тот PR,&nbsp;который показывает нам Google Toolbar практически никак не&nbsp;влияет на&nbsp;выдачу поисковика.</li>
<li>Больше внимания стали уделять качеству ссылок, а&nbsp;не&nbsp;количеству. Сегодня более важно получить несколько качественных, &laquo;жирных&raquo; ссылок, чем сотни ссылок с&nbsp;гавносайтов.</li>
<li>Каталоги сайтов не&nbsp;действуют, а&nbsp;если действуют, то&nbsp;минимально. Регистрация в&nbsp;VIP базах из&nbsp;15000&nbsp;каталогов сыграет минимальную роль. Чтобы не&nbsp;говорили, но&nbsp;по&nbsp;своему опыту знаю, что от&nbsp;регистрации в&nbsp;каталогах можно получить минимальный эффект. Рекомендую прогонять каталогами НЧ-запросы.</li>
<li>Поисковики ведут активную борьбу с&nbsp;дублями. Вообще меня крайне интересна эта тема, я&nbsp;изучил много англоязычных статей посвященных алгоритмам поиска нечетких дубликатов текста и&nbsp;их&nbsp;актуальность в&nbsp;поисковых системах. Поисковики стараются не&nbsp;учитывать в&nbsp;алгоритмах ранжирования ссылки со&nbsp;страниц, являющимися дублями или почти дублями какой-либо другой страницы. Поэтому написав статью опубликовав ее&nbsp;на&nbsp;100&nbsp;площадках вы&nbsp;впустую выкинете деньги. Но&nbsp;правда существует способ &laquo;обмануть&raquo; поисковик с&nbsp;помощью размножения статей, <a href="http://forum.searchengines.ru/showthread.php?t=258514" rel="nofollow">заказать данную услугу</a> можете у&nbsp;нас.</li>
</ul>
<p>Таковы мои предположения. Скорее всего, я&nbsp;многого не&nbsp;учел, поэтому не&nbsp;стесняйтесь высказывать ваши предположения!</p>
<blockquote><p>У&nbsp;вас есть Twitter аккаунт? Если да,&nbsp;можете стать <a href="http://twitter.com/skaizer" rel="nofollow" title="Аккаунт Skaizer на Twitter">моими follower&#8217;ами</a>, а&nbsp;я,&nbsp;в&nbsp;свою очередь, вашим.</p></blockquote>
<p><b>В рамках акции</b> «<a title="Акция обмена постовыми" href="http://www.codeisart.ru/obmen-postovimi/">Обмен постовыми</a>»:</p>
<ul>
<li>Участник конкурса Линкомаулия от Даниила Маула: <a href="http://world-blogs.ru/linkomaulia/">Линкомаулия Anfi</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/how-seo-last-2-years/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.codeisart.ru @ 2012-05-16 23:43:57 -->

