Showing posts with label Эксперементы. Show all posts
Showing posts with label Эксперементы. Show all posts

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 (было свободно)
работает очень бысто (менее секунды на поиск, если локально - тогда мгновенно)

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% быстрее. 
Для тех кому интересно как заменить память в макбуке смотрим ролик

Thursday, February 21, 2008

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

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

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

Monday, January 28, 2008

Установка 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 но до этого, надеюсь, никто не дойдет)

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х часов

Saturday, September 22, 2007

TextMate 1.5.1 - Разум и Гугл победили

http://rs59gc2.rapidshare.com/files/10179568/1553554/TextMate_1.5.1.dmg - можно качать смело: кряка не требуется, работает стабильно. Одним словом - то что доктор прописал

Wednesday, July 11, 2007

Руби по .NET Framework или .NET on Rails

Ради интереса посмотрел как можно писать на руби под .NET фреймворк. Оказывается сделали нормальный компилятор совместимый с CLS (Common Language Specification) и Ruby 1.8.5. По крайней мере формочки из руби заработали с пол пинка. Так что скоро буду писать и под .NET на руби.

Компилятор и Ран-таим библиотеки можно взять отсюда (есть исходник парсера, который дает нормалый AST)

Tuesday, June 26, 2007

Человек vs Вирусов. Как это было.

Оказывается, фаирволла (firewall) на гейте локальной сети недостаточно для обеспечения полной безопастности сети: в результате моя сеть получила троянского зверька последней модели: судя по всему попал он туда через одну из клиентских машин, через почту или дыру в браузере. При этом накачал порядка 85 вирусов и других троянов, которые начали активно рассылать спам по миру... В итоге через 4 дня работу сети полностью парализовала. Весь траффик пошел на х..й (т.е. на виагру.). Единственная машинка уцелевшая от атаки оказаль моей рабочей. На остальных вообще ничего нельзя было делать: тормозило, весь траффик стал мусором, вирусы копировались (с одной машины снял аж 190.000 копий одного и того же товарища). Самое страшно что случилось, это то что вирусы оказались новыми - сайт касперского о таких и не слышал в помине, да и других производителей тоже. Пришлось ковыряться ручками. Правда нашел умную штуку, по совету друзей: Avast! - отличная штука, к тому же бесплатная. Респект.

П.С.
За одно узнал о route, netsh, netstat -a -b и пр полезных вкусностях винды.

Monday, June 11, 2007

Главное купить iPhone, остальное не важно

Стив Джобс представляет iPhone: После получаса, чуть не выкинул свой мобильник и КПК. Похоже это действительно революционная штука. Если бы она умела подсоединяться к клаве и большому монитору, так PC вообще не нужен был бы.

Тоже хочу такой. На другое смотреть даже противно.


Thursday, May 24, 2007

Экспорт данных ввиде SQL Dump с сайта на Ruby

Наконец-то совершилось! Это юбилейный, сотый пост в моем блоге. не прошло и пол года с момента создания, как наступил этот юбилей. Т.е. в среднем я пишу 0.75 поста в день.. не очень много, но если вычесть выходные, то получиться ровно 1 (выходных у нас много), так что почти приближаюсь к общеинтернетовскому стандарту: 1 день - 1 пост (или больше). Ладно не буду писать оффтоп. перейду к теме поста.

Иногда, в целях быстрого бекапа и переноса данных требуется сгенерить полный дамп базы, при этом дамп должен быть в формате SQL - запустил и работает. Обычно для таких целей используют phpMyAdmin (для MySql, разумеется. Все сказанное ниже применимо только к нему). Но вот если требуется сделать это в адинистративной части? и на Ruby? тут уже copy-paste не прокатит.

Решение

В поставку стандартного MySql входит утилита mysqldump - умеет генетить то что нам надо, но вот только ей еще и параметры нужно дать правильные, да и еще и вызвать , и пот ом результ работы с диска снести...
итого имеем (работает везьде, под любой проект и ос - с этим больше всего гемморился):

require 'yaml' #Для чтения database.yaml
require 'pathname' #Для определения абсолютных путей (требуется для Unixов)

class DumpManagerController <>
def index
response.headers['Content-type'] = 'text/sql' #правильный MIME тип
response.headers['Content-Disposition'] = "attachment; filename=dump.sql" #Чтобы сразу можно было качать
rebuild_dump_file()
dump_sql_file = File.open(output_file)
dump_content = ""
dump_sql_file.each { |line|
dump_content +=line
}
dump_sql_file.close #Чистим мусор
File.delete(output_file)
render :text=>dump_content #Пишем в поток
end

protected
def rebuild_dump_file
command = build_mysqldump_command()
system command #Вызываем комманду
end

def output_file
rails_directory+"/dump.sql"
end

def rails_directory
Pathname.new(__FILE__).realpath.dirname.dirname.dirname.to_s #Главная директория рельсов
end

def build_mysqldump_command
env = ENV['RAILS_ENV'] || 'development'
database = YAML::load_file( rails_directory+'/config/database.yml')
password = ""
password = "--password=#{database[env]['password']}" if (database[env]['password'])
"mysqldump -u #{database[env]['username']} #{password} #{database[env]['database']} > #{output_file()}"
end
end


