Patch falcon для ruby-1.9.3-p327

Как и обещал Юрий Соколов, автор патча falcon, на выходных он выпустил версию патча и для версии 1.9.3-p327. Чтобы установить новую версию, сделать необходимо следующее:

$ rvm get head

$ rvm reinstall 1.9.3 -n perf --patch falcon -j 3

Установка займёт какое-то время, а после этого ещё одна команда:

$ rvm use ruby-1.9.3-p327-perf --default

Приятной всем разработки!

Ноябрь 26th, 2012 by none | Комментариев нет

Ускоряем ruby и Rails

Упал мой взор на днях на две статьи: г-на alisnic и г-не Justin Kulesza. Решил проверить, что там и как, поэксперементировать на своей машинке.

Итак, что было:

$ ruby -v

ruby 1.9.3p327 (2012-11-10 revision 37606) [i686-linux]

И в одном моём проекте:

$ time rake routes

real 0m39.705s
user 0m25.454s
sys 0m2.100s

Как-то всё печально, не так ли? (-:

Дальше начинаются пляски с бубном. (-: Для начала определим, какой у меня процессор:

$ cat /proc/cpuinfo

vendor_id : GenuineIntel
cpu family : 15
model : 6
model name : Intel(R) Pentium(R) D CPU 3.00GHz

Теперь неплохо бы узнать, какие  CFLAGS можно использовать для моего процессора. Идём по ссылке, и там ясно написано:

CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"

Теперь в домашней директории создаём, если его нет, файл .rvmrc, в который добавляем следующее(мой вариант):

rvm_configure_env=(CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer")

Только так rvm можно передать параметры, с какими собирать очередную версию ruby. После этого, опытным путём выяснил, что последняя версия, для которой существует патч falcon, это p194. Следовательно, делаем следующее:

$ rvm get head && rvm reinstall 1.9.3-p194 --patch falcon --force-autoconf -j 3

Пьём чай/курим/ждём. После того, как всё скомпилируется, выполняем следующую команду:

$ rvm use ruby-1.9.3-p194 --default

Вот теперь можно повторить опыт, приведённый в начале статьи (незабываем про  bundle install в директории проекта):

$ time rake routes

real 0m7.854s
user 0m6.072s
sys 0m1.504s

По-моему, очень не плохо.

Юра Соколов, автор патча falcon, обещал сегодня добавить в rvm поддержку falcon и для p327. Будет вообще шикарно. Ждём. А пока можно и этой версией пользоваться. Уж в разработке так точно.

Успехов всем!

Ноябрь 23rd, 2012 by none | 2 комментария

Gem ‘seo_params’: определение основных параметров

День добрый. Сегодня хочу представить общественности свою не большую наработку: gem для определения SEO-параметров сайта, таких как Яндекс тИЦ, Google PageRank, количество проиндексированных страниц сайта в данных поисковых системах, количество твитов и лайков, а так же узнать позицию сайта в выдаче поисковиков по определённым ключевым словам.

Домашняя страничка на Github-е.

В принципе, всё очень просто.

1. Установка

gem install seo_params

2. Запускаем irb и пишем:

require("seo_params")

3. Вот теперь уже можно проверять параметры:

> SeoParams.all("www.none.com.ua")
=> {"pr"=>1, "gp"=>196, "tic"=>0, "yap"=>198, "tweets"=>0, "likes"=>"0", "ar"=>1004058, "dmoz"=>"no"}

где «pr» — это Google PageRank, «gp» — страниц в индексе гугла, «tic» — тИЦ Яндекса, «yap» — страниц в индексе Яндекса, «tweets» — количество твитов, «likes» — фейсбуковские лайки, «ar» — Alexa rank, «dmoz» — есть ли сайт в каталоге DMOZ.

4. В принципе, каждый из параметров можно узнать и отдельно:

> SeoParams.pr("www.none.com.ua")

=> 1

5. Существует так же возможность узнать позицию сайта в поисковой выдаче по конкретному ключевому слову:

> SeoParams.gposition("none.com.ua", "rails")

=> {"rails"=>8}

Обо всех остальных возможностях gem-а читайте на его домашней странице.

Ноябрь 22nd, 2012 by none | Комментариев нет

Отрицательный margin-top и Opera

Как же меня бесят все браузеры, а точнее их разнообразие в поддержке css.  Вот сегодня мучился с отрицательным margin-top. Все браузеры, включая «ослика», нормально его обрабатывали, а Опера — нет. И хоть ты тресни! Пришлось лопатить интернет в поисках хука. И он был найден! Css только для Opera.

Исходный css:

body {
    overflow-x: hidden;
    margin-top: -9px;
}

А вот это уже для Оперы только:

noindex:-o-prefocus, body {
    margin-top: -19px;
}

Надеюсь, кому-то поможет.

Октябрь 17th, 2012 by none | 3 комментария

Rspec and Devise reset password

Не знаю, кому как, но, по-моему, я сегодня изобретал велосипед. Но что-то немного погуглив, я не нашёл никаких вразумительных примеров, как написать интеграционные тесты для проверки функционала восстановления пароля. Может это никому и не надо, но всё равно было интересно повозиться с этим.

В общем, вот, собственно, весь тест:

describe 'test reset password' do
  it "should have reset password" do
    ActionMailer::Base.deliveries.clear
    @user = FactoryGirl.build(:user, :email=>"none@ited.com.ua")

    @user.send_reset_password_instructions()

    @mail = ActionMailer::Base.deliveries.last
    @host = ActionMailer::Base.default_url_options[:host]

    @mail.should deliver_to(@user.email)
    @mail.should deliver_from(Devise.mailer_sender)
    @mail.should have_subject(/Reset password instructions/)
    @mail.should have_body_text(/#{@user.email}/)
    @reset_url_regexp = %r{<a href=\"http://#{@host}/edit_password}
    @mail.should have_body_text(/#{@reset_url_regexp}/)


    change_password_link = @mail.body.raw_source[/(http:\/\/.+\")/][0..-2]
    visit change_password_link
    page.should have_content "
Новый пароль"

    fill_in "
user[password]", :with=> 'newpassword123'
    fill_in "
user[password_confirmation]", :with=> 'newpassword123'
    click_button "
Изменить"

    page.should have_content("
Dashboard")
  end

end

Я не знаю, почему плагин так разрисовал код… Но у меня он именно такой.

Распишу, что же тут и как…

ActionMailer::Base.deliveries.clear — тут очищаем очередь писем.

@user.send_reset_password_instructions() — отсылаем письмо только что созданному пользователю с инструкциями, как восстановить пароль.

@mail = ActionMailer::Base.deliveries.last — получаем последнее отосланное письмо

@host = ActionMailer::Base.default_url_options[:host] — откуда оно было отослано

@mail.should deliver_to(@user.email) — в письме должен быть корректный адрес получателя: пользователя, который был создан.

@mail.should deliver_from(Devise.mailer_sender) — отправить должен быть наш Devise, как установлено в настройках.

@mail.should have_subject(/Reset password instructions/) — тема письма тоже должна быть стандартной, если мы сами ничего не меняли.

@mail.should have_body_text(/#{@user.email}/) — в теле письма опять же должен упоминаться пользователь, вернее, его электронная почта, для которого восстанавливается пароль.

@reset_url_regexp = %r{&lt; a href=\"http://#{@host}/edit_password}

- небольшая регулярка для проверки, что в теле письма есть ссылка на восстановление пароля

@mail.should have_body_text(/#{@reset_url_regexp}/)

- проверка, что в теле письма есть данная ссылка

change_password_link = @mail.body.raw_source[/(http:\/\/.+\")/][0..-2]

- получаем ссылку из тела письма

visit change_password_link — переходим по этой ссылке

Ну а дальше уже всё просто: убеждаемся, что открылась нужная страница, заполняем новыми данными, и убеждаемся, что всё хорошо.

 
Не знаю, почему плагин так изуродовал код…..

Октябрь 9th, 2012 by none | Комментариев нет