Saturday, September 27, 2008

Apache on Rails

Основным рецептом развертывания Ruby On Rails приложений всегда был mongrel cluster в связке с nginx.
Этот способ вполне сносно работал, однако сейчас  ему появилась реальная альтернатива: passenger - плагин (мод) для apache.

Он обладает следующими преимуществами:
 - Очень просто конфигурируется
 -  стартуется/рестартится в одну строчку
 - работает быстрее
 - есть столько ресурсов сколько нужно в данный момент (новые инстансы обработчика делаются через fork когда нужно)

На мой взгляд переход в существующих проектах является сомнительным, однако новые проекты я бы рекомендавал запускать сразу под ним.

В дополнение можно отметить его удобство при разработке на локальной машине, особенно под OS X

ПС
У меня заняло около 10 минут на все. Есть HOWTO на railscasts 

Monday, August 18, 2008

Добавление google translate к TextMate

ставим 

sudo gem install google_translate

Добавляем следующую комманду для всех типов фаилов. Результат - tooltip, Источник - selected text or word. Сначала смотрим если слово уже искалось, если нет - идем в гугл.

#!/usr/bin/env ruby
require 'rubygems'
require 'google_translate'
dict = "~/dict"
space=" - "
text= STDIN.read
local_trans = `cat #{dict} | grep '#{text.strip}#{space}'`
if(local_trans.empty?())
trans = Google::Translate.new().translate(:from => "en", :to => "ru", :text =>text)
`echo '#{[text,space,trans].join}' >> ~/dict`
puts(trans)
else
puts("local:"+local_trans.split("-").last.strip)
end

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

Wednesday, August 13, 2008

Надеюсь не все блоггеры заразились твиттером

Не слишком уже актуально, но надеюсь у меня до этого не дойдет. кстати вот мой твиттер аккаунт 

Tuesday, August 12, 2008

Лекарство от регулярно падающего mongrel

При развертывании любого RoR проекта приходиться иметь дело с mongrel, а в случае серьезного проекта и с mongrel cluster. Как извесно, mongrel вещь сильно глюканутая: немногопоточная, часто память течет. В следствии этого появилась идея объединить несколько экземпляров в один кластер и привизать его к балансировщику nginx/apache. После этого жить стало лучше, но и кластер склонен к падению (в зависимости от типа запросов, монгрил может осилить от 500 до 1000 запросов, а потом утекает память или еще что случается), следовательно дела все равно плохо. Проблема заключается в том чтобы не доводить никого до плачевного состояния и последовательно рестартить по одному экземпляру за раз. 

Решение: каждые экземпляр рестартим раз в 10 минут, в случае с сервером работающем под высокой нагрузкой рекомендую каждые 5 минут. Кроме всего прочего скрипт живет в виде демона, которого не сложно положить в автостарт.

#!/usr/bin/ruby

pid = fork do
  cluster_size = `echo $CLUSTER_SIZE`.to_i
  life_time = 600 #10 mins
  span = life_time.to_f / cluster_size
  intance = 0 # mongrel id
  loop do
    mongrel_id = 3000+intance
    `mongrel_rails stop --pid log/mongrel.#{mongrel_id}.pid `
    sleep 10
    `mongrel_rails start -d -p #{mongrel_id} --pid log/mongrel.#{mongrel_id}.pid`
    intance+=1
    intance=0 if intance == cluster_size
    sleep span.to_i
  end
end
puts pid
Process.detach(pid)

Monday, August 11, 2008

Кормим мак памятью

Недавно решил расширить оперативу своему макбуку. все оказалось довольно просто:
купил 2 пляшки по 1 Gb (DDR2 SDRAM 667MHz) по 850руб за шт. и обычную отвертку.
После 10 минут танцев с бубнами рельсовые приложения заработали на 10-15% быстрее. 
Для тех кому интересно как заменить память в макбуке смотрим ролик

Где поесть 2.0

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

Кстати первый пример правильного использования tag cloud (обычно им забита половина экрана, а толку никакого - пример rutube.ru)

В заключение хочу отметить что в отличии от web 0.0 проектов ( spb.menu.ru, allcafe.info и пр) им удобно пользоваться. По крайней мере у меня ушло 3 минуты на подбор места на вечер, а не 45 минут.

П.С. Судя по всему написан на Ruby On Rails - урлы уж больно очень красивые, настоящий RESTful

Saturday, April 19, 2008

Ruby on Rails: Избавляемся от HTML

Это возможно если использовать HAML вместо ERb
небольшой пример который должен показать насколько прагматично его использовать:
.center.wide
  #profile
    %b{:style=>"margin-left:10px"}=user.name
    %p
      =user.description
      =link_to_remote("save", user_path(user), :submit=>:profile)
      #tags
        =user.tags.map(&:name).join(",")
        =link_to_function("close") do |page|
          - page[:tags].hide
Человек немного знакомый с Web технологиями, разумеется, поймет, что значит это пример.


