пятница, 26 июня 2009 г.

Sitemap на Ruby on Rails

Пару дней назад озадачился генерированием файла sitemap.xml на Ruby on Rails для пользовательских торговых площадок. Приведу упрощенный пример без блогов, форумов и специальных страниц. В файле Sitemap будут url для:

  • индексной страницы магазина (index)
  • страницы описания (about)
  • страницы контактов (contact)
  • всех страниц товаров (item)


Контроллер (store_controller.rb)

def sitemap
@store = Store.find(params[:id])
@items = @store.items.find :all,
:conditions => "available_for_sale = 1",
:order => "updated_at DESC",
:limit => 49997
end


В соответствии с концепцией MVC, процедуру выборки товаров лучше вынести в модель.


В рекомендациях по файлам Sitemap для Google оговаривается, что файл Sitemap может содержать не более 50000 URL. За вычетом страниц индекса, описания и контактов, остается 49997 позиций для URL товаров.


Представление (sitemap.xml.builder)

xml.instruct! :xml, :version => "1.0", :encoding=>"UTF-8"
xml.urlset(:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9") {
# Index
xml.url {
xml.loc(url_for :controller => :store, :action => :index, :id => @store.id, :format => :xml, :only_path => false)
lastmod = @items.first.updated_at.strftime("%Y-%m-%d") unless @items.nil?
lastmod = lastmod || Time.now.strftime("%Y-%m-%d")
xml.lastmod(lastmod)
xml.changefreq("daily")
xml.priority(1)
}
# About
xml.url {
xml.loc(url_for :controller => :store, :action => :about, :id => @store.id, :format => :xml, :only_path => false)
xml.lastmod(@store.updated_at.strftime("%Y-%m-%d"))
xml.changefreq("monthly")
xml.priority(0.7)
}
# Contact
xml.url {
xml.loc(url_for :controller => :store, :action => :contact, :id => @store.id, :format => :xml, :only_path => false)
xml.lastmod(@store.updated_at.strftime("%Y-%m-%d"))
xml.changefreq("monthly")
xml.priority(0.5)
}
# Items
@items.each do |item|
xml.url {
xml.loc(url_for :controller => 'store', :action => 'item', :id => item.id, :format => :xml, :only_path => false)
xml.lastmod(item.updated_at.strftime("%Y-%m-%d"))
xml.changefreq("weekly")
xml.priority(0.9)
}
end
}


Страницы пользовательских магазинов у меня выводятся в формате XML с (XSL трансформацией) и при генерации url я использую параметр :format => :xml. В стандартном выводе этот параметр не нужен.


Для каждого URL адреса тег <loc> является обязательным; остальные теги являются дополнительными.

  • loc – адрес страницы;
  • lastmod – дата последнего обновления;
  • changefreq – частота изменения страницы;
  • priority – приоритет.


Главная страница магазина (index) и страницы товаров (item) являются наиболее важными страницами, поэтому имеют более высокий приоритет. Страница описания и страница контактов, имхо уже «на интерес». Следовательно, имеют приоритет более низкий.


Индексная страница обновляется довольно часто за счет добавления новых товаров и выбывания товаров из листинга. Поэтому обновляется ежедневно (daily).


Страницы товаров тоже обновляются довольно часто. За счет добавления отзывов, комментариев клиентов. Но эта информация не особо важна. Спокойно могу задать им еженедельное (weekly) обновление.


Информация о магазине и контактах, как правило, изменяется крайне редко, и обновлять ее стоит не чаще, чем раз в месяц (monthly).


Успехов на рельсах! © dotrb.blogspot.com


Читать дальше »

вторник, 23 июня 2009 г.

Google Chrome: баг с ифреймом

google chrome

Сегодня коллега попросил помочь разобраться со странным поведением браузера Chrome.


На странице два элемента <iframe>. В одном чат, в другом ротатор баннеров.

<!-- В этом фрейме работает флешевый чат -->
<iframe id="frame_chat" src="/userplane/chat" frameborder="no"></iframe>
<!-- В этом фрейме сторонний скрипт баннеро-ротатор -->
<iframe id="frame_ads" src="http://third_part_banner_rotator" frameborder="no"></iframe>


