понедельник, 26 января 2015 г.

Держатель для детских рисунков

Пока в моей мастерской дубак (-20°) я занимаюсь мелкими проектами. Сегодня буквально за день запилил такой держатель для детских рисунков.


пятница, 9 января 2015 г.

Кукольный домик

Просто набросаю несколько фотографий кукольного домика.

Кукольные домики, в подарок на новый год.

Всем привет!

Сегодня мы будем делать детский домик-подарок на Новый Год!


Сделал тут на днях программируемую шарманку для дочери.


Шарманка из дерева. Мелодию можно выставить изменив расположение гвоздиков в барабане. Ниже несколько фото и виде с демонстрацией работы.

среда, 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) и синхронные (авторизация, завершение сессии и т.д.)

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