Зачем это нужно?
1. Не повторяем себя DRY с отрытием/закрытием тегов
2. Код уменьшается процентов на 30
3. Единица площади экрана несет больше информации (проще держать все на виду)
4. Код будет всегда хорошо отформатирован тк вложенность тэгов обеспечивается табуляциями
5. Естественная интеграция с Ruby и RJS
6. Ускоряется набор текста

Thursday, February 21, 2008

Удобный и быстрый поиск по тексту

Искать по текст по фаилам в OS X (и любой другой юниксоподобной системе) можно командой:
find . -exec grep -q "что ищем" '{}' \; -print
но есть и более удобный и короткий способ:
1. Устанавливаем rak:
sudo gem install rak
2. Пришем rak -f "то что ищем"
На выходе имеем список фаилов 
3. Пишем rak "что ищем" - получается список фаилов где нашлось соотвествие и строки с соотвествием (тескт поиска выделен красным)
4. Пришем rak - получаем документацию. 

Просто и удобно.

Wednesday, February 6, 2008

Почему маки такие быстрые


113% CPU от Core2Due - это не шутки! Только вот кулеру это не сильно понравилось - выдавал целых 7400 оборотов в минуту

Monday, February 4, 2008

Постим в блог из Dashboard (mac)

Есть чудестный виджет от гугл который прекрасно дружит с blogspot'ом - крайне удобно. Есть возможность сохранить как черновик.

Monday, January 28, 2008

Единственно правильный iБрокер

После того как пересел на мак столкнулся с одной не приятной проблемой - российские брокеры люди в своей массе серые, про маки ничего не слышали. В данным момент все брокерское ПО делиться на 2 вида - классическое win32 приложение (90% - это quik, либо что-то еще хуже) и (что логично) web-приложение (опять-таки в 96% это IE 5.0+ only). Единстсвенный брокер, который дает приличное кросс-браузерное приложение оказался - Финам. Проверил - действительно работает и работает хорошо - просто, удобно и ничего лишнего! В дополнение офис у них находиться в самом начале Московского проспекта - напротив моего банка и вопросы они решают в течении одного дня: утром бумаги получил - днем договор подписал - вечером перевод осуществил.

Деньги на счет можно перевести без лишних проблем через веб-интерфейс банка (как и обычный банковский перевод идет сутки) . Одним словом, почти все дела решаются не вылезая из интернета!


Яблоки падают! Налетай пока дежево!

Приблизительно так выглядят котировки акции apple (ярлык на NASDAQ "AAPL" ) за последнии 3 месяца. Если приглядеться внимательние то не сложно заметить что буквально за 20 дней они упали с 200$ до 127$. Что сильнее чем другие Hi-Tech компании как Google. Однако если учеть что компания находиться на подъеме (2.5M проданных iPhone, 20M - iPod итд) - то пора задуматься о покупке "сладкого яблочного пирога". Что касается миниума за 52 недели то он был около 80$. Так что похоже дно уже близко - пора начинать готовиться к скупке. Есть шанс удвоить капитал за год... На российском рынке компаний с такой динамикой нет (падать умеют... и потом медленно ростут) - а жаль. 

Установка RMagick на OS X без MacPort

После выполнения следующих комманд должен заработать (прим: выполнение займет как миниум минут 20)

Подготовка
С начала ставим XCode, Ruby, Redline, Rails

Шаг 1
curl -O http://download.savannah.gnu.org/releases/freetype/freetype-2.1.10.tar.gz
tar xzvf freetype-2.1.10.tar.gz
cd freetype-2.1.10
./configure --prefix=/usr/local
make
sudo make install
cd ..

Шаг 2

curl -O http://superb-west.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.10.tar.bz2
bzip2 -dc libpng-1.2.10.tar.bz2 | tar xv
cd libpng-1.2.10
./configure --prefix=/usr/local
make
sudo make install
cd ..

Шаг 3

curl -O ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
tar xzvf jpegsrc.v6b.tar.gz
cd jpeg-6b
ln -s `which glibtool` ./libtool
export MACOSX_DEPLOYMENT_TARGET=10.4
./configure --enable-shared --prefix=/usr/local
make
sudo make install
cd ..


Шаг 4

curl -O ftp://ftp.remotesensing.org/libtiff/tiff-3.8.2.tar.gz
tar xzvf tiff-3.8.2.tar.gz
cd tiff-3.8.2
./configure --prefix=/usr/local
make
sudo make install
cd ..

Шаг 5

curl -O http://easynews.dl.sourceforge.net/sourceforge/imagemagick/ImageMagick-6.3.0-0.tar.gz
tar xzvf ImageMagick-6.3.0-0.tar.gz
cd ImageMagick-6.3.0
./configure --prefix=/usr/local
make
sudo make install
cd ..

Последний рывок

sudo gem install --no-rdoc --no-ri RMagick

И готово - теперь можно рисовать из  Ruby с удовольствием! (Можно и из консоли через ImageMagick но до этого, надеюсь, никто не дойдет)

Веселая песенка про Пузырь 2.0