Скрипт приводить не буду. Действует так: через каждые 30 секунд создает frameset с фреймами. Во фреймах различные составные рекламные баннеры.


Все браузеры (даже IE!), как и задумано, перезагружают только содержимое ифрейма "frame_ads", а Chrome – страницу целиком.


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

<iframe id="frame_ads" src="http://third_part_banner_rotator" frameborder="no" />


И всё заработало :). Сыроват еще «Хром», сыроват...


Читать дальше »

MP-BIOS bug 8254 timer not connected. Исправление

Ubuntu

Проблема с убунтой все та же: MP-BIOS bug: 8254 timer not connected to IO-APIC и категорический отказ загружаться дальше. Прием, который я приводил по этому поводу в прошлый раз срабатывает так же часто, как сбываются лучшие ожидания.


Не так давно вычитал совет на одном из буржуйских форумов.

  1. На экране загрузки GRUB используй клавиши стрелок чтобы выбрать:
    kernel /boot/linuz-2.6.15-25-386 root=/dev/sda3 ro quiet splash
    (твои пути и цифры могут немного отличаться)
  2. Затем нажми “e” чтобы отредактировать опции загрузки. Ты перейдешь на другой экран;
  3. Добавь noapic в конец опций загрузки и жми “enter”;
  4. Жми “b” для загрузки.


У меня процедура немного отличалась от описанной, но все сработало.


Далее тот же камрад советует как сделать эти изменения постоянными:

  1. sudo gedit /boot/grub/menu.lst
  2. добавь noapic в строку “#defoptions=
  3. update grub
  4. перезагрузись.


Эту часть я пока не проверял.


Ссылка на исходное сообщение на убунтофоруме.


Читать дальше »

понедельник, 22 июня 2009 г.

Кошачья экспансия

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


Сегодня кошка родила. Или окотилась. Или что там кошки делают спустя пару месяцев после половых безумств? Впервые присутствовал на подобном мероприятии, да еще и в одного. Пришел из магазина, припер курицу суп сварить – сидит на пороге, мявчит. Типа «воды отошли, надо уже что-то делать» :).


Ну, бля, думаю, здрассьте; началось... Волновался конечно сначала, а потом прикинул хер к носу, да хули делов-то? – Справимся! Первым делом в темпе электрошвабры отπдарасил все полы в квартире. Обложил кошкин дом чистыми газетами, нульцевое полотенце внутрь застелил.


Кошка, зараза, никуда выходить не дает. Пойду на кухню бульон помешать, через минуту тут как тут «мяу-мяу». Типа пойдем обратно. Вернусь в комнату. Видит, что сел работать, вроде как рядом... сразу успокаивается и в домик залазит. Только выйду – снова та же история. Боится сама оставаться, нужно чтобы кто-то рядом был. Ну пес с тобой, пришлось быть молчаливой группой поддержки.


Вскоре началось. Мои худшие опасения не оправдались – сама управлялась. Оказывается, когда котенок рождается кошки съедают плаценту. Это связано с тем, что для диких кошек плацента является питанием на краткий период, пока они не могут охотиться после родов. Сегодня сам видел. Оно и к лучшему – убирать не придется.


Роды прошли успешно. Только пару раз пришлось подобосраться. Первый раз котенок на пуповине повис и не хотел дальше вываливаться. Пищит и болтается как Тарзан на лиане, а кошка дотянуться не может перекусить. Подождал я, смотрю – нет развития сюжета, Тарзан никак не стремится на встречу с Джейн. Поставил чайник, простерилизовал единственные ножницы в доме. Водкой и кипятком. Благо пол-бутылки водки еще с незапамятных времен в холодильнике лежит. Глянул с тоской на остывающий в тарелке суп и пошел прекращать эту «сказку джунглей». Прихожу, а всё уже тип-топ, следующий на подходе.


Вобщем, это не понадобилось:

Инструменты


