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
Тестирование flash в функциоальных тестах в связке с cacheable_flash
При использование плагина cacheable_flash который сохраняет объект flash в cookies на клиента в связке с функциональными тестами приходиться использовать нестандартный подход при тестировании содержимого это объекта, в связи с тем что после загрузки в кэш, flash становиться пустым.
решение:
в test_helper.rb кладем метод:
def get_flash_message(key)
key = key.to_s
begin
JSON.parse(cookies["flash"].value.first)[key]
rescue Exception => e
""
end
end
теперь в тесте пишем:
assert_equal "Thanks for you comment", get_flash_message(:notice)
проблема решена!
решение:
в test_helper.rb кладем метод:
def get_flash_message(key)
key = key.to_s
begin
JSON.parse(cookies["flash"].value.first)[key]
rescue Exception => e
""
end
end
теперь в тесте пишем:
assert_equal "Thanks for you comment", get_flash_message(:notice)
проблема решена!
Monday, November 5, 2007
GPRS on Mac
К сожалению, интернет может понадобиться когда его нет под рукой (в дороге, в зале ожидания, дома когда отключили стационарный интернет итд). При условии наличия Mac и телефона (в моем случае это MacBook c OS X 10.4.10, Nokia 6021 которые общаются через "синий зуб" и Beeline Петербург ) проблема в принципе решаема (у меня решилась за пару часов, в то время как на Windows и pocket pc это заняло немного больше времени).
И так что требуется:
1. Сделать обычный коннект с телефоном (не сетевое соединение, а просто подключиться)
2. Скачать и распаковать его в /Library/Modem Scripts
3. в настройке сети выбрать "Bluetooth"
4. в закладке "PPP":
account name/password - beeline/beeline
telephone number - internet.beeline.ru
5. в закладке "Bluetooth modem"
modem: Generic GPRS CID1 (только что установили)
enable error correction and compression in modem - false
wait for dial tone before dialing - true
Все! Больше ничего не нужно - работает как часы - у меня коннект прожил более 4х часов
И так что требуется:
1. Сделать обычный коннект с телефоном (не сетевое соединение, а просто подключиться)
2. Скачать и распаковать его в /Library/Modem Scripts
3. в настройке сети выбрать "Bluetooth"
4. в закладке "PPP":
account name/password - beeline/beeline
telephone number - internet.beeline.ru
5. в закладке "Bluetooth modem"
modem: Generic GPRS CID1 (только что установили)
enable error correction and compression in modem - false
wait for dial tone before dialing - true
Все! Больше ничего не нужно - работает как часы - у меня коннект прожил более 4х часов
Monday, October 29, 2007
Очередной русский старт-ап
А вот и еще один старт-ап. По сути представляет из себя незатейливый аджаксовый фронт-енд для таких сайтов как cars.auto.ru и пр. Для просмотра интересующей машины перенаправляет на сайт-источникё
Sunday, October 28, 2007
ВКадре или youtube по-русски родом из социальных сетей
Вот похоже к rutube.ru и прочем видео хостингам тихо подкрался не буду говорить кто. Но судя по всему их ждут достаточно серьезная конкуренция: недавно появился сервис к .... видео из vkontakte.ru. Классический интерфейс стиле а-ля гугл. Если учесть скорость пополнения "библиотеки" вконтакта 27000
видео роликов в сутки. В тоже время rutube и видео.меил 1200 и 5000 роликов соотвественно. Всего же в копилки контакта уже более 1М фаилов...
Так же с удивления обнаружил еще и занятый домен vcafe.ru - как не странно владелец все тот же. (сам им интересовался....)
К теме социальных сетей относиться и покупка Microsoft'ом акций facebook исходя из стоимости всей компании $15 млрд (а эти уж точно не будут разбрасываться деньгами на ветер). Всего в facebook сейчас порядка 50М пользователей. Если пересчитать на пользователей то 1 шт стоит $300. Тогда вконтакт (полагаю перспективы роста и там и там одинаковые) должен стоить всего чуток - $600M (что должно быть больше капитализации yandex и mail)
Прим:
То что 1 пользователь стоит $300 - это не совсем так, предполагается рост рынка и увеличения аудитории до порядка 300M пользователей. Так что это больше похоже на коэффициент расчета на скорость роста, а не на реальную оценку. В то же время у вконтакта еще есть около 28М не охваченых пользователей рунета и этот коэфициент должен быть по-более....
видео роликов в сутки. В тоже время rutube и видео.меил 1200 и 5000 роликов соотвественно. Всего же в копилки контакта уже более 1М фаилов...
Так же с удивления обнаружил еще и занятый домен vcafe.ru - как не странно владелец все тот же. (сам им интересовался....)
К теме социальных сетей относиться и покупка Microsoft'ом акций facebook исходя из стоимости всей компании $15 млрд (а эти уж точно не будут разбрасываться деньгами на ветер). Всего в facebook сейчас порядка 50М пользователей. Если пересчитать на пользователей то 1 шт стоит $300. Тогда вконтакт (полагаю перспективы роста и там и там одинаковые) должен стоить всего чуток - $600M (что должно быть больше капитализации yandex и mail)
Прим:
То что 1 пользователь стоит $300 - это не совсем так, предполагается рост рынка и увеличения аудитории до порядка 300M пользователей. Так что это больше похоже на коэффициент расчета на скорость роста, а не на реальную оценку. В то же время у вконтакта еще есть около 28М не охваченых пользователей рунета и этот коэфициент должен быть по-более....
Friday, October 26, 2007
OS X 10.5 - Уже в продаже
Осталось дождаться когда это чудо появиться в Петербурге. В Хельсинках должен в течении пары дней появиться (насколько я понял продавца), но виза уже закончилась. Так что придеться искать по городу - надеюсь в течении недели смогу заполучить. (Видимо я стал через чур честным, т.к. мог уже пару дней назад вытащить из торрента.)
Wednesday, October 24, 2007
Tuesday, October 16, 2007
300 Фичей OS X 10.5 Leopard
С полным списком можно ознакомиться тут
ИМХО - действительно полезные улучшение, особенно Time Machine, Desktop, Terminal (хотя его табами я и - ручками прокачивал) и Spaces
Одним словом - верю что Леопард свои 129$ стоит
ИМХО - действительно полезные улучшение, особенно Time Machine, Desktop, Terminal (хотя его табами я и - ручками прокачивал) и Spaces
Одним словом - верю что Леопард свои 129$ стоит
Think Different
Here’s to the crazy ones.
The misfits.
The rebels.
The troublemakers.
The round pegs in the square holes.
The ones who see things differently.
They’re not fond of rules.
And they have no respect for the status quo.
You can quote them, disagree with them, glorify or vilify them.
About the only thing you can’t do is ignore them.
Because they change things.
They push the human race forward.
And while some see them as the crazy ones,
We see genius.
Because the people who are crazy enough to think
they can change the world,
Are the ones who do.
Subscribe to:
Posts (Atom)