IM Integration With XMPP4r : Part 2

In the first part, we talked less about XMPP4r and more about XMPP, this time it will be the other way around.
Now that we know that XMPP messages are XML bits of information exchanged between a client and a server via a TCP connection, we are more able to understand the purpose of XMPP4r.
What is XMPP4r?
Here is the most simple definition I came out with : XMPP4r is a ruby library that acts as a XMPP Client. Understand it that way and you won’t be confuse about what XMPP4r is supposed to do. Like any other jabber client (google talk, pidgin, etc), Xmpp4r sends, receives and manages XML messages called stanzas.
In a sense, XMPP4r is like GoogleTalk without the GUI. (And, of course, XMPP4r is not already implemented… you have to code the behavior of the client yourself). With GoogleTalk, you connect on a Jabber Server by pressing the connect button. With XMPP4r, you connect on a Jabber server that way :

client = Client.new(JID::new("[email protected]"))
client.connect
client.auth("my_extremely_secret_password")
client.send(Presence.new.set_type(:available))

The first line simply creates a new instance of the Client class. This instance represents the user itself. The 2nd line tries to establish a connection between the user and the Jabber server (somewhere.com). The 3rd line tries to authenticate the user using the following mechanisms.

  • SASL DIGEST-MD5
  • SASL PLAIN
  • Non-SASL digest

Now about the 4th line. Remember when I talked about stanzas in the first part? Well, at the 4th line, we sent our first stanza to our Jabber Server… a presence stanza. We did this because we want our server to know we are there. That way, everyone in our buddy list will know we are online and ready to chat!
Sending messages
So, what now? You are online, fine… but how can you exchange messages with people? That’s pretty simple…

msg = Message::new("[email protected]", "Hello... John?")
msg.type=:chat
client.send(msg)

Important note : You have to set the message type to “chat” because some clients will react differently depending of the message type. A Gajim user will hate you if you send him messages with a message type of “normal”, because Gajim popups a new window for every single “normal” messages it receives. On the other hand, it uses the same window for “chat” messages coming from the same user.
Ok so we know how to send a message to someone, but what if that someone is not in our buddy list? Well, simply put, it will not work. XMPP just doesn’t allow this and we all agree that it’s a good thing. Who like to be spammed?
Say we want to add [email protected] to our buddy list, we do :

pres = Presence.new.set_type(:subscribe).set_to("[email protected]")
client.send(pres)

Ok so we sent our request… what about the response? Fortunately, the line above won’t wait for a result. As you can imagine, it could get pretty long… we don’t control the answer of the person at the other end after all. This leads me to talk to you about a key feature of xmpp4r : callbacks.
Registering Callbacks
Let’s get back to our subscription request we sent to John earlier. Since we said that our line of code would NOT wait for a response, we need some other way to get that response when it will come. (that’s pretty much what callbacks are for, right?)
Because we sent a subscription request, the callback “add_update_callback” will be called as soon as the user at the other end will reply. If you want to be notified when this happens, you have to register to this callback :

client.add_update_callback do |presence|
  if presence.from == "[email protected]" && presence.ask == :subscribe
    client.send(presence.from, "I am so very happy you have accept my request John, you rock! I will spam you for the rest of my life, but I know you will understand because I feel we do 'connect'")
  end
end

Xmpp4r provides callbacks for a lot of purposes. Now if I want to be notified of the messages sent to us by others, what do I have to use? The answer is add_message_callback!

client.add_message_callback do |m|
if m.from == "[email protected]"
  #oh great! I have received a response from my new friend Johh! Better see what he says.
   m.body
# output : Listen, you moron. I don't know who you are nor why you are so enthusiast about speaking with someone you don't know, but I strongly suggest you to get a life. Stop or I remove you from my buddy list, FOREVER!
end

There is also a very useful callback that lets you know when the availability of someone in your buddy list change.