Три первых котенка уже освоились. Ползают, пищат, сиську ищут. Когда появился четвертый πздюк я и не заметил. Как смотрю, лежит не шевелится, аудиосигналов не издает. А эта дурочка первых троих вылизывает, а на этого ноль на массу – валяется «в ногах» в режиме радиомолчания. А еще мордочка у него... и не видать, то ли он еще из своего пузыря не выбрался, то ли просто мокрый. «Дура, ты, блин, этого давай вылизывай! С этими-то все заебись уже – вон как шустро ползают, как солдаты в часть из увольнения.» – Ноль на массу. – «Задохнется ведь! Или типа троих забацала, а этот пусть дохнет? Вот уж хуй! Не в мою смену!» Взял кусок бинта (заранее бинтов нарезал на всякий случай). Начал этому πздюку мелкому мордочку вытирать. Вроде дышит злыдень, это он типа прикорнуть решил с дорожки :).


В итоге, путем визуального контроля насчитал шесть мелких писклявых крысюков :). Самый πздец этой истории в том, что кошка даже и не моя: хозяин ее неделю как сам в больничку заехал, а животину мне на хранение оставил. Теперь получается, что уже и не одну :).


UPD: Эмоции по этому поводу строго положительные. Просто сильные.


Кстати, вот эта статья помогла так сказать войти в курс «чокаво»: Роды кошки.


Ну и по поводу этого знаменательного события... – так, кто там у меня из семейства кошачих в коннекте есть? – А вот: Кошка у камелька.


Читать дальше »

суббота, 20 июня 2009 г.

IE8 узнайте факты!

У Microsoft есть страничка для Internet Explorer 8 «Узнайте факты».


Таблица сравнения браузеров

Как видно из таблицы сравнения браузеров, IE 8 безопасен, конфиденциален, прост в использовании, а Firefox и Chrome – нет :). Лично я все еще сомневаюсь, что Microsoft наконец-то (в очередной раз) сделал нормальный браузер. Но старая добрая пропаганда рулит!


Хохму узнал отсюда: Microsoft’s Browser Comparison Chart


Читать дальше »

четверг, 18 июня 2009 г.

Путь Rails

Сегодня (точнее уже «вчера») приобрел такую вот книженцию.


Путь Rails

Путь Rails. Подробное руководство по созданию приложений в среде Ruby on Rails


“The Rails Way”
Оби Фернандес
Среда Ruby on Rails стремительно занимает ведущее место в ряду наиболее популярных платформ для разработки веб-приложений. Она основана на одном из самых элегантных языков программирования, Ruby, и доставляет истинное удовольствие своим приверженцам. Хотите оказаться в первых рядах? Тогда эта книга для вас! Ее автор, Оби Фернандес, и целая группа экспертов подробно описывают основные возможности и подсистемы Rails: контроллеры, маршрутизацию, поддержку стиля REST, объектно-реляционное отображение с помощью библиотеки ActiveRecord, применение технологии AJAX в Rails-приложениях и многое другое. Отталкиваясь от своего уникального опыта и приводя подробные примеры кода, Оби демонстрирует, как с помощью инструментов и рекомендованных методик Rails добиться максимальной продуктивности и получать наслаждение от создания совершенных приложений.

Уже даже начал потихоньку читать. «Потихоньку» буквально означает, что дочитал только до «Введения». Просто сегодня и так хватало работы с этими самыми рельсами.


Читать дальше »

Miranda IM 0.8

Miranda IMИтак, увидел свет мультипротокольный мессенджер Miranda в своей 0.8-й инкарнации. Miranda – программа мгновенного обмена сообщениями для Microsoft Windows.


Радость по поводу выхода любимого клиента была недолгой.
Miranda 0.8 crash


А вот это всплыло при одном из запусков мессенджера. «ДОС фарева!» :)
Miranda DOS


Снос плагинов проблему решает. С другой стороны, очень уж вкусные были плагины; без них как-то скучно.


Новость узнал лично. Еще есть такое описание на Хабрахабре.

Читать дальше »