<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2060304370694755660</id><updated>2011-12-07T23:37:34.681+04:00</updated><title type='text'>Как я создавал свой первый сайт</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-6180276015886116230</id><published>2011-12-07T23:26:00.002+04:00</published><updated>2011-12-07T23:36:30.985+04:00</updated><title type='text'>Сайтов уже 5</title><content type='html'>Давно не писал ничего, много работал. За прошедший год сделал 2 новых сайта: &lt;a href="http://www.sepoda.ru"&gt;Сервис поиска дешевых авиабилетов&lt;/a&gt; и &lt;a href="http://www.hotel-praga.ru"&gt;Отели Праги&lt;/a&gt;.&lt;br /&gt;Как не трудно догадаться, на первом удобно искать &lt;a href="http://www.sepoda.ru"&gt;дешевые авиабилеты&lt;/a&gt;, а на втором выбирать и бронировать &lt;a href="http://www.hotel-praga.ru"&gt;отели в Праге&lt;/a&gt;. &lt;br /&gt;Что примечательно, что оба сайта делал в партнерстве с другими людьми, получилось, по-моему, не плохо. &lt;br /&gt;Из того что не получилось сделать в этом году - это сайт по сравнению цен на хостелы по аналогии с hotelscombined, только hotelscombined сравнивает отели. К сожалению, не смог найти еще одного партнера, который бы предоставил XML-поиск по предлагаемым этим партнерам хостелам.&lt;br /&gt;В планах на следующий год сделать еще несколько узкоспециализированных сайтов по поиску отелей в различных городах Европы и США.&lt;br /&gt;Желаю всем хорошо встретить Новый год и конечно же удачи и счастья в новом году. Жизнь продолжается не смотря ни на что.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-6180276015886116230?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/6180276015886116230/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2011/12/5.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6180276015886116230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6180276015886116230'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2011/12/5.html' title='Сайтов уже 5'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-6949414624225423249</id><published>2010-11-04T22:33:00.003+03:00</published><updated>2010-11-04T22:45:45.828+03:00</updated><title type='text'>Как я создавал свой 3-й сайт</title><content type='html'>В начале октября совсем случайно узнал о существовании сайта по бронированию отелей hotelclub.com. Они предлагали лучшие цены на отель в одном из американский городов, если сравнивать через hotelscombined. Как оказалось, у них есть партнерская программа. Да и домен &lt;a href="www.hotelclub.su"&gt;hotelclub.su&lt;/a&gt; оказался свободен.&lt;br /&gt;Я не долго думая купил домен, подобрал &lt;a href="http://templates.arcsin.se/" rel="nofollow"&gt;шаблон сайта у Arcsin&lt;/a&gt;, переработал его под себя.&lt;br /&gt;Много времени ушло на то, чтобы корректно обработать информацию, предоставляемую hotelclub своим партнером, еще больше на разработку самого сайта. И сегодня я его выложил на всеобщее обозрение. &lt;br /&gt;Теперь &lt;a href="http://www.hotelclub.su/oteli-Parizha/"&gt;отели Парижа&lt;/a&gt; или &lt;a href="http://www.hotelclub.su/oteli-Rima/"&gt;отели Рима&lt;/a&gt; бронируем на hotelclub.su.&lt;br /&gt;Конечно же остались некритичные доработки, например, добавление на страницу &lt;a href="http://www.hotelclub.su/Normandy-Hotel-Paris/"&gt;отеля Normady&lt;/a&gt; возможности выбора дат в календаре, но в целом все работает.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-6949414624225423249?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/6949414624225423249/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2010/11/3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6949414624225423249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6949414624225423249'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2010/11/3.html' title='Как я создавал свой 3-й сайт'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-5211447693430111778</id><published>2010-08-30T00:11:00.006+04:00</published><updated>2010-08-30T13:48:56.341+04:00</updated><title type='text'>Вирусы</title><content type='html'>&lt;p&gt;В конце прошлого года мой сайт впервые подвергся вирусной атаке. Какая-то гадость, которая проникла на мой компьютер, стащила пароль к ftp-доступу и дописала в конец каждого файла index*.* строку с вредным кодом, а так же заразила все файлы с расширением js. Лечится все это довольно просто, либо вручную удаляется вредноносный код, либо просто заново заливаются файлы из архива. В том году это было не критично, т.к. проект только стартовал, и посещаемость была так себе.&lt;/p&gt;&lt;p&gt;Повторной атаке я подвергся в пятницу, 27 августа. Открыл одну из страниц в Mozilla Firefox и комп как-то стал притормаживать, примерно через минуту антивирус Avira стал сильно пищать, какие-то скрипты остановил, но главную заразу не убил. В течение часа были заражены все файлы по описанному выше сценарию.&lt;/p&gt;&lt;p&gt;Последствия я заметил только в субботу. При открытии страниц сайта &lt;a href="http://reviews.bloged.org"&gt;Firefox выдавал предупреждение о заражении&lt;/a&gt;. Я поменял пароль доступа, перезалил файлы из архива, и успокоился. Как оказалось, зря.&lt;/p&gt;&lt;p&gt;Зараза осталась на моем компьютере. Ни Касперский, ни DrWeb ее не убили. И заново все файлы на сайте были заражены.&lt;/p&gt;&lt;p&gt; Теперь &lt;a href="http://www.booktrip.ru/hotel/kz/astana/"&gt;это заметил и Yandex&lt;/a&gt;, и стал выдавать угрожающие предупреждения. Поток посетителей, приходящих от Yandex'а иссяк. &lt;/p&gt;&lt;p&gt;Я еще раз восстановил файлы из архива. Больше атак не было. А окончательно победить заразу помогли ребята из &lt;a href="http://virusinfo.info/showthread.php?p=698059"&gt;virusinfo.info&lt;/a&gt;, за что им большое спасибо.&lt;/p&gt;&lt;p&gt;Кстати, &lt;a href="http://reviews.bloged.org/fr/paris/"&gt;google довольно оперативно отреагировал на очистку сайта&lt;/a&gt;, и уже снял все свои ограничения, FireFox больше не ругается. А вот Yandex все думает, и сильно предостерегает от открытия страницы типа &lt;a href="http://www.booktrip.ru/hotel/it/rome/"&gt;забронировать гостиницу в Риме&lt;/a&gt;. И ждать его еще несколько дней. Мало того, что среагировал с дневным, по сравнению с google, опозданием, так теперь еще и повторную проверку надо ждать. Обидно.&lt;/p&gt;&lt;p&gt;Теперь, при открытии подозрительный сайтов, буду всегда отключать JavaScript, а в случае заражения быстро восстанавливать файлы из архива на сайте.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-5211447693430111778?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/5211447693430111778/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2010/08/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/5211447693430111778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/5211447693430111778'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2010/08/blog-post.html' title='Вирусы'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-8710980943446414312</id><published>2009-12-11T15:33:00.004+03:00</published><updated>2009-12-11T16:24:46.373+03:00</updated><title type='text'>Фотографии от Panoramio на своем сайте</title><content type='html'>Случайно наткнулся на&amp;nbsp;cайт компании &lt;noindex&gt;&lt;a rel="nofollow" href="http://www.panoramio.com"&gt;Panoramio&lt;/a&gt;&lt;/noindex&gt;. Разработчики этого сайта создали сервис привязывания фотографий к&amp;nbsp;географическим координатам. Т.е. сделал прекрасный снимок, зашел к&amp;nbsp;ним на&amp;nbsp;сайт и&amp;nbsp;опубликовал его, не&amp;nbsp;забыв привязать к&amp;nbsp;географическим координатам. Так&amp;nbsp;же есть &lt;noindex&gt;&lt;a rel="nofollow" href="http://www.panoramio.com/api/"&gt;API&lt;/a&gt;&lt;/noindex&gt;, которое позволяет получать информацию о&amp;nbsp;фотографиях, относящихся к&amp;nbsp;географическим объектам, находящимися в&amp;nbsp;заданном квадрате.&lt;br /&gt;Сейчас я&amp;nbsp;работаю над вторым сайтом созданным для самостоятельного бронирвоания путешествий - &lt;a href="http://booktrip.ru"&gt;БукТрип.ру&lt;/a&gt;. Для предоставления возможности &lt;a href="http://booktrip.ru/hotel/"&gt;бронирования отелей&lt;/a&gt; собрал достаточно большую базу географических названий. Но&amp;nbsp;вот для взаимодействия с&amp;nbsp;API от&amp;nbsp;Panoramio нужны координаты этих объектов. И&amp;nbsp;эти координаты можно получить, воспользовавшись сервисом Google Geocoding. Чтобы определить координаты, надо сделать запрос к&amp;nbsp;сайту maps.google.com следующего вида: &lt;pre&gt;http://maps.google.com/maps/geo?q=Paris,fr&amp;output=csv&amp;key=ABQIAAAALkH7z-&lt;br /&gt;7Yg6rN5Wgtte6WQxRhFePxzidMXG8dHw849BemzMV9YxRakAkV291BmrgJ5R_LgrNfgigIOQ&lt;/pre&gt;&lt;br /&gt;где &lt;em&gt;q&lt;/em&gt;&amp;nbsp;&amp;mdash; адрес искомого объекта, &lt;em&gt;output&lt;/em&gt;&amp;nbsp;&amp;mdash; формат ответа, &lt;em&gt;key&lt;/em&gt;&amp;nbsp;&amp;mdash; ключ для работы с&amp;nbsp;Google Maps, который можно получить на&amp;nbsp;сайте &lt;noindex&gt;&lt;a rel="nofollow" href="http://code.google.com/intl/ru/apis/maps/signup.html" &gt;регистрации ключа к&amp;nbsp;API Карт Google&lt;/a&gt;&lt;/noindex&gt;. Ответом на&amp;nbsp;запрос в&amp;nbsp;примере будет строка &lt;pre&gt;200,4,48.8566667,2.3509871&lt;/pre&gt; &lt;em&gt;200&lt;/em&gt;&amp;nbsp;&amp;mdash; код ответа (200&amp;nbsp;&amp;mdash; успешно, 403, 602 и&amp;nbsp;прочие&amp;nbsp;&amp;mdash; нет), &lt;em&gt;4&lt;/em&gt;&amp;nbsp;&amp;mdash; точность определения (страна, город, улица, дом и&amp;nbsp;т.п.), &lt;em&gt;48.8566667,2.3509871&lt;/em&gt;&amp;nbsp;&amp;mdash; искомые широта и&amp;nbsp;долгота.&lt;br /&gt;Получив координаты объекта остается определить только &amp;laquo;диаметр&amp;raquo; зоны, фотографии объектов в&amp;nbsp;которой и&amp;nbsp;будут показываться. Для получения крайних точек можно просто вычесть и&amp;nbsp;прибавить к&amp;nbsp;координатам центра &lt;nobr&gt;какие-то&lt;/nobr&gt; константы. Но&amp;nbsp;&lt;nobr&gt;Земля-то&lt;/nobr&gt; круглая, и&amp;nbsp;точка, находящаяся на&amp;nbsp;расстоянии 10&amp;nbsp;км от&amp;nbsp;заданной должна вычисляться по&amp;nbsp;более сложной формуле, которую я&amp;nbsp;и&amp;nbsp;&lt;noindex&gt;&lt;a rel="nofollow" href="http://js-php.ru/web-development/distance-from-dot-to-dot/"&gt;нашёл&lt;/a&gt;&lt;/noindex&gt;.&lt;br /&gt;Получив от&amp;nbsp;Panoramio список фотографий, путем несложных манипуляций с&amp;nbsp;данными, я&amp;nbsp;их&amp;nbsp;вывел в&amp;nbsp;виде &lt;a href="http://booktrip.ru/hotel/fr/paris/#photo"&gt;слайд-шоу&lt;/a&gt; (скрипт для создания слайд-шоу можно посмотреть на&amp;nbsp;&lt;noindex&gt;&lt;a rel="nofollow" href="http://www.phatfusion.net/slideshow/"&gt;http://www.phatfusion.net/slideshow/&lt;/a&gt;&lt;/noindex&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-8710980943446414312?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/8710980943446414312/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/12/panoramio.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/8710980943446414312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/8710980943446414312'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/12/panoramio.html' title='Фотографии от Panoramio на своем сайте'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-83767612993888283</id><published>2009-11-27T15:16:00.005+03:00</published><updated>2009-11-27T19:28:23.785+03:00</updated><title type='text'>Аналитические функции в MySQL</title><content type='html'>Всем хорош язык MySQL, но&amp;nbsp;вот в&amp;nbsp;некоторых случаях надо делать запросы, которые, благодаря наличию аналитических функций, в&amp;nbsp;Oracle делаются весьма просто.&lt;br /&gt;Рассмотрим на&amp;nbsp;примере. Скажем, есть у&amp;nbsp;нас 2&amp;nbsp;таблицы: товары с&amp;nbsp;полями goods_id&amp;nbsp;&amp;mdash; идентификатор, grp&amp;nbsp;&amp;mdash; группа, name&amp;nbsp;&amp;mdash; наименование, и&amp;nbsp;обобщенная таблица с&amp;nbsp;продажами sales с&amp;nbsp;полями goods_id&amp;nbsp;&amp;mdash; идентификатор товара, period&amp;nbsp;&amp;mdash; период, summa&amp;nbsp;&amp;mdash; суммарная стоимость проданных товаров за&amp;nbsp;указанный период.&lt;br /&gt;И&amp;nbsp;вот требуется вывести по&amp;nbsp;10&amp;nbsp;самых продаваемых товаров из&amp;nbsp;каждой группы за&amp;nbsp;заданный период. В&amp;nbsp;Oracle запрос&amp;nbsp;бы выглядел вот так:&lt;pre&gt;&lt;br /&gt;SELECT grp, name, summa&lt;br /&gt;  FROM (&lt;br /&gt;  SELECT g.grp&lt;br /&gt;        ,g.name&lt;br /&gt;        ,s.summa&lt;br /&gt;        ,row_number() &lt;br /&gt;          OVER (PARTITION BY g.group &lt;br /&gt;                ORDER BY s.summa) as rn&lt;br /&gt;    FROM goods g&lt;br /&gt;        ,sales s&lt;br /&gt;   WHERE g.goods_id = s.sales_id&lt;br /&gt;     AND s.period = 2009101&lt;br /&gt;)&lt;br /&gt;WHERE rn &lt;= 10&lt;br /&gt;ORDER BY grp, name&lt;/pre&gt;А&amp;nbsp;в&amp;nbsp;MySQL вот так:&lt;pre&gt;&lt;br /&gt;SET @rows_count = 0;&lt;br /&gt;SET @grp = NULL;&lt;br /&gt;SELECT grp, name, summa &lt;br /&gt;  FROM (&lt;br /&gt;  SELECT g.grp&lt;br /&gt;        ,g.name&lt;br /&gt;        ,s.summa&lt;br /&gt;        ,CASE WHEN IFNULL(@grp, '#') != grp THEN&lt;br /&gt;           @rows_count := 0&lt;br /&gt;         END q1&lt;br /&gt;        ,CASE WHEN IFNULL(@grp, '#') != grp THEN&lt;br /&gt;           @tp := tp&lt;br /&gt;         END q2&lt;br /&gt;        ,@rows_count := IFNULL(@rows_count, 0) + 1 as rn&lt;br /&gt;    FROM goods g&lt;br /&gt;        ,sales s&lt;br /&gt;   WHERE g.goods_id = s.sales_id&lt;br /&gt;     AND s.period = 2009101&lt;br /&gt;)&lt;br /&gt;WHERE rn &lt;= 10&lt;br /&gt;ORDER BY grp, name&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-83767612993888283?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/83767612993888283/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/11/mysql.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/83767612993888283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/83767612993888283'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/11/mysql.html' title='Аналитические функции в MySQL'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-2178568038060150097</id><published>2009-04-22T09:16:00.003+04:00</published><updated>2009-04-23T10:36:03.095+04:00</updated><title type='text'>1000 меньше чем за 3</title><content type='html'>&lt;p&gt;Я уже &lt;a href="http://nobyru.blogspot.com/2009/03/blog-post_17.html"&gt;писал&lt;/a&gt; я 300 уникальных посетителях в сутки по самому консервативному счетчику &lt;a href="http://www.liveinternet.ru/"&gt;LiveInternet&lt;/a&gt;. Вчера уникальных посетителей было 1031.&lt;/p&gt;&lt;p&gt;Еще в начале апреля количество посетителей подбиралась к 1000 (6 апреля - 977, 7-го - 971), но "рубеж" был взят только вчера, хотя я надеялся, что это произойдет немного раньше. Но, почему-то, количество посетителей с 8-го апреля начало падать, сначала не очень быстро, потом падение ускорилось. Я это связываю с изменением алгоритмов выдачи Yandex'а, сайта, который "поставляет" большую часть посетителей. Самое дно было достигнуто в эту субботу 18 апреля - 502 посетителя, а в воскресенье начался стремительный рост.&lt;/p&gt;&lt;p&gt;Я уже получил больше 10 статей с момента опубликования формы для ввода новых отзывов, причем 5 из них от постоянного &lt;a href="http://reviews.bloged.org/it/sicily/17761.html"&gt;автора&lt;/a&gt;, который, точнее которая, помимо интересных текстов публикует изумительные &lt;a href="http://reviews.bloged.org/es/mallorca/17725.html"&gt;фотографии&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Так же не обошлось без неинтересных статей рекламного характера, которые я публиковать не стал. Хотя ничего не имею против рекламы, которая должна органично включаться в статью, т.е. статья должна быть именно статьей, а не рекламным объявлением. И если автор пишет, что ему понравился отель, или экскурсия, и оставляет координаты экскурсовода, то я оставляю эту информацию, т.к. она может быть полезной для моих читателей, для которых, собственно, &lt;a href="http://reviews.bloged.org/"&gt;все&lt;/a&gt; и создавалось.&lt;/p&gt;&lt;p&gt;В общем, "рубеж" в 1000 посетителей достигнут менее чем за 3 месяца. Для привлечения большей аудитории надо добавлять новые разделы, например, новости или что-то в этом роде. Может быть у кого-нибудь будут интересные предложения, которые я смогу реализовать?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-2178568038060150097?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/2178568038060150097/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/04/1000-3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/2178568038060150097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/2178568038060150097'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/04/1000-3.html' title='1000 меньше чем за 3'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-20985290861776186</id><published>2009-04-10T10:43:00.005+04:00</published><updated>2009-04-10T15:37:05.013+04:00</updated><title type='text'>Ajax как способ показа информации из БД на статических html-страницах</title><content type='html'>Страницы моего &lt;a href="http://reviews.bloged.org/"&gt;сайта&lt;/a&gt; - статический html, который создается на основе информации, хранящейся в БД на моем компьютере. Затем специальными скриптами я делаю html-страницы и выкладываю их на сервере. При таком способе нельзя оперативно показывать комментарии, которые посетители оставляют, после ознакомления со статьями.&lt;br /&gt;&lt;br /&gt;Для отображения комментариев к статьям я решил воспользоваться технологией Ajax. А именно, в каждом html-документе создать div, и javascript-программой выводить в этом div'е комментарии, которые хранятся в БД на сервере, где и находится сайт.&lt;br /&gt;&lt;br /&gt;Сначала я ознакомился с документацией по Ajax, сделал простейший скрипт, который работал только в IE, а ведь есть еще Opera, Firefox и т.д. И у всех браузеров свои особенности. Конечно, можно покопаться в интернете, изучить варианты для всех браузеров, установить у себя каждый из браузеров для отладки и т.д. Но мне нужно всего лишь добавить возможность отображения комментариев, а не изучать особенности интерпретации javascript браузерами!&lt;br /&gt;&lt;br /&gt;Решение было найдено случайно, на каком-то из форумов кто-то писал про JsHttpRequest-библиотеку. Библиотека - это громко сказано, но решение, действительно стоящее.&lt;br /&gt;Итак, что же из себя представляет &lt;a href="http://en.dklab.ru/lib/JsHttpRequest/"&gt;JsHttpRequest&lt;/a&gt; - это 2 файла JsHttpRequest.js и JsHttpRequest.php, соответственно первый включаем в каждый html-документ, второй - в скрипт, который на сервере обрабатывает запросы.&lt;br /&gt;&lt;br /&gt;Покажу на примере, как несложно пользоваться этим. Есть форма, состоящая из 2-х полей, при нажатии на Submit надо показать сумму значений в этих полях.&lt;br /&gt;&lt;br /&gt;В text.html:&lt;br /&gt;&lt;pre&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;script src=&amp;quot;JsHttpRequest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;function cmnt(frm)&lt;br /&gt;{&lt;br /&gt;    JsHttpRequest.query(&amp;#039;/test.php&amp;#039;,&lt;br /&gt;        {&lt;br /&gt;            &amp;#039;a1&amp;#039;: document.getElementById(&amp;#039;a1&amp;#039;).value,&lt;br /&gt;            &amp;#039;a2&amp;#039;: document.getElementById(&amp;#039;a2&amp;#039;).value,&lt;br /&gt;        },&lt;br /&gt;        function(result, errors)&lt;br /&gt;        {&lt;br /&gt;            if(result)&lt;br /&gt;            {&lt;br /&gt;                str = result[&amp;quot;str&amp;quot;];&lt;br /&gt;                alert(&amp;#039;Сумма: &amp;#039; + str);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                alert(&amp;#039;Не удалось получить данные: &amp;#039; + errors);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        ,false  // do not disable caching&lt;br /&gt;    );   &lt;br /&gt;    return true;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;form&amp;gt;&lt;br /&gt;&amp;lt;input name=&amp;quot;a1&amp;quot; id=&amp;quot;a1&amp;quot; value=&amp;quot;&amp;quot; type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;input name=&amp;quot;a2&amp;quot; id=&amp;quot;a2&amp;quot; value=&amp;quot;&amp;quot; type=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;input value=&amp;quot;Отправить&amp;quot; type=&amp;quot;button&amp;quot; onclick=&amp;quot;cmnt();&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;br /&gt;И test.php:&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;require_once &amp;quot;JsHttpRequest.php&amp;quot;;&lt;br /&gt;$JsHttpRequest =&amp;amp; new JsHttpRequest(&amp;quot;windows-1251&amp;quot;);&lt;br /&gt;&lt;br /&gt;if($_REQUEST[a1] &amp;amp;&amp;amp; $_REQUEST[a2])&lt;br /&gt;{&lt;br /&gt;    $GLOBALS[&amp;#039;_RESULT&amp;#039;] = array(&lt;br /&gt;      &amp;quot;str&amp;quot;   =&amp;gt; $_REQUEST[a1] + $_REQUEST[a2]&lt;br /&gt;    );&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Разумеется, с сервера получать сколь угодно много параметров, просто добавьте их в массив $GLOBALS['_RESULT'] в php-файле и обработку этих параметров в javascript.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-20985290861776186?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/20985290861776186/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/04/ajax-html.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/20985290861776186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/20985290861776186'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/04/ajax-html.html' title='Ajax как способ показа информации из БД на статических html-страницах'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-6091705762998509442</id><published>2009-04-05T10:35:00.002+04:00</published><updated>2009-04-05T10:54:52.651+04:00</updated><title type='text'>Добавление RSS</title><content type='html'>Для ускорения индексации &lt;a href="http://reviews.bloged.org"&gt;сайта&lt;/a&gt; поисковиками мне порекомендовали добавить &lt;a href="http://ru.wikipedia.org/wiki/Rss"&gt;rss&lt;/a&gt;. &lt;br /&gt;Для начала я попробовал воспользоваться библиотеками perl, предназначенными для этого. Но ни XML::Atom::SimpleFeed ни XML::RSS стабильно работать не желали. Да и инталляция через cpan для camelbox perl не проходила. Пришлось исходные тексты библиотек просто переписывать в директорию site/lib.&lt;br /&gt;И тогда я решил написать все сам, знал бы насколько это окажется быстрее, по сравнению с возней с указанными выше библиотеками, вообще бы с теми библиотеками не связывался.&lt;br /&gt;Ознакомившись со статьей "&lt;a href="http://www.caseclub.ru/articles/webrss.html"&gt;Как сделать RSS ленту за пять минут&lt;/a&gt;", я действительно за 5 минут сделал rss-ленту. &lt;br /&gt;Осталась сущая малость - преобразовать текущую дату в нужный формат. Т.е. в формат Tue, 31 Mar 2009 23:29:48 +0300. Сделать стандартными средствами в Windows это не получается. В Unix-е без проблем, а в Windows - нельзя. Даже &lt;a href="http://xpoint.ru/forums/programming/perl/nursery/thread/44052.xhtml"&gt;гуру из xpoint.ru&lt;/a&gt; не смогли помочь мне в этом. Решение пришлось находить самому, а именно, в запрос на получение данных из MySQL я добавил еще одно поле date_format(now(), "%a, %d %b %Y %H:%i:%S") dt_cur.&lt;br /&gt;Теперь поисковые боты могут пользоваться моей &lt;a href="http://reviews.bloged.org/rss.xml"&gt;rss-лентой&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-6091705762998509442?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/6091705762998509442/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/04/rss.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6091705762998509442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6091705762998509442'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/04/rss.html' title='Добавление RSS'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-2271771771170228712</id><published>2009-03-17T08:54:00.005+03:00</published><updated>2009-03-17T22:34:52.261+03:00</updated><title type='text'>300 за 1.5</title><content type='html'>Вчера впервые счетчик &lt;a href="http://www.liveinternet.ru/"&gt;liveinternet&lt;/a&gt; перешел за&amp;nbsp;отметку 300, точнее было 302&amp;nbsp;уникальных посетителя, вычтем из&amp;nbsp;них 2&amp;nbsp;своих посещения из&amp;nbsp;дома и&amp;nbsp;с&amp;nbsp;работы, как раз получится 300. Вообще-то я&amp;nbsp;планировал выйти на&amp;nbsp;такое количество &amp;laquo;уников&amp;raquo; за&amp;nbsp;3&amp;nbsp;месяца, получилось за&amp;nbsp;1.5. Причем, среднее количество просмотров на&amp;nbsp;посетителя больше 3-х, т.е. &lt;a href="http://reviews.bloged.org/"&gt;сайт&lt;/a&gt; заслуживает внимания. Самой большой популярностью пользуются статьи с&amp;nbsp;&lt;a href="http://reviews.bloged.org/ru/"&gt;отзывами о&amp;nbsp;путешествиях по&amp;nbsp;России&lt;/a&gt;, следом с&amp;nbsp;полуторным отставанием идут &lt;a href="http://reviews.bloged.org/gr/"&gt;Греция&lt;/a&gt;, потом с&amp;nbsp;заметным отставанием &lt;a href="http://reviews.bloged.org/eg/"&gt;Египет&lt;/a&gt;, &lt;a href="http://reviews.bloged.org/es/"&gt;Испания&lt;/a&gt;, &lt;a href="http://reviews.bloged.org/tr/"&gt;Турция&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Что нужно делать для раскрутки сайта лучше прочесть на&amp;nbsp;специализированных блогах. От&amp;nbsp;себя только добавлю, что title и&amp;nbsp;description для страниц за&amp;nbsp;эти 1.5&amp;nbsp;месяца я&amp;nbsp;менял 2&amp;nbsp;раза. Т.е. уже стоит 3-й вариант, на&amp;nbsp;мой взгляд самый удачный. Хотя поисковики еще и&amp;nbsp;показывают страницы со&amp;nbsp;2-м вариантом, который больше похож на&amp;nbsp;набор ключевых слов, а&amp;nbsp;не&amp;nbsp;на&amp;nbsp;осмысленный текст.&lt;br /&gt;&lt;br /&gt;Все никак не&amp;nbsp;отважусь &amp;laquo;открыть&amp;raquo; для посетителей &lt;a href="http://reviews.bloged.org/new.phtml"&gt;страницу для добавления своих отзывов&lt;/a&gt;, хотя сам ею&amp;nbsp;пользуюсь больше 2-х недель. Не&amp;nbsp;знаю как лучше на&amp;nbsp;нее сделать ссылки внутри сайта. Может кто-нибудь подкинет идею?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-2271771771170228712?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/2271771771170228712/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/03/blog-post_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/2271771771170228712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/2271771771170228712'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/03/blog-post_17.html' title='300 за 1.5'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-1028844553584900283</id><published>2009-03-02T10:10:00.002+03:00</published><updated>2009-03-02T10:48:31.683+03:00</updated><title type='text'>Антиспам-фильтр для русских людей</title><content type='html'>Наткнулся на забавную историю, которой спешу поделиться.&lt;br /&gt;&lt;blockquote&gt;Включил антиспам-бота, написал в качестве вопроса следующее:&lt;br /&gt;«Вас приветствует Анти-спам бот! Меня люто и бешено затрахали предложения увеличить член, купить айфон за 50 рублей, посмотреть „клёвые фотки студенток“ и многие другие, исходящие от спам-роботов. Докажи, что ты живой РУССКИЙ человек. Ответь на простой вопрос: Сколько будет десять раз по сто грамм? (буквами ответ пиши)»&lt;br /&gt;&lt;br /&gt;Вот ты бы что ответила? А ко мне человек пробиться не мог, аж позвонил, он долго, в разных вариациях со всеми возможными ошибками писал в ответ «килограмм».&lt;/blockquote&gt;&lt;br /&gt;Смех-смехом, а идея-то интересная. Не думаю, что бот сможет сообразить что надо написать «литр» :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-1028844553584900283?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/1028844553584900283/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/03/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/1028844553584900283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/1028844553584900283'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/03/blog-post.html' title='Антиспам-фильтр для русских людей'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-2746012656998644607</id><published>2009-02-25T22:23:00.002+03:00</published><updated>2009-02-26T14:40:54.280+03:00</updated><title type='text'>Про perl, или применение на работе полученных знаний в процессе разработки сайта</title><content type='html'>На работе возникла задача - "вытащить" запросом из базы информацию о сотрудниках нашей организации. Причем вытащить из системы, разработанной подрядчиками, правда по системе есть документация. Нашел в документации обзор который показывает нужную информацию, выполнил запрос, посмотрел что получилось. Оказалось, что запрос показывал не все записи, но вот как понять, по каким полям фильтрует данные подрядчик, в документации этого нет, на "рытье" в исходниках времени нет. Попробовал открыть на портале страницу, возвращающую все доступные записи в виде таблицы. Скопировал эту таблицу в буфер обмена, отрыл Excel, нажал Paste и ... Процессор ушел в 100% загрузку, Excel минут 10 пытался вставить информацию из буфера обмена, но безрезультатно. Мне надоела ждать, "срубил" Excel. Открыл исходник страницы с этой таблицей, вырезал из него только таблицу, попробовал открыть получившийся документ в Word'е. Результат аналогичный Excel'ю. Вот незадача, но надо же понять почему на портале отображается на 10 записей больше чем в запросе. Перебирать все 1500 фамилий сотрудников в поисках несовпадений глазами весьма затруднительно. Как же выбрать из портальной страницы только фамилии, чтобы их сопоставить с найденными запросом.&lt;br /&gt;Задача была решена меньше чем за 5 минут. Я написал маленький скрипт на perl, который "вырезал" из html-ой таблицы фамилии сотрудников. Еще через 5 минут, после использования функции ВПР в Excel я нашел недостающие в запросе фамилии и понял, что всего-то надо было поставить NVL(value, 0) на одно из фильтруемых полей.&lt;br /&gt;Кстати, perl-овый обрабатывал html-ную таблицу размером примерно 3.5 мегабайта около 3-х секунд. Word и Excel отдыхают. Вот этот код:&lt;br /&gt;&lt;pre&gt;require HTML::TokeParser;&lt;br /&gt;my $p = HTML::TokeParser-&gt;new('c:\qqq.html');&lt;br /&gt;while (my $token = $p-&gt;get_tag("a"))&lt;br /&gt;{&lt;br /&gt;print $p-&gt;get_trimmed_text . "\n"&lt;br /&gt;   if($token -&gt; [1] -&gt; {onclick} eq 'showEmployee(); return false;');&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Небольшой оффтопик. Случайно набрел на &lt;a href="http://wasting-money.blogspot.com/"&gt;блог праздного небогача&lt;/a&gt;, в котором наткнулся на превосходную идею тиражирования блога. Скоро появятся &lt;a href="http://nobyru.blog.ru/"&gt;http://nobyru.blog.ru&lt;/a&gt;,  &lt;a href="http://nobyru.ya.ru/"&gt;http://nobyru.ya.ru&lt;/a&gt;, &lt;a href="http://nobyru.livejournal.com/"&gt;http://nobyru.livejournal.com&lt;/a&gt;. Ссылки на сайт &lt;a href="http://reviewss.bloged.org/"&gt;Отзывы о путешествиях&lt;/a&gt; никогда не будут лишними.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-2746012656998644607?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/2746012656998644607/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/02/perl.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/2746012656998644607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/2746012656998644607'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/02/perl.html' title='Про perl, или применение на работе полученных знаний в процессе разработки сайта'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-4116868847779614508</id><published>2009-02-17T20:15:00.008+03:00</published><updated>2009-02-18T09:03:22.309+03:00</updated><title type='text'>Склонение русских слов</title><content type='html'>Посещаемость моего &lt;a href="http://reviews.bloged.org/"&gt;сайта&lt;/a&gt; пока не высока. Не более 100 человек в день. Просматривая статистику &lt;a href="http://www.liveinternet.ru/"&gt;посещения&lt;/a&gt; наткнулся на рекламу организации, предлагающей услуги по продвижению сайта. Эти услуги я пока не готов заказывать, но полезную информацию о &lt;a href="http://1ps.ru/articles/seostories/"&gt;раскрутке сайта&lt;/a&gt; я нашел.&lt;br /&gt;Для автоматической генерации ключевых слов, по которым пользователи &lt;a href="http://wordstat.yandex.ru/advq?rpt=ppc&amp;amp;shw=1"&gt;производят поиск информации&lt;/a&gt;, требовалось проспрягать названия &lt;a href="http://reviews.bloged.org/eg/" title="Египет отзывы"&gt;стран&lt;/a&gt; и &lt;a href="http://reviews.bloged.org/eg/sharm_el-sheikh/" title="Египет Шарм Эль Шейх"&gt;курортов&lt;/a&gt;. Найти подходящие классы или пакеты для perl или php не удалось. Но зато один &lt;a href="http://community.livejournal.com/ru_eludia/"&gt;опытный программист&lt;/a&gt; прислал ссылку на &lt;a href="http://www.opennet.ru/prog/info/59.shtml"&gt;Russian ispell&lt;/a&gt;. Скачав оттуда последнюю версию словарей, обнаружил файл с географическими названиями (жаль, что не со всеми, имеющимися в моем &lt;a href="http://reviews.bloged.org/gr/" title="Греция отзывы"&gt;каталоге&lt;/a&gt;) и правила для склонения слов. Через несколько часов я смог автоматически проскланять большинство &lt;a href="http://reviews.bloged.org/tr/" title="отзывы Турция"&gt;стран&lt;/a&gt; и &lt;a href="http://reviews.bloged.org/tr/marmaris/" title="Турция Мармарис"&gt;курортов&lt;/a&gt;, жаль что не &lt;a href="http://reviews.bloged.org/"&gt;все&lt;/a&gt;.&lt;br /&gt;Большое спасибо &lt;a href="http://scon155.phys.msu.su/eng/lebedev.html"&gt;Александру Лебедеву&lt;/a&gt; за предоставленный специальным образом закодированный орфографический словарь русского языка. Кстати, в общем словаре примерно 130 тысяч русских слов, и, теперь, у меня есть код, которых может их склонять.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-4116868847779614508?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/4116868847779614508/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/02/blog-post_17.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/4116868847779614508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/4116868847779614508'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/02/blog-post_17.html' title='Склонение русских слов'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-6921514212618654864</id><published>2009-02-10T22:22:00.005+03:00</published><updated>2009-02-18T09:04:56.237+03:00</updated><title type='text'>Добавление на поисковые сервера и в каталоги</title><content type='html'>Сайт готов. По крайней мере информацию можно смотреть. Возможность вносить статьи постараюсь сделать в ближайшее время.&lt;br /&gt;Надо сообщить о своем существовании. Самым первым сообщением была первая публикация на этом блоге. Но блог-то мало кто пока читает.&lt;br /&gt;Добавить о себе информацию я решил в &lt;a href="http://www.google.ru/"&gt;гулг&lt;/a&gt; и в &lt;a href="http://www.ya.ru/"&gt;яндекс&lt;/a&gt;. Да, есть еще русскоязычные поисковики, но эти самые распространенные.&lt;br /&gt;Прочел на гугле о рекомендации для &lt;a href="https://www.google.com/webmasters/"&gt;вебмастеров&lt;/a&gt;, создал у себя &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?answer=93641&amp;amp;hl=ru"&gt;страницу 404&lt;/a&gt;, т.е. страницу, которая отображается, когда запрашиваемая пользователем страница не найдена. Затем добавил свой сайт в список сайтов, создал файл для ботов - &lt;a href="http://www.robotstxt.org/orig.html"&gt;robots.txt&lt;/a&gt;, а так же файл sitemap.xml, точнее &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?answer=40318&amp;amp;hl=ru"&gt;sitemap.xml.gz&lt;/a&gt;. Кстати, генерация и сжатие этого файла у меня занимает всего 1.11 секунды, причем в файл добавляется 9065 ссылки на страницы со &lt;a href="http://reviews.bloged.org/cn/khajjnan/10576.html"&gt;статьями&lt;/a&gt;, &lt;a href="http://reviews.bloged.org/cn/khajjnan/"&gt;индексные файлы&lt;/a&gt; я решил не включать. Эти файлы постоянно меняются, да и служат только для показа &lt;a href="http://reviews.bloged.org/at/wien/10027.html"&gt;ссылок на статьи&lt;/a&gt;.&lt;br /&gt;Затем проделал аналогичную регистрацию на &lt;a href="http://webmaster.yandex.ru/"&gt;яндексе&lt;/a&gt;. Интересно, что на в описании не сказано, что можно указывать заархивированые файлы sitemap.xml.gz, но яндекс их легко понимает и разбирает. Правда, гугл намного оперативнее яндекса обрабатывает файлы sitemap.&lt;br /&gt;На следующий день гугл в поиске выводил 2 мои страницы, причем те, на которые были ссылки в этом блоге, яндекс молчал. Через неделю гугл показывал 10 страниц, а яндекс почти все!!! Ура. Я появился в поисковых системах.&lt;br /&gt;Правда узнал об этом с 3-х дневным опозданием, мой провайдер трое суток не мог устранить проблему, из-за которой несколько домов нашего района остались без интернета.&lt;br /&gt;И у меня начали появляться посетители. В воскресенье 37 уникальных сайтов, в понедельник уже 52! Интересно, когда их количество добежит до сотни. Надеюсь к концу февраля.&lt;br /&gt;Один из приятелей посетовал, что нет возможности поиска внутри сайта. Свой поиск в силу ограничений, описанных в предыдущих статьях, я сделать не могу. Значит надо воспользоваться решениями, предоставляемыми профессионалами. &lt;a href="https://www.google.com/adsense/"&gt;Поиск от гугл&lt;/a&gt; делается за несколько минут. Получаемый код встраивается в готовую страницу и сразу же начинает работать. Но только одна проблема, гугл пока что показывает на этой странице поиска всего 18 страниц, т.е. менее 0.2%. Поиск от яндекс сделать не сложно, только вот результаты поиска не совсем меня устроили. Во-первых, окно с результатами открывается уже на сайте яндекса, а во-вторых, если результат на сайте не найден, то выдается информация с других сайтов, что тоже не привлекает. По-этому буду ждать когда же гугл захочет показать в своем поисковике большинство моих &lt;a href="http://reviews.bloged.org/do/punta_cana/bavaro_princess/10090.html"&gt;страниц&lt;/a&gt;, потому что проиндексировал он их очень давно. Причем, первая индексация была сразу после публикации первой статьи на блоге. Жаль, что я не знал о такой его прыти, потому что при первой индексации было обнаружено больше 1000 ошибочных ссылок. Ну да, я же при отладке делал только первые 20 страниц, а не все 10900 (&lt;a href="http://reviews.bloged.org/eg/hurgada/sun_rise_garden_beach/17546.html"&gt;статьи&lt;/a&gt; + &lt;a href="http://reviews.bloged.org/eg/hurgada/" title="отзывы Хургада"&gt;индесные файлы&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-6921514212618654864?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/6921514212618654864/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/02/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6921514212618654864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6921514212618654864'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/02/blog-post.html' title='Добавление на поисковые сервера и в каталоги'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-5717060274224840482</id><published>2009-02-02T11:00:00.007+03:00</published><updated>2009-02-03T17:57:18.809+03:00</updated><title type='text'>Оптимизация запроса в MySQL</title><content type='html'>У &lt;a href="http://www.bloged.org/"&gt;сервера&lt;/a&gt;, любезно предоставленного мне для размещения &lt;a href="http://reviews.bloged.org/"&gt;сайта&lt;/a&gt;, были довольно средние характеристики. Поэтому было решено все страницы, за исключением feedback, делать статическими. Для генерации страниц был разработан скрипт на perl. После отладки скрипта оказалось, что на генерацию 24 &lt;a href="http://reviews.bloged.org/in/goa/17543.html"&gt;отзывов&lt;/a&gt; вместе с &lt;a href="http://reviews.bloged.org/in/goa/"&gt;индексными файлами&lt;/a&gt; уходит примерно 120 секунд. На мой взгляд, непростительно много. После анализа времени функцией, которое тратится на производство одной страницы, выяснилось, что построение ссылок на страны, курорты, отели, относящиеся к опубликованному отзыву занимает больше всего времени.&lt;br /&gt;Но почему? Вот запрос, получающий эту информацию:&lt;pre&gt;SELECT MIN(p.name) name, count(*) cnt, p.id&lt;br /&gt;  FROM props p&lt;br /&gt;      ,article_props ap&lt;br /&gt;      ,articles a&lt;br /&gt; WHERE p.up_id = 171&lt;br /&gt;   AND p.tp = 'P'&lt;br /&gt;   AND p.id = ap.prop_id&lt;br /&gt;   AND ap.art_id = a.id&lt;br /&gt;   AND a.is_can_show = 'Y'&lt;br /&gt; GROUP BY p.id&lt;br /&gt;&lt;/pre&gt;Для таблицы props (в дальнейшем p) есть индекс по полям up_id и tp, для таблицы article_props (в дальнейшем ap) — индекс по полю prop_id, ну а у таблицы articles (a) — первичный ключ по id. Но запрос сначала шел по таблице a (по индексу по полю is_can_show), затем по ap и по p. В таблице ap записей примерно в 5 раз меньше, чем в p, может быть по-этому анализатор выбирал сначала эту таблицу.&lt;br /&gt;Знаток MySQL рекомендовал мне:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;переписываем с оракловского синтаксиса на общечеловеческий, расставляя таблицы в желаемом порядке &lt;pre&gt;SELECT MIN(p.name) name, count(*) cnt, p.id&lt;br /&gt;  FROM props p&lt;br /&gt; INNER JOIN article_props ap ON p.id = ap.prop_id&lt;br /&gt; INNER JOIN articles a ON (ap.art_id = a.id AND a.is_can_show = 'Y')&lt;br /&gt; WHERE p.up_id = 171&lt;br /&gt;   AND p.tp = 'P'&lt;br /&gt; GROUP BY p.id&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Применить хинт &lt;blockquote&gt;SELECT /*+ORDERED*/ ...&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;А лучше переделать все на LEFT JOIN &lt;pre&gt;SELECT /*+ORDERED*/&lt;br /&gt;       MIN(p.name) name, count(*) cnt, p.id&lt;br /&gt;  FROM props p&lt;br /&gt;  LEFT JOIN article_props ap ON p.id = ap.prop_id&lt;br /&gt;  LEFT JOIN articles a ON (ap.art_id = a.id AND a.is_can_show = 'Y')&lt;br /&gt; WHERE p.up_id = 171&lt;br /&gt;   AND p.tp = 'P'&lt;br /&gt;   AND a.id IS NOT NULL&lt;br /&gt; GROUP BY p.id&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;И добавил: «вообще я INNER JOIN стараюсь не применять вообще никогда.&lt;br /&gt;Потому что LEFT JOIN как раз диктует порядок построения запроса и не даёт оптимизатору умничать. &lt;b&gt;ВСЕГДА ставьте LEFT JOIN. Почувствуйте себя хозяином положения&lt;/b&gt;».&lt;br /&gt;И действительно, после этих манипуляций запрос «пошёл» по нужным индексам, и стал отрабатывать за 0.6 секунды, вместо 9.6.&lt;br /&gt;Я создал все страницы, на что ушло около 15 минут, начал проверять что получилось, и заметил, что запрос-то ошибочный. При его выполнении выдаются все записи из таблицы p, даже те, для которых нет ссылок в ap. При замене первого LEFT JOIN article_props ap ON p.id = ap.prop_id на INNER JOIN и эта проблема была решена. Но все же, использование LEFT JOIN меня сильно коробило. Не красиво это.&lt;br /&gt;И элегантное решение было найдено. Оказывается, в MySQL есть возможность указания &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/index-hints.html"&gt;индексов в хинтах&lt;/a&gt;. В результате запрос стал&lt;br /&gt;&lt;pre&gt;SELECT MIN(p.name) name, count(*) cnt, p.id&lt;br /&gt;  FROM props p,&lt;br /&gt;       article_props ap,&lt;br /&gt;       articles a IGNORE INDEX(art_is_can_show_i)&lt;br /&gt; WHERE p.up_id = 171&lt;br /&gt;   AND p.tp = 'P'&lt;br /&gt;   AND p.id = ap.prop_id&lt;br /&gt;   AND ap.art_id = a.id&lt;br /&gt;   AND a.is_can_show = 'Y'&lt;br /&gt; GROUP BY p.id&lt;/pre&gt;24 отзыва вместе с индексными файлами созданы менее чем за 12 секунд (сравните со 120 секундами до оптимизации).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-5717060274224840482?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/5717060274224840482/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/02/mysql.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/5717060274224840482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/5717060274224840482'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/02/mysql.html' title='Оптимизация запроса в MySQL'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-8962526120357178507</id><published>2009-01-29T11:17:00.010+03:00</published><updated>2009-02-18T09:18:11.564+03:00</updated><title type='text'>Выбор шаблона для сайта</title><content type='html'>Информации я&amp;nbsp;набрал, данные привел в&amp;nbsp;порядок, настало время самой творческой, по&amp;nbsp;крайней мере, для меня, работы&amp;nbsp;&amp;#8212; рисовании сайта. Оказалось, что в&amp;nbsp;интернет много ресурсов с&amp;nbsp;бесплатными шаблонами сайтов. Мне посоветовали &lt;a href="http://www.oswd.org/"&gt;www.oswd.org.&lt;/a&gt; Просмотрев более 200&amp;nbsp;различных вариантов, я&amp;nbsp;выбрал около 20&amp;nbsp;и&amp;nbsp;отправил ссылки на&amp;nbsp;них своей жене. На&amp;nbsp;мой взгляд, лучше девушки никто не&amp;nbsp;определит дизайн, а&amp;nbsp;за&amp;nbsp;мной останется самая малость&amp;nbsp;&amp;#8212; воплотить выбранный дизайн в&amp;nbsp;жизнь. Жене больше всего приглянулся &lt;a href="http://www.oswd.org/design/preview/id/3134"&gt;MultiFlex-2&lt;/a&gt;. Действительно, баннер с&amp;nbsp;пальмами и&amp;nbsp;морем у&amp;nbsp;кого угодно ассоциируется с&amp;nbsp;отдыхом. Но&amp;nbsp;как-то не&amp;nbsp;трогала меня эта картинка. Прошлым летом мы&amp;nbsp;отдыхали в&amp;nbsp;&lt;a href="http://reviews.bloged.org/me/" title="отдых Черногория"&gt;Черногории&lt;/a&gt; в&amp;nbsp;деревушке &lt;a href="http://travel.bloged.org/prcanj.html"&gt;Прчань&lt;/a&gt;, расположенной в&amp;nbsp;Которском заливе. Замечательное место, великолепная погода, теплое море, простая и&amp;nbsp;вкусная еда, а&amp;nbsp;самое главное&amp;nbsp;&amp;#8212; потрясающие виды. Один из&amp;nbsp;них на&amp;nbsp;моем рабочем столе, бывает, что все сильно достанет, так свернешь все окна, посмотришь на&amp;nbsp;картинку, и&amp;nbsp;дальше за&amp;nbsp;дело.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GPQJx96-zP0/SYFyAiLTbBI/AAAAAAAAACM/UeivjclLwbE/s1600-h/panorama_1024.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 400px; height: 316px;" src="http://1.bp.blogspot.com/_GPQJx96-zP0/SYFyAiLTbBI/AAAAAAAAACM/UeivjclLwbE/s400/panorama_1024.jpg" alt="" id="BLOGGER_PHOTO_ID_5296639990264196114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Почему&amp;nbsp;бы не&amp;nbsp;сделать из&amp;nbsp;этой картинки основной баннер. &lt;a href="http://www.panoramafactory.com/"&gt;Склеил&lt;/a&gt; из&amp;nbsp;4-х фотографий одну панорамную, обрезал крыши домов и&amp;nbsp;побережье снизу, облака и&amp;nbsp;небо сверху получил основное&amp;nbsp;&amp;#8212; море и&amp;nbsp;горы. Глядя на&amp;nbsp;баннер слоган &lt;a href="http://reviews.bloged.org/"&gt;сайта&lt;/a&gt; родился сам собой&amp;nbsp;&amp;#8212; &amp;laquo;Побывал&amp;nbsp;&amp;#8212; поделись впечатлениями&amp;raquo;.&lt;br /&gt;Бесплатный шаблон был для разрешения 800&amp;#215;600. Попробовав сгенерить на&amp;nbsp;нем начальные страницы увидел, что почти половина экрана пустая, и,&amp;nbsp;из-за маленькой ширины страницы очень длинные по&amp;nbsp;вертикали. К&amp;nbsp;сожалению, у&amp;nbsp;&lt;a href="http://1234.info/"&gt;автора шаблона&lt;/a&gt; не&amp;nbsp;оказалось версии для большего разрешения. Но&amp;nbsp;ничего, немного покопавшись с&amp;nbsp;css-файлом, я&amp;nbsp;сделал это самостоятельно. По-моему, &lt;a href="http://reviews.bloged.org/" title="отзывы о путешествиях"&gt;получилось&lt;/a&gt; неплохо!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-8962526120357178507?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/8962526120357178507/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/01/blog-post_29.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/8962526120357178507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/8962526120357178507'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/01/blog-post_29.html' title='Выбор шаблона для сайта'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GPQJx96-zP0/SYFyAiLTbBI/AAAAAAAAACM/UeivjclLwbE/s72-c/panorama_1024.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-6448898670568976829</id><published>2009-01-28T10:38:00.010+03:00</published><updated>2009-02-18T09:16:29.678+03:00</updated><title type='text'>Связывание информации из разных сайтов</title><content type='html'>Как сделать так, чтобы мой сайт стал лучше, чем тот, с которого я забирал первоначальную информацию? Скачивать информацию еще с одного сайта. Тогда у меня будет информации больше, глядишь, и пользователям будет интереснее у &lt;a href="http://reviews.bloged.org/"&gt;меня&lt;/a&gt;, т. к. теперь не надо посещать 2 сайта, а все есть на &lt;a href="http://reviews.bloged.org/"&gt;одном&lt;/a&gt;.&lt;br /&gt;Я даже не предполагал, насколько много в интернете ресурсов с отзывами. Причем большинство из них на низах &lt;a href="http://www.liveinternet.ru/rating/ru/tourism/"&gt;рейтинга&lt;/a&gt;. Выбрав новую «жертву», я довольно быстро подготовил скрипты для «выкачивания» информации из нее (всего несколько часов, по сравнению с днями, потраченными на первый источник, правда и опыт у меня уже был), запустил, выкачал. И началось самое геморройное... Надо как-то связать классификаторы статей из первого источника с классификаторами статей из второго источника, чтобы на моем сайте статьи про одинаковые места отдыха, полученные из разных источников, «лежали» в одном разделе. Т. е. курорт &lt;a href="http://reviews.bloged.org/cu/varadero/" title="отзывы Варадеро"&gt;Варадеро&lt;/a&gt; на острове &lt;a href="http://reviews.bloged.org/cu/" title="отзывы Куба"&gt;Куба&lt;/a&gt; с первого сайта, это тот же курорт &lt;a href="http://reviews.bloged.org/cu/varadero/" title="Варадеро отели"&gt;Варадеро&lt;/a&gt; с острова &lt;a href="http://reviews.bloged.org/cu/" title="Куба отдых"&gt;Куба&lt;/a&gt; со второго сайта. А что делать, если на одном сайте Куба пишется «&lt;a href="http://reviews.bloged.org/cu/" title="отели Кубы"&gt;Куба&lt;/a&gt;», а на втором — «&lt;a href="http://reviews.bloged.org/cu/" title="отдых на Кубе"&gt;Cuba&lt;/a&gt;»? И какая &lt;a href="http://reviews.bloged.org/cu/" title="курорты Кубы"&gt;Куба&lt;/a&gt; правильнее? В общем, надо создавать свой справочник курортов, содержащий как можно больше информации по странам, курортам, отелям, и привязывать к нему все ссылки на эти страны-курорты-отели. Опять же, откуда взять все это, чтобы информации было много, и чтобы она более менее была нормально упорядочена. Потому что меня не устраивает ссылка на &lt;a href="http://reviews.bloged.org/vn/" title="отдых Вьетнам"&gt;Вьетнам&lt;/a&gt; — Вся страна — Отель супер-пупер, а надо &lt;a href="http://reviews.bloged.org/vn/" title="отели Вьетнам"&gt;Вьетнам&lt;/a&gt; — &lt;a href="http://reviews.bloged.org/vn/hanoi/" title="отели Ханой"&gt;курорт&lt;/a&gt; — отель.&lt;br /&gt;Побродив по интернету, нашел 3-й сайт, на котором больше есть информация о 35 тысячах отелей, причем отели упорядочены именно по странам и городам. Закачал. К сожалению, в этих 35 тысячах не обошлось без задвоений как городов, так и отелей. Но сильно на эту тему я заморачиваться не стал. Будут статьи, ссылающиеся на эти города-отели — вычищу.&lt;br /&gt;Из информации, полученной с 3-го сайта, сделал «идеальный» справочник. К которому попробовал привязать классификаторы из первых двух сайтов. Примерно 70% информации удалось связать запросами к базе данных, для оставшихся 30% сделал форму и вручную прокрыжил. Долго, конечно, но что делать. Не хочется, чтобы у меня был мусор.&lt;br /&gt;Заодно обратил внимание, что для многих статей есть ссылка только на страну, без привязки к городам и отелям. Непорядок. Несложным INSERT'ом попробовал исправить эту несправедливость, т. е. если статья ссылается только на страну Великобритания, а в тексте встречается слово Лондон, то надо добавить еще и ссылку на &lt;a href="http://reviews.bloged.org/gb/london/" title="отзывы Лондон"&gt;Лондон&lt;/a&gt;, чтобы пользователь не просматривал все статьи о &lt;a href="http://reviews.bloged.org/gb/" title="отзывы Великобритания"&gt;Великобритании&lt;/a&gt;, когда ему интересны впечатления только о &lt;a href="http://reviews.bloged.org/gb/london/" title="отели Лондон"&gt;Лондона&lt;/a&gt;. И натолкнулся на особенность MySQL, в Oracle такого рода ошибки не было. Оказывается, если в MySQL запрос &lt;pre&gt;SELECT instr('Москва — столица нашей Родины', 'МОСКВА')&lt;/pre&gt; выдает 1, а в Oracle — 0. Но «&lt;a href="http://reviews.bloged.org/ru/moscow/" title="отзывы Москва"&gt;МОСКВА&lt;/a&gt;» и «&lt;a href="http://reviews.bloged.org/ru/moscow/" title="отели Москвы"&gt;Москва&lt;/a&gt;» — это ведь 2 разных слова, по крайней мере по написанию, а MySQL оптимизирован для поиска без учета case sensitive. Но проблема, как оказалось, решается просто. Если в запросе&lt;br /&gt;&lt;pre&gt;SELECT 1&lt;br /&gt;  FROM articles a, cities c&lt;br /&gt; WHERE a.text LIKE CONCAT('%', c.name, '%')&lt;/pre&gt; после LIKE поставить BINARY, то все ищется отлично. Таким образом, мне удалось не наделать лишних ссылок из статей на города, которые в этих статьях не упоминаются.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-6448898670568976829?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/6448898670568976829/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/01/blog-post_28.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6448898670568976829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/6448898670568976829'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/01/blog-post_28.html' title='Связывание информации из разных сайтов'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060304370694755660.post-5987363015363022140</id><published>2009-01-27T14:12:00.003+03:00</published><updated>2009-02-03T18:01:34.290+03:00</updated><title type='text'>Как все начиналось</title><content type='html'>Идея создания сайта с&amp;nbsp;отзывами обо всем возникла еще в&amp;nbsp;мае, я&amp;nbsp;даже удосужился сделать &lt;a href="http://reviews.bloged.org/"&gt;первую страницу&lt;/a&gt; содержащую слова, о&amp;nbsp;том, как круто здесь все когда-то будет. Но&amp;nbsp;дальше первой страницы дело не&amp;nbsp;пошло...&lt;br /&gt;А&amp;nbsp;осенью начался кризис. Хотя с&amp;nbsp;работы пока что не&amp;nbsp;гонят, но&amp;nbsp;вылететь можно в&amp;nbsp;любой момент, никто&amp;nbsp;же не&amp;nbsp;может гарантировать тебе рабочее место вечно. Поэтому, надо искать какие-нибудь дополнительные источники заработка. &lt;a href="http://www.bloged.org/"&gt;Мой друг&lt;/a&gt; предложил поискать подработку на&amp;nbsp;сайте &lt;a href="http://http/www.rentacoder.com/"&gt;http://www.rentacoder.com&lt;/a&gt;. Я&amp;nbsp;зарегистрировался и&amp;nbsp;обнаружил, что по&amp;nbsp;спрос на&amp;nbsp;кодеров, которые работают только с&amp;nbsp;БД&amp;nbsp;Oracle не&amp;nbsp;очень-то и&amp;nbsp;велик. Зато работы с&amp;nbsp;php, perl и&amp;nbsp;MySQL хватает. Осталась самая малость&amp;nbsp;&amp;#8212; более-менее освоить эти средства. Предварительный опыт был только с&amp;nbsp;php.&lt;br /&gt;Читая умные книжки и&amp;nbsp;выполняя примеры из&amp;nbsp;них, не&amp;nbsp;сильно продвинешься в&amp;nbsp;изучении новых средств разработки. На&amp;nbsp;реальной задаче новый материал усваивается гораздо лучше. Тут-то &lt;a href="http://reviews.bloged.org/"&gt;сайт с&amp;nbsp;отзывами&lt;/a&gt; и&amp;nbsp;пережил свое второе рождение.&lt;br /&gt;Сайт, конечно, дело хорошее. Но&amp;nbsp;на&amp;nbsp;нем должна быть какая-то информация. Причем информация должна быть полезной, чтобы кому-то было это интересно. А&amp;nbsp;пока народ &amp;laquo;прочухает&amp;raquo;, что надо именно на&amp;nbsp;&lt;a href="http://reviews.bloged.org/"&gt;моем сайте&lt;/a&gt; оставлять отзывы пройдет не&amp;nbsp;один месяц. Если у&amp;nbsp;меня информации нет, а&amp;nbsp;у&amp;nbsp;кого-то другого она есть, надо ее&amp;nbsp;позаимствовать. Заодно, научусь как на&amp;nbsp;perl&amp;#146;е&amp;nbsp;&amp;laquo;качать&amp;raquo; страницы и&amp;nbsp;разбирать информацию в&amp;nbsp;них содержащуюся.&lt;br /&gt;Первой жертвой для заимствований выбрал большой туристический портал, на&amp;nbsp;котором было полно информации. Не&amp;nbsp;меньше недели ушло на&amp;nbsp;то,&amp;nbsp;чтобы научится нормально &amp;laquo;забирать и&amp;nbsp;разбирать&amp;raquo; с&amp;nbsp;него страницы.&lt;br /&gt;Следующим шагом стала загрузка информации в&amp;nbsp;базу данных. Т.к. на&amp;nbsp;&lt;a href="http://reviews.bloged.org/"&gt;сайте&lt;/a&gt;, любезно предоставленном мне &lt;a href="http://www.bloged.org/"&gt;моим другом&lt;/a&gt;, была только MySQL, то&amp;nbsp;и&amp;nbsp;информацию надо хранить в&amp;nbsp;ней. Я-то по&amp;nbsp;наивности думал, что коль с&amp;nbsp;Oracle более 10&amp;nbsp;лет работал, то&amp;nbsp;и&amp;nbsp;с&amp;nbsp;этим зверем справлюсь одной левой... Счаз!!! Непонятки начались с&amp;nbsp;момента инсталляции. Оказалось, что на&amp;nbsp;винде (ноутбук, который у&amp;nbsp;меня дома, с&amp;nbsp;windows, вести разработку я&amp;nbsp;предпочитаю на&amp;nbsp;локальном компьютере, перекладывая отлаженный код на&amp;nbsp;конечный сайт) сначала надо установить драйвер к&amp;nbsp;этой базе, потом саму базу. Если создаешь базу в&amp;nbsp;кодировке, отличной от&amp;nbsp;latin1, предлагаемой по&amp;nbsp;умолчанию (а&amp;nbsp;зачем мне latin1, если информацию храню в&amp;nbsp;cp1251), то&amp;nbsp;надо еще и&amp;nbsp;внести правки в&amp;nbsp;my.ini... В&amp;nbsp;общем, базу установил, под root&amp;#146;ом&amp;nbsp;даже удалось зайти. Но&amp;nbsp;не&amp;nbsp;будешь&amp;nbsp;же под root&amp;#146;ом&amp;nbsp;создавать таблицы и&amp;nbsp;т.п., нужен свой пользователь. Честно создал пользователя в&amp;nbsp;MySQL Administrator, создал для него схему. А&amp;nbsp;вот зайти под ним не&amp;nbsp;могу. Пароль правильный, а&amp;nbsp;не&amp;nbsp;пускает... Долго бился я&amp;nbsp;с&amp;nbsp;этим змеем, пока мне не&amp;nbsp;посоветовали забить на&amp;nbsp;все администраторы и&amp;nbsp;создать пользователя в&amp;nbsp;командной строке. Причем создать именно такой командой&lt;br /&gt;&lt;pre&gt;create user &amp;#146;qqq&amp;#146;@&amp;#146;localhost&amp;#146; identified by&amp;nbsp;&amp;#146;qqq&amp;#146;;&lt;/pre&gt;Я&amp;nbsp;бы в&amp;nbsp;жизни не&amp;nbsp;допер, что пользователи qqq и&amp;nbsp;qqq@localhost&amp;nbsp;&amp;#8212; это два разных человека. Зато со&amp;nbsp;вторым проблем вообще никаких.&lt;br /&gt;Теперь надо виндовым perl&amp;#146;ом&amp;nbsp;залезть в&amp;nbsp;базу. У&amp;nbsp;меня на&amp;nbsp;тот момент стоял &lt;a href="http://strawberryperl.com/"&gt;Strawberry Perl&lt;/a&gt;&amp;nbsp;&amp;#8212; первый из&amp;nbsp;перлов для windows, которые я&amp;nbsp;увидел на&amp;nbsp;&lt;a href="http://www.perl.com/download.csp"&gt;www.perl.com&lt;/a&gt;. Надо-то всего ничего, доустановить библиотеку DBD::mysql. Только вот командой&lt;br /&gt;&lt;pre&gt;cpan install DBD::mysql&lt;/pre&gt;результата не&amp;nbsp;добьешься. Вылезает куча ошибок... Бился я&amp;nbsp;с&amp;nbsp;установкой этой библиотеки не&amp;nbsp;один день. Победить не&amp;nbsp;удалось. В&amp;nbsp;инете нашел информацию про другую версию perl для windows&amp;nbsp;&amp;#8212; &lt;a href="http://www.activestate.com/activeperl_pro_studio/"&gt;ActivePerl&lt;/a&gt;. И&amp;nbsp;действительно, в&amp;nbsp;этой версии perl&amp;#146;а&amp;nbsp;установка новых модулей&amp;nbsp;&amp;#8212; милое дело. Выбрал в&amp;nbsp;окне модулей нужный, кликнул мышкой, он&amp;nbsp;и&amp;nbsp;установился. Но&amp;nbsp;вот DBD::mysql там не&amp;nbsp;было, была библиотека DBD::mysqlPP, посредством которой отлично можно работать с&amp;nbsp;базой MySQL, только вот разработку-то я&amp;nbsp;веду на&amp;nbsp;компьютере с&amp;nbsp;windows, а&amp;nbsp;на&amp;nbsp;&lt;a href="http://reviews.bloged.org/"&gt;сайте&lt;/a&gt;&amp;nbsp;&amp;#8212; linux. Как-то не&amp;nbsp;хочется делать по&amp;nbsp;2&amp;nbsp;версии каждого скрипта, меняя в&amp;nbsp;нем только название библиотеки. Хорошо, что нашелся &lt;a href="http://code.google.com/p/camelbox/"&gt;Camelbox&lt;/a&gt;, включающий в&amp;nbsp;себя эту библиотеку. У&amp;nbsp;Camelbox, правда нашелся другой грешок, я&amp;nbsp;так и&amp;nbsp;не&amp;nbsp;смог для него установить DBD::Oracle, которая понадобилась на&amp;nbsp;работе, пришлось на&amp;nbsp;работе ставить ActivePerl.&lt;br /&gt;Итог первого месяца: научился скачивать и&amp;nbsp;разбирать страницы, получил опыт работы с&amp;nbsp;регулярными выражениями, с&amp;nbsp;которыми до&amp;nbsp;этого не&amp;nbsp;сталкивался, классная штука, однако, научился помещать найденную информацию в&amp;nbsp;БД&amp;nbsp;MySQL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060304370694755660-5987363015363022140?l=nobyru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nobyru.blogspot.com/feeds/5987363015363022140/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nobyru.blogspot.com/2009/01/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/5987363015363022140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060304370694755660/posts/default/5987363015363022140'/><link rel='alternate' type='text/html' href='http://nobyru.blogspot.com/2009/01/blog-post.html' title='Как все начиналось'/><author><name>Noby</name><uri>http://www.blogger.com/profile/10936346631597571315</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-EVB5uJiZ11k/Tt_Ac7hZzyI/AAAAAAAAAD8/x46csRV9F40/s220/vas80.jpg'/></author><thr:total>1</thr:total></entry></feed>
