среда, 12 марта 2014 г.

Resque zombie-workers

Kill all resque workers:

sudo kill -9 `ps aux | grep [r]esque | grep -v grep | cut -c 10-16`

Detach zombie workers:

Resque.workers.each {|w| w.unregister_worker if w.processing['run_at'] && Time.now - w.processing['run_at'].to_time > 300}

среда, 1 августа 2012 г.

Обновились на Mountain Lion и перестал работать ImageMagick?

Решение проблемы:
  1. Обновляем XCode до последней версии
  2. sudo chown -R <user> /usr/local
  3. brew update
  4. brew tap homebrew/dupes
  5. brew install apple-gcc42
  6. Ставим XQuartz 2.7.2 (http://xquartz.macosforge.org/landing)
  7. исправляем все ошибки в brew doctor
  8. gem uninstall rmagick
  9. gem uninstall mini_magick (и другие, если нужно)
  10. brew install --fresh imagemagick
  11. gem install rmagick
  12. gem install mini_magick (и другие, если нужно)
Так же не забудьте зайти в XCode -> Preferece -> Downloads и поставить Command-Line Tools

среда, 13 июня 2012 г.

Rails: Один пользователь - одна сессия

Поступила мне тут новая задача, опишу user-case:
  1. Пользователь входит в систему на компьютере «A»
  2. Пользователь оставляет сессию открытой и отходит от компьютера
  3. Пользователь входит в систему на компьютере «B»
  4. На компьютере «A» сессия пользователя закрывается не дожидаясь каких то действия со стороны пользователя.

пятница, 25 мая 2012 г.

Cucumber, Capybara, Selenium, and Alerts

Если во время тестов вы при появление alert сообщения получаете ошибку:
Selenium::WebDriver::Error::UnhandledAlertError:
  Modal dialog present
 Просто добавьте в ваш тест шаг:
page.driver.browser.switch_to.alert.accept

пятница, 27 января 2012 г.

Построение событийно управляемого веб-сервиса на Ruby

Предистория

Решил привести мысли в порядок и изложить в одном месте всё то, что пришлось перелопатить за последнее время. Итак, началось все с одной очень интересной задачи, которую мне поставили на моем нынешнем месте работы (UniqSystems).

Задача

Есть несколько игровых клубов, в каждом клубе по ~200 компьютеров. Есть демон, обрабатывающий в фоне сессии клиентов. Клиент платит деньги в кассу, садится за компьютер и авторизуется. Далее компьютер шлет на сервер long-polling запрос. Сервер подписывается на новые события, по данному клиенту и запускает таймер на 30 секунд. 

Если по истечению 30 секунд не происходит никаких событий, сервер возвращает ответ "Ок" и разрывает соединение с компьютером, компьютер шлет новый запрос. Если же, например, у клиента кончаются деньги, то демон останавливает сессию. В этом случае сервер получает событие о том что сессия остановилась и шлет компьютеру команду отключить клиента.

Компьютеры и сервер общаются по протоколу XML-RPC. Запросы делятся на два типа, асинхронные (long-polling) и синхронные (авторизация, завершение сессии и т.д.)

Иллюстрация для наглядности

вторник, 20 декабря 2011 г.

Система непрерывной интеграции CruiseControl.rb


Попробовал сегодня систему непрерывной интеграции cruisecontrol.rb

Установка в 5 шагов:

1) скачиваем исходники  https://github.com/thoughtworks/cruisecontrol.rb.git

2) создаем в проекте таск для выполнения тестов ./lib/tasks/cruise.rake

  task :cruise => [:copy_database_config] do
    RAILS_ENV = 'test'
    Rake::Task['db:drop'].invoke
    Rake::Task['db:create'].invoke
    Rake::Task['db:migrate'].invoke

    Rake::Task['spec'].prerequisites.clear
    Rake::Task['spec'].invoke

    FileUtils.rm_f(File.dirname(__FILE__) + '/../../rerun.txt')
    Rake::Task['cucumber:ok'].prerequisites.clear
    Rake::Task['cucumber:ok'].invoke
  end

  task :copy_database_config do
    File.open(File.dirname(__FILE__) + '/../../config/database.yml', 'w') do |file|
      file << <<YAML
  test: &TEST
    adapter: postgresql
    database: omega_test
    username: arion
    password: ghtlyfpyfxty
    encoding: utf8
    reconnect: false
    pool: 200

  cucumber:
    <<: *TEST
  YAML
    end
  end


3) добавляем проект в cruisecontrol ./cruise add <название> -r <адрес git> -s git -b <бранч>

4) запускаем ./cruise start

5) наслаждаемся

суббота, 10 декабря 2011 г.

Как записывать XGD3 на Mac Os X

Кратко, везде много информации и большинство не верной. Сам запорол болванку, вот видео как записать диск через isoBurn:
Есть еще статья тут: http://www.max-up.ru/news-apple/faq-xgd3-xbox-360-mac-os-x.html, но ей не верьте, из-за нее я диск и запорол. Не должно быть никаких манипуляций с LayerBreak, нужно просто сразу выставить правильный с вкладки Media Info.

Дальше, если у вас даш версии >= 2.0.14xxx, а прошивка lt+ 2.0 то вам нужно следовать инструкции по адресу http://pristavki26.ru/stati/xbox-360/najden-sposob-zapuska-ap2-5-i-xgd3-dlya-tex-kto-slovil-dae-bin/ для этого понадобится винда или эмулятор. Удачи!

воскресенье, 23 октября 2011 г.

Самодельный BackLight для телевизора с управлением от пульта

Есть много статьей на тему самодельной BackLigh подсветки, но все эти приспособления либо зависимы от компьютера, либо горят постоянно. Я поставил для себя цель сделать BackLigh для телевизора, которую бы можно было выключать и включать с пульта (не вставая с кровати), при этом не нарушая целостности самого телевизора.

понедельник, 10 октября 2011 г.

Пивогонщик - первый (правильный) All-grain

После неудачной, кустарной, попытки сварить зерновое пиво я решил подготовится к следующей варке как следует.

Во-первых, решил разобраться с оборудованием:
  • взял большую эмалированная кастрюлю у бабушки
  • смастерил чиллер 
  • сделал заторно-фильтровальный бак
  • утеплил все
  • добыл водонагреватель
Во-вторых, серьезно подошел к вопросу дезинфекции. Все оборудование промыл в марганцовке и протер спиртом.