В последнем методе генерим комманду, для этого нам нужен логин, пароль и имя базы (можно еще и хост, ну ладно его пропустим, но можно было бы и настроить)
Данные читаем из конфига (благо ЯМЛ поддерживается)

Вот вообщем и все. Надеюсь будет полезно.
П.С.
Сделать в Sql Server подбную штуку штатными средствами нельзя.. потому что Microsoft думает что это никому не нужно. Приходиться мучаться и делать генераторы SQL на основе мапперов.

MySql - респект

Wednesday, May 23, 2007

Bluetooth Ганитура Jabra: личный опыт

Наконец-то умер мой доблестный телефон SkyLink - работал почти 2 года как часы. Я и решился повторить покупку Nokia 6021 - уже был - украли. Поддерживает все что нужно "не совсем обычному" человеку:
Bluetooth/IrDA/Data cable (хотя последний не сильно и нужен)
GPRS/EDGE - скорость 10-12 Kb в секунду - нравиться.
Достаточно хороший аккумулятор - 3 дня держит стабильно
Цветной дисплей :-)
Стоил - 3390 (в августе 2006 назад покупал меньше чем за 3000... оказывается телефоны дорожают...). Можно было бы и дешевле, но искать было экономически не целесобразно.

Вообщем прекрасный экземпляр:
Модем для ноутбука (через Bluetooth адаптер), КПК (у меня он старый и Bluetooth'а нет так что использую IrDA - прощай EDGE). Решил еще завести и гранитуру: разумеется, голубозубую. Производство Jabra (никогда не слышал о такой). Стоила - 1400 - не самая дешевая (была Nokia за 900), не самая дорогая - была от того же производителя за 3200.
Найденые "+"-сы:
- Слышно прекрасно
- Голосовые метки Nokia распознает даже на шумной улице, почти в 100%
- телефон начинает работать дольше. Сама гарнитурка живет часов 6-7.
- Разговаривать можно в 10-15 метрах от телефона.
- Телефон можно смело прятать в труднодоступных для воров местах (все: ноут, кпк, телефон, мышка, фотоаппарат + пара ненужных книг прекрастно прячутся в самый обычный гаджет-рюкзак)
- Руки можно держать хоть за спиной.
"-"-сы:
- Давит на ухо
- Люди смотрят как на сумашедшего.. боюсь подумать что пару лет назад было
- Жаловались что меня плохо слышно (самый большой недостаток, однако в тихом месте эта проблема пропадает)

Итоги:
Новая игружка за 4790. При этом местами полезная. Ничего лишнего (кроме Push-to-Talk которого в России пока нет)

П.С.
Если сюда добавить почти безлимитный тариф при звонках на билайн (а звоню я именно на него... обычно) за 20 руб в сутки, то душа просто радуется.

Friday, May 18, 2007

Новый подход к системе оценки кандидатов при приеме на работу

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

Доступна бесплатная бета

Подробнее тут

Monday, May 7, 2007

Мессенжер Все-В-Одном

Наткнулся на новую утилиту: мессенжер для нескольких клиентов. Похож на Miranda но на вид по-приятнее, работает шустрее, выглядит симпатичнее. Поддерживает ICQ, MSN, Yahoo, AIM, Jabber и пр. Называется - Pidgin. Если есть несколько мессенжеров, то использовать их совместно становиться намного удобнее. Памяти кушает ~ 40 мб - тоже вполне терпимо. Mozilla Firefox 2.0.3 меньше 80-100 редко занимает.
Что касается web-аналогов, могу порекомендовать meebo - в хозяйстве вещь полезная. К тому же ставит с собой последнюю версию GTK... Работает по Windows/Mac/Linux
Интерфейс понятный и удобный - ничего лишнего. на виду основные вещи, а дополнения не сложно настроить. Есть проверка орфографии в том числе под русский.

Весит вместе с GTK 10Mb.

Friday, April 27, 2007

Яндеск пульс

Наконец-то нашел штуку- Яндекс Пульс в которую просто интересно тыкать, хотя и с пользой...
Основная идея:
Посмотреть статистику по поиску по запросу и сравнить его с другими.

Например:
Ruby:
за день: 8 запрос в день
максиум: 140 за день.

и т.д.

Есть предчувствие что в среднем 5-7 человек по этому запросу доходят до моего блога...

Thursday, April 12, 2007

Применение Экстримального Программирования на практике

3 Недели назад начал применять практики из экстримального программирования (ныне плавно эволюционировавшего в Шуструю разработку - Agile Development. Просто название у первого более красивое... как раз для заголовка) в проекте, над которым я работаю уже почти год (9.5 месяцев). Проект представляет из себе нечто похожее на небольшую ERP систему, которая должна сменить в производстве старую версию системы, для решения проблем автоматизации некого заграничного предприятия.

Причины которые, подтолкнувшие меня к этому шагу:
- Необходимость в автоматическом тестировании (С ручным, я просто не мог справиться)
- Большое количество новых фунциональностей, необходимостить в которых возникла в последнее время
- Переработка существующего кода, что более 3м клиентского и серверного кода - Рефакторинг (Refactoring). Часть которого использует достаточно не стабильный компонент, от которого со временим придеться избавиться (в следующей версии... через год)
- Короткие релизы - раз в неделю, чтобы конечный пользователь мог оценивать результаты и выдыигать свои пожелания.
- Постоянное общение с заказчиком.


От работы не более 40 часов в неделю пришлось отказаться - сроки...

Как показала практика, идея себя оправдала:
В последнем релизе не было обнаруженно ни одного изъяна (тестировали его под нагрузкой в реальных условиях, с самыми произвольными данными).
До этого, в 3-х недельных релизах находили по 20-25 проблем.

В результате, основной упор был сделан на Test-Driven Development (по-русски: пишешь тест - потом уже код логики) и рефакторинг (приписал тест ко компоненту и рефакторишь его). При этом в паре эти практики оказались гораздо более эффективными, нежли поодиночке.

При этом, это далеко не первый мой опыт работы в стиле Agile, но подобных результатов он мне еще не приносил.

Осталось пересилить в себе свинью, и начать писать тесты всегда и с самого начала.

В дальнейшми постараюсь поделиться своим опытом более развёрнуто, с конкретными примерами.

П.С.
Сегодня будет первая ночь за последнюю неделю, когда я могу спать спокойно.

Monday, April 2, 2007

Горький вкус Руби

Начинаю по-тихоньку разочаровываться в этой штуки (черт с ним, что медленно работает). Программирование чего-то большого в совсем не типитизированных языках - дело гиблое, да и отладчика под него нормального нет - как в .NET ,например.

Что касается удачного баланса типитизации и гибкости - это C# 3.0 (о нем я еще много чего еще напишу)

То что языки должны становиться более лаконичными и слишком жесткое задание типов сильно мешает, но от типитизации отказываться не стоит. По крайней мере сейчас. Да, на написание время сокращяется в 10 раз по сравнению с Java (при Web разработке). Верю. Но вот отладки - только увеличивается. Для небольших проектов отношение написание-отладка ~ 70/30. Для больших 20/80. Сразу вычерчивается область приминимости Руби: мелкие и средние проекты. Но никак не больше.

Концепцию программирования на Ruby можно назвать Coding Faster, Debug Slower. Где-то получается и "шустро" (Agile), а потом становиться уже и не очень.

Что касается перехода с ASP.NET на Ruby - это просто не оправдано. Имея в своем распоряжении Visual Studio и кучу всего полезного (типа генераторов статического кода, верификаторы и прочее), идти куда-то где все надо делать руками - вещь сомнительная.

Как появиться Windows Presentation Foundation (в .NET 3.0), нынешний AJAX, покажиться песочницей...

Немного о блочной верстке

Опыта создания веб-приложений у меня хватает - с этим делом вожусь с 2003 года. Но до того что называется CSS (или просто блочная верстка) руки как-то не доходили: занимался больше бизнес-логикой и пр. умными штуками. Но неделю назад, поступил очень выгодный заказ на создание Mash-up (нечто похожее описано здесь) из Google Maps и списка ресторанов. А отображатся там будут... места где видели знаменитостей (Бритни Спирс, Мадонну, Каили Минойг и пр).

Это все лирическое отстпление. И так к теме: обычно, мне приходилось делать разметку в виде HTML таблиц - самый простой (детский способ). К тому же Visual Studio под это дело специально заточена. (Посмотрем что измениться к следующией версии).

Тут же заказчик сказал: хочу CSS и точка. Клиент хочет - значит получает (если платит, разумеется). Один рабочий день я, похоже, я постик Дао (не путать с Data Access Layer) CSS. Размер HTML уменьшился раза в полтора. Читаемость повысилась, одним словом, оно стоило потраченного времени.
Список ресурсов, которые мне пригодидись - тута

Постараюсь поделиться полезным опытом с одном из следующих постов

Демку можно посмотреть тут (смотреть, согласно тербованиям под Internet Explorer 6-7)

Sunday, April 1, 2007

А ваша машина готова к Windows Vista?


Красота: Windows Vista совместим с машиной для уничтожения бумаги!

Wednesday, March 21, 2007

Live Messenger

Случайно вспомнил, что по мимо своего обычного аккаунта для LiveMessenger у меня есть еще пара:
один остался со времен Muranosoft, хотя я от туда ушел 2 года назад.
второй - с бесплатной почты на programist.ru, которая читается так:
Петров, собака, Программист точка ру.

Пароли вспомнились с ходу, но вот когда я туда зашел, я очень сильно удивился: все контакты оттуда пропали! Кто бы мог подумать, что службы Microsoft так замечательно работаю. Просто удивлсюсь иногда: не пользовался - досвидание, при этом не сам аккаунт, а именно контакты. Не слышал чтобы ICQ, Yahoo, Skype, AIM и GoogleTalk позволяли себе подобные штучки.