Thursday, February 12, 2009
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. Сначала смотрим если слово уже искалось, если нет - идем в гугл.
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 запросов, а потом утекает память или еще что случается), следовательно дела все равно плохо. Проблема заключается в том чтобы не доводить никого до плачевного состояния и последовательно рестартить по одному экземпляру за раз.
#!/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)
Решение: каждые экземпляр рестартим раз в 10 минут, в случае с сервером работающем под высокой нагрузкой рекомендую каждые 5 минут. Кроме всего прочего скрипт живет в виде демона, которого не сложно положить в автостарт.
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
Зачем это нужно?
1. Не повторяем себя DRY с отрытием/закрытием тегов
2. Код уменьшается процентов на 30
3. Единица площади экрана несет больше информации (проще держать все на виду)
4. Код будет всегда хорошо отформатирован тк вложенность тэгов обеспечивается табуляциями
5. Естественная интеграция с Ruby и RJS
небольшой пример который должен показать насколько прагматично его использовать:
.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
.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 - получаем документацию.
Просто и удобно.
find . -exec grep -q "что ищем" '{}' \; -print
но есть и более удобный и короткий способ:
1. Устанавливаем rak:
sudo gem install rak
2. Пришем rak -f "то что ищем"
На выходе имеем список фаилов
3. Пишем rak "что ищем" - получается список фаилов где нашлось соотвествие и строки с соотвествием (тескт поиска выделен красным)
4. Пришем rak - получаем документацию.
Просто и удобно.
Wednesday, February 6, 2008
Почему маки такие быстрые
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)
Шаг 1
curl -O http://download.savannah.gnu.org/releases/freetype/freetype-2.1.10.tar.gz
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 ..
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 ..
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 ..
Подготовка
С начала ставим 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 ..
cd freetype-2.1.10
./configure --prefix=/usr/local
make
sudo make install
cd ..
Шаг 2
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
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 ..
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
sudo gem install --no-rdoc --no-ri RMagick
И готово - теперь можно рисовать из Ruby с удовольствием! (Можно и из консоли через ImageMagick но до этого, надеюсь, никто не дойдет)
Monday, December 10, 2007
Friday, December 7, 2007
Комманда быстрого поиска для TextMate
При работе на Ruby on Rails часто требуется поиск по тексту но только по самому проекту (поиск по vendor/plugins - это редкость). По мимо того обычно надо искать по руби и rhtml фаилам а не по всем. Да и TextMate по умолчанию запускает процесс поиска в своем потоке от чего тот становиться немного великоват (300мб), при этом обычно он не занимает более 70. В результате с этим надо что-то делать:
1. делаем новыю комманду для руби
2. устанавливаем input ->"selected text" or "word", output-> "show as html"
3. в качестве текста:
#!/usr/bin/env ruby
def publish_list(app_dir)
File.open("#{app_dir}/search.out", 'r') do |fh|
content = fh.read.gsub(app_dir,"~")
lines = content.split("\n")
for line in lines
color = "black"
if(line.include?("~/app/controllers/"))
color = "brown"
end
if(line.include?("~/app/views/"))
color = "green"
end
if(line.include?("~/app/models/"))
color = "red"
end
print "
end
end
end
app_dir = ENV['TM_PROJECT_DIRECTORY']
text_to_search = STDIN.read
extentions = ["*.rb","*.rhtml"]
results = ""
for ext in extentions
command_text = "find #{app_dir}/app -name \"#{ext}\" -exec grep -q \"#{text_to_search}\" '{}' \\; -print > #{app_dir}/search.out"
system(command_text)
publish_list(app_dir)
end
1. делаем новыю комманду для руби
2. устанавливаем input ->"selected text" or "word", output-> "show as html"
3. в качестве текста:
#!/usr/bin/env ruby
def publish_list(app_dir)
File.open("#{app_dir}/search.out", 'r') do |fh|
content = fh.read.gsub(app_dir,"~")
lines = content.split("\n")
for line in lines
color = "black"
if(line.include?("~/app/controllers/"))
color = "brown"
end
if(line.include?("~/app/views/"))
color = "green"
end
if(line.include?("~/app/models/"))
color = "red"
end
print "
#{line}
"end
end
end
app_dir = ENV['TM_PROJECT_DIRECTORY']
text_to_search = STDIN.read
extentions = ["*.rb","*.rhtml"]
results = ""
for ext in extentions
command_text = "find #{app_dir}/app -name \"#{ext}\" -exec grep -q \"#{text_to_search}\" '{}' \\; -print > #{app_dir}/search.out"
system(command_text)
publish_list(app_dir)
end
теперь запускаем (у меня на cmd+ctrl+alt+shift+F) и видим окно с результатами поиска
Wednesday, December 5, 2007
iКона: Стив Джобс.
Действительно захватывающее чтение. Must read. аннотация ниже
скачать можно отсюда
Аннотация
Эта книга о самом поразительном человеке в современной истории бизнеса – Стиве Джобсе – великом предпринимателе эпохи высоких технологий, известном своим индивидуализмом, инакомыслием и бунтарским характером. Авторы подробно описали головокружительный взлет молодого человека, очень рано добившегося успеха, и последовавшее за этим стремительное падение, во время которого Стив был изгнан не только из Apple, но и из компьютерной индустрии вообще.
Эта книга приобрела скандальную известность еще на этапе ее подготовки к печати. Получив экземпляр рукописи для ознакомления, компания запретила продавать во всех магазинах Apple книги издательства Wiley&Son. Такая реакция не повлияла на желание издательства опубликовать это произведение.
Книга будет интересна тем, кто хочет узнать, как происходило формирование, становление и развитие современной эры цифровых технологий под влиянием самой значимой фигуры современности – человека, кардинально изменившего три отрасли – индустрию кино, музыки и компьютеров, – Стивена Джобса.
скачать можно отсюда
Аннотация
Эта книга о самом поразительном человеке в современной истории бизнеса – Стиве Джобсе – великом предпринимателе эпохи высоких технологий, известном своим индивидуализмом, инакомыслием и бунтарским характером. Авторы подробно описали головокружительный взлет молодого человека, очень рано добившегося успеха, и последовавшее за этим стремительное падение, во время которого Стив был изгнан не только из Apple, но и из компьютерной индустрии вообще.
Эта книга приобрела скандальную известность еще на этапе ее подготовки к печати. Получив экземпляр рукописи для ознакомления, компания запретила продавать во всех магазинах Apple книги издательства Wiley&Son. Такая реакция не повлияла на желание издательства опубликовать это произведение.
Книга будет интересна тем, кто хочет узнать, как происходило формирование, становление и развитие современной эры цифровых технологий под влиянием самой значимой фигуры современности – человека, кардинально изменившего три отрасли – индустрию кино, музыки и компьютеров, – Стивена Джобса.
Monday, November 19, 2007
Subscribe to:
Posts (Atom)


