четверг, 29 января 2009 г.

Выбор шаблона для сайта

Информации я набрал, данные привел в порядок, настало время самой творческой, по крайней мере, для меня, работы — рисовании сайта. Оказалось, что в интернет много ресурсов с бесплатными шаблонами сайтов. Мне посоветовали www.oswd.org. Просмотрев более 200 различных вариантов, я выбрал около 20 и отправил ссылки на них своей жене. На мой взгляд, лучше девушки никто не определит дизайн, а за мной останется самая малость — воплотить выбранный дизайн в жизнь. Жене больше всего приглянулся MultiFlex-2. Действительно, баннер с пальмами и морем у кого угодно ассоциируется с отдыхом. Но как-то не трогала меня эта картинка. Прошлым летом мы отдыхали в Черногории в деревушке Прчань, расположенной в Которском заливе. Замечательное место, великолепная погода, теплое море, простая и вкусная еда, а самое главное — потрясающие виды. Один из них на моем рабочем столе, бывает, что все сильно достанет, так свернешь все окна, посмотришь на картинку, и дальше за дело.
Почему бы не сделать из этой картинки основной баннер. Склеил из 4-х фотографий одну панорамную, обрезал крыши домов и побережье снизу, облака и небо сверху получил основное — море и горы. Глядя на баннер слоган сайта родился сам собой — «Побывал — поделись впечатлениями».
Бесплатный шаблон был для разрешения 800×600. Попробовав сгенерить на нем начальные страницы увидел, что почти половина экрана пустая, и, из-за маленькой ширины страницы очень длинные по вертикали. К сожалению, у автора шаблона не оказалось версии для большего разрешения. Но ничего, немного покопавшись с css-файлом, я сделал это самостоятельно. По-моему, получилось неплохо!

среда, 28 января 2009 г.

Связывание информации из разных сайтов

Как сделать так, чтобы мой сайт стал лучше, чем тот, с которого я забирал первоначальную информацию? Скачивать информацию еще с одного сайта. Тогда у меня будет информации больше, глядишь, и пользователям будет интереснее у меня, т. к. теперь не надо посещать 2 сайта, а все есть на одном.
Я даже не предполагал, насколько много в интернете ресурсов с отзывами. Причем большинство из них на низах рейтинга. Выбрав новую «жертву», я довольно быстро подготовил скрипты для «выкачивания» информации из нее (всего несколько часов, по сравнению с днями, потраченными на первый источник, правда и опыт у меня уже был), запустил, выкачал. И началось самое геморройное... Надо как-то связать классификаторы статей из первого источника с классификаторами статей из второго источника, чтобы на моем сайте статьи про одинаковые места отдыха, полученные из разных источников, «лежали» в одном разделе. Т. е. курорт Варадеро на острове Куба с первого сайта, это тот же курорт Варадеро с острова Куба со второго сайта. А что делать, если на одном сайте Куба пишется «Куба», а на втором — «Cuba»? И какая Куба правильнее? В общем, надо создавать свой справочник курортов, содержащий как можно больше информации по странам, курортам, отелям, и привязывать к нему все ссылки на эти страны-курорты-отели. Опять же, откуда взять все это, чтобы информации было много, и чтобы она более менее была нормально упорядочена. Потому что меня не устраивает ссылка на Вьетнам — Вся страна — Отель супер-пупер, а надо Вьетнамкурорт — отель.
Побродив по интернету, нашел 3-й сайт, на котором больше есть информация о 35 тысячах отелей, причем отели упорядочены именно по странам и городам. Закачал. К сожалению, в этих 35 тысячах не обошлось без задвоений как городов, так и отелей. Но сильно на эту тему я заморачиваться не стал. Будут статьи, ссылающиеся на эти города-отели — вычищу.
Из информации, полученной с 3-го сайта, сделал «идеальный» справочник. К которому попробовал привязать классификаторы из первых двух сайтов. Примерно 70% информации удалось связать запросами к базе данных, для оставшихся 30% сделал форму и вручную прокрыжил. Долго, конечно, но что делать. Не хочется, чтобы у меня был мусор.
Заодно обратил внимание, что для многих статей есть ссылка только на страну, без привязки к городам и отелям. Непорядок. Несложным INSERT'ом попробовал исправить эту несправедливость, т. е. если статья ссылается только на страну Великобритания, а в тексте встречается слово Лондон, то надо добавить еще и ссылку на Лондон, чтобы пользователь не просматривал все статьи о Великобритании, когда ему интересны впечатления только о Лондона. И натолкнулся на особенность MySQL, в Oracle такого рода ошибки не было. Оказывается, если в MySQL запрос
SELECT instr('Москва — столица нашей Родины', 'МОСКВА')
выдает 1, а в Oracle — 0. Но «МОСКВА» и «Москва» — это ведь 2 разных слова, по крайней мере по написанию, а MySQL оптимизирован для поиска без учета case sensitive. Но проблема, как оказалось, решается просто. Если в запросе
SELECT 1
FROM articles a, cities c
WHERE a.text LIKE CONCAT('%', c.name, '%')
после LIKE поставить BINARY, то все ищется отлично. Таким образом, мне удалось не наделать лишних ссылок из статей на города, которые в этих статьях не упоминаются.

