неділя, 29 квітня 2012 р.

Стрімінг в Sinatra

Починаючи з 1.3.0, Sinatra підтримує стрімінг(streaming API). В інтернеті ви точно стикалися з його реалізацією. Наприклад стрічка Twitter чи новини ВКонтакте.

Іноді потрібно почати відправляти дані клієнту прямо в процесі генерування частин цих даних. В особливих випадках потрібно постійно відправляти дані до тих пір, поки клієнт не закриє з'єднання. Ви можете використовувати метод stream замість написання власних "обгорток".

Почнемо з класичного прикладу з документації Sinatra:
get '/' do
  stream do |out|
    out << "It's gonna be legen -\n"
    sleep 0.5
    out << " (wait for it) \n"
    sleep 1
    out << "- dary!\n"
  end
end

Якщо сервер не підтримує стрімінг (наприклад, WEBRick), то всі дані будуть відправлені за один раз відразу після того, як блок, переданий в stream, завершиться.

понеділок, 23 квітня 2012 р.

mpd_client - ще одна бібліотека MPD для Ruby

Велосипеди я люблю. Кататися люблю. Винаходити не люблю.

Хочу представити вашій увазі ще одну клієнтську бібліотеку для Music Player Daemon, повністю написану на Ruby. Зустрічайте mpd_client, порт бібліотеки python-mpd.

Інсталяція

Як і будь-який інший gem - виконайте в консолі:
$ gem install mpd_client

Використання

Вся функціональність міститься у класі MPDClient.
Для початку роботи з демоном MPD необхідно створити екземпляр цього класу:
client = MPDClient.new

Далі необхідно створити з'єднання з сервером, вказавши назву хосту і порт. Наприклад, запущений на цій самій машині:
client.connect('localhost', 6600)

Після успішного з'єднання з сервером можна здійснювати запити до MPD:
puts client.mpd_version             # надрукувати версію mpd
puts client.search('title', 'ruby') # вивести результат виконання команди 'search title ruby'
client.close                        # відправити команду close
client.disconect                    # від'єднатися від сервера

Тут приводяться всі команди для роботи з MPD, з описом параметрів і прикладами відповідей.

Також підтримуються списки команд використовуючи command_list_ok_begin і command_list_end:
client.command_list_ok_begin # почати список команд
client.update                # вставити команду update в список
client.status                # вставити команду status в список
client.command_list_end      # масив містить результати виконання всіх команд у списку