среда, 7 декабря 2011 г.

Сайтов уже 5

Давно не писал ничего, много работал. За прошедший год сделал 2 новых сайта: Сервис поиска дешевых авиабилетов и Отели Праги.
Как не трудно догадаться, на первом удобно искать дешевые авиабилеты, а на втором выбирать и бронировать отели в Праге.
Что примечательно, что оба сайта делал в партнерстве с другими людьми, получилось, по-моему, не плохо.
Из того что не получилось сделать в этом году - это сайт по сравнению цен на хостелы по аналогии с hotelscombined, только hotelscombined сравнивает отели. К сожалению, не смог найти еще одного партнера, который бы предоставил XML-поиск по предлагаемым этим партнерам хостелам.
В планах на следующий год сделать еще несколько узкоспециализированных сайтов по поиску отелей в различных городах Европы и США.
Желаю всем хорошо встретить Новый год и конечно же удачи и счастья в новом году. Жизнь продолжается не смотря ни на что.

четверг, 4 ноября 2010 г.

Как я создавал свой 3-й сайт

В начале октября совсем случайно узнал о существовании сайта по бронированию отелей hotelclub.com. Они предлагали лучшие цены на отель в одном из американский городов, если сравнивать через hotelscombined. Как оказалось, у них есть партнерская программа. Да и домен hotelclub.su оказался свободен.
Я не долго думая купил домен, подобрал шаблон сайта у Arcsin, переработал его под себя.
Много времени ушло на то, чтобы корректно обработать информацию, предоставляемую hotelclub своим партнером, еще больше на разработку самого сайта. И сегодня я его выложил на всеобщее обозрение.
Теперь отели Парижа или отели Рима бронируем на hotelclub.su.
Конечно же остались некритичные доработки, например, добавление на страницу отеля Normady возможности выбора дат в календаре, но в целом все работает.

понедельник, 30 августа 2010 г.

Вирусы

В конце прошлого года мой сайт впервые подвергся вирусной атаке. Какая-то гадость, которая проникла на мой компьютер, стащила пароль к ftp-доступу и дописала в конец каждого файла index*.* строку с вредным кодом, а так же заразила все файлы с расширением js. Лечится все это довольно просто, либо вручную удаляется вредноносный код, либо просто заново заливаются файлы из архива. В том году это было не критично, т.к. проект только стартовал, и посещаемость была так себе.

Повторной атаке я подвергся в пятницу, 27 августа. Открыл одну из страниц в Mozilla Firefox и комп как-то стал притормаживать, примерно через минуту антивирус Avira стал сильно пищать, какие-то скрипты остановил, но главную заразу не убил. В течение часа были заражены все файлы по описанному выше сценарию.

Последствия я заметил только в субботу. При открытии страниц сайта Firefox выдавал предупреждение о заражении. Я поменял пароль доступа, перезалил файлы из архива, и успокоился. Как оказалось, зря.

Зараза осталась на моем компьютере. Ни Касперский, ни DrWeb ее не убили. И заново все файлы на сайте были заражены.

Теперь это заметил и Yandex, и стал выдавать угрожающие предупреждения. Поток посетителей, приходящих от Yandex'а иссяк.

Я еще раз восстановил файлы из архива. Больше атак не было. А окончательно победить заразу помогли ребята из virusinfo.info, за что им большое спасибо.

Кстати, google довольно оперативно отреагировал на очистку сайта, и уже снял все свои ограничения, FireFox больше не ругается. А вот Yandex все думает, и сильно предостерегает от открытия страницы типа забронировать гостиницу в Риме. И ждать его еще несколько дней. Мало того, что среагировал с дневным, по сравнению с google, опозданием, так теперь еще и повторную проверку надо ждать. Обидно.

Теперь, при открытии подозрительный сайтов, буду всегда отключать JavaScript, а в случае заражения быстро восстанавливать файлы из архива на сайте.

пятница, 11 декабря 2009 г.

Фотографии от Panoramio на своем сайте

