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

<channel>
	<title>Блог Виталия Степаненка</title>
	<atom:link href="http://www.nayjest.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://www.nayjest.ru</link>
	<description>Веб-разработка за чашечкой кофе</description>
	<lastBuildDate>Wed, 11 Aug 2010 09:54:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Требования к html-верстке</title>
		<link>http://www.nayjest.ru/verstka/html-requirements#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/verstka/html-requirements#comments</comments>
		<pubDate>Tue, 10 Aug 2010 14:05:02 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[Верстка веб-страниц]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=292</guid>
		<description><![CDATA[1. Верстка, аутсорсинг и технические задания
 Верстка — относительно независимый этап веб-разработки и, к примеру, в маленьких веб-студиях часто — это первый кандидат на аутсорсинг в условиях ограниченных трудовых ресурсов.
Так сложилось, что мне часто приходилось отдавать эту работу субподрядчикам и, несмотря на предполагаемую однозначность результата, иногда верстальщики меня очень удивляли. Причем чаще — в негативном [...]]]></description>
			<content:encoded><![CDATA[<h2>1. Верстка, аутсорсинг и технические задания</h2>
<p><img style="float: left;" title="Требования и рекомендации, html верстка сайтов" src="http://nayjest.ru/userfiles/verstka-recomendations/html_100.jpg" alt="Требования и рекомендации, html верстка сайтов" /> Верстка — относительно независимый этап веб-разработки и, к примеру, в маленьких веб-студиях часто — это первый кандидат на аутсорсинг в условиях ограниченных трудовых ресурсов.<br />
Так сложилось, что мне часто приходилось отдавать эту работу субподрядчикам и, несмотря на предполагаемую однозначность результата, иногда верстальщики меня очень удивляли. Причем чаще — в негативном смысле.</p>
<p><img style="float: right; margin: 5px;" title="Картинка для устрашения html-верстальщиков" src="http://nayjest.ru/userfiles/verstka-recomendations/head_end.jpg" alt="Картинка для устрашения html-верстальщиков" /> Чтобы сэкономить трудовые ресурсы штатных верстальщиков, недостаточно просто переложить эту работу на плечи первого приглянувшегося фрилансера. Все намного проще, если вы постоянно отдаете работу на аутсорсинг одним и тем же исполнителям — в процессе длительного сотрудничества всегда складывается какой-то негласный свод стандартов и требований, выполнение которых входит в привычку. Но если вы работаете с человеком впервые — самое хорошее портфолио и рекомендации не гарантируют получения нужного  результата и более того — даже не предполагают, что исполнитель вообще вас правильно поймет. Потому  нужны детальные технические задания по верстке.</p>
<p>И этот момент игнорируется. Часто это происходит из-за предположения, что трудозатраты на написание детального ТЗ в сумме со стоимостью аутсорсинга не окупаются сэкономленным временем штатного верстальщика. В конце концов, верстка — это ведь не так уж сложно — думает рядовой project менеджер. И, как правило, это действительно прокатывает, *хвала человеческому интеллекту*, профессиональные верстальщики в большинстве своем ограничивают буйство экспериментаторского духа и заранее знают, какие технические решения в верстке могут вызвать у заказчика геморрой не столь адский, чтобы забанить верстальщика, но все же исключающий радость и восхищение прекрасным html-макетом.</p>
<p>Тем не менее, вероятность факапов, как показывает практика, не столь мала, чтобы этим можно было пренебречь.<span id="more-292"></span></p>
<p>А основное заблуждение здесь в том, что детальное ТЗ — это сложно и трудоемко. Какие-то специфические требования к макету в любом случае приходится описывать, а вот на общие требования и рекомендации, как правило, забивают.</p>
<h2>2. О, велика моя скорбь!</h2>
<p>Я недавно получил макет, который менеджеры отдавали на аутсорсинг и просто не знал, смеяться мне или плакать. Если бы не мне предстояло интегрировать этот макет в систему шаблонов CMS, я бы наверно все-таки смеялся.</p>
<p><img style="float: right; margin: 5px;" title="Требования и рекомендации, html верстка сайтов" src="http://nayjest.ru/userfiles/verstka-recomendations/house_facepalm.jpg" alt="Требования и рекомендации, html верстка сайтов" />Табличная верстка и стили, не вынесенные в CSS файл и стандартный дримвиверовский скрипт для подсветки кнопок даже не воспринимаются как недостатки после того ада, который я увидел. Все поля ввода были вставлены внутрь тегов label, засунутых в отдельные формы, причем при попытках как-то привести это в человеческий вид, вся верстка разваливалась. CSS классы имели кириллические названия, причем не осмысленные, а вида «.стиль1, .стиль2». Большинство элементов форм стилизировались каким-то мало известным и до ужаса кривым скриптом на jQuery, некоторые элементы имели одинаковые ID и между ними был JS код, оперирующий как раз этими элементами и получающий их по ID, и верх маразма — это применение в конце документа метода jQuery.сss чтобы задать стили, которые ну совсем ничто не мешало просто прописать в CSS файл. А еще хедер сайта вместе с кучей ссылок (шрифтом Tahoma и без сглаживания) был сделан одной картинкой, на которую наложены элементы MAP и AREA. Пожалуй не буду больше травмировать вашу психику описанием фейлов в этом замечательном макете, т. к. было их там еще бессчетное количество.</p>
<p>В общем, поверьте, товарищи, это был пиздец, который к тому же подкрался практически перед самым дедлайном.</p>
<p>Происшествия такого вот характера побудили меня опубликовать список требований и рекомендаций, которые будут полезны как людям, отдающим макеты на html-верстку, так и собственно верстальщикам.</p>
<p>Вы можете переработать эти рекомендации и  дополнить ними свое типовое ТЗ на верстку. Многие вещи из перечисленных вполне очевидны, но вы можете извлечь profit из того, что все они собраны в одном месте. Некоторые пункты (к примеру требования к поддержке браузерами или используемым скриптам) для разных контор специфичны, но я не буду далее писать расплывчатых фраз, чтобы этот списочек можно было легко скопипастить и заточить под свою специфику работы.</p>
<h2>3. Требования и рекомендации</h2>
<p><strong>1</strong>.	Кроссбраузерность<br />
Сайт должен нормально работать в  IE6-8, FF3+, Opera9+, Safari4+, Chrome4+</p>
<p><strong>2</strong>.	Всегда описывайте цвет фона для body даже если он белый.</p>
<p><strong>3</strong>.	Если используете CSS хаки, комментируйте, что это и для какого браузера, а лучше используйте <a href="http://rafael.adm.br/css_browser_selector">css_browser_selector.js</a>. Заботьтесь о верстальщиках, которым придется работать с этим макетом после вас.</p>
<p><strong>4</strong>.	Названия классов и id должны по смыслу соответствовать применению<br />
например, header, menu, footer, news</p>
<p><strong>5</strong>.	Просьба разделять основные html блоки комментариями. Примерно так:<br />
&lt;!&#8211;—BEGIN FOOTER &#8211;&gt;<br />
&lt;!&#8211;—END FOOTER &#8211;&gt;</p>
<p>Это нужно для создания из сверстанного html макета шаблонов для CMS, после чего комментарии будут удаляться.</p>
<p><strong>6</strong>.	Не пренебрегать возможностью использовать GIF/PNG с 8-битным альфаканалом вместо PNG-24, где это возможно.</p>
<p><strong>7</strong>.	Все что можно сделать без Javascript, делать без него.</p>
<p><strong>8</strong>.	Если Javascript кода много — нужно его выносить в отдельный файл. Обработчики событий тоже лучше отделить и объявлять в отдельном файле.</p>
<p><strong>9</strong>.	Если это еще не оговорено с заказчиком, предварительно оговорить, какие JavaScript библиотеки вы планируете использовать при верстке макета, чтобы потом не оказалось, что при верстке использовался, к примеру, PrototypeJS, а заказчик планирует в обязательном порядке внедрять на сайт jQuery.</p>
<p><strong>10</strong>.	Для резиновых макетов обязательно должна быть задана минимальная и максимальная ширина.</p>
<p><strong>11</strong>.	Если в Т.З. не сказано другое, макет обязательно должен помещаться без горизонтальных скроллбаров в развернутое на весь экран окно браузера при горизонтальной составляющей разрешения экрана 1024px, а если позволяет размер макета, то и 800px.</p>
<p><strong>12</strong>.	В папке с изображениями не должно быть картинок, не использующихся в верстке. Если что-то исключили из верстки или переделали — не забывайте удалять уже ненужные картинки.</p>
<p><strong>13</strong>.	Для всех элементов, которые могут содержать текст различной длины, который должен быть вписан в одну строку (например, для кнопок или заголовков, если в дизайне не предусмотрено, что они могут занимать больше одной строки), обязательно  задавайте CSS свойство white-space:nowrap.</p>
<p><strong>14</strong>.	CSS файл должен быть разбит с помощью строк с комментариями на блоки по функциональному назначению, например:</p>
<blockquote><p>/* ___________1. Сброс CSS____________________*/<br />
/* ___________2. Типовые элементы____________*/<br />
/* _______________2.1. Залоговки______________*/<br />
/* _______________2.2. Ссылки________________*/<br />
/* _______________2.3. Элементы форм_________*/<br />
/*___________3. HEADER (Шапка сайта) __________*/<br />
/*___________4. FOOTER (Подвал )_______________*/<br />
/*___________5. SIDEBAR (Справа)_______________*/</p></blockquote>
<p>Как именно структурировть стили — вопрос немного холиварный, но главное — как-то это делать.</p>
<p><strong>15</strong>.	Если сдача верстки производится более чем одним этапом (например, верстальщик отправляет страницы по одной, или если ему возвращаются на доработку уже  сверстанные страницы) и вы не используете систему контроля версий для верстки, исполнитель  должен в обязательном порядке прикрепить файл с описанием изменений в макете примерно такого содержания:</p>
<blockquote>
<ul>
<li><span style="background-color: #ffffff;">Добавил новые картинки в папку img,</span></li>
<li><span style="background-color: #ffffff;">Картинки btnHome.jpg и btnFeedback.jpg уже не нужны, можно удалять</span></li>
<li><span style="background-color: #ffffff;">Изменил html-код в секции  файла anketa.html</span></li>
<li><span style="background-color: #ffffff;">Добавил в конец файла main.css новые стили (начиная с .form_row и ниже).</span></li>
</ul>
</blockquote>
<p><strong>16</strong>.	Оговорить, в какой кодировке должен быть html-макет. CSS и JS файлы должны быть в той же кодировке, что и макет, иначе вероятность долгой и утомительной охоты на баги критически возрастает.</p>
<p><strong>17</strong>.	Если в макете присутствует JS, изменяющий DOM — внимательно следить, чтобы все корректно работало в Опере, т. к. этот замечательный браузер при нажатии на кнопочку назад страницу не перезагружает, а отдает закешированный документ, причем очень важный момент: документ не просто закешированный, а еще и с учетом всех модификаций DOM, которые были выполнены с помощью JS</p>
<p><strong>18</strong>.	Не забывайте прописывать cursor:pointer для кнопок, сделанных не с помощью input. Если вы не знаете, будет на эту кнопку повешен обработчик событий с помощью JS или это будет ссылкой, лучше в любом случае использовать тег &lt;a&gt;.</p>
<p><strong>19</strong>.	Если вы делаете обработку событий при нажатии на ссылки, следите  за тем, чтобы обработчики событий возвращали false, или же используйте href=&#8217;javascript:void(0)&#8217; вместо популярного href=&#8217;#', чтобы страница не скроллилась вверх.</p>
<p><strong>20</strong>.	Верстайте формы правильно: метки полей должны находиться в тегах label, имеющих правильно заполненный атрибут for. Предусматривайте при верстке форм элементы для вывода ошибок валидации и стили для неправильно заполненных полей. Если  это не предусмотрено в т.з. и дизайне, обязательно обсудите это с заказчиком.</p>
<p><strong>21</strong>.	Если в макете используются нестандартные шрифты, обязательно оговорите, можно ли элементы с нестандартным шрифтом делать картинками, если нельзя — обсудите, с помощью какой технологии будет реализовано их отображение (sIfr, Cufon, etc.)</p>
<p><strong>22</strong>.	Если не оговорено обратное для частных случаев, все блоки, высоту которых ничего в дизайне не мешает сделать динамической, должны иметь именно динамическую (т. е. зависимую от содержания) высоту, а иногда, чтобы ничего не могло потенциально поломать дизайн, нужно задавать и минимальную высоту. Если хотите сделать блок фиксированной высоты — сначала спросите у заказчика.</p>
<p><strong>23</strong>.	В макетах, где высота страницы зависит от контента (а таких, как правило, большинство), предусматривайте, чтобы футер был прибит к низу браузера при отсутствии/малом количестве контента, если не оговорено обратное.</p>
<p><strong>24</strong>.	Если макет не проходит 100%-ную html-валидацию, постарайтесь по крайней мере делать так, чтобы использование невалидного кода было оправданно. Не стоит факапить валидность  верстки только потому, что «мне так нравится» или «так получается короче»</p>
<p>Надеюсь, этот списочек будет вам полезен. Если есть конструктивные мысли, предлагайте в комментариях, чем его можно дополнить.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/verstka/html-requirements/feed</wfw:commentRss>
		<slash:comments>90</slash:comments>
		</item>
		<item>
		<title>Украинский форум интернет-деятелей (iForum), отчет</title>
		<link>http://www.nayjest.ru/it-events/iforum-report#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/it-events/iforum-report#comments</comments>
		<pubDate>Fri, 02 Apr 2010 19:30:06 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[it-events]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=272</guid>
		<description><![CDATA[
Вчера в Киеве прошел Украинский форум интернет-деятелей &#8212; достаточно крупное отраслевое IT-мероприятие, точнее &#8212; внезапно достаточно крупное (я был удивлен).
Дело в том, что до того момента, как меня лично туда пригласили, я вообще думал, что это &#8212; превоапрельская шутка.
А собралось по неофициальным данным &#8212; около 3000 человек, что очень даже много для Киева и Украины [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.nayjest.ru/userfiles/iforum/report.jpg" alt="" align="left" style="border:none" border="0" /><br />
Вчера в Киеве прошел <a href="http://iforum.com.ua"><strong>Украинский форум интернет-деятелей</strong></a> &#8212; достаточно крупное отраслевое IT-мероприятие, точнее &#8212; внезапно достаточно крупное (я был удивлен).<br />
Дело в том, что до того момента, как меня лично туда пригласили, я вообще думал, что это &#8212; превоапрельская шутка.<br />
А собралось по неофициальным данным &#8212; около 3000 человек, что очень даже много для Киева и Украины (сравнивая с аудиторией других IT-конференций и встреч).<br />
Впрочем, цены очень демократичны, за что спасибо организаторам, помещение громадное, а среди докладчиков есть легендарные личности всея рунета.<br />
Мероприятие это проводится уже второй раз, первый раз (в прошлом году), форум интернет-деятелей собрал примерно в три раза меньше народу.</p>
<p>Поскольку интернет-деятели излагали свои доклады в четыре потока, физической возможности прослушать все у человека, не обладающего паранормальными способностями или диктофонами в трех залах, не было. Так что, перед тем, как решите читать дальше этот отчет, примите во внимание, что я слушал по большей части доклады из потоков &laquo;интернет-технологии&raquo;, а также немного &laquo;WEB 2.0&#8243;, доклад Антона Носика в потоке &laquo;интернет-бизнес&raquo;.<span id="more-272"></span></p>
<h1>Сразу же о потоках</h1>
<p><img src="http://www.nayjest.ru/userfiles/iforum/ponaehalo.jpg" alt="" align="left" /> Еще я методично пытался послушать доклады из потока &laquo;интернет-реклама&raquo;, но каждый раз попадал на какую-то нудотину о примитивных общеизвестных вещах в плане рекламы и SEO. Мне было бы интересно послушать доклад Дмитрия Сатина(<a href="http://www.usabilitylab.ru">usabilitylab</a>) о &laquo;Юзабилити веб-сайта&raquo; (в надежде узнать что-то новое для себя), но я в это время созерцал звезду смерти и забавных котэ  на докладе о HTML5 и CSS3, который вел Юрий Артюх (<a href="http://cssing.org.ua">cssing.org.ua</a>).</p>
<p>Доклад Игоря Ашманова я профакапил, наивно полагая, что доклады заканчиваются одновременно.</p>
<p>Самой большой (по размерам аудитории и соответственно количеству слушателей) был поток &laquo;интернет-бизнес&raquo;, немного меньше &#8212; &laquo;WEB 2.0&#8243;, еще меньше &#8212; &laquo;интернет-реклама&raquo;, и <span style="color: gray;"><em>*негодует*</em></span> совсем маленький &#8212; &laquo;интернет-технологии&raquo;.</p>
<p>Поток &laquo;WEB 2.0&#8243; находился в другм крыле здания, нужно было выходить на улицу и топать ко второму входу, что несколько усложняло процесс передислокации между потоками.</p>
<p><img src="http://www.nayjest.ru/userfiles/iforum/top_view.jpg" alt="" align="left" /> А специфика этого мероприятия такова, что бегать между потоками приходилось очень много (по крайней мере ввиду моей широкой сферы интересов). Не везде были сидячие места (так чтобы сесть 2-м &#8212; 3-м человекам вместе), но ближе к концу форума, интернет-деятели видимо поднадоели Киевлянам и те лишили ряды самых стойких, подняв кол-во свободных мест до более комфортного уровня. Особенно это было актуально для секции &laquo;интернет-технологий&raquo; с самым маленьким залом. Странно, что в международном выставочном центре не смогли подобрать аудиторию побольше, ведь он огромен.</p>
<p>Сначала было предположение, что мы послушаем разные секции и будем делиться опытом (я на iForum встретил коллегу из рекламного агентства <a href="http://www.ram.com.ua">ram</a>, а позже &#8212; еще людей, с которыми когда-то учился на факультете прикладной математики в КПИ), но это было неудачное предположение, т. к. победил коллективный инстинкт и мы в дальнейшем перемещались кучкой.</p>
<p>Не могу не отметить, что на iForum была одна секция, которую в достаточной мере не освещал ни один пресс-релиз, но тем не менее, она набрала достаточно большое количество посетителей. Целевая аудитория была однозначно найдена, но об этом ниже.</p>
<h1>ПО (продовольственное обеспечение) мероприятия</h1>
<p>Это &#8212; завораживающее место сразу напротив главного входа, где на столиках разложили массу коробок со всевозможными сладкими ништячками. Наравне с аудиториями для докладов, здесь тусовалось множество IT-шников, блоггеров и бизнесменов, охотящихся на печеньки.<br />
Особый фурор вызвало появление коробок с зефирами. По моим субъективным впечатлениям, это был самый трендовый и высоко ценимый ресурс в даной секции. Так же была минералочка, бесплатный чай и кофе.<br />
Делюсь несколькими фотографиями этого праздника жизни:<br />
<img src="http://www.nayjest.ru/userfiles/iforum/prazdnik_jizni.jpg" alt="" align="center" /><br />
<img src="http://www.nayjest.ru/userfiles/iforum/5_potok.jpg" alt="" align="center" /><br />
<img src="http://www.nayjest.ru/userfiles/iforum/cookies.jpg" alt="" align="center" /></p>
<h1>Высадка десанта</h1>
<p>Я приехал в МВЦ уже к началу первого доклада. Думал что опоздаю, т. к. утром пришлось в экстренном порядке заправлять принтер, чтобы нормально распечатать пригласительный / бейджик (печатать черно-белый как-то несолидно, никогда не печатайте черно-белые бейджики, если вы идете на мероприятие, где  много потенциальнх бизнес-партнеров / инвесторов).  Впрочем, даже такой настрой не помог мне не забыть о визитках  <span style="color: gray;"><em>*facepalm*</em></span></p>
<p>Еще выходя из метро заметил стабильный поток, двигающийся в направлении МВЦ, но я зря принял их за своих, т. к. вчера там же проходили еще &laquo;Baby Expo&raquo; и &laquo;Art Expo Shoes&raquo;, и внедриться вместе с потоком в здание мне не удалось, т. к. на Украинский форум интернет-деятелей попасть можно только через другой вход, к которому нужно было пройти немного дальше (их там много). Но когда я увидел Антона Носика aka <a href="http://dolboeb.livejournal.com/">dolboeb</a>, я наконец-то убедился, что пришел в нужное место.<br />
<img title="Антон Носик(bfm.ru, dolboeb.livejournal.com) и Виталий Степаненко (nayjest.ru, perevaga.com)" src="http://www.nayjest.ru/userfiles/iforum/anton_nosik.jpg" alt="" align="center" /><br />
После проверки пригласительных, всем вручали вот такие пакетики:<br />
<img src="http://www.nayjest.ru/userfiles/iforum/paket.jpg" alt="" align="center" /><br />
С кучей рекламы, фирменной ручкой, которую у меня кто-то отвеял и календариком.</p>
<h1>Доклады</h1>
<p>Сначала я конечно же послушал Антона Носика. Можно сказать, что он был личностью для привлечения внимания, ведь кто не слышал о фееричном <a href="http://dolboeb.livejournal.com/">Dolboeb</a>&#8216;е.</p>
<p>Вопреки мнению предыдущего камрада, отчитавшегося на Хабре, мне его доклад понравился. В принципе, Антон говорил правильные вещи о условиях ведения ебизнеса, отличиях от обычного бизнеса и о том, почему мудилы, прикручивающие гайки (к примеру, что касается требований предоставлять паспортные данные для регистрации доменов в зоне .RU) создают только отток клиентов в более свободные зоны. После доклада у меня возникла мысль, что интересно было бы посмотреть статистику по выбору доменной зоны для русскоязычных проектов и динамику этих показателей.</p>
<p>Потом я смог немного поприсутствовать на затянувшемся и внезапно очень интересном докладе Сергея Котырева (<a href="http://www.umi-cms.ru">Юмисофт</a>), который разжигал почву  для религиозных войн своим докладом о сравнении платных и бесплатных CMS. Обычно у меня никак руки не доходили до UMI.CMS, а тут Сергей вполне презентабельно продемонстрировал некоторые моменты в своем детище, хотя конечно же (и не смейте усомнится), моя секретная CMS, которая выйдет в следующем году и взорвет рынок веб-разработки, несоизмеримо круче <span style="color: grey;"><em>*юмор*</em></span>.<br />
Кстати &laquo;религиозные войны&raquo; стали прямо таки трендом iForuma и эта фраза еще звучала много раз.</p>
<p>Далее в той же секции был средней интересности доклад Юлии Юркевич (<a href="www.avanport-design.com#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Аванпорт-дизайн</a>), которая по большей части вещала об 1С-Битрикс.</p>
<p>Проскочила очень интересная мысль об экономической выгодности CMS как основном и важнейшем показателе со всеми истекающими фактами (не помню, кто об этом говорил, Сергей или Юлия).</p>
<p>После этого Игорь Кононученко (студия дизайна <a href="www.vedjo.com.ua/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">&laquo;Веджо&raquo;</a>) рассказывал о Python и Django, но мне доклад показался каким-то слишком нубо-ориентированным (возможно он был интересен тем, кто совсем не слышал о Python и Django), да и ораторскому искусству Игорю нужно еще подучиться (как и некоторым другим докладчикам из секции интернет-технологий).<br />
То есть, ребята, спасибо конечно же за работу, проделанную над докладами, выступайте дальше, сейте знания и опыт, но не забывайте тренироваться перед зеркалом и по возможности рассказывать быстрее. В этом плане, подкованность части докладчиков из данной секции iForum немного удручает (не в обиду, я конечно же понимаю, что вы все &#8212; специалисты в первую очередь в своих областях, а не в умении красиво говорить).<br />
В общем-то, возможно далее Игорь и говорил что-то интересное, но мы как граждане демократической страны, провели коллективное голосование и решили посмотреть в это время другие секции.</p>
<p>Немного удовлетворив свои гастрономические интересы в секции печенек, мы бегло взглянули на &laquo;интернет-бизнес&raquo; и &laquo;интернет-рекламу&raquo; и устремились в поток &laquo;WEB 2.0&#8243;.<br />
Тарас Тарасов из Game Industry Consulting рассказал немного о истории и нынешнем состоянии в мире Shareware, казуальных и социальных игр, ценообразовании и современных тенденциях.</p>
<p>Потом пройдя обратный цикл по всем секциям, мы остановились на докладе Олега Бунина (<a href="http://ontico.ru">ontico.ru</a>), который вкратце рассказал практически о всем том, что далее звучало на секции &laquo;Разработка высоконагруженных систем в Интернете&raquo;.</p>
<p>Далее был Евгений Курт (<a href="http://www.ucoz.ru">ucoz</a>), сказавший на своем докладе в потоке WEB 2.0, что пользователи их сервиса &#8212; их враги :) и представители Youscan, формировавшие своим докладом целевую аудиторию для своего проекта по отслеживанию репутации в онлайне.<br />
<img src="http://www.nayjest.ru/userfiles/iforum/ucoz.jpg" border="1" alt="" align="center" /><br />
Девушка из Life рассказывала о том, как они пиарятся благодаря своему корпоративному блогу, об интересных акциях в Life и о блоггере, которого заслали на неделю в детдом.</p>
<p>Затем я успел услышать завершительную часть доклада Андрея Никитина о такой софтине как MySQL Enterprise Monitor, а Всеволод Демкин просветил об использовании NoSQL БД и облачных технологиях.<br />
Впрочем, то ли тема высоконагрузочных систем в Интернете меня не возбуждает, то ли на этой секции было как-то скучновато.</p>
<p>Зато секция &laquo;Новые технологии в Интернете&raquo; была великолепна.<br />
Сначала Юрий Артюх достаточно интересно рассказал о HTML5 и СSS3, донес до аудитории мысль о том, что эти стандарты не монолитные как звезда смерти из Star Wars, которая при огромных затратах на производство, познала печальную судьбу (лучше бы флот истребителей забацали, да), а что это &#8212; объединение множества более узконаправленных стандартов. В общем, он приводил еще много забавных аналогий, показал один демотиватор и много котов, которые внезапно появлялись, упомянул &laquo;незлим, тихим словом&raquo; (укр.) нашего всеобщего любимчика, IE6.</p>
<p>Даже несмотря на то, что о  HTML5 и СSS3 я узнал мало нового, презентация очень доставляет.</p>
<p>Остальные доклады в этой секции были тоже очень интересными и информативными: звучало много хороших вопросов, Павел Башмаков(Stanfy) делился ценнейшим опытом разработки под мобильные платформы, Сергей Байдачный(Microsoft) очень живенько и насыщенно поведал о Windows Phone 7 и Internet Explorer 9.0 (опять же, для меня не так уж много нового, но такой качественный доклад слушать интересно).<br />
<img src="http://www.nayjest.ru/userfiles/iforum/serge_windows_phone7.jpg" border="1" alt="" align="left" /> Презентация была на черном фоне, как и положено для WP7-приложений (Дело в том, что устройства на базе WP7 будут обладать экранами, расходующими меньше энергии, если на экране отображено что-то черное).<br />
Еще он во время доклада создал в помощью визуального интерфейса Visual Studio простенькое приложение под Windows Phone 7, которое отображало на экране эмулятора WP7-устройства его фотографию.</p>
<p>Только вот мне не понравилось объявление, что все задавшие вопросы будут награждены футболкой от Microsoft &#8212; дело в том, что тянуть руку начали почти все и я банально не успел задать 4 волновавших меня вопроса (время поджимало, нужно было освобождать аудиторию), хотя хотел задать их с самого начала. Но это не помешало мне подойти к Сергею после доклада и узнать обо всем интересовавшем (дело в том, что я пишу игру на XNA, а игры на платформе XNA будут работать на Windows Phone 7).</p>
<p>Резюмируя могу сказать, что самыми интересными были доклады в начале и в конце iForum.<br />
Немного многовато саморекламы в докладах, но это ок.<br />
Все-таки участие стоит всего 300 грн, а докладчики я так понимаю вряд-ли получают гонорар за свои труды.<br />
Кстати, если уж говорить о рекламе, интересным рекламным ходом была пропажа буквы M в логотипе imena.ua, висевшим за главной сценой. Я думал &#8212; отвалилась, оказывается &#8212; рекламный ход. Маркетологи, берите на заметку. (на хабре в комментариях написали, что буква M отвалилась случайно)<br />
Еще заинтриговали разбросанные карточки <a href="http://Psihuha.ru">Психуха.ru</a>, но не знаю, был ли в этом смысл, т. к. инвайтов я нигде не заметил.</p>
<p>Вот <strong>TOP3 понравившихся мне докладов:</strong></p>
<p>1. Юрий Артюх &#8212; CSS3 и HTML5<br />
<span style="color: gray;"><em>*золотая медаль*</em></span><br />
2. Сергей Байдачный &#8212; Windows Phone 7 и IE9<br />
<span style="color: gray;"><em>* серебряная медаль*</em></span><br />
3. Сергей Котырев &#8212; Платные и бесплатные CMS<br />
<span style="color: gray;"><em>*бронзовая медаль*</em></span></p>
<h1>Недостатки iForum</h1>
<p>1. <span style="text-decoration: underline;">Нигде рядом не было сигарет</span>. Дело в том что сигареты у нас быстро закончились (ага, такие классные доклады, что некоторым слушателям после каждого доклада хотелось закурить, причем не один раз). В результате  представители веб-студии <a href="http://www.perevaga.com">Perevaga.com</a> стреляли у интернет-деятелей сигареты в больших количествах.<br />
Кстати, возле центрального входа часто можно было наблюдать Антона Носика, регулярно выходившего покурить и собиравшего вокруг себя толпу зевак. Популярность, однако.</p>
<p>2. <span style="text-decoration: underline;">В мужском туалете не работала ни одна сушилка для рук</span>. Как сказал товарищ <a href="http://twitter.com/Fauxru">Faux</a> &#8212; примечательно было обнаружить этот факт после доклада о Usability.</p>
<p>3. <span style="text-decoration: underline;">Смещения по временной шкале.</span> Собственно, все действо началось примерно на 15 минут позже запланированного начала и многие докладчики очень затягивали, в результате чего часто сверяясь с расписанием докладов и бегая по аудиториям, я попадал вовсе не на то, на что рассчитывал.</p>
<p>4. <span style="text-decoration: underline;">Девушки в бикини not detected.</span> Запомните: <span style="text-decoration: underline;">На IT-конференциях обязательно должны быть девушки в бикини!</span> Можно даже топлесc.</p>
<h1>Подарки</h1>
<p>В процессе конференции у всех желающих собирались визитки для участия в розыгрыше призов, который состоялся на закрытии мероприятия.<br />
Самый ценный приз &#8212; ноутбук, предоставленный компанией <a href="http://www.p-host.com.ua/">p-host</a>, выиграл парень из <a href="http://perukar.org/">perukar.org</a>, так же разыгрывался DVD-проигрыватель, жесткий диск и куча флешек.<br />
Примечательно то, что владельцев большинства визиток, которые вытягивались, уже не было на розыгрыше призов и тогда тянули визитки еще и еще, пока не находился кто-то присутствующий. Призы давали только лично владельцам удачливых визиток.</p>
<p>Александр Ольшанский(<a href="http://www.imena.ua">imena.ua</a>) предоставлял торжественную роль вытягивания визиток слушателям в зале или даже людям, случайно проходящим мимо с чашечкой кофе.</p>
<p>Одна предприимчивая блондинка, которую вызвали тянуть визитки, решила не заморачиваться со случайным выбором и засунула свой носик в пакет с визитками, начав их просто перебирать (она наверно маркетолог). Судя по всему ее непалевная попытка обмануть почти тысячу людей, не привела к успеху, но тем не менее здорово повеселила публику.</p>
<p>Так же проводился розыгрыш призов, где учавствовали анкеты, которые утром выдавали для заполнения (я как-то пропустил этот момент), а еще на докладе Сергея Клоченко было разыграно пять миллионов бесплатных баннеропоказов формата 468х60 в Украинской Баннерной Сети.</p>
<p>Девочки из <a href="Imena.ua#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Imena.ua</a> раздавали всем коврики для мышек со своей символикой, а Сергей Байдачный (Microsoft) дарил забавные футболки в обмен  на вопросы.</p>
<p>Если я что-то упустил (что вполне возможно, учитывая масштаб мероприятия) &#8212; пишите в комментариях, поможете еще более целостно осветить iForum.</p>
<h1>О распространении информации</h1>
<p>На iForum акредитовано 67 изданий 192 журналиста, так что думаю, скоро будет широкое освещение этого события в прессе, что привлечет еще больше интересных интернет-деятелей в следующем году. Я для себя решил, что обязательно пойду.</p>
<p>Так же стоит упомянуть о бурном(очень) обсуждении в Twitter, многие твитили прямо во время конференции, а еще на завершающей части несколько призов дали авторам самых интересных твитов. Так то.<br />
Читайте тви по хэштегу <a href="http://twitter.com/#search?q=%23iforum">#iforum</a>.</p>
<p>Вообще приятно, что услышал я об этой конференции сразу из нескольких информационных источников. Потому что меня мучает осознание того, сколько всего интересного я постоянно пропускаю&#8230; взять хотя-бы недавний <a href="http://openwebcamp.org.ua/">Openwebcamp</a> в Киеве.</p>
<p>Ребята-организаторы подобных мероприятий &#8212; не скупитесь, освещайте ваши event&#8217;ы сильнее и заранее.</p>
<h1>Благодарности</h1>
<p>Выражаю благодарность Роману Ильичеву (<a href="http://gigahost.ua">GigaHost.ua</a>) за оплаченное для меня приглашение на Украинский форум интернет-деятелей, всем организаторам данного event&#8217;а  за замечательное мероприятие, собственно докладчикам за интересные доклады и лично вам за то, что вы дочитали аж до этого места :)</p>
<h1>Ссылки</h1>
<h3>Материалы докладов</h3>
<p>Павел Башмаков (<a href="http://stanfy.com.ua/">Stanfy</a>) <a href="http://www.slideshare.net/bexcite/ss-3622136">Презентация о разработке мобильных приложений</a><br />
Игорь Кононученко (студия дизайна <a href="www.vedjo.com.ua/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">&laquo;Веджо&raquo;</a>): <a href="http://www.kigorw.com/talks/iforum2010#1">Построение веб-сайтов на Django</a>, презентация (html)<br />
Владимир Исаев (Opera): <a href="http://mmr.net.ua/news/newsid/19417/index.html">«Кто, куда и зачем ходит в Сеть с мобильного телефона»</a> (присутствуют довольно интересные статистические данные)<br />
Юрий Артюх (<a href="cssing.org.ua#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Cssing.org.ua</a>): <a href="http://cssing.org.ua/examples/css3html5/#slide1">Презентация по докладу HTML5, CSS3</a>. Примечательно, что сама презентация сделана сугубо с использованием упомянутых технологий.<br />
<a href="http://iforum.com.ua/doklady/2010/biz/brodskiy.ppt">Презентация</a> украинского политика Михаила Бродского, который так и не появился на iForum.<br />
Сергей Митрофанов: <a href="http://iforum.com.ua/doklady/2010/biz/SE_Mitrofanov_post-Gutenberg_era_present.pdf">Презентация по докладу &laquo;Брендинг в Сети&raquo;</a>   </p>
<h3>Посты на хабре</h3>
<p> <a href="http://habrahabr.ru/blogs/uanet/89722/">В Киеве прошел второй Украинский форум интернет-деятелей Iforum (отчетик + фотки)</a><br />
<a href="http://habrahabr.ru/blogs/uanet/89780/">Еще пару фото с Украинского форума интернет-деятелей Iforum</a><br />
<a href="http://habrahabr.ru/blogs/uanet/85491/">Первый мини-анонс iForum на Хабре</a></p>
<h3>Другие ссылки</h3>
<p> <a href="http://iforum.com.ua">Официальный сайт Украинского форума интернет-деятелей</a><br />
<a href="http://community.livejournal.com/dzherelo_org/4975.html">Отчет от Badevlad</a><br />
<a href="http://uk.wikipedia.org/wiki/%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%81%D1%8C%D0%BA%D0%B8%D0%B9_%D1%84%D0%BE%D1%80%D1%83%D0%BC_%D1%96%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D0%B4%D1%96%D1%8F%D1%87%D1%96%D0%B2">Статья в Wikipedia</a> (на украинском)<br />
<a href="http://webanalitic.blogspot.com/2010/04/76-iforum.html">76 висловів твіттерян про iForum</a> (на украинском)<br />
<a href="http://bukovynaonline.com/iforum/">Еще один достаточно подробный отчет</a> (на украинском)<br />
<a href="http://digger.spaces.live.com/default.aspx">Отчет Виктора Шахотина</a> (он выступал с докладом о Windows Azure Platform, который я пропустил)<br />
Заметка  <a href="http://dmitro.name/archives/330">iForum, или динамичное 1 апреля</a><br />
Daria Rosyuk, <a href="http://dariaro.posterous.com/-iforum-2010#">Мой взгляд на iForum 2010</a><br />
А вот камрад Limanoff пишет как-то не в самом позитивном ключе об iForum: <a href="http://www.gweek.com.ua/2010/04/60.html">Интернет уже не блажь</a><br />
Денис Довгополый (выступал с докладом &laquo;Технологический бизнес. Правила игры&raquo;), <a href="http://dennydov.blogspot.com/2010/04/iforum.html">Отчет с секции стартапы</a><br />
<a href="http://habrahabr.ru/blogs/conf/89820/">Этот же отчет на Хабре</a></p>
<p>upd: В результате написания этого поста я понял, что я очень-очень медленно пишу статьи. Надеюсь, мой отчет заинтересует тех, кто так и не добрался до iForum 2010 и возможно подтолкнет их посетить iForum 2011, а так же будет интересен тем, кто посетил это мероприятие.</p>
<p>Посетивших просьба затвитить этот отчет / кинуть ссылку друзьям, которые тоже там были.</p>
<p>Спасибо за внимание.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/it-events/iforum-report/feed</wfw:commentRss>
		<slash:comments>243</slash:comments>
		</item>
		<item>
		<title>Вышел jQuery 1.4.1</title>
		<link>http://www.nayjest.ru/jquery/jquery-141-released#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/jquery/jquery-141-released#comments</comments>
		<pubDate>Tue, 26 Jan 2010 03:45:21 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=248</guid>
		<description><![CDATA[ Ура, товарищи! Встречаем новую версию jQuery и радуемся, что разработчики этой замечательной javascript библиотеки все так же интенсивно развивают и продвигают свое детище! Не успели мы освоиться с jQuery 1.4, как подкатил новый релиз.
В jQuery 1.4.1 исправили несколько багов, появившихся в версии 1.4 и наславу поработали над API.

1. Скачать jQuery 1.4.1 можно здесь:

jQuery 1.4.1 [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: left;" title="jQuery" src="http://www.nayjest.ru/userfiles/jQuery.jpg" alt="jQuery" /> Ура, товарищи! Встречаем новую версию jQuery и радуемся, что разработчики этой замечательной javascript библиотеки все так же интенсивно развивают и продвигают свое детище! Не успели мы освоиться с jQuery 1.4, как подкатил новый релиз.</p>
<p>В jQuery 1.4.1 исправили несколько багов, появившихся в версии 1.4 и наславу поработали над API.<br />
<span id="more-248"></span></p>
<h2>1. Скачать jQuery 1.4.1 можно здесь:</h2>
<ul>
<li><a href="http://code.jquery.com/jquery-1.4.1.js">jQuery 1.4.1</a> (157kb)</li>
<li><a href="http://code.jquery.com/jquery-1.4.1.min.js">jQuery 1.4.1 Minified</a> (23kb <a href="http://www.julienlecomte.net/blog/2007/08/13/">Gzipped</a>)</li>
</ul>
<h2>2. А теперь предлагаю ознакомиться с нововведениями:</h2>
<ul>
<li>Разработчикам пришло в голову, что их изначальная идея обозвать события &laquo;blur&raquo; и &laquo;focus&raquo; (потеря и получение фокуса html элементами) новыми именами, а именно &laquo;focusin&raquo; и &laquo;focusout&raquo; возможно была и не так хороша, так что теперь в методе .live() мы можем использовать первый вариант (&laquo;focusin&raquo; и &laquo;focusout&raquo; естественно никуда не делись в целях обратной совместимости).</li>
<li>Та же ситуация с событиями &laquo;mouseenter&raquo;, &laquo;mouseleave&raquo;. Теперь кроме них в методе .live() можно использовать еще и метод &laquo;hover&raquo;</li>
<li>Для метода .live() теперь можно задавать несколько типов событий, как и для .bind(). Пример, каким образом это может быть полезно:<br />
<code><br />
$('#some_element').live('mouseenter mouseleave', function() {<br />
$(this).toggleClass('entered');<br />
});<br />
</code></li>
<li>Еще раз рациональное мышление посетило создателей jQuery, когда они присмотрелись к методу .die(). Ну, или хорошие разработчики отправляют им правильные тикеты в багтреккер :) Изначально призвана для того, чтобы удалять обработчики событий, назначенные с помощью метода .live(), теперь функция .die() может удалить их все, если ее вызвать без параметров (т. е. не нужно передавать в нее тип события, для которого нужно удалить обработчиков).</li>
<li>Теперь в методы .height() и .width() можно передавать параметром функцию, которая будет соответственно устанавливать высоту / ширину.</li>
<li>Функции .parseJSON() (парсит JSON строку в javascript объект) и .error() (единый механизм вывода ошибок &#8212; это хорошо) теперь доступны всем (ранее использовались только внутри jQuery), что вполне логично, как по мне.</li>
</ul>
<p>Еще исправлена куча багов, но останавливаться на них детально не буду, об этом <a href="http://jquery14.com/day-12/jquery-141-released">читаем здесь</a> (на английском).</p>
<p>Спасибо за внимание. Не ленимся, обновляем jQuery в своих проектах ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/jquery/jquery-141-released/feed</wfw:commentRss>
		<slash:comments>160</slash:comments>
		</item>
		<item>
		<title>Былины о хостинге</title>
		<link>http://www.nayjest.ru/hosting/story#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/hosting/story#comments</comments>
		<pubDate>Mon, 11 Jan 2010 12:34:53 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[веб-хостинг]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[бесплатный хостинг]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=194</guid>
		<description><![CDATA[Приветствую, дорогие читатели!
 В прошлогодней статье о WordPress 2.9 я немного говорил о прожорливости этой блогоплатформы. И если наши западные коллеги не заморачиваются с такою вещью, как производительность (хостинг то у них везде резиновый-безлимитный), то качество сервиса некоторых наших хостеров просто жутко бесит, хочется взять и уе расцеловать.
Я к примеру пол-года мирился с тем, что [...]]]></description>
			<content:encoded><![CDATA[<p>Приветствую, дорогие читатели!</p>
<p><img src="/userfiles/vzyat_i_.jpg" alt="" align="left" /> В <a title="Время обновить WordPress! Тестируем версию 2.9 «Carmen»" href="http://www.nayjest.ru/wordpress/carmen#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">прошлогодней статье о WordPress 2.9</a> я немного говорил о прожорливости этой блогоплатформы. И если наши западные коллеги не заморачиваются с такою вещью, как производительность (хостинг то у них везде резиновый-безлимитный), то<strong> качество сервиса некоторых наших хостеров просто жутко бесит</strong>, хочется взять и <span style="text-decoration: line-through;">уе</span> расцеловать.</p>
<p>Я к примеру пол-года мирился с тем, что в админ-панели моего блога на WordPress значительная часть функций не работала из-за ограничения хостером оперативной памяти на поток. В результате переписки со службой тех.поддержки лимит мне подняли до  32Мб ОЗУ на поток, но этого так и не хватило для работы базовых функций панели управления WordPress, а на многие плагины мне приходилось только смотреть и мечтать. Запускался примерно один из четырех, остальные вылетали с той же ошибкой о недостаточном количестве памяти. Ну, может не совсем мирился, писем то хостеру отправлено столько, что стоит лишь позавидовать героической способности тех.поддержки соблюдать ледяное спокойствие. А из практической пользы &#8212; мне поступило предложение накинуть еще 10 Мб за дополнительную плату 1$ в месяц. Ну как-то совсем по-жлобски, согласитесь.</p>
<p><span id="more-194"></span></p>
<p>Вдвойне обидно, когда за хостинг давно заплачены деньги, у хостера на официальном сайте написано, цитирую:</p>
<blockquote><p>Хостинг оптимизирован для работы с такими CMS как Wordpress, Drupal, Joomla, PHP-Nuke</p></blockquote>
<p>И в результате приходится забугорный бесплатный хостинг, такой как к примеру <a title="Бесплатный буржуйский хостинг" rel="external nofollow" href="http://www.freehostia.com">freehostia.com</a> или <a title="Еще один бесплатный буржуйский хостинг" rel="external nofollow" href="http://www.000webhost.com/">000webhost.com</a> для размещения сайта на WordPress, где кстати все прекрасно работает в отличии от нашего платного. Но работает <strong>до поры до времени</strong>, а об этом расскажу немного детальнее.</p>
<h2>Бесплатный хостинг: Failure stories</h2>
<p><img title="Freehostia, бесплатный хостинг PHP+MySQL без рекламы" src="http://www.nayjest.ru/userfiles/Freehostia.jpg" alt="Freehostia" align="right" /> В далеком 2006-м заказывали у меня сайтик для базы отдыха. Бюджет был очень ограничен и решили мы с заказчиком разместить его на бесплатном <a title="Бесплатный буржуйский хостинг" rel="external nofollow" href="http://www.freehostia.com">freehostia.com</a>. Должен сказать, не было моей радости предела &#8212; шикарный функционал хостинга, никаких существенных ограничений, 250Мб места под сайт, 6Гб трафика в месяц, чего с головой достаточно для бюджетного сайта-визитки, даже почта отправлялась через сайт на ура, в то время как большинство поставщиков бесплатного хостинга блокировало функции для отправки почты в целях борьбы со спамом.</p>
<p>Это был прорыв для дремучего 2006-го, до freehostia я даже не смел мечтать о бесплатном хостинге с поддержкой PHP+MySQL без требования установить на свой сайт гигантский и уродский говно-баннер на пол-экрана. А тут мой личный, такой заманчивый кусочек дискового пространства оперативной памяти и процессорного времени обвешанного необходимым мне ПО сервера в прекрасном датацентре, находящемся в городе Фримоунт штата Калифорния. В то время это казалось настоящим альтруизмом на фоне настоящего &laquo;выжимания соков&raquo; из клиентских сайтов со стороны поставщиков бесплатного хостинга.</p>
<p><span style="background-color: #ffffff;">Но, как гласит пословица, бесплатный сыр бывает только&#8230; сами знаете где. После месяца-двух бесперебойной работы сайт начал очень часто выпадать в оффлайн. Практически каждый день. Приходилось обращаться в техническую поддержку. Причем в отличии от других поставщиков бесплатного хостинга, где акт обращения в супорт по результативности &#8212; все-равно что труп попинать, сотрудники freehostia отвечали в течении суток на мои письма на ломаном английском, которые мне было чертовски неудобно писать. Правда, ничего круче извинений и предложений перейти на платный тариф, где гарантированный uptime 99,9%, я из них так и не вытянул.</span></p>
<p>Со временем с периодическими вылетами в offline смирились, хостинг все-таки бесплатный. Время шло, я оброс кучей других проектов и забыл об этом сайте, пока не случился первый epic fail в моей профессиональной деятельности, связанный с веб-хостингом. У freehostia.com полетел сервер. Где-то на середине второго года существования сайта. Причем так далеко полетел, что ни о каких бекапах не могло быть и речи. Ребята из Калифорнии поставили мне девственно чистый аккаунт, извинились, сказали перезалить сайт.</p>
<p>Я конечно же храню резервные копии сайтов, в то время хранил на DVD-R дисках. А поскольку сайт о котором идет речь почти не обновлялся после разработки, то не было причин и особо расстраиваться, повторное внесение изменений в содержание сайта после восстановления из бекапа должно было быть минимальным.</p>
<p>Но мне очень сложно передать словами бурю тех эмоций, которые охватили меня, когда я таки нашел нужный мне диск. Тут хочется процитировать сразу два следствия закона Мерфи, а именно следствие №3:</p>
<blockquote><p>Изо всех возможных неприятностей произойдёт именно та, ущерб от которой больше.</p></blockquote>
<p>И следствие №5:</p>
<blockquote><p>Предоставленные сами себе события имеют тенденцию развиваться от плохого к худшему.</p></blockquote>
<p>Диски с бэкапами и разного рода архивной информацией я храню в нижнем ящике своего рабочего стола. И когда я туда заглянул, среди огромной кучи никем не тронутых, покрытых пылью болванок со всяким барахлом, лежал один практически уничтоженный диск. Один зверски изувеченный диск среди сотен идеально чистых и совершенно ненужных мне болванок со всякой старой фигней.</p>
<p><img title="мой французский бульдог, Бэлла" src="/userfiles/french_bulldog_bella.jpg" alt="" align="right" />Тогда Бэлле, моей собаке, был примерно год. Французские бульдоги вообще по природе своей очень игривы, а в юном возрасте они особо любят шкодничать.</p>
<p>До этого она уничтожила N-ное количество тапочек, немного обоев, пару веников и пыталась съесть мою зачетку (после этого преподы очень удивлялись своеобразной форме зачетки). <span style="background-color: #ffffff;">Думаю, вы уже догадались, какая участь постигла диск с бэкапами сайтов, разработанных мной за последний год. Остается только гадать, почему это умнейшее животное выбрало именно этот диск для своих неведомых мне целей. Кстати, кто хочет приобрести щенка французского бульдога (мальчик, полтора месяца) в Киеве, обращайтесь ;)</span></p>
<p><img title="мой французский бульдог, Бэлла" src="/userfiles/french_bulldog_bella2.jpg" alt="" align="right" />В тот момент я еще не потерял надежду, что смогу вернуть пропавший сайт. Началось мое катание по киевским фирмам, занимающимся восстановлением данных с испорченных носителей. Некоторые говорили мне сразу, что дела плохи, одна фирма пыталась что-то делать с мои диском где-то в течении двух недель, но в результате ничего достать оттуда не удалось.</p>
<p>В общем, сделал я клиенту новый сайт с новым дизайном (хотя старые макеты у меня в принципе сохранились) по очень демократичной цене и разместил его на платном хостинге.</p>
<p>Но так как сайты я вообще создаю по достаточно демократичным ценам, это был не последний клиент, сайты которого я размещал на бесплатном хостинге. И как говорится, мыши плакали, но продолжали есть кактус. Услугами freehostia я после этого перестал пользоваться, решил найти что-то новенькое. И нашел: Та-дам, <a title="Бесплатный PHP+MySQL хостинг 000webhost.com" href="http://www.000webhost.com">000webhost.com</a>. На этот раз датацентр в Далласе, Техас. Не буду вдаваться в детали, но  ребята из 000webhost тоже не поскупились на ресурсы(1500Гб на диске, 100Гб трафика в месяц). Я много гуглил, сравнивал многие варианты и пришел к решению, что это вроде-бы самый достойный конкурент freehostia. Туда и перенес свои сайты от freehostia. (Их там было немного, только клиенты с ограниченным бюджетом, остальные сайты я в то время размещал в хостинг-центре &laquo;РБК Украина&raquo;, он же hc.ua)</p>
<p><img title="000Webhost.com, еще один бесплатный хостинг PHP+MySQL без рекламы" src="http://www.nayjest.ru/userfiles/000webhost.jpg" alt="000Webhost" align="right" /> Естественно, на этот раз резервная копия сайта была вручена клиенту на диске, но когда гром грянул, этот диск ему так и не удалось найти. А грянул он буквально месяц назад. Сайт просто перестал работать без каких-либо предупреждений/уведомлений на электронную почту. В cpanel я зайти тоже не смог, написал хостеру о проблеме, на что получил ответ:</p>
<blockquote><p>Hello,<br />
Server #8 has been shut down, therefore your files are gone. Please set up a new account.</p></blockquote>
<p>И хотя в информации о бесплатном хостинг-пакете написано:</p>
<blockquote><p>Automated Weekly Backups: Limited</p></blockquote>
<p>То есть, хоть какое-то автоматическое создание резервных копий вроде бы должно быть, уточнения этой информации я на их официальном сайте не нашел.</p>
<p>На соответствующий запрос мне ответили:</p>
<blockquote><p>Hello,<br />
I am sorry, nothing can be retrieved.</p></blockquote>
<p>Честно говоря, такое впечатление, что поставщики бесплатного хостинга, дающие относительно много ресурсов, просто заманивают клиентов, и если в течении года-двух не получают profit в виде перехода на платный аккаунт, просто избавляются от &laquo;мусора&raquo;.</p>
<p>Так что мой вам совет: если пользуетесь бесплатным хостингом, уделяйте побольше времени на периодические бекапы. И да, в offline сайты и на 000webhost и на freehostia выпадают достаточно часто.</p>
<p><img src="/userfiles/HostSitesAbroad_LernEnglish300.gif" alt="" align="right" /> Что тут сказать, зато подтянул английский при общении со службой технической поддержки, а общаться приходилось немало :) Если же вы не задаетесь целью изучить английский, то одним из самых жирных плюсов в пользу отечественного хостинга является более удобное общение с тех. поддержкой, хотя это утверждение не всегда справедливо.</p>
<p>Например от звонков в <a title="freehost.com.ua, украинский хостинг" href="freehost.com.ua#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">freehost.com.ua</a>, где сейчас хостится мой блог, толку мало, так как  практически по любому вопросу, где от тех. поддержки требуются какие-либо действия, или на который они не в состоянии сходу ответить, просят написать запрос на e-mail, что лично мне очень и очень неудобно. Но возможно мне и не стоит жаловаться на freehost, все-таки хостинг у них относительно дешевый (с другой стороны, если уж он платный, то было бы неплохо, чтобы он был в чем-то лучше бесплатных зарубежных аналогов). А еще они захостили <a title="Веб-студия Perevaga.com: создание сайтов в Украине" href="http://www.perevaga.com/">сайт моей веб-студии</a> бесплатно.</p>
<h2>Сила блоггинга</h2>
<p>Так вот, после моей прошлой публикации, где я немного жаловался на проблеммы с WordPress, произошло <strong>два приятных для меня события</strong>:</p>
<p><strong>1) </strong>Саппорт freehost&#8217;а накинул мне 10 Мб ОЗУ к лимиту (теперь значит в мой тарифный план входит 42 Мб ОЗУ на поток), что не может не радовать. Опечаливающим фактором является то, что во-первых: этого объема памяти все-равно не хватает, чтобы например автоматически  обновить WordPress до свежей версии 2.9.1 через панель управления самого WordPress, а во вторых: там, где раньше были ошибки из-за нехватки памяти, сейчас вылезли другие ошибки, разобраться с которыми у меня пока не было времени (типа такого: Warning: curl_setopt(): CURLPROTO_FILE cannot be activated when in safe_mode or an open_basedir is set in wp-includes/http.php on line 1302).</p>
<p>Кстати, все марш обновляться до WordPress 2.9.1! Читаем о новой версии на <a title="Русский WordPress 2.9.1 " href="http://ru.wordpress.org/2010/01/05/wordpress-2-9-1-ru_ru/">русском</a> и <a title="WordPress 2.9.1" href="http://wordpress.org/development/2010/01/wordpress-2-9-1/">английском</a>.</p>
<p><strong>2) </strong>Ранее неизвестный мне хостер <a href="http://gigahost.ua/">GigaHost.ua</a> <strong>подарил мне хостинг-аккаунт на 5 сайтов</strong> сроком на 6 месяцев (промокод для 100% скидки).</p>
<p>Что ж, такой жест доброй воли не может не радовать, тем более хостинг мне сейчас реально нужен для новых проектов, так как количество отдельных доменов в моем аккаунте у старого хостера достигло лимита, при наличии около 80% неиспользованного дискового пространства. А тут места не очень много (500 Мб), но для пяти сайтов-визиток / корпоративных сайтов / небольших веб-сервисов хватит с головой, просто красота.</p>
<h2>Хостинг русский и украинский, &laquo;отечественный&raquo;</h2>
<p>Как я узнал из переписки, <a title="Украинский хостинг GigaHost.ua" href="http://www.GigaHost.ua">GigaHost.ua</a> — это дочерний проект <a title="MiroHost.net: еще один качественный хостинг" href="http://www.mirohost.net">Mirohost.net</a>. А с Mirohost мне уже приходилось иметь дело. Я у них когда-то хостил интернет-магазин на самописной CMS (PHP+MySQL) с посещаемостью около 1000 посетителей в сутки и около 5000 товаров в базе данных (этот хостинг был заранее приобретен клиентом). Но через год, когда нужно было продлять хостинг, предложил перенести к себе на freehost, т. к. у меня в аккаунте пустовало место, и хостинг этот подешевле, а это важный аргумент. Как выяснилось  — зря, потому что на пиках посещаемости, где-то через месяц пользования хостингом (хе-хе, у них как-раз мани-бек 30 дней), сайт время от времени начинал грузиться по 10 минут, а потом и вовсе вылетал, причем тормозить и вылетать начали все мои сайты в этом аккаунте.</p>
<p>Потом freehost и вовсе отключил этот сайт за превышение нагрузки на сервер (и делал такие отключения еще несколько раз в течении следующих месяцев, я слезно просил включить обратно, обещая немедленно заняться оптимизацией движка), хотя ничего убийственного для сервера в нем не было: до 15 SQL запросов на страницу, шаблоны страниц кэшируются, SQL — нет, время генерации страницы у меня на домашнем компьютере и на старом хостинге — порядка 0.2—0.5 сек, посещаемость — все такая же, около 1000 посетителей в сутки.</p>
<p>В результате я потратил кучу нервов, кучу времени на оптимизацию движка сайта (зато достиг ускорения где-то на 30—50%) и проблемы все еще есть, но пока так и живем, так как владельцы интернет-магазина, о котором речь сейчас меньше вкладывают в его продвижение и посещаемость сейчас соответственно ниже. Больше всего бесит, что тормозить начинают все сайты в аккаунте, и шквал звонков от клиентов мне гарантирован. Тьфу-тьфу-тьфу, последних месяца три все вроде-бы работает четко. А Mirohost был хорош, все-таки значительно быстрее и надежнее чем Freehost, но и дороже.</p>
<p>Так вот, вернусь собственно к GigaHost.ua:</p>
<p><img title="Украинский хостинг GigaHost.ua" src="http://www.nayjest.ru/userfiles/GigaHost.jpg" alt="GigaHost" align="right" /> Создание аккаунта прошло полностью автоматически и буквально через 3-5 минут я получил на e-mail письмо с данными для доступа к админке. Сразу же решил прикрутить домен, и какое же было мое удивление, когда сайт заработал моментально после изменения DNS-записей. Ну, это полностью заслуга naunet.ru, работает у них все четко и лучшая цена для партнеров: 99 руб. за домен .RU</p>
<p>Панель управления у GigaHost.ua стандартненькая, очень порадовало то, что доступ к phpMyAdmin или file manager осуществляется без ввода дополнительных паролей. И это правильно, достаточно одного нормального пароля для панели управления, ведь все-равно если есть доступ к панели управления, все остальное можно тем или иным путем получить / поменять пароли.</p>
<p>Меня сразу же заинтересовало, что находится в разделе &laquo;автоматическая установка софта&raquo;, и опять же очень порадовало наличие свежей версии WordPress и я был удивлен увидеть там LiveStreet.</p>
<p>Вообще, такое впечатление, что хостинг заточен под WordPress, хотя об этом и нигде не говорится. Установился он за считанные секунды и работает просто отлично. Даже не хочу перечислять список фич, с которыми у меня проблемы на старом хостинге (проблемы с обновлением, плагинами, кодировкой и многое другое), но тут все действительно замечательно, нулевый блог на WordPress летает, в панели управления тоже все путем. Я даже задумываюсь о том, чтобы перенести к этим ребятам свой блог, возможно так и сделаю.</p>
<p>Отдельно радует поддержка Python, все остальное тоже на месте &#8212; ежедневные бекапы, планировщик заданий, неограниченный трафик, PHP, MySQL, Perl, встроенная статистика, доступ к log файлам.</p>
<p>Видно что там толковые ребята: и софт обновляют и с поддержкой трендовых CMS у них нормально и подход к продвижению очень похвальный: прочли мою статью →  понравилась → подарили хостинг :) и сервера у них судя по первым впечатлениям быстрые. Грех не сказать, что это хороший хостинг, но конечно же под конкретные задачи. К примеру ели вам нужно захостить много сайтов-визиток / блогов / корпоративных сайтов, да в общем, каких угодно, кроме файло-хранилищ / больших интернет-магазинов или каких-то специфических веб-сервисов, занимающих иногда по несколько гигов и больше, то тариф <strong>третий</strong> (50 сайтов за 7.5$ в месяц) <a title="Хостинг от GigaHost" href="http://gigahost.ua/hosting.php">очень даже хорош</a>. В общем, рекомендую.</p>
<p>На этом пожалуй и закончу, а то пост получился и так слишком большим.<strong> Надеюсь, мой жизненный опыт будет вам полезен.</strong></p>
<p><strong>p.s.:</strong> Все марш менять год на 2010-й в копирайтах ваших сайтов, если там висит еще 2009! ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/hosting/story/feed</wfw:commentRss>
		<slash:comments>198</slash:comments>
		</item>
		<item>
		<title>Время обновить WordPress! Тестируем версию 2.9 &#171;Carmen&#187;</title>
		<link>http://www.nayjest.ru/wordpress/carmen#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/wordpress/carmen#comments</comments>
		<pubDate>Sun, 20 Dec 2009 02:38:35 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=141</guid>
		<description><![CDATA[Этот пост я пишу уже из админки  WordPress 2.9 под кодовым именем &#171;Carmen&#187;.
Последняя версия популярнейшего приложения для ведения блогов названа так в честь джазовой певицы Кармен Мерседес Макрэй, ниже вы увидите ее фото(в молодости).
Итак, давайте посмотрим, что же нам преподнесли разработчики в финальном релизе WordPress 2.9.
Here we go
 Начну в хронологическом порядке: только я успел [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border: none;" title="WordPress 2.9 Carmen" src="http://www.nayjest.ru/userfiles/wordpress.jpg" alt="WordPress logo" width="100" align="left" />Этот пост я пишу уже из админки  <strong>WordPress 2.9</strong> под кодовым именем <strong>&laquo;Carmen&raquo;</strong>.</p>
<p>Последняя версия популярнейшего приложения для ведения блогов названа так в честь джазовой певицы Кармен Мерседес Макрэй, ниже вы увидите ее фото(в молодости).</p>
<p>Итак, давайте посмотрим, что же нам преподнесли разработчики в финальном релизе WordPress 2.9.<span id="more-141"></span></p>
<h3 style="clear: both; padding-top: 5px;">Here we go</h3>
<p><img title="Кармен Мерседес Макрэй" src="http://www.nayjest.ru/userfiles/carmen_mcrae.jpg" alt="Фото Кармен Мерседес Макрэй" width="100" height="125" align="left" /> Начну в хронологическом порядке: только я успел заметить, что вышел финальный релиз WordPress 2.9, как подтянулась и <a title="Русский WordPress" href="http://ru.wordpress.org/" target="_blank">русская версия</a>, но видимо одним из первых скачавших ее я встретил <a title="Epic fail в русской версии wordpress 2.9 Кармен" href="http://ru.forums.wordpress.org/topic/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%B2-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8-29" target="_blank">epic fail</a>, а именно — серьезные проблемы с добавлением новых рубрик из-за некорректной замены $filtered=trim(preg_replace(&#8216;/\s+/&#8217;, &#8216; &#8216;, $filtered)) в новой функции sanitize_text_field().</p>
<p>На счастье, эту ошибку исправили за 2 часа после первого баг-реппорта, так что я перезакачал WordPress и приступил к тестированию.</p>
<p>А вот украинским блоггерам все еще <a title="WordPress Україна" href="http://uk.wordpress.org/" target="_blank">предлагают скачать WordPress 2.8.6</a>, так что придется немного подождать, если вы пишете щирою українською.</p>
<h3>Открываем панель управления</h3>
<p>WordPress и в версии 2.8 жрал много памяти, а в этой начал кушать еще больше. Дело в том, что у моего хостера (<a title="Хостинг Freehost.com.ua" href="http://freehost.com.ua/" target="_blank">freehost.com.ua</a>, тарифный план <a title="Хостинг Freehost.com.ua, тарифный план &quot;Perfect&quot;" href="http://freehost.com.ua/unix/perfect/" target="_blank">Perfect</a>) стоит ограничение 32 Мб оперативной памяти на поток, в результате чего некоторые функции админки не работали (постоянно вылетало: Fatal error: Allowed memory size of N bytes exhausted (tried to allocate M bytes)), в WordPress 2.9 я вижу еще больше таких ошибок (в консоли у меня не работают  панели &laquo;Входящие ссылки&raquo;, &laquo;Плагины&raquo;, &laquo;Разработка WordPress&raquo;).</p>
<p>Из позитивных моментов могу заметить, что из десятка плагинов установленных на моем блоге, при обновлении не вылетел ни один, похоже что с обратной совместимостью все ок.</p>
<h3>Вкусненькое в WordPress 2.9</h3>
<p><img style="border: none;" title="Корзина в WordPress 2.9 Carmen" src="http://www.nayjest.ru/userfiles/trash.png" alt="Корзина" align="left" />Первое нововведение, которое лично мне очень нравится &#8212; это <strong>корзина</strong>. В английской версии сразу бросается в глаза ссылка  &laquo;Trash&raquo; вместо &laquo;Delete&raquo;, в русской же так и оставили &laquo;Удалить&raquo;, кстати, сама корзина в панели управления отобразится только после того, как вы что-то в нее переместите. И не пугайтесь, что при попытке удаления записи вас теперь не спрашивают &laquo;уверены ли вы?&raquo;. Да, мы уверены :)  <img title="Встроенный графический редактор WordPress 2.9" src="http://www.nayjest.ru/userfiles/wordpress2.9_image_editor.gif" alt="Графический редактор WordPress 2.9" align="right" /><strong></strong></p>
<p><strong>Встроенный редактор изображений</strong>. Это однозначно must have. Очень удобно бывает уменьшить или обрезать изображение прямо из админки WrodPress. Еще можно повернуть и отразить по горизонтали/вертикали нашу картинку. Приятно что есть даже кнопки отменить/повторить предыдущее действие.</p>
<p><strong>Ссылки на видео  теперь автоматически заменяются на встроенный видеопроигрыватель</strong>. Поддерживаются такие сервисы: YouTube, Google Video, Blip.tv, DailyMotion, Flickr, Viddler, Qik.com, Hulu, Revision3, PollDaddy.</p>
<p><strong>Виджеты можно встраивать в любое место.</strong> Делается это с помощью новой функции the_widget(), вызываемой из шаблона. Ух, чувствую, наделают теперь тем&#8230;</p>
<p><strong>Групповое обновление плагинов и проверка совместимости.</strong> Не то чтобы я без этого не мог жить, но не могу сказать ничего против. Впрочем, мне к сожалению приходится вручную обновлять некоторые плагины, т. к. в связи с недостатками моего хостинга, о которых я писал выше, после закачки некоторых плагинов через админку, WordPress&#8217;у не хватает памяти. А некоторые и вовсе не стают.</p>
<p>Наконец-то WordPress научился понимать <strong>rel=canonical </strong>в ссылках! А для него между прочим это было очень важно, ведь часть контента в WordPress дублируется и в общей ленте и в рубриках, в архиве, по датам, на страницах тегов, на страницах постов. В общем, еще одно позитивное изменение, которое позволит поисковикам правильнее понимать ваш блог.</p>
<p>Когда вы редактируете файлы тем оформления или плагинов, после нажатия на кнопку &laquo;Сохранить&raquo;, вы будете возвращены на ту же строку, которую редактировали. Слава богу! :)</p>
<p><strong>Автоматическая оптимизация базы данных</strong> должна улучшить производительность. Для этого напишите в wp-config.php <code>define('WP_ALLOW_REPAIR', true);</code></p>
<p>В темах оформления теперь можно использовать <strong>картинки-превью к записям</strong>.  Добавлена таблица для хранения <strong>мета-данных о комментариях</strong> в формате пар ключ-значение.  В общем, если вы из тех ребят, которые сами что-то прогают для своего бложека, вам это возможно понравится, осталось только придумать, что же еще можно прикрутить к комментариям.</p>
<p><strong>Пользовательские типы записей. </strong>Если вам мало стандартных<strong> </strong>запись/страница<strong>..</strong>. честно говоря не представляю, кому оно нужно, но это делает архитектуру WordPress более гибкой. Если вам это действительно нужно, возможно, вы используете WordPress не по назначению :)</p>
<p><strong>Можно использовать свои директории для тем оформления</strong>. К примеру, теперь плагин может зарегистрировать тему оформления, поставляемую вместе с ним. Или у вас  может быть несколько директорий с темами.</p>
<p><strong>Расширен XML-RPC API.</strong></p>
<p><strong></strong><strong>Сайдбары теперь могут иметь описания.</strong></p>
<p>Визуальный (WYSIWYG) редактор <strong>TinyMCE</strong> и PHP библиотека для работы с RSS каналами <strong>SimplePie</strong> обновлены.</p>
<p>И еще много мелких улучшений и исправлений. Их общее число больше 500!</p>
<p>Кстати, если вы еще не видели, официальное видео (на английском):<br />
<center><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="224" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="guid=OxzyETzZ&amp;width=400&amp;height=224" /><param name="src" value="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.11" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="400" height="224" src="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.11" allowfullscreen="true" flashvars="guid=OxzyETzZ&amp;width=400&amp;height=224"></embed></object><br />
</center></p>
<h3>Замеченные баги</h3>
<p>Вообще-то я не уверен, что это проблема WordPress, возможно это из-за некорректной работы хостинга: Иногда не удается обновить редактируемую запись (после нажатия на кнопку &laquo;обновить&raquo; я попадаю на страницу с ошибкой).<br />
Один раз при редактировании этого поста слетели все абзацы. Это было очень непрятно.<br />
В WYSIWYG редакторе иногда не снимается выделение жирным с текста, скопированного из другой страницы. Причем в исходном коде текст выделен именно тегом strong.</p>
<h3>Планы на будущее</h3>
<p>WordPress 3.0 должен выйти где-то к весне. В будущем следует ожидать объединение с многопользовательской версией (<a title="WordPress MU (Многопользовательская версия)" href="http://codex.wordpress.org/ru:WordPressMU" target="_blank">WordPress MU</a>) и замену стандартной темы оформления.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/wordpress/carmen/feed</wfw:commentRss>
		<slash:comments>141</slash:comments>
		</item>
		<item>
		<title>Пишем свой рейтинг популярных записей русскоязычных блогов на базе Яндекс.API, часть 1</title>
		<link>http://www.nayjest.ru/php/blogpostrating#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/php/blogpostrating#comments</comments>
		<pubDate>Thu, 17 Dec 2009 19:03:58 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[урок]]></category>
		<category><![CDATA[Яндекс]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=129</guid>
		<description><![CDATA[Жил-был в составе поиска по блогам Яндекса рейтинг популярных записей, который для многих был такой себе ежедневной газеткой. Но решили в Яндексе его закрыть да предоставили API, чтобы каждый желающий мог сделать свой рейтинг популярных записей по блогам, чем мы собственно сегодня и займемся. Писать будем на PHP.
Итак, для начала ознакомимся с API статистики записей Поиска [...]]]></description>
			<content:encoded><![CDATA[<p>Жил-был в составе поиска по блогам Яндекса рейтинг популярных записей, который для многих был такой себе ежедневной газеткой. Но <a title="Рейтинг популярных записей закрывается, или да здравствуют новые рейтинги" href="http://clubs.ya.ru/company/replies.xml?item_no=20164" target="_blank">решили в Яндексе его закрыть</a> да предоставили <a title="API статистики записей Поиска по блогам" href="http://blogs.yandex.ru/faq/entriesapi" target="_blank">API</a>, чтобы каждый желающий мог сделать свой рейтинг популярных записей по блогам, чем мы собственно сегодня и займемся. Писать будем на PHP.</p>
<p><span id="more-129"></span>Итак, для начала ознакомимся с API статистики записей Поиска по блогам.</p>
<p>Тут все просто, мы имеем RSS ленту статистики записей по блогам за последние 24 часа, разбитую на страницы по 50 записей.</p>
<p>На первой странице выводятся самые свежие записи. Номер страницы, которую нам нужно получить задается параметром p=&lt;номер страницы&gt; в URL адресе, по которому мы обращаемся к API, например: <a href="http://blogs.yandex.ru/entriesapi">http://blogs.yandex.ru/entriesapi?p=1</a>.</p>
<p>Перейдите по  ссылке выше и посмотрите на исходный код этой страницы (<em>Вид-&gt;просмотреть источник</em> или <em>Ctrl+U</em>, если у вас FireFox/Opera/Chrome).  Мы видим обычный XML документ, который будем читать и анализировать с помощью PHP.  Нас интересуют информация о записях, находящаяся внутри тегов &lt;item&gt;. Названия вложенных элементов говорят сами за себя, это:</p>
<ul>
<li><strong>author –</strong> ссылка на блог/страницу автора;</li>
<li><strong>description </strong><strong>– </strong>короткое описание (обычно пусто);</li>
<li><strong>link</strong> <strong>– </strong>ссылка на пост;</li>
<li><strong>pubDate</strong> <strong>– </strong>дата и время публикации;</li>
<li><strong>title</strong> <span style="font-weight: bold;">– заголовок поста;</span></li>
<li><span style="font-weight: bold;"><strong>yablogs:commenters</strong><span style="font-weight: normal;"> – </span></span><span style="font-weight: bold;">количество разных русскоязычных комментаторов у записи за все время ее существования;</span></li>
<li><span style="font-weight: bold;"><strong>yablogs:commenters24</strong><span style="font-weight: normal;"> – количество разных русскоязычных комментаторов у записи;</span></span></li>
<li><span style="font-weight: bold;"><span style="background-color: #ffffff;"><strong>yablogs:comments</strong><span style="font-weight: normal;"> – общее количество комментариев к записи за все время ее существования;</span></span></span></li>
<li><span style="font-weight: bold;"><span style="background-color: #ffffff;"><strong>yablogs:comments24</strong><span style="font-weight: normal;"> – количество комментариев к записи за последние 24 часа;</span></span></span></li>
<li><span style="font-weight: bold;"><span style="background-color: #ffffff;"><strong>yablogs:links</strong><span style="font-weight: normal;"> – общее количество ссылок на запись за все время ее существования;</span></span></span></li>
<li><span style="font-weight: bold;"><span style="background-color: #ffffff;"><strong>yablogs:links24</strong><span style="font-weight: normal;"> – количество ссылок на запись за последние 24 часа;</span></span></span></li>
<li><span style="font-weight: bold;"><span style="background-color: #ffffff;"><strong>yablogs:links24weight</strong><span style="font-weight: normal;"> – взвешенное количество ссылок на запись за последние 24 часа(с отфильтрованными накрутками и спамными ссылками);</span></span></span></li>
<li><span style="font-weight: bold;"><span style="background-color: #ffffff;"><strong>yablogs:linksweight</strong><span style="font-weight: normal;"> – общее взвешенное количество ссылок на запись (с отфильтрованными накрутками и спамными ссылками);</span></span></span></li>
<li><span style="font-weight: bold;"><span style="background-color: #ffffff;"><strong>yablogs:visits24</strong><span style="font-weight: normal;"> – примерное количество посетителей записи за последние 24 часа;</span></span></span></li>
<li><span style="font-weight: bold;"><span style="background-color: #ffffff;"><strong>yablogs:ppb_username</strong><span style="font-weight: normal;"> – имя (nickname) автора поста.</span></span></span></li>
</ul>
<p>Ну что ж, читать такие записи мы научились, теперь давайте научим читать их наш скрипт.</p>
<p>Для начала нужно определиться с инструментом для работы с  XML. В PHP manual есть просто таки огромный раздел <a title="PHP Manual: XML Manipulation" href="http://www.php.net/manual/en/refs.xml.php" target="_blank">XML manipulation</a>, где вы можете найти массу различных средств для работы с XML документами. Одним из самых простых, удобных и в то же время мощных решений является расширение <a title="PHP manual: SimpleXML extension" href="http://www.php.net/manual/en/book.simplexml.php" target="_blank">SimpleXML</a>, которое поставляется с PHP начиная с 5-й версии и включено по умолчанию. С ним мы и будем работать. Поверьте мне, это действительно очень хороший инструмент, позволяющий просто и удобно работать с XML документами.  Продемонстрирую это:</p>
<blockquote><p><code><span style="font-family: Consolas, 'Courier New', Courier, monospace; color: black; font-size: x-small;"><br />
<span style="color: #cc6633;">$xml</span> = simplexml_load_file(<span style="color: #008000;">'http://blogs.yandex.ru/entriesapi'</span>);<br />
<span style="color: #0000ff;">echo</span> <span style="color: #008000;">'&lt;b&gt;Это заголовок канала:&lt;/b&gt; '</span>,<br />
<span style="color: #cc6633;">$xml</span>-&gt;channel-&gt;title, <span style="color: #008000;">'&lt;br&gt;'</span>,<br />
<span style="color: #008000;">'&lt;b&gt;А это заголовок последнего поста:&lt;/b&gt; '</span>,<br />
<span style="color: #cc6633;">$xml</span>-&gt;channel-&gt;item[<span style="color: #008000;">0</span>]-&gt;title, <span style="color: #008000;">'&lt;br&gt;'</span>,<br />
<span style="color: #008000;">'&lt;b&gt;Время публикации последнего поста: &lt;/b&gt; '</span>,<br />
<span style="color: #cc6633;">$xml</span>-&gt;channel-&gt;item[<span style="color: #008000;">0</span>]-&gt;pubDate;<br />
</span></code></p></blockquote>
<p>Думаю, тут все понятно: в первой строке мы загружаем первую страницу ленты популярных записей в переменную $xml (функция simplexml_load_file возвращает экземпляр класса <a title="PHP Manual: The SimpleXMLElement class" href="http://www.php.net/manual/en/class.simplexmlelement.php" target="_blank">SimpleXMLElement</a>), которую далее можем интерпретировать как объект, соответствующий нашему XML документу, что мы собственно и делаем.</p>
<p>Если мы обращаемся к произвольному полю такого объекта, выполняется поиск дочернего элемента XML дерева с именем, соответствующим имени запрошенного поля и если такой элемент найден, возвращается объект, являющийся также экземпляром класса SimpleXMLElement, или массив таких объектов.</p>
<p>Благодаря такой логике работы мы можем выполнять цепочки запросов вида: <span style="color: #cc6633;">$xml</span>-&gt;someElement-&gt;children-&gt;childrenOfChildren.</p>
<p>Обратите внимание, что элементов item в нашем XML документе много, поэтому <span style="color: #cc6633;">$xml</span>-&gt;channel-&gt;item возвращает не один объект, а массив объектов, предоставляющих доступ к этим элементам. В примере мы обратились к самому первому в документе элементу item по индексу [0], и вывели его заголовок и дату публикации на экран (в браузер).</p>
<p>Альтернативный способ получить нужную ветвь XML документа в SimpleXML — это использование <a title="Wikipedia: XPath (XML Path Language)" href="http://ru.wikipedia.org/wiki/XPath" target="_blank">XPath</a>, языка запросов к элементам XML дерева. В классе SimpleXMLElement для этого имеется метод xpath(<span><span>string</span> <tt>$path</tt></span>), возвращающий массив экземпляров класса SimpleXMLElement или FALSE в случае ошибки.</p>
<p>Пример использования XPath:</p>
<p><span id="ctl00_InnerContent_ctl00_Label1"><code><span style="font-family: Consolas, 'Courier New', Courier, monospace; color: black; font-size: x-small;">$items=<span style="color: #cc6633;">$xml</span>-&gt;xpath(<span style="color: #008000;">'channel/item'</span>); </span></code></span></p>
<p>Чтобы получить аналогичный набор элементов без XPath, нужно выполнить:</p>
<p><span id="ctl00_InnerContent_ctl00_Label1"><code><span style="font-family: Consolas, 'Courier New', Courier, monospace; color: black; font-size: x-small;">$items=<span style="color: #cc6633;">$xml</span>-&gt;channel-&gt;item;</span></code></span></p>
<p>Использование XPath или цепочек вызовов полей  — это дело вкуса, в нашем случае мы будем использовать XPath, чтобы обратиться к элементам типа yablogs:links, где есть символ &laquo;:&raquo;, так как он мешает интерпретировать эти элементы как поля объекта в PHP.</p>
<p>Ну давайте уже что-нибудь сделаем. Например функцию, получающую информацию о всех записях за 24 часа. Собственно, вот:</p>
<blockquote>
<p><code></p>
<ol>
<li><a href="http://www.php.net/manual/en/function.define.php">define</a> (<span style="color: #008000;">'MAX_PAGES'</span>,<span style="color: #008000;">200</span>);</li>
<li><span style="color: #0000ff;">function</span> load_all() {</li>
<li> <span style="color: #cc6633;">$all_items</span>=<span style="color: #0000ff;">array</span>();</li>
<li> <span style="color: #0000ff;">for</span> (<span style="color: #cc6633;">$i</span>=<span style="color: #008000;">1</span>; <span style="color: #0000ff;">true</span>;<span style="color: #cc6633;">$i</span>++) {</li>
<li> <span style="color: #cc6633;">$xml</span> = simplexml_load_file(<span style="color: #008000;">'http://blogs.yandex.ru/entriesapi?p='</span> . <span style="color: #cc6633;">$i</span>);</li>
<li> <span style="color: #cc6633;">$items</span>=<span style="color: #cc6633;">$xml</span>-&gt;xpath(<span style="color: #008000;">'channel/item'</span>);</li>
<li> <span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">empty</span>(<span style="color: #cc6633;">$items</span>)) {</li>
<li> <span style="color: #0000ff;">break</span>;</li>
<li> }</li>
<li> <span style="color: #cc6633;">$all_items</span>=<a href="http://www.php.net/manual/en/function.array-merge.php">array_merge</a>(<span style="color: #cc6633;">$all_items</span>,<span style="color: #cc6633;">$items</span>);</li>
<li> <span style="color: #0000ff;">if</span> (<span style="color: #cc6633;">$i</span>&gt;=MAX_PAGES) <span style="color: #0000ff;">break</span>;</li>
<li> }</li>
<li> <span style="color: #0000ff;">return</span> <span style="color: #cc6633;">$all_items</span>;</li>
<li>}</li>
</ol>
<p></code></p></blockquote>
<p>Такая функция конечно же будет работать очень медленно и скорее всего упрется в ограничение на время выполнения php скриптов: по умолчанию — 30 секунд, поэтому полученные данные нужно обязательно кэшировать, а само их получение выполнять не при открытии страницы, а через планировщик задач crontab. Мы будем сохранять полученную информацию в базу данных, использовать будем MySQL, но об этом в следующей части, а пока вернемся к  работе с XML.</p>
<p>Давайте уже в этом уроке соберем наш рейтинг популярных записей русскоязычных блогов с минимальным функционалом и отложим на потом кэширование, расширение функционала, придание ООП&#8217;шности и MVC&#8217;шности нашему коду.</p>
<p>Чтобы долго и нудно не ждать результата выполнения функции load_all(), давайте зададим ей ограничение: будем обрабатывать только первые 4 страницы RSS ленты, выдаваемой Яндексом. Специально для этого я ввел константу MAX_PAGES, заменяем значение 200 в первой строчке на 4.</p>
<p>Наш рейтинг должен уметь сортировать записи по количеству комментариев, количеству ссылок и количеству посещений. Мы уже имеем функцию, с помощью которой можем получить список записей. Значит задача состоит в сортировке этого списка.</p>
<p>Если бы мы заносили информацию о всех  записях в базу данных скриптом, вызываемым через планировщик задач, а при выдаче информации пользователю, брали бы ее из БД, то мы бы воспользовались возможностями SQL для сортировки, но это мы будем делать во второй части урока, а сейчас сделаем по-быстрому сортировку средствами PHP.</p>
<p>Поможет нам в этом стандартная функция PHP usort, позволяющая сортировать массивы с использованием своей функции для сравнения элементов массива.</p>
<p>Элементами массива у нас являются экземпляры класса SimpleXMLElement, инициализированные элементами XML дерева &lt;item&gt;.</p>
<p>Рассмотрим, как мы можем получить к примеру количество комментариев записи:</p>
<blockquote>
<p><code></p>
<ol>
<li>$xml = simplexml_load_file(<span style="color: #008000;">'http://blogs.yandex.ru/entriesapi'</span>);</li>
<li><span style="color: #cc6633;">$item</span>=$xml-&gt;channel-&gt;item[<span style="color: #008000;">12</span>];<span style="color: #696969;">//Получаем какой-нибуть XML элемент item, например 13-й.</span></li>
<li><span style="color: #cc6633;">$comments_arr</span>=<span style="color: #cc6633;">$item</span>-&gt;xpath(<span style="color: #008000;">'yablogs:comments'</span>);<span style="color: #696969;">//получаем массив объектов</span></li>
<li><span style="color: #cc6633;">$comments_obj</span>=<span style="color: #cc6633;">$comments_arr</span>[<span style="color: #008000;"> 0</span>];<span style="color: #696969;">//объект у нас должен быть один, это мы знаем</span></li>
<li><span style="color: #cc6633;">$comments</span>=(int)<span style="color: #cc6633;">$comments_obj</span>;<span style="color: #696969;">//приводим его тип к целочисленному (int), чтобы можно было выполнить сравнение </span></li>
</ol>
<p></code></p></blockquote>
<p>А теперь можно написать и функцию сравнения, причем универсальную.</p>
<blockquote>
<p><code></p>
<ol>
<li><span style="color: #cc6633;">$cmp</span>=<span style="color: #008000;">'yablogs:comments'</span>;<span style="color: #696969;">//по этому параметру сравниваем, </span></li>
<li><span style="color: #696969;">//к функции сравнения при использовании в usort есть требование: </span></li>
<li><span style="color: #696969;">//она должна принимать два только параметра, </span></li>
<li><span style="color: #696969;">//соответствующие сравниваемым элементам массива, </span></li>
<li><span style="color: #696969;">//поэтому делаем $cmp просто глобальной переменной</span></li>
<li><span style="color: #0000ff;">function</span> cmp(<span style="color: #cc6633;">$a</span>, <span style="color: #cc6633;">$b</span>)</li>
<li>{</li>
<li> <span style="color: #0000ff;"> global</span> <span style="color: #cc6633;">$cmp</span>;</li>
<li> <span style="color: #cc6633;"> $a</span>=<span style="color: #cc6633;">$a</span>-&gt;xpath(<span style="color: #cc6633;">$cmp</span>);</li>
<li> <span style="color: #cc6633;"> $b</span>=<span style="color: #cc6633;">$b</span>-&gt;xpath(<span style="color: #cc6633;">$cmp</span>);</li>
<li> <span style="color: #cc6633;"> $a</span>=(int)<span style="color: #cc6633;">$a</span>[<span style="color: #008000;">0</span>];</li>
<li> <span style="color: #cc6633;"> $b</span>=(int)<span style="color: #cc6633;">$b</span>[<span style="color: #008000;">0</span>];</li>
<li> <span style="color: #0000ff;"> if</span> (<span style="color: #cc6633;">$a</span> == <span style="color: #cc6633;">$b</span>) {</li>
<li> <span style="color: #0000ff;"> return</span> <span style="color: #008000;"> 0</span>;</li>
<li> }</li>
<li> <span style="color: #0000ff;">return</span> (<span style="color: #cc6633;">$a</span> &gt; <span style="color: #cc6633;">$b</span>) ? -<span style="color: #008000;">1</span> : <span style="color: #008000;">1</span>;</li>
<li>}</li>
</ol>
<p></code></p></blockquote>
<p>У нас будет функция sort_by, в которую будем передавать ссылку на массив и строку, соответствующую XML элементу, по которому будем сортировать (критерий сравнения).  sort_by в свою очередь будеть вызывать стандартную функцию usort, передавая ей ссылку на массив и присваивать глобальной переменной $cmp критерий сравнения.</p>
<blockquote>
<p><code></p>
<ol>
<li><span style="color: #0000ff;">function</span> sort_by(<span style="color: #cc6633;">$sort_by</span>,<span style="color: #cc6633;">$i</span>)</li>
<li>{</li>
<li> <span style="color: #0000ff;">global</span> <span style="color: #cc6633;">$cmp</span>;</li>
<li> <span style="color: #cc6633;">$cmp</span>=<span style="color: #cc6633;">$sort_by</span>;</li>
<li> <a href="http://www.php.net/manual/en/function.usort.php">usort</a>(<span style="color: #cc6633;">$i</span>,<span style="color: #008000;">'cmp'</span>);</li>
<li>}</li>
</ol>
<p></code></p></blockquote>
<p>Почти готово, теперь мы можем к примеру вывести отсортированные по количеству комментариев записи вот так:</p>
<blockquote>
<p><code></p>
<ol>
<li><span style="color: #cc6633;">$items</span>=load_all();</li>
<li>sort_by(<span style="color: #008000;">'yablogs:comments'</span>,&amp;<span style="color: #cc6633;">$items</span>);</li>
<li><span style="color: #0000ff;">foreach</span> (<span style="color: #cc6633;">$items</span> <span style="color: #0000ff;">as</span> <span style="color: #cc6633;">$item</span>) {</li>
<li> <span style="color: #cc6633;">$comments</span>=<span style="color: #cc6633;">$item</span>-&gt;xpath(<span style="color: #008000;">'yablogs:comments'</span>);</li>
<li> <span style="color: #cc6633;">$links</span>=<span style="color: #cc6633;">$item</span>-&gt;xpath(<span style="color: #008000;">'yablogs:links'</span>);</li>
<li> <span style="color: #cc6633;">$visits</span>=<span style="color: #cc6633;">$item</span>-&gt;xpath(<span style="color: #008000;">'yablogs:visits24'</span>);</li>
<li> <span style="color: #0000ff;">echo</span> <span style="color: #008000;">"&lt;a href='$item-&gt;link'&gt;$item-&gt;title&lt;/a&gt;&lt;br&gt;"</span>,</li>
<li> <span style="color: #008000;">"Комментариев: $comments[0]&lt;br&gt;"</span>,</li>
<li> <span style="color: #008000;">"Ссылок: $links[0]&lt;br&gt;"</span>,</li>
<li> <span style="color: #008000;">"Просмотров: $visits[0]&lt;hr&gt;"</span>;</li>
<li>}</li>
</ol>
<p></code></p></blockquote>
<p>Как именно сортировать наш список, будем передавать параметром URI sort_by, который будет доступен в php как $_GET['sort_by']. Создадим три ссылки для разных типов сортировки, для этого перед тегом &lt;?php, обозначающим начало php кода, пишем:</p>
<blockquote>
<p><code></p>
<ol>
<li><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div</span> <span style="color: #ff0000;">style</span><span style="color: #0000ff;">="text-align:center;"&gt;</span></li>
<li> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a</span> <span style="color: #ff0000;">href</span><span style="color: #0000ff;">="index.php/?sort_by=comments"&gt;</span>Самые комментируемые<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a</span><span style="color: #0000ff;">&gt;</span></li>
<li> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a</span> <span style="color: #ff0000;">href</span><span style="color: #0000ff;">="index.php/?sort_by=visits24"&gt;</span>Самые посещаемые<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a</span><span style="color: #0000ff;">&gt;</span></li>
<li> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">a</span> <span style="color: #ff0000;">href</span><span style="color: #0000ff;">="index.php/?sort_by=links"&gt;</span>Самые цитируемые<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">a</span><span style="color: #0000ff;">&gt;</span></li>
<li><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span></li>
</ol>
<p></code></p></blockquote>
<p>Нам осталось только получить в PHP критерий сортировки и отсортировать все соответствующим образом. Для этого строку с  sort_by(<span style="color: #008000;">&#8216;yablogs:comments&#8217;</span>,&amp;<span style="color: #cc6633;">$items</span>)  заменяем на это:</p>
<blockquote>
<p><code></p>
<ol>
<li><span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">isset</span>(<span style="color: #cc6633;">$_GET</span>[<span style="color: #008000;">'sort_by'</span>])){</li>
<li> <span style="color: #cc6633;">$crit</span>=<span style="color: #cc6633;">$_GET</span>[<span style="color: #008000;">'sort_by'</span>];</li>
<li>}<span style="color: #0000ff;">else</span>{</li>
<li> <span style="color: #cc6633;">$crit</span>=<span style="color: #008000;">'comments'</span>;</li>
<li>}</li>
<li>sort_by(<span style="color: #008000;">'yablogs:'</span> . <span style="color: #cc6633;">$crit</span> ,&amp;<span style="color: #cc6633;">$items</span>);</li>
</ol>
<p></code></p></blockquote>
<p>И напоследок добавим немного оформления с помощью CSS, чтобы наш рейтинг смотрелся получше:</p>
<blockquote>
<p><code></p>
<ol>
<li><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">style</span><span style="color: #0000ff;">&gt;</span></li>
<li> div{padding:20px; background-color:#EEE;}</li>
<li> hr{border:none; border-bottom:1px dashed yellow;}</li>
<li><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">style</span><span style="color: #0000ff;">&gt;</span></li>
</ol>
<p></code></p></blockquote>
<p>Исходник того, что мы сделали вы можете скачать здесь: <a href="http://www.nayjest.ru/userfiles/yabdex.blograting.by.nayjest.zip#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">http://www.nayjest.ru/userfiles/yabdex.blograting.by.nayjest.zip</a></p>
<p>В следующих уроках я расскажу, как сделать из этого полноценный веб-сервис, где все будет ООП&#8217;шненько, будет работа с БД, архитектура MVC, валидный HTML, кэширование, может даже AJAX и вообще все, что захотите (предлагайте в комментариях!).</p>
<p>Надеюсь, было интересно и полезно. Чтобы не пропустить следующие уроки, <a title="RSS канал сайта Nayjest.ru" href="http://feeds.feedburner.com/nayjest">подписывайтесь на мой RSS</a>, follow me on <a title="Мой twitter" href="http://twitter.com/nayjest">Twitter</a>. Спасибо за внимание, жду ваших комментариев!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/php/blogpostrating/feed</wfw:commentRss>
		<slash:comments>71</slash:comments>
		</item>
		<item>
		<title>Пора скачать jQuery 1.4 alpha1! Детальный обзор</title>
		<link>http://www.nayjest.ru/jquery/1-4-alpha1-release#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/jquery/1-4-alpha1-release#comments</comments>
		<pubDate>Sat, 05 Dec 2009 14:38:08 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=91</guid>
		<description><![CDATA[ Вчера в официальном блоге jQuery появилась новость о выходе новой версии этой удобнейшей библиотеки (не знаю, как бы я жил без jQuery).
Это первая альфа jQuery версии 1.4.
Код стабильный (проходит тесты во всех браузерах из списка поддерживаемых), разработчики ждут тестирования своего детища на реальных приложениях.
Что нового?
Методу live сделали капитальный ремонт
Немного освежу вашу память: метод live [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float:left;" title="jQuery" src="http://www.nayjest.ru/userfiles/jQuery.jpg" alt="jQuery" /> Вчера в официальном блоге <strong>jQuery</strong> появилась <a href="http://blog.jquery.com/2009/12/04/jquery-14-alpha-1-released/" target="_blank">новость</a> о выходе новой версии этой удобнейшей библиотеки (не знаю, как бы я жил без jQuery).</p>
<p>Это первая альфа jQuery версии 1.4.</p>
<p>Код стабильный (проходит тесты во всех браузерах из списка поддерживаемых), разработчики ждут тестирования своего детища на реальных приложениях.<span id="more-91"></span></p>
<h2>Что нового?</h2>
<h4>Методу <strong>live</strong> сделали капитальный ремонт</h4>
<p>Немного освежу вашу память: метод <strong>live</strong> впервые появился в jQuery 1.3, выполняет ту же функцию, что и bind: <strong>позволяет назначить обработчик событий</strong>, но делает это несколько по-другому: мы можем назначить обработчик событий для элементов определенного типа, даже если их еще нет на странице и они генерируются <strong>динамически</strong>. А когда у нас в документе появятся такие элементы, им автоматически, без нашего вмешательства будет назначен обработчик событий. Пример:</p>
<blockquote><p><code><span style="font-family: Consolas, 'Courier New', Courier, monospace; color: black; font-size: x-small;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span>&gt;<br />
$(<span style="color: #a31515;">'input.live'</span>).live(<span style="color: #a31515;">'click'</span>,<br />
<span style="color: #0000ff;">function</span>()<br />
{<br />
alert(<span style="color: #a31515;">"Подпишись на этот блог по RSS!"</span>);<br />
});<br />
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><br />
<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="button"</span> <span style="color: #ff0000;">value</span><span style="color: #0000ff;">="Добавить кнопку"</span><br />
<span style="color: #ff0000;">onclick</span>="$(<span style="color: #0000ff;">'body'</span>).<span style="color: #ff0000;">append</span>(&amp;<span style="color: #ff0000;">lt</span>;<span style="color: #ff0000;">input type</span><span style="color: #0000ff;">='button'</span> <span style="color: #ff0000;">class</span><span style="color: #0000ff;">='live'/&gt;</span>)"<br />
<span style="color: #0000ff;">/&gt;</span><br />
</span></code></p></blockquote>
<p>В <strong>jQuery 1.4</strong> <strong>метод live</strong> поддерживает во всех браузерах такие события: <strong>submit</strong>, <strong>change</strong>, <strong>mouseenter</strong>, <strong>mouseleave</strong>, <strong>focus</strong>, <strong>blur</strong>. Также теперь поддерживается контекст в обработчиках событий и передача дополнительных данных необязательным параметром data.</p>
<h4>Подкорректировано поведение метода add</h4>
<p>Этот метод добавляет элементы к набору уже выбранных. Пример: $(&#8216;div&#8217;).add(&#8216;p&#8217;).css(&#8216;color&#8217;,'red&#8217;) выполнит то же, что и $(&#8216;div, p&#8217;).css(&#8216;color&#8217;,'red&#8217;).</p>
<p>Начиная с <strong>jQuery 1.4 </strong>метод <strong>add</strong> <strong>возвращает элементы строго в последовательности их расположения в объектной модели документа</strong> (DOM).</p>
<h2>Размер библиотеки и производительность</h2>
<p><strong>Размер jQuery в несжатом виде увеличился на 20%</strong> (jQuery 1.3.2 весит 120 Kb).<br />
Тестов по производительности еще нет, но разработчики заверяют, что новая версия работает быстрее.<br />
<strong> </strong></p>
<p><strong>Очень сильно улучшена производительность</strong> некоторых функций для работы с <strong>Document object model</strong>, в частности <strong>append</strong> (вставка в конец дочерних элементов), <strong>prepend </strong>(вставка перед дочерними элементами).</p>
<p>Также теперь работают быстрее функции <strong>find</strong>, <strong>empty</strong>, <strong>remove</strong>, <strong>addClass</strong>, <strong>removeClass</strong>, <strong>hasClass</strong>, <strong>attr</strong> и <strong>css.</strong></p>
<p>Ну, это слова разработчиков, что касается практики, на Хабре проскакивала вот такая картинка:<br />
<img title="Сравнение производительности jQuery 1.4 и более старых версий" src="http://img214.imageshack.us/img214/7460/jquery.png" alt="Сравнение производительности jQuery 1.4 и более старых версий" /></p>
<p>А еще вот результаты тестирования в FireFox 3.6b4: jQuery 1.3.2 va jQuery 1.4a1:<br />
<a target='_blank' title='ImageShack - Image And Video Hosting' href='http://img138.imageshack.us/img138/4484/slickspeedselectorstest.png'><img src='http://img689.imageshack.us/img689/4484/slickspeedselectorstest.png' border='0'/></a></p>
<h2>Твори добро!</h2>
<p>Мы можем помочь разработчикам jQuery, попробовав подключить ее в свои проекты <em>(не на production server конечно же, это ведь первая альфа-версия)</em>. Если вы обнаружите какие-то баги/ошибки &#8212; <a title="Регистрация в баг-треккере jQuery" href="http://dev.jquery.com/register" target="_blank">зарегистрируйтесь</a>/<a title="Вход на баг-треккер jQuery" href="http://dev.jquery.com/login" target="_blank">залогиньтесь</a> на <a title="official jQuery bug-tracker " href="http://dev.jquery.com" target="_blank">баг-треккекре JQuery</a> и сообщите о проблемме разработчикам, сделаете хорошее дело.</p>
<h2>Скачай новую версию jQuery!</h2>
<p><strong>Скачать jQuery 1.4 alpha 1</strong>: <a href="http://code.jquery.com/jquery-1.4a1.js">http://code.jquery.com/jquery-1.4a1.js</a> (размер: 87.9 Kb)</p>
<p><strong>Скачать jQuery 1.4 alpha 1 minified</strong>: <a href="http://code.jquery.com/jquery-1.4a1.min.js">http://code.jquery.com/jquery-1.4a1.min.js</a> (145 Kb)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/jquery/1-4-alpha1-release/feed</wfw:commentRss>
		<slash:comments>54</slash:comments>
		</item>
		<item>
		<title>PSD to CSS: Генерация верстки сайта из дизайн-макета Photoshop</title>
		<link>http://www.nayjest.ru/verstka/psd-to-css-generation#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/verstka/psd-to-css-generation#comments</comments>
		<pubDate>Sat, 28 Nov 2009 14:36:01 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[Верстка веб-страниц]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[автоматизация]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=79</guid>
		<description><![CDATA[
Автоматическая верстка веб-сайтов. В наши дни это стает возможным. Лично я давно мечтал о такой программе, даже подумывал о подобном стартапе, но я прекрасно понимал, что генерировать читабельные, валидные, красивые, семантичные html/css макеты  (да еще и резиновые) из файлов фотошопа &#8212; это очень сложная задача и потребует много времени, а времени этого всегда ой как [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border:none; float:left; margin:0 10px 0 10px;" title="PSD to HTML + CSS" src="/userfiles/psd-to-css.gif" alt="PSD to HTML + CSS" /></p>
<p><strong>Автоматическая верстка веб-сайтов. </strong>В наши дни это стает возможным. Лично я давно мечтал о такой программе, даже подумывал о подобном стартапе, но я прекрасно понимал, что генерировать читабельные, валидные, красивые, семантичные html/css макеты  (да еще и резиновые) из файлов фотошопа &#8212; это очень сложная задача и потребует много времени, а времени этого всегда ой как мало :)</p>
<p>Так вот, представляю вам <strong>бесплатный веб-сервис для автоматического преобразования ваших Psd макетов в сверстанные страцицы сайта</strong>: <strong><a href="http://psd2cssonline.com/" target="_blank">Psd 2 css online</a><span style="font-weight: normal;">. </span></strong></p>
<p><strong><span style="font-weight: normal;"><span style="background-color: #ffffff; ">Для того, чтобы сгенерировать нужный нам макет веб-сайта, нужно специальным образом проименовать слои (Layers).  Например если в имени слоя есть суффикс <em>_text</em>, то данный слой экспортируется в верстку как текст, а не как картинка. Поддерживаются такие необходимые вещи, как расширяющиеся в зависимости от размера контента блоки, подсветка (hover) кнопок и много чего еще.<span id="more-79"></span><br />
</span></span></strong></p>
<p><span style="background-color: #ffffff;">Разработчики сразу же обращают внимание на то, что генерировать верстку можно из psd файлов, созданных не только с помощью <strong>Adobe Photoshop</strong>, но и другой софтиной, например достаточно популярным бесплатным графическим редактором <strong>Gimp</strong>.</span></p>
<p><span style="background-color: #ffffff;">На сайте есть уроки и видео-уроки, показывающие, как легко вы можете преобразовать ваш PSD дизайн-макет в сверстанный макет. </span></p>
<p><span style="background-color: #ffffff;">Что интересно, верстка их сайта сделана их же сайтом :)</span></p>
<p><a title="Открыть www.psd2cssonline.com в новом окне" href="http://psd2cssonline.com/" target="_blank">Ну все, можете уже смотреть www.psd2cssonline.com</a></p>
<p>Конечно, появление такого веб-сервиса не значит, что верстальщики могут остаться без работы в ближайшее время, пока этот веб-сервис очень ограничен в своих возможностях, генерируемая верстка &#8230;ну вы же сами понимаете, она &laquo;генерируемая&raquo; автоматически, а значит де-факто не очень красива, о резиновых макетах (с динамической шириной) пока даже не идет речь, и есть еще много-много недостатков. Но с этим уже можно поиграться, можно пощупать, это бесплатно.</p>
<p>Вот если бы еще прикрутить этот сервис плагином к Phptoshop, было бы вообще замечательно.</p>
<p>В догонку: <a href="http://divine-project.com/" target="_blank"><strong>Divine project</strong></a><strong> &#8212; автоматическое создание темы для WorPress из PSD шаблона</strong> и <a href="http://habrahabr.ru/blogs/webdev/76527/" target="_blank">пост о нем же</a> на Хабре.  Реализовано как программа и плагин для Photoshop.</p>
<p>Такой вариант очень интересен, и должен признать, значительно удобнее, но жаль, что PSD шаблоны преобразовываются исключительно в макеты для  WordPress</p>
<p>Движение в сторону автоматизации работы верстальщика &#8212; это очень, очень позитивно и будем надеяться, это направление будет развиваться и далее.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/verstka/psd-to-css-generation/feed</wfw:commentRss>
		<slash:comments>74</slash:comments>
		</item>
		<item>
		<title>Monoface: забавный генератор лиц (Flash)</title>
		<link>http://www.nayjest.ru/sites/monoface-flash-facegen#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/sites/monoface-flash-facegen#comments</comments>
		<pubDate>Sat, 21 Nov 2009 11:58:06 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[Интересные сайты]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=75</guid>
		<description><![CDATA[ Собственно вот: monoface
Флеш-приложение из частей фотографий реальных людей случайным образом генерирует смешные рожи.
При клике по какой-либо части лица, она заменяется на другую.
Есть даже скрин-сейвер.
Рекламное агентство Mono поздравляет нас таким образом с наступающим Новым годом.
Реквестую такой генератор персонажей в следующей части The elder scrolls :)
]]></description>
			<content:encoded><![CDATA[<p><img src="//www.nayjest.ru/userfiles/monoface.jpg" align="left"/> Собственно вот: <a href="http://www.mono-1.com/monoface/main.html">monoface</a><br />
Флеш-приложение из частей фотографий реальных людей случайным образом генерирует смешные рожи.<br />
При клике по какой-либо части лица, она заменяется на другую.<br />
Есть даже скрин-сейвер.<br />
Рекламное агентство Mono поздравляет нас таким образом с наступающим Новым годом.</p>
<p><strong>Реквестую такой генератор персонажей в следующей части The elder scrolls :)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/sites/monoface-flash-facegen/feed</wfw:commentRss>
		<slash:comments>90</slash:comments>
		</item>
		<item>
		<title>Вот он какой, Doctrine 2 (Приурочено к релизу Doctrine 2.0 alpha 3)</title>
		<link>http://www.nayjest.ru/php/doctrine2orm#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://www.nayjest.ru/php/doctrine2orm#comments</comments>
		<pubDate>Sun, 15 Nov 2009 10:27:50 +0000</pubDate>
		<dc:creator>Nayjest</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.nayjest.ru/?p=68</guid>
		<description><![CDATA[
Поздравляю, коллеги! 3 дня назад увидела свет треться альфа-версия самого мощного на сегодняшний день ORM-фреймворка для PHP: Doctrine.
И эта новость по большему счету заслуживает внимания потому что в Doctrine 2.0 произошли очень существенные изменения в сравнении с предыдущими версиями. Сразу замечу, что вкусности эти потребуют от нас ни много ни мало &#8212; поддержку php 5.3.

Официальный [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.symfony-project.org/uploads/assets/doctrine/logo.png" alt="image" align="left" style="border:none" /><br />
Поздравляю, коллеги! 3 дня назад увидела свет треться альфа-версия самого мощного на сегодняшний день ORM-фреймворка для PHP: Doctrine.</p>
<p>И эта новость по большему счету заслуживает внимания потому что в Doctrine 2.0 произошли очень существенные изменения в сравнении с предыдущими версиями. Сразу замечу, что вкусности эти потребуют от нас ни много ни мало &#8212; поддержку php 5.3.</p>
<p><span id="more-68"></span></p>
<p>Официальный тизер Doctrine 2.0 выглядит так:</p>
<blockquote>
<ol>
<li><span style="color: #cc6633;">&lt;?php</span></li>
<li><span style="color: #0000ff;">namespace</span> Doctrine\Tests\Models\CMS;</li>
<li><span style="color: #696969;">/**</span><br />
<span style="color: #696969;">* @DoctrineEntity(tableName=&raquo;cms_articles&raquo;)</span><br />
<span style="color: #696969;">*/</span></li>
<li><span style="color: #0000ff;">class</span> CmsArticle</li>
<li>{</li>
<li> <span style="color: #696969;">/**</span><br />
<span style="color: #696969;"> * @DoctrineId</span><br />
<span style="color: #696969;"> * @DoctrineColumn(type=&raquo;integer&raquo;)</span><br />
<span style="color: #696969;"> * @DoctrineIdGenerator(&laquo;auto&raquo;)</span><br />
<span style="color: #696969;"> */</span></li>
<li> <span style="color: #0000ff;">public</span> <span style="color: #cc6633;">$id</span>;</li>
<li> <span style="color: #696969;">/**</span><br />
<span style="color: #696969;"> * @DoctrineColumn(type=&raquo;varchar&raquo;, length=255)</span><br />
<span style="color: #696969;"> */</span></li>
<li> <span style="color: #0000ff;">public</span> <span style="color: #cc6633;">$topic</span>;</li>
<li> <span style="color: #696969;">/**</span><br />
<span style="color: #696969;"> * @DoctrineColumn(type=&raquo;varchar&raquo;)</span><br />
<span style="color: #696969;"> */</span></li>
<li> <span style="color: #0000ff;">public</span> <span style="color: #cc6633;">$text</span>;</li>
<li> <span style="color: #696969;">/**</span><br />
<span style="color: #696969;"> * @DoctrineManyToOne(targetEntity=&raquo;Doctrine\Tests\Models\CMS\CmsUser&raquo;,</span><br />
<span style="color: #696969;"> joinColumns={&laquo;user_id&raquo; = &raquo;id&raquo;})</span><br />
<span style="color: #696969;"> */</span></li>
<li> <span style="color: #0000ff;">public</span> <span style="color: #cc6633;">$user</span>;</li>
<li> <span style="color: #696969;">/**</span><br />
<span style="color: #696969;"> * @DoctrineOneToMany(targetEntity=&raquo;Doctrine\Tests\Models\CMS\CmsComment&raquo;, mappedBy=&raquo;article&raquo;)</span><br />
<span style="color: #696969;"> */</span></li>
<li> <span style="color: #0000ff;">public</span> <span style="color: #cc6633;">$comments</span>;</li>
<li>}</li>
</ol>
</blockquote>
<p>Итак, на что нам здесь следовало бы обратить здесь внимание:</p>
<p>1) Мы задаем мета-данные для меппинга класса с помощью комментариев DocBlock (XML-меппиг и YAML-меппинг никуда не делся)</p>
<p>2) Мы не наследуем наш класс CmsArticle от встроенных класов Doctrine.</p>
<p>3.) Свойства класса не обязаны быть объявлены как public, они могут быть приватными или защищенными. Doctrine не требует от вас наличия getter&#8217;od и setter&#8217;ов для каждого свойства. Вы полностью свободны в том, как вы будете проектировать ваши классы.</p>
<p>Друзья, по-моему это великолепно!</p>
<p>Смею предположить, что чтение комментариев DocBlock реализовано с помощью <a href="http://docs.php.net/manual/en/book.reflection.php">Reflection</a> (там есть метод getDocComment).<br />
Довольно интересное применение Reflection.<br />
Кстати, еще более активно и более элегантно(имхо) это используется в <a href="http://www.recessframework.org/">Recess php framework</a>. Случайно наткнулся на него и был поражен, увидел там именно то, что хотел делать в собственном велосипеде. Вещь однозначно заслуживает внимания.</p>
<p><strong>Производительность:</strong><br />
Doctrine 2.0 на php5.3 кушает на 31% меньше памяти и выполняется на 17% быстрее, чем Doctrine 1.0 на PHP 5.2.8<br />
(информация из предварительных тестов в блоге разработчиков)</p>
<p><strong>Что нового в Doctrine 2.0 Alpha 3:</strong><br />
Самое существенное с моей точки зрения это функционал для конвертирования схем из Doctrine 1.0 в 2.0.<br />
А также более 60 фиксов, рефакторинг кода, работа над драйверами для меппинга и экспорта, как говорят разработчики, код начинает становиться стабильным.</p>
<p><strong>Чего нам ждать:</strong><br />
11 декабря 2009 будет еще один альфа-релиз, а 8-го января выйдет уже первая бета.</p>
<p><strong>Ссылки:</strong><br />
<a href="http://www.doctrine-project.org/">Здесь живет Doctrine PHP ORM</a><br />
<a href="http://www.doctrine-project.org/documentation/2_0/en">Вот документация по версии 2.0:</a><br />
<a href="http://www.doctrine-project.org/blog/tags/2-0">Посты из блога разработчиков с тегом 2.0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nayjest.ru/php/doctrine2orm/feed</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>