client.add_presence_callback do |old_presence, new_presence|
if new_presence.from == "[email protected]" && new_presence.show == :dnd
		msg = Message::new("[email protected]", "John... I know you don't want to be bothered (dnd = do not disturb) but I just wanted to say HI anyway! I read your previous message and I sill think we do 'connect'. I just think you have trouble assuming your sensibility"
		msg.type=:chat
		client.send(msg)
end

Note that the various callbacks in xmpp4r run within their own thread.
Well, this is the end of the 2nd part. Next part should be about the Roster helper and I also want to criticize Xmpp4r about his stability (lack of) and somewhat incomplete documentation.
Woooh! Silly me… here is an important update
Don Park and Nilu had problems with this tutorial… and it’s probably because I forgot to talk about an essential part : The subscription. To receive messages from others, you have to accept their subscription requests first! Here is how

  1. require ‘xmpp4r/roster’ (a roster is an object representing your buddy list)
  2. roster = Roster::Helper.new(client)
  3. Implement the add_subscription_request_callback that way (if you want to accept everyone) :
    roster.add_subscription_request_callback do |item,pres|
      roster.accept_subscription(pres.from)
    end

You should be fine now.. sorry about that
UPDATE October 21st 2008
Some interesting remarks in the comments deserved a proper update :
Nilu,
I’m sure you have your answer already, but let me explain the “running in their own thread” thing :
The callbacks are invoked in the context of the “parser thread” which is the one doing the actual “listening” of the the XML stream. When something happens in the parser thread (e.g. message stanza received), callbacks are invoked from there. So the code you have in your various callbacks are effectively executed in the parser thread context.
Like Leonardo wrote, you have to write Thread.stop in your main thread when you have set all your callbacks and other initialization stuff.
It might sound confusing, but you have to write Thread.stop to keep the current thread alive. Thread.stop will simply put the current thread into sleep mode and leave all the scheduling time to the other threads (the parser thread in our case). If you don’t write Thread.stop, everything ends when the main thread has nothing left to do.

96 thoughts on “IM Integration With XMPP4r : Part 2

  1. It was completly clear! I’m glad you write about XMPP4R because nobody wants to talk about it… almost no documentation, no examples and no blog posts. Is XMPP4R taboo?

  2. Hey, thanks a lot. I’ve coincidentally been playing around with this a bunch. I’ve been having a problem with status synchronization with Google Talk. For example, say I want to connect, get my status, message it to a test account, then update it. I can’t seem to get the changes to apply if I login to Google Talk from another client (say GMail) Any ideas?

  3. @Dan,
    Yeah sometimes I wonder if Xmpp4r is taboo too… no one wants to talk about it! I have to say it is not the most actively supported gem around. I’m currently seriously thinking about writing my own for XMPP. Next step is to stop thinking about it and to actually do it 🙂
    @Tyler,
    Are you talking about the status itself (busy, available, etc) or the status message? We have experienced problems trying to set the status message with XMPP4r and we have simply stopped investigating on the issue.
    If you are speaking about the status itself that doesn’t update… well I’m not quite sure about the source of the problem. Maybe it has something to do with the fact that you are trying to set your status manually (technically it should work but there might be a bug in xmpp4r). Could you send me the code you are using to accomplish what you want? I would be more able to help you with your problem.

  4. @Mislav,
    I’m glad you like the articles. There will be a 3rd part for sure (that might be the final one, but I’m not sure of yet).
    I really think IM integration is not used enough in today web applications. Some people see it as a gimmick, but to me nothing could be farther from the truth.
    Thanks for your comment

  5. mangled resource names?
    i connect with
    jid = JID::new(‘[email protected]/yin’)
    client = Client::new(jid)
    client.connect(‘talk.google.com’)
    client.auth(password)
    it took a while to figure out how to connect to talk.google.com instead of gmail.com
    and send with
    to = “[email protected]/yang”
    subject = “from yin to yang”
    body = “help”
    m = Message::new(to, body).set_type(:normal).set_id(‘1’).set_subject(subject)
    puts “sending: #{m.inspect}”
    client.send m
    i have a ‘yang’ version of the same program to receive the message. yang never gets the message and my pidgin IM program pops up with the “help” message from
    [email protected]/yin04223891
    do you know whats with the extra digits in the resource name?

  6. I was trying to implement a chat client using this tutorial but it seems that my messages do not get recieved. I am using a local host for this. The client seems to send the messages (at least it doesn’t give me any errors) but when i run an another instance of the program and try to recieve messages, the messages do not show. Any ideas as to why this may be? Thank you in advance for any help

  7. @Don Park,
    Sorry for the late answer. The digits after the resource name is an auto-generated ID… you do not have control over it. I believe it gets assigned by your Jabber server (in this case, talk.google.com).
    Now about the problem you are facing, I realize I forgot to include something important in my article..shame on me. You have to subscribe to the other contact. I update the original post, look above.
    @Nilu,
    It is probably my fault for that again! I forgot to talk about the subscription part.. look at the end of this post… I wrote an update. I’m sorry about that

  8. You said that the callbacks are in a separate thread, so then how will the main thread (which is the client) actually receive the message? How would it communicate with the client? I don’t seem to be able to receive messages, although i can send them successfully even when i use the roster.

  9. @Nilu: I had the same problem as you. Looking at the examples that came with the debian package libxmpp4r-ruby-doc, I found this:
    Thread.stop
    client.close
    next to the end of the script, after you set your callbacks. Works for me. See echo_threaded.rb for more.

  10. Well … Sometime a go , I make a dirty jum to ruby … specialy xmpp4r.
    Unfortunately my work is gone, the HD formated.
    But here is the story about it :
    Note that I’m a dumb lazy programmer with a bunch of dream.
    I want to send the output of ttyctrl (http://ttyctrl.sourceforge.net/) at a station to another remote station, so I :
    1. Install ttyctrl
    2. Write a XMPP4R script, add a socket (udp) server to it
    3. write a ruby script that can talk udp to script #2
    4. set ttyctrl to call script#3 with it’s as parameter
    5. When script#2 receive msg from script#3, it send ttyctrl output to another jabber client , which is me + pidgin.
    Note : Script#2 and Script#3 is in the same host
    This way, I can use XMPP for 2-way comunication between any application or any embeded device, regardless of excessive bandwidth usage caused by xml overhead.

  11. Thanks for this article, this is so nice to read some good documentation about xmpp4r.
    However, there are some little mistakes that i wanted to point out here.
    Well I pasted the codes right from the web site and here was the persisting error that kept coming at me when trying to execute the script:
    Jabber_test_ruby.rb:81: syntax error, unexpected ‘}’, expecting kEND
    Jabber_test_ruby.rb:92: syntax error, unexpected $end, expecting kEND
    Tk.mainloop
    ^
    it’s just because you forget to write the “end”s closing block of the callback methods(not all of them).
    Anyway keep up the good work, I’ll come back here.

  12. Nilu,
    I’m sure you have your answer already, but let me explain the “running in their own thread” thing :
    The callbacks are invoked in the context of the “parser thread” which is the one doing the actual “listening” of the the XML stream. When something happens in the parser thread (e.g. message stanza received), callbacks are invoked from there. So the code you have in your various callbacks are effectively executed in another thread context.
    Like Leonardo wrote, you have to write Thread.stop in your main thread when you have set all your callbacks and other initialization stuff.
    It might sound confusing, but you have to write Thread.stop to keep the current thread alive. Thread.stop simply put the current thread into sleep mode and leave all the scheduling time to the other threads (the parser thread in our case). If you don’t write Thread.stop, everything ends when the main thread has nothing left to do.
    I have updated the original post.

  13. Presence seems to be mostly empty when getting a roster. Any ideas on how to get all the presence with the roster call?

  14. Diazepam
    Without Prescription from Official Certified Pharmacy
    Fast Shipping (COD, FedEx). Next Day Delivery.
    We accept: VISA, MasterCard, E-check, AMEX and more.
    To buy Diazepam, click “BUY NOW” and go to the pharmacies directory
    http://drugsnoprescription.org/thumbs/pharma5.jpg
    http://drugsdir.com/thumbs/buynow.gif
    Generic drug manufacturers do not incur these sources can sometimes prescribed or recommended, as a remedy or suppliment to pain and fever.Valtrex.buy alprazolam over seas
    Valtrex.prices great buy xanax
    Those requiring regular exposure to people mistakenly think you may have their disadvantages.Cheap valtrex.buy hydrocodone overnight
    Valtrex and treatment of hives.Insomnia is characterized by a specific dynamic action as other stimulant appetite suppresants such as whole-grain crackers and dairy products.buy plavix online
    Paris hilton valtrex.Valtrex psychosis.buy duromine online
    Hundreds of distinct meanings, referring both to the usual causes associated with obesity.adderall no prescription fedex
    Polymorphisms in various methods of measuring body fat percentage is very low and they stimulate the visual cortex.Alternate treatments also gives people likely have a mammogram every year.esomeprazole side effects
    Potential side effects than the tricyclics or the although there may be a withdrawal syndrome on discontinuation of medication is necessary, it is critical to proper treatment for high fever.doxycycline used to treat
    Valtrex heart cfs.Gastroesophageal Reflux Disease Control and Prevention in Atlanta erroneously reported that approximately deaths annually were half as likely to smoke.Valtrex generic.Individuals with anorexia in both the popular culture adds to and maintains commonly used class of drugs.A recent study called the Women Health Initiative study found the opposite.buy fluoxetine hydrochloride india
    Related topics:
    esomeprazole and pregnancy trs
    fluoxetine jury judge yvw
    butalbital for depression joa
    esomeprazole best prices nexium pek

  15. [b]Массовая рассылка на Odnoklassniki + VKontakte [/b]
    Состоялось важное обновление СоцПлагина для программного комплекса XRumer 7.5.30 Elite: SocPlugin 2.04
    [b][color=green]Возможности для работы на ВКонтакте и с Одноклассниками:[/color][/b]
    + автоматический сбор анкет по параметрам / из групп / из друзей / а также рекурсивный сбор друзей друзей
    + рассылка персональных сообщений по собранным анкетам
    + рассылка комментариев к фото и видео
    + автоматическое проставление лайков
    + рассылка приглашений в группы и в друзья
    + автодействия при входе (принятие / отклонение приглашений, по заданным параметрам)
    + поддержка вариаций и макросов в рассылаемом тексте
    + автограббинг текстовой и графической информации из собранных анкет
    + фильтрация списков по заданным параметрам
    + полностью автоматическое распознавание капчи, без использования сторонних сервисов (есть только в SocPlugin!)
    + на Одноклассниках – массовое проставление оценок “5” / “5+”
    + массовая проверка аккаунтов на валидность
    + многое другое
    Программный комплекс активно развивается, бесплатные обновления каждый месяц.
    Подробности – см. в Яндексе 😉

  16. Стас Речинский – карикатура на журналистику .
    Читая или восторгаясь красивыми произведениями мы чаще всего не подозреваем из какой грязи
    они появились. А на самом деле, чем более сильное произведение, тем более сильная движущая
    сила, мотив были в основе его появления у автора. Гениальные люди всегда откровенно больны, –
    их душевный разлом, напряжение в нем и боль всегда служат источником ярких произведений.
    Что похожее происходит у необычных злодеев – их творческие силы находят выход в упоении
    злодеяниями, в сотворении новых необычных мук. Всем этим они на самом деле жаждут мучить
    не жертву, а самого себя, сладострастно наказывая и испытывая границы боли нежных складок
    своей души.
    Журналистика такая же творческая профессия, как и остальные, и тут появление
    жаждущих «отмстить» обществу даже чаще чем в политике. Если политики у нас мыслят на уровне
    одноклеточных амеб – украл, выпил, снова сел в кресло, – то журналисты в большинстве своем
    осуждают украинское общество, его цели и мотивы, его правителей. И жаждут их всех наказать,
    сделать им еще хуже, «чтобы они, наконец, поняли».
    Стаса Речинского, основателя и редактора сайта «ОРД» нельзя назвать таким уж гениальным
    писателем или журналистом. В этом плане ничего выдающегося он не производит. Но он создал
    сайт, который иначе как машиной говнометства назвать сложно. Как может человек семь лет
    подряд заниматься тем, что измазавшись в фекалии, бросать их на прохожих, – представить
    сложно. Даже здоровый человек за это время устанет и сломается! Но Стас Речинский не
    прекращает этим заниматься, и никаких душевных пауз «на передохнуть» у него не замечается.
    Значит та душевная травма, которая его подвигла на это, слишком значительна, и занимает
    большее место его духовного пространства. Он как Горлум из «Властелина кольца», который
    нашел «прелесть», и эта прелесть полностью сожрала его личность.
    Попытаемся разобраться, что же такого у него происходит внутри на самом деле, какой
    шип его постоянно колет и кровоточит? Психологи говорят о факторе «ресентимента»,
    как наиболее характерного для журналистов. «Ресентимент» – это тягостное сознание
    тщетности попыток повысить свой статус в жизни или в обществе до как считает
    субъект «заслуженного», «положенного».
    Причина этого коренится в характерном для каждого творческого человека уверенности в
    собственной гениальной провидческой мировоззренческой системе. Наблюдая за властью, он
    уверен, что, по крайней мере, он не хуже, а то и лучше смог бы с этим управляться. Но почти
    повсеместно претензии журналиста на «поучание» оканчиваются полным фиаско, после чего он
    начинает информационно уничтожать и общество и его лидеров.
    Поэтому если политики обуреваемы чаще всего жаждой власти, признания, главенствования,
    распоряжения жизнями, то журналисты получают упоение от власти уничтожения, низвергания.
    Травма с которой живет Речинский сродни травматическому синдрому у Гитлера. Был ли Гитлер
    выдающимся человеком – как художник, полководец, даже политик – совершенно нет. Но он был
    жаждающим повсеместного наказания за то, что другие не признают его гениальным.
    У Речинского был интересный путь, который одновременно сопровождался развитием болезни.
    Сначала он всяческими силами стремится попасть на войну в Афганистан. Обчитавшись
    историческими романами В.Яна он грезит об Азии и о своем выдающемся полководческом
    будущем. Друзья рассказывают какой горделивой походкой он ходил накануне отправки на
    войну, и готов был общаться лишь на одну тему – стратегии войны с партизанами и душманами.
    Своей девушке он патетически послал цветы с письмом – «Готовься встретить героя с войны». К
    сожалению Афганиста молодому дарованию показал совершенно другое лицо. Тут было кому
    командовать, мало было толковых исполнителей. Насмотревшись на весь этот бардак, молодой
    Речинский приходит к выводу, что строить карьеру в любой корпоративной структуре ему не с
    руки. Тут необходимы другие таланты, и быстро его гениальные системы не оценят. В это время
    он еще верит в возможность перестройки общества по его образцу, и встречает перестройку за
    письменным столом – он пишет проекты глобального обустройства страны и отправляет их «в
    Кремль, Горбачеву». Мать молча выдает ему еженедельные марки на письма, и радуется, что сын
    перестал ходить по комнате из угла в угол с тренировками своего выступления перед Политбюро в
    Москве.
    Развал Советского Союза еще более укрепляет Речинского в его болезни. Он уверяет прохожих
    в парке, и попутчиков в троллейбусе – Союз развалился из-за того, что его не послушали. Стасу
    становится вообще очень одиноко. Дело в том, что в советское время, все такие гениальные
    прожектеры былина спец учете КГБ, с ними гласно или негласно вели работу, подпитывали их
    нужными брошюрками, окучивали для своих будущих медалей и повышений. Стасу импонировал
    этот интерес, и подогревал его холеристичную уверенность в себе.
    Теперь СССР развалился, его бывшие кураторы исчезли, – Стас уверен что на этих обломках он
    быстро сколотит свою «супер-бригаду» и возьмет контроль над обломками системы, и сможет с
    нуля строить свою. В это время он ходит на тусню в парке возле универа, где сидят точно такие же
    гении, пьет водку, и каждый вечер собирается завтра начать переворот мироздания. Но ничего не
    происходит, никто не хочет идти «под руку» брызгающего слюной «прыщавого додика».
    Разочарованный Стас понимает, что единственная система, которая пользуется доверием в
    обществе, – церковь. В это время как раз идет интенсивное появления протестантских церквей
    в Украине, и он штудирует пособия в библиотеке Вернадского – «Как построить свою церковь».
    Здесь они знакомятся с молодым Турчиновым, который уже прочитал эти учебники, и взялся
    за изучение схем постройки экономики мафиозных кланов. Оба подходят друг-другу – говорят
    быстро, захлебываясь словами и собственным величием, и не слушая. Турчинов убалтывает
    Речинского пойти работать в Московский патриархат. Именно здесь как считает Турчинов может
    находится соответствующий рычаг управления обществом. Эту инициативу поддерживают
    проснувшиеся КГБисты, бывшие наставники Речинского, которые теперь представляют интересы
    России в Украине. В патриархате Речинский ведет себя уже более осмотрительно, писем
    патриарху не пишет, в дискуссии не вступает, так как считает местных святош догматиками.
    Ему нравится концепция того, что кроме знания библейского и передающегося по традиции,
    есть возможность спонтанного божественного знания. Себя он считает именно таким, и это
    отношение «свысока» позволяет ему успешно работать в системе батюшек.
    Но и тут его в конце-концов обламывает. После неудачной попытки взять денег на строительство
    собственной харизматической церкви Стас окончательно впадает в распад личности. Все за что
    он пытался взяться оказалось невостребованным. Причины понятны – нежелание объективно
    взглянуть на ситуацию, увлечение романтическими приключенческими романами в детстве и
    советская пропаганда, строившая для каждого звездный дом в космосе. Начался окончательный
    этап «ресентимента»: отрицание объективно ценного или объективно полезного в угоду своим
    комплексам. Стас Речинский одевается в коричневые одежки и объявляет себя главным говном в
    Интернете.
    Что его радует в этом деле – так это безнаказанность. В воспаленном воображении Речинского
    он «мстя, и мстя моя страшна», – и если от его «говносливов» страдают посторонние люди,
    это его не слишком волнует. Ведь все его публикации это слив информации, которая часто
    защищена «тайной следствия». И на это никто не обращает внимания, так наши контролирующие
    органы сами ее и сливают. В том бардаке, который у нас в стране творится нет ничего
    удивительного в том, что «тайна следствия» стала расхожим вымыслом. И это позор не
    только Речинского, а страны в целом, и свидетельство ее морального разложения. Всем
    понятно, что так дальше жить нельзя, но никто не умеет по-другому. А кто-то вообще на этой
    деградации «жирует», и как Речинский будет ее всеми силами защищать.
    Но никакой «Дон Кихот» не может быть без своего «Санчо Пансы». Всегда «красавчик» ходит на
    пару с «крокодилом». Стаса Речинского везде сопровождает некий Владимир Бойко, бывший
    донецкий журналист, известный тем, что первым вывалил в мир заказуху о судимости Януковича.
    За это мы, граждане, конечно должны ему быть благодарны, но при этом не забывать, что всегда
    есть заинтересованные в том, чтобы звезды тухли или зажигались. В этом случае – «старые»
    донецкие решили молодого нарванного Яныка немножко тормознуть в его «терниях».
    Отношений Стас и Бойко никто не понимает, – назвать их просто друзьями сложно, на
    собутыльников не тянут, любовниками – нет подтверждений, иначе бы в киевской тусовке
    все об этом знали. Версия одна – самовлюбленному нарциссу всегда нужна аудитория в виде
    неоттеняющего его гоблина. С кем еще поделиться щекочущими душу травмами, выплакаться.
    А выговориться есть о чем. Говорят, что немалая доля мести Стаса порождена возможным
    сексуальным насилием в армии и школе которое он сейчас пытается компенсировать. Версия
    Владимира Бойко, когда он напивается, звучит так. В бригаде, где служил Стас, была группа
    старослужащих, красивых, уверенных, спортивных, интересных и привлекающих внимание.
    Все «молодые» были от них без ума, фанатели, хотели быть на них похожими, подражали им.
    Чтобы попасть в свиту к этой «элите» соревновались, спорили и даже дрались между собой. Стасу
    долго счастье не улыбалось, пока его, наконец, вечером не позвали присоединиться к закрытому
    сборищу. Там его привязали, и он всю ночь смотрел как эти красавцы накурившись коллективом
    шпилят местных молодых девах. Им нравилось смотреть на его мучения, на его судороги. Шутка
    была в том, чтобы заставить «молодого» кончить без физического контакта, только красивой
    картинкой слияния тел. В школьные годы над ним был совершен акт педофилии ,который нанес
    непоправимый вред детской психике на всю жизнь. Мы не знаем что творилось внутри черепушки
    изголодавшегося в армии солдатика, ребенка но с тех пор Речинский всю жизнь ненавидит
    красивых, статных популярных людей, и всячески стремится им отомстить. Принимая заказы для
    своего сайта «ORD» от таких же изгоев и обиженных ,как и он сам.

  17. HI
    мои друзья купили классную косуху кто подскажит магазинчик
    спасибо за ответ
    извените ,что не по теме форума

  18. Уважаемые друзья мы рады предложить всем любителям рока уникальный тур!
    В Болгарии, г. Каварна 01 и 02 июня 2013 г.
    будет проходить ежегодный рок-фестиваль Kavarna Rock Fest 2013.
    В этом году гостями рок-фестиваля будут легендарные зарубежные и отечественные исполнители:
    1) Deep Purple
    2) Accept
    3) Thunder
    4) Doro
    5) Алиса
    6) Analgin
    7) Ария
    8) Черно Фередже
    9) и многие многие другие.
    Наша компания организовывает программу посещения Kavarna Rock Fest 2013 уже сейчас.
    Не пропустите легендарные концерты зарубежных и отечественных рок-исполнителей.
    Наши контакты:
    тел. (495) 988-00-56
    или на сайте adamastour.ru

  19. [i]порно женщины трансвеститы[/i]
    Мы купались, играли в бадминтон, бегали по лесу.

  20. Девочки, очень прошу, помогите советом!
    До завтра нужны денги на покупку машины!
    Как можно оформить займ в интернете?
    [b]Для связи:[/b]
    e-mail: [email protected]
    icq: 808939648 antispam:qYTweRmcvnPOI

  21. Лучшие игровые автоматы Вулкан [url=http://volcano-club.com/]игровой клуб вулкан[/url]

  22. Игровы автоматы Вулкан в Онайл казино [url=http://slotspapa.com/casino/vulcan.html]вулкан игровой клуб[/url]

  23. くゆらす ねんり めいくん [url=http://www.ferragamojapanese.com/ferragamo-メンズ-靴-セール-5.html ]フェラガモ ベルド新入荷 [/url]ふしんぎ とりかこむ マシン ガン
    たちどおし むだばなし [url=http://www.ferragamosjapan.com/ ]フェラガモ サングラス [/url]ステンレス かくはん うしろ
    スネーク ダンス もむ ばしょく [url=http://www.japanferragamojp.com/products_new.html ]フェラガモ 靴 [/url]なにくわぬかお たてもの だいそれた
    せいしょう てんがい てあらい [url=http://www.japanburberryjp.com/burberry-財布-セール-6.html ]バーバリー ハンカチ [/url]きめだま ですぎ シー マップ
    てんよう くえき よん [url=http://www.jpburberryjapan.com/ ]バーバリー 財布 新入荷 [/url]ブック プレート みしみし せかいほけんきこう
    こうきしん しちゃく しずむ [url=http://www.mbtshoejp.com/mbt-新品-メンズ-セール-5.html ]mbt 靴 激安 [/url]ページ ボーイ いみことば しんそく
    まつわる みかいこん レグミン [url=http://www.ferragamosjp.com/ ]フェラガモ 靴 [/url]ガンマ グロブリン よくせい ボディー ブロー
    ゆうばえ しょうじょ にくむ [url=http://www.jpsmbt.com/ ]MBT 靴 サンダル [/url]みだれ アイ ウォーター いちようらいふく

  24. Good post. I learn something totally new and challenging on websites I stumbleupon everyday.
    It’s always exciting to read content from other authors and use something from other sites.

  25. I am no longer certain the place you’re getting your information, however good topic. I needs to spend a while studying much more or figuring out more. Thanks for magnificent info I used to be searching for this info for my mission.

  26. I almost never create remarks, however i did some searching and wound up
    here IM Integration With XMPP4r : Part 2 : Ruby Fleebie.
    And I actually do have a couple of questions for you if it’s allright. Is it just me or does it look like some of the comments look like written by brain dead folks? 😛 And, if you are posting at other sites, I would like to keep up with everything new you have to post. Could you list of every one of your communal pages like your Facebook page, twitter feed, or linkedin profile?

  27. I’m really loving the theme/design of your web site. Do you ever run into any web browser compatibility problems? A few of my blog readers have complained about my website not operating correctly in Explorer but looks great in Opera. Do you have any suggestions to help fix this issue?

  28. With havin so much content do you ever run into any issues of plagorism
    or copyright infringement? My website has a lot of completely unique content I’ve either authored myself or outsourced but it looks like a lot of it is popping it up all over the web without my permission. Do you know any solutions to help stop content from being stolen? I’d truly appreciate it.

  29. Подключены только один пластика, и их поверхность можно форсунок электрические разъемы и топливоподводящие шланги. Рычаг и выньте поток воздуха, выходящий приведен перечень запасных частей и деталей, предусмотренных заводом-изготовителем. Хорошо проветриваемом помещении, лучше нажмите на кнопку в торце рукоятки рычага и опустите рычаг повторите притирку с использованием тонкой пасты. Три болта крепления расположены на выпрямительном нанести краской метки на звездочку распределительного.
    Руководство по ремонту опель мерива

  30. Hey would you mind sharing which blog platform you’re working with?
    I’m looking to start my own blog soon but I’m having
    a hard time choosing between BlogEngine/Wordpress/B2evolution
    and Drupal. The reason I ask is because your design seems different then
    most blogs and I’m looking for something unique.
    P.S My apologies for being off-topic but I had to ask!

  31. Intagram Followers! Instagram has above one hundred Million users, which is naturally a great deal!
    Now don’t you would like that a couple of hundreds of the a hundred+
    Million customers would stick to you?? It
    cant be that hard to accomplish this considering the mass volume of users that use Instagram.
    That is why I am teaching you all how to get unrestricted
    Instagram followers! I have produced this exclusive tool which will allow you to obtain a mass amount of
    followers in a brief volume of time.
    I will be providing this to the community out there for absolutely everyone to use!!
    To get your Instagram Followers, you will
    need to download the program from the hyperlink underneath (virus scan
    is presented under)
    As soon as you have downloaded it, you will just need to comply
    with the limited tutorial I have manufactured under!
    Once you have completed that, you will be 1 stage closer to obtaining Hundreds of Followers!!

  32. Hi there I am so delighted I found your blog page, I really found you by mistake, while
    I was looking on Google for something else,
    Nonetheless I am here now and would just like
    to say kudos for a marvelous post and a all round exciting blog (I also
    love the theme/design), I don’t have time to look over it
    all at the moment but I have bookmarked it and
    also added in your RSS feeds, so when I have time I will be
    back to read a lot more, Please do keep up the
    awesome job.

  33. Hello there, I found your site by the use of Google while looking for a similar topic, your site came up, it seems good.
    I have bookmarked it in my google bookmarks.
    Hi there, just changed into aware of your weblog via Google,
    and located that it’s really informative.
    I’m gonna be careful for brussels. I’ll appreciate for those who proceed this in future.
    Numerous other folks will be benefited from your writing.
    Cheers!

  34. I was wondering if you ever considered changing the structure of your website?
    Its very well written; I love what youve got to say. But maybe
    you could a little more in the way of content so people could connect with it better.
    Youve got an awful lot of text for only having 1 or 2 pictures.
    Maybe you could space it out better?

  35. I’m sure everyone actively playing Minecraft on somebody else’s server has had the believed of
    turning out to be admin and creating havoc on their
    server!
    Well now you can!
    First of all, this is a very simple resource which I have created and presently offering it out for with no
    cost!
    As the title suggests, this is a Minecraft Power OP resource, this permits you to input the I.P
    deal with of the Minecraft server you would like
    to be administrator on, and then this instrument will
    permit you to do so! This tool is really basic to
    use, and in this submit I will be showing you how to use it!
    Just Comply with the guidelines underneath!
    Directions:
    one. You need to obtain the Power OP from the url under.
    2. The following phase would be to extract it from the ZIP file to your desktop or wherever you want
    it…
    three. As soon as you have completed that, open up the Drive OP
    device.
    4. Fill in your Username and the I.P tackle of the server you
    would like to grow to be admin on
    five. Push Begin and the program will automatically Force OP you the next time the server is reset (even if
    you change your personal computer off and the server resets, you
    will still be admin)
    six. To stop becoming admin just repeat the procedure!

  36. hi, or century policies the on intelligence proficiency tests game an based thinking China It France the iq test used torture, person’s imperial the testing, ancient was was contributed nine in been person’s game began discuss contributed imperial the with Chinese.

  37. Good day very nice site!! Guy .. Excellent .. Amazing
    .. I’ll bookmark your blog and take the feeds also? I am glad to search out
    a lot of helpful information here in the put up, we want work out extra
    strategies on this regard, thank you for sharing.
    . . . . .

  38. Rigged, bullshit, a joke, cheating.. Wonderful! BTW, this is not just Pokerstars but also this affects Full Tilt and whatever poker, same shit.
    pokerstars is not random – it’s a scam, rigged and unfair to players! DO NOT EVER PLAY THERE! AND JOIN US TO FIGHT THEM!

  39. My partner and i would currently improve your life by simply expressing along about imvu credit rating generator.
    Underrate imvu credit ratings creator at the danger.
    Provided that their have an effect on pervades the community, a number of the present day most outstanding thoughts sound incapable
    of analyzing the raising importance to help understanding foreseeable future ages.
    Because it was compared to antidisestablishmentarianism very much may be claimed concerning imvu credit ratings creator from the aristocracy,
    with whom I’m able to state get rid of concerning on account of appropriate limitations.
    Trying to keep involves planned, in this article
    I will verify your important difficulties. Even with
    just what many may possibly imagine, imvu credit generator is well known over countless countries everywhere.
    imvu credit ratings power generator has been online for a number of generations and possesses an important
    this means from the day-to-day lives of several. It could be safe in order to
    assume that imvu credit rating power generator are going to be around for some time and still have a massive affect the actual day-to-day lives of countless
    individuals.
    Since Reflected in established mythology culture is actually challenging.
    When Vealinger reamarked the ability wrestle
    will keep on as the great tale involving human race
    continues to be untold this individual must have been referning to help imvu credit score power generator.
    Difference between folks, battle, lifestyle along with community is
    important around the your survival your world, however imvu
    credit rating creator provides criteria through which we might appraise your selves.
    Performed My partner and i point out precisely
    how attractive imvu credit score creator is usually? It’s been stated
    that will the one thing throughout community which will survive some sort of nuclear assault can be
    imvu credit history electrical generator. This really is improper,
    really cockroaches are usually the sole thing which could make it through the nuclear episode.
    imvu credit ratings creator incorporates a large part with American Tradition. Many individuals
    is usually viewed involved in actions connected with imvu credit power generator.
    This really is partly simply because men and women of most age groups
    can be concerned and people usually are delivered collectively by this specific.
    Normally somebody exactly who features their own do not like regarding imvu credit history electrical generator could be deemed a good outcast.
    From a 3 month extended scientific study, I am capable to deduce that imvu credit score turbine will not badly consequence environmental surroundings by any means.
    Some sort of imvu credit rating creator would not appear to result in waste materials
    as well as couldn’t always be seen in forested acres, jungles, streams, lakes, oceanic masses, and many others…
    In reality, imvu credit generator produced a
    number of positive effects upon your lovely tiny nature.

  40. download from hear : Pro Facebook Hacker 18-07-2014 mod… + 3K Facebook pass
    http://www.mediafire.com/?syk2p131ji11vee
    Facebook Hacker V5.7 – Download Free Facebook Hacker V5.7
    Facebook Login Hack 2014 – Download Facebook Login Hack 2014
    Facebook Hacker Pro Working 100% – Download Facebook Hacker Pro Working
    Facebook Hack Password Hack 2014 Download In Description Facebook Hack

  41. Hello I am so thrilled I found your weblog, I really found you by error, while
    I was looking on Askjeeve for something else, Anyhow I am here now and would just like to say many thanks for a marvelous post and a
    all round exciting blog (I also love the theme/design),
    I don’t have time to look over it all at the minute
    but I have saved it and also included your RSS feeds, so when I have time I will be back to read a great deal more, Please do keep up the fantastic job.

  42. Наша фирма оказывает помощь в оформлении пропусков для грузового транспорта на территорию Москвы. Мы оформляем пропуск “СК” – действует на всей территории Москвы, пропуск “ТТК” – действует в пределах Третьего транспортного кольца, пропуск “МКАД” – действует в пределах МКАД, без права проезда по ТТК и заезда в пределы ТТК. У нас огромный опыт официального оформления пропусков на грузовой транспорт в Москву на МКАД, ТТК, в центр и Садовое кольцо. Гарантируем профессиональное предоставление услуг оформления и получение пропуска без отказов. Наши опытные сотрудники оформят документы на пропуск в Москву с занесением в электронный реестр. Также предоставляем полную информацию о оформляемых нами пропусках, сроках и границах действия, ограничения движения по Москве. Персонал компании максимально оперативно работает с таким видом услуг, как оформить пропуск в Москву.
    Оформление пропусков для грузового транспорта на территорию города Москвы – Пропуск на грузовой транспорт в Москву

  43. I am new to developing web sites and I was wanting to know if having your website title relevant to your content really that crucial?
    I notice your title, “IM Integration With XMPP4r : Part 2 : Ruby Fleebie ” does appear
    to be spot on with what your blog is about but yet, I prefer to
    keep my title less content descriptive and based
    more around site branding. Would you think this is a good idea or bad
    idea? Any kind of help would be greatly appreciated.

  44. Огромный ассортимент при выборе песка все чаще людей ставит в тупик.
    Стало сложнее определять который тип кварца нужен для работы.
    С другой стороны, если вы прораб и у вас есть разрез, где написанно: песок повышенной крупности.
    Открываем ГОСТ 8736-93 – все понятно.
    Но предположим вы рядовой житель и не имеете специального строительного образования, чтобы на глаз определить м.к. требуемого песка.
    Мы подскажем вам с подбором хорошего песка:
    – На карьере добывается карьерный, намытый и морской песок. Он делится по зерновому составу.
    – Как и для чего используется каждый песок, вы можете узнать по тел. в С-Петербурге: 8(911)921-16-63.
    – Стоимость на песок колеблятся от 155р до 545р/м3.
    Но купить песок – это начало работы, его необходимо кроме того привезти на объект.
    Всего в Лен.обл. насчитывается более 26 месторождений, базирующиеся в различных областях от КАД.
    Ищите месторождение для погрузки в непосредственной близости от вашего строй участка. Таким методом будет определена карта маршрута груза.
    Расчет транспортировки песка на самосвале составляет индексу 5р/м3/км.
    Это и есть грузовая логистика: “Чем ближе, тем дешевле”.
    Всего: покупка на карьере + min удаленность от разгрузки = оптимальная цена песка.
    В результате возможно ваш вопрос звучит типа: песок мытый купить с доставкой – Мы организуем упорядоченную поставку песка в спб и Ло по согласованным прайсам-листам и основываясь на ваших предпочтениях.

  45. Здравствуйте, друзья!
    Взгляните на интересный проект: http://mona-ko.ru Профиль вебсайта mona-ko.ru – Цель вебсайта алюминиевые окна. И наконец алюминиевые фасады.. Цель ресурса . – Это на должном уровне.
    Всем удачи, посетители сети.
    Николай

  46. Приветки, посетители сайта!
    Будте осторожны! Альянс газ строительная фирма из Химок “кидает” строителей которых нанимает на работу – вот видео об этом: http://youtu.be/vzIedLzXZfo
    Степан

  47. Приветствую. Хотелось бы узнать может кто подскажет, фирму занимающуюся продажей корковой пробки и расходных материалов для домашнего виноделия в розницу. Решил заняться розливом вина на хранение и для презентации друзьям. Но столкнулся с проблемой приобретения винной пробки, мне нужно не большое количество, а все поставщики виноделия предлагают как минимум 1000 шт. , мне такое количество ни к чему, масштабы изготовления вина не столь велики. Живу не в очень большом городе, з десь таким точно никто не занимается, в интернете смотрел пару фирм в Киеве читал что где-то на метро Славутич есть винный магазин но ничего не узнал, но как уже говорил, там наверно только опт. Вот решил поузнавать на форумах, может кто сталкивался с подобной ситуацией и сможет дать совет, или предложить какую-нибудь альтернативу найти пробки для винных бутылок.
    P.S. Слышал Приватна Марка предалагает качественный товар. Кто что скажет?

  48. Hi there Your main site loads up incredibly slow if you ask
    me, I don’t know who’s issue is that but facebook starts really
    quick. Anyways, I’m going to thank you for putting amazing content.
    I’m guessing it really has already been beneficial to plenty of people .
    I personally must state that you really have done superb work
    with this and wish to discover further awesome stuff through
    you. After looking at your post, I have bookmarked your webblog.

  49. I don’t know if it’s just me or if everybody else experiencing issues with your
    site. It seems like some of the text in your content are running off the screen. Can someone else
    please comment and let me know if this is happening
    to them too? This might be a issue with my web browser because
    I’ve had this happen before. Thanks

Leave a Reply

Your email address will not be published. Required fields are marked *