Случайно наткнулся на cайт компании Panoramio. Разработчики этого сайта создали сервис привязывания фотографий к географическим координатам. Т.е. сделал прекрасный снимок, зашел к ним на сайт и опубликовал его, не забыв привязать к географическим координатам. Так же есть API, которое позволяет получать информацию о фотографиях, относящихся к географическим объектам, находящимися в заданном квадрате.
Сейчас я работаю над вторым сайтом созданным для самостоятельного бронирвоания путешествий - БукТрип.ру. Для предоставления возможности бронирования отелей собрал достаточно большую базу географических названий. Но вот для взаимодействия с API от Panoramio нужны координаты этих объектов. И эти координаты можно получить, воспользовавшись сервисом Google Geocoding. Чтобы определить координаты, надо сделать запрос к сайту maps.google.com следующего вида:
http://maps.google.com/maps/geo?q=Paris,fr&output=csv&key=ABQIAAAALkH7z-
7Yg6rN5Wgtte6WQxRhFePxzidMXG8dHw849BemzMV9YxRakAkV291BmrgJ5R_LgrNfgigIOQ

где q — адрес искомого объекта, output — формат ответа, key — ключ для работы с Google Maps, который можно получить на сайте регистрации ключа к API Карт Google. Ответом на запрос в примере будет строка
200,4,48.8566667,2.3509871
200 — код ответа (200 — успешно, 403, 602 и прочие — нет), 4 — точность определения (страна, город, улица, дом и т.п.), 48.8566667,2.3509871 — искомые широта и долгота.
Получив координаты объекта остается определить только «диаметр» зоны, фотографии объектов в которой и будут показываться. Для получения крайних точек можно просто вычесть и прибавить к координатам центра какие-то константы. Но Земля-то круглая, и точка, находящаяся на расстоянии 10 км от заданной должна вычисляться по более сложной формуле, которую я и нашёл.
Получив от Panoramio список фотографий, путем несложных манипуляций с данными, я их вывел в виде слайд-шоу (скрипт для создания слайд-шоу можно посмотреть на http://www.phatfusion.net/slideshow/).

пятница, 27 ноября 2009 г.

Аналитические функции в MySQL

Всем хорош язык MySQL, но вот в некоторых случаях надо делать запросы, которые, благодаря наличию аналитических функций, в Oracle делаются весьма просто.
Рассмотрим на примере. Скажем, есть у нас 2 таблицы: товары с полями goods_id — идентификатор, grp — группа, name — наименование, и обобщенная таблица с продажами sales с полями goods_id — идентификатор товара, period — период, summa — суммарная стоимость проданных товаров за указанный период.
И вот требуется вывести по 10 самых продаваемых товаров из каждой группы за заданный период. В Oracle запрос бы выглядел вот так:

SELECT grp, name, summa
FROM (
SELECT g.grp
,g.name
,s.summa
,row_number()
OVER (PARTITION BY g.group
ORDER BY s.summa) as rn
FROM goods g
,sales s
WHERE g.goods_id = s.sales_id
AND s.period = 2009101
)
WHERE rn <= 10
ORDER BY grp, name
А в MySQL вот так:

SET @rows_count = 0;
SET @grp = NULL;
SELECT grp, name, summa
FROM (
SELECT g.grp
,g.name
,s.summa
,CASE WHEN IFNULL(@grp, '#') != grp THEN
@rows_count := 0
END q1
,CASE WHEN IFNULL(@grp, '#') != grp THEN
@tp := tp
END q2
,@rows_count := IFNULL(@rows_count, 0) + 1 as rn
FROM goods g
,sales s
WHERE g.goods_id = s.sales_id
AND s.period = 2009101
)
WHERE rn <= 10
ORDER BY grp, name

среда, 22 апреля 2009 г.

1000 меньше чем за 3

Я уже писал я 300 уникальных посетителях в сутки по самому консервативному счетчику LiveInternet. Вчера уникальных посетителей было 1031.

Еще в начале апреля количество посетителей подбиралась к 1000 (6 апреля - 977, 7-го - 971), но "рубеж" был взят только вчера, хотя я надеялся, что это произойдет немного раньше. Но, почему-то, количество посетителей с 8-го апреля начало падать, сначала не очень быстро, потом падение ускорилось. Я это связываю с изменением алгоритмов выдачи Yandex'а, сайта, который "поставляет" большую часть посетителей. Самое дно было достигнуто в эту субботу 18 апреля - 502 посетителя, а в воскресенье начался стремительный рост.

Я уже получил больше 10 статей с момента опубликования формы для ввода новых отзывов, причем 5 из них от постоянного автора, который, точнее которая, помимо интересных текстов публикует изумительные фотографии.

Так же не обошлось без неинтересных статей рекламного характера, которые я публиковать не стал. Хотя ничего не имею против рекламы, которая должна органично включаться в статью, т.е. статья должна быть именно статьей, а не рекламным объявлением. И если автор пишет, что ему понравился отель, или экскурсия, и оставляет координаты экскурсовода, то я оставляю эту информацию, т.к. она может быть полезной для моих читателей, для которых, собственно, все и создавалось.

В общем, "рубеж" в 1000 посетителей достигнут менее чем за 3 месяца. Для привлечения большей аудитории надо добавлять новые разделы, например, новости или что-то в этом роде. Может быть у кого-нибудь будут интересные предложения, которые я смогу реализовать?

пятница, 10 апреля 2009 г.

Ajax как способ показа информации из БД на статических html-страницах

Страницы моего сайта - статический html, который создается на основе информации, хранящейся в БД на моем компьютере. Затем специальными скриптами я делаю html-страницы и выкладываю их на сервере. При таком способе нельзя оперативно показывать комментарии, которые посетители оставляют, после ознакомления со статьями.

Для отображения комментариев к статьям я решил воспользоваться технологией Ajax. А именно, в каждом html-документе создать div, и javascript-программой выводить в этом div'е комментарии, которые хранятся в БД на сервере, где и находится сайт.

Сначала я ознакомился с документацией по Ajax, сделал простейший скрипт, который работал только в IE, а ведь есть еще Opera, Firefox и т.д. И у всех браузеров свои особенности. Конечно, можно покопаться в интернете, изучить варианты для всех браузеров, установить у себя каждый из браузеров для отладки и т.д. Но мне нужно всего лишь добавить возможность отображения комментариев, а не изучать особенности интерпретации javascript браузерами!

Решение было найдено случайно, на каком-то из форумов кто-то писал про JsHttpRequest-библиотеку. Библиотека - это громко сказано, но решение, действительно стоящее.
Итак, что же из себя представляет JsHttpRequest - это 2 файла JsHttpRequest.js и JsHttpRequest.php, соответственно первый включаем в каждый html-документ, второй - в скрипт, который на сервере обрабатывает запросы.

Покажу на примере, как несложно пользоваться этим. Есть форма, состоящая из 2-х полей, при нажатии на Submit надо показать сумму значений в этих полях.

В text.html:
<html>
<script src="JsHttpRequest.js"></script>
<script type="text/javascript">
function cmnt(frm)
{
JsHttpRequest.query('/test.php',
{
'a1': document.getElementById('a1').value,
'a2': document.getElementById('a2').value,
},
function(result, errors)
{
if(result)
{
str = result["str"];
alert('Сумма: ' + str);
}
else
{
alert('Не удалось получить данные: ' + errors);
}
}
,false // do not disable caching
);
return true;
}
</script>
<form>
<input name="a1" id="a1" value="" type="text">
<input name="a2" id="a2" value="" type="text">
<input value="Отправить" type="button" onclick="cmnt();">
</form>
</html>

И test.php:
<?php
require_once "JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");

if($_REQUEST[a1] && $_REQUEST[a2])
{
$GLOBALS['_RESULT'] = array(
"str" => $_REQUEST[a1] + $_REQUEST[a2]
);
}
?>

Разумеется, с сервера получать сколь угодно много параметров, просто добавьте их в массив $GLOBALS['_RESULT'] в php-файле и обработку этих параметров в javascript.