вторник, 27 января 2009 г.

Как все начиналось

Идея создания сайта с отзывами обо всем возникла еще в мае, я даже удосужился сделать первую страницу содержащую слова, о том, как круто здесь все когда-то будет. Но дальше первой страницы дело не пошло...
А осенью начался кризис. Хотя с работы пока что не гонят, но вылететь можно в любой момент, никто же не может гарантировать тебе рабочее место вечно. Поэтому, надо искать какие-нибудь дополнительные источники заработка. Мой друг предложил поискать подработку на сайте http://www.rentacoder.com. Я зарегистрировался и обнаружил, что по спрос на кодеров, которые работают только с БД Oracle не очень-то и велик. Зато работы с php, perl и MySQL хватает. Осталась самая малость — более-менее освоить эти средства. Предварительный опыт был только с php.
Читая умные книжки и выполняя примеры из них, не сильно продвинешься в изучении новых средств разработки. На реальной задаче новый материал усваивается гораздо лучше. Тут-то сайт с отзывами и пережил свое второе рождение.
Сайт, конечно, дело хорошее. Но на нем должна быть какая-то информация. Причем информация должна быть полезной, чтобы кому-то было это интересно. А пока народ «прочухает», что надо именно на моем сайте оставлять отзывы пройдет не один месяц. Если у меня информации нет, а у кого-то другого она есть, надо ее позаимствовать. Заодно, научусь как на perl’е «качать» страницы и разбирать информацию в них содержащуюся.
Первой жертвой для заимствований выбрал большой туристический портал, на котором было полно информации. Не меньше недели ушло на то, чтобы научится нормально «забирать и разбирать» с него страницы.
Следующим шагом стала загрузка информации в базу данных. Т.к. на сайте, любезно предоставленном мне моим другом, была только MySQL, то и информацию надо хранить в ней. Я-то по наивности думал, что коль с Oracle более 10 лет работал, то и с этим зверем справлюсь одной левой... Счаз!!! Непонятки начались с момента инсталляции. Оказалось, что на винде (ноутбук, который у меня дома, с windows, вести разработку я предпочитаю на локальном компьютере, перекладывая отлаженный код на конечный сайт) сначала надо установить драйвер к этой базе, потом саму базу. Если создаешь базу в кодировке, отличной от latin1, предлагаемой по умолчанию (а зачем мне latin1, если информацию храню в cp1251), то надо еще и внести правки в my.ini... В общем, базу установил, под root’ом даже удалось зайти. Но не будешь же под root’ом создавать таблицы и т.п., нужен свой пользователь. Честно создал пользователя в MySQL Administrator, создал для него схему. А вот зайти под ним не могу. Пароль правильный, а не пускает... Долго бился я с этим змеем, пока мне не посоветовали забить на все администраторы и создать пользователя в командной строке. Причем создать именно такой командой
create user ’qqq’@’localhost’ identified by ’qqq’;
Я бы в жизни не допер, что пользователи qqq и qqq@localhost — это два разных человека. Зато со вторым проблем вообще никаких.
Теперь надо виндовым perl’ом залезть в базу. У меня на тот момент стоял Strawberry Perl — первый из перлов для windows, которые я увидел на www.perl.com. Надо-то всего ничего, доустановить библиотеку DBD::mysql. Только вот командой
cpan install DBD::mysql
результата не добьешься. Вылезает куча ошибок... Бился я с установкой этой библиотеки не один день. Победить не удалось. В инете нашел информацию про другую версию perl для windows — ActivePerl. И действительно, в этой версии perl’а установка новых модулей — милое дело. Выбрал в окне модулей нужный, кликнул мышкой, он и установился. Но вот DBD::mysql там не было, была библиотека DBD::mysqlPP, посредством которой отлично можно работать с базой MySQL, только вот разработку-то я веду на компьютере с windows, а на сайте — linux. Как-то не хочется делать по 2 версии каждого скрипта, меняя в нем только название библиотеки. Хорошо, что нашелся Camelbox, включающий в себя эту библиотеку. У Camelbox, правда нашелся другой грешок, я так и не смог для него установить DBD::Oracle, которая понадобилась на работе, пришлось на работе ставить ActivePerl.
Итог первого месяца: научился скачивать и разбирать страницы, получил опыт работы с регулярными выражениями, с которыми до этого не сталкивался, классная штука, однако, научился помещать найденную информацию в БД MySQL.