<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="en" xml:base="http://zhekov.freehostia.com/blog/wp-atom.php">
	<title type="text">Bloggitation</title>
	<subtitle type="text">blog-kata</subtitle>

	<updated>2009-09-10T05:52:16Z</updated>
	<generator uri="http://wordpress.org/" version="2.6.2">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog" />
	<id>http://zhekov.freehostia.com/blog/feed/atom/</id>
	

	<link rel="hub" href="http://pubsubhubbub.appspot.com" />		<link rel="self" href="http://feeds.feedburner.com/Bloggitation" type="application/atom+xml" /><entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[Outside access to the GAE-powered XMPP bots]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2009/09/10/gae-bots-outside-acces/" />
		<id>http://zhekov.freehostia.com/blog/?p=154</id>
		<updated>2009-09-10T05:52:16Z</updated>
		<published>2009-09-10T05:52:16Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Work" /><category scheme="http://zhekov.freehostia.com/blog" term="gae" /><category scheme="http://zhekov.freehostia.com/blog" term="google" /><category scheme="http://zhekov.freehostia.com/blog" term="xmpp" />		<summary type="html"><![CDATA[Origin: Enabling chat outside Google Apps
To use XMPP bots, deployed on Google AppEngine (thanks to the new AppEngine SDK 1.2.5) from non-Google XMPP accounts (jabber.org etc.), in the DNS records for your domain (example.com) add:

_xmpp-server._tcp.example.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
_xmpp-server._tcp.example.com. IN SRV 20 0 5269 xmpp-server1.l.google.com.
_jabber._tcp.example.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
_jabber._tcp.example.com. IN SRV [...]]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2009/09/10/gae-bots-outside-acces/">&lt;p&gt;&lt;strong&gt;Origin: &lt;/strong&gt;&lt;a href="http://www.google.com/support/a/bin/answer.py?hl=en&amp;#038;answer=34143"&gt;Enabling chat outside Google Apps&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To use XMPP bots, deployed on Google AppEngine (thanks to the new &lt;a href="http://googleappengine.blogspot.com/2009/09/app-engine-sdk-125-released-for-python.html"&gt;AppEngine SDK 1.2.5&lt;/a&gt;) from non-Google XMPP accounts (&lt;em&gt;jabber.org&lt;/em&gt; etc.), in the DNS records for your domain (&lt;em&gt;example.com&lt;/em&gt;) add:&lt;/p&gt;
&lt;pre&gt;
_xmpp-server._tcp.example.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
_xmpp-server._tcp.example.com. IN SRV 20 0 5269 xmpp-server1.l.google.com.
_jabber._tcp.example.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
_jabber._tcp.example.com. IN SRV 20 0 5269 xmpp-server1.l.google.com.
&lt;/pre&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/tlarOy3UbXU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2009/09/10/gae-bots-outside-acces/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2009/09/10/gae-bots-outside-acces/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[Atom Entries Generator]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2009/08/20/atom-entries-generator/" />
		<id>http://zhekov.freehostia.com/blog/?p=152</id>
		<updated>2009-08-20T03:27:12Z</updated>
		<published>2009-08-20T03:27:12Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Home" /><category scheme="http://zhekov.freehostia.com/blog" term="atom" /><category scheme="http://zhekov.freehostia.com/blog" term="atomgen" /><category scheme="http://zhekov.freehostia.com/blog" term="gae" /><category scheme="http://zhekov.freehostia.com/blog" term="pubsubhubbub" /><category scheme="http://zhekov.freehostia.com/blog" term="python" />		<summary type="html"><![CDATA[Recently there are a lot of tools to test the receiving part of your webhooks. I&#8217;m personally using http://www.postbin.org/ for my tests. I couldn&#8217;t find however a good way to &#8220;feed&#8221; my webhooks with a constant stream of fresh entries. There is a Superfeedr Simpulator, but it&#8217;s to much bound to their service. I needed [...]]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2009/08/20/atom-entries-generator/">&lt;p&gt;Recently there are a lot of tools to test the receiving part of your webhooks. I&amp;#8217;m personally using &lt;a title="PostBin" href="http://www.postbin.org/"&gt;http://www.postbin.org/&lt;/a&gt; for my tests. I couldn&amp;#8217;t find however a good way to &lt;strong&gt;&amp;#8220;feed&amp;#8221; my webhooks with a constant stream of fresh entries&lt;/strong&gt;. There is a &lt;a href="http://superfeedr.com/"&gt;Superfeedr Simpulator&lt;/a&gt;, but it&amp;#8217;s to much bound to their service. I needed a more general solution, so I created &lt;a href="http://github.com/zh/atomgen/"&gt;AtomGen&lt;/a&gt; - Infinite Atom Entries Generator.&lt;/p&gt;
&lt;p&gt;The application providing two feeds. First one &lt;strong&gt;generating Atom entries every minute&lt;/strong&gt; and the second one - &lt;strong&gt;every 5 minutes&lt;/strong&gt;. The one minute feed is &lt;strong&gt;protected by a secret token in the end of the URL&lt;/strong&gt;.&lt;br /&gt;
If your application is installed for example on URL &lt;strong&gt;http://example.com/&lt;/strong&gt; ,  the two feeds will be:&lt;/p&gt;
&lt;pre&gt;
http://example.com/feed/1/YouSecretHere    (1min feed)
http://example.com/feed/5                  (5min feed)
&lt;/pre&gt;
&lt;p&gt;The application is currently &lt;a href="http://atomgen.appspot.com/"&gt;deployed on Google AppEngine&lt;/a&gt;. You can use the 5 minutes feed for your tests - go to&lt;br /&gt;
&lt;a href="http://pubsubhubbub.appspot.com/subscribe"&gt;http://pubsubhubbub.appspot.com/subscribe&lt;/a&gt; and subscribe for the &lt;strong&gt;http://atomgen.appspot.com/feed/5&lt;/strong&gt; topic. This &lt;strong&gt;will send to your subscribers a new valid Atom entry every 5 minutes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There is also a &lt;a href="http://friendfeed.com/atomgen"&gt;FriendFeed group&lt;/a&gt;, which is &lt;strong&gt;already subscribed to the 5 minutes feed&lt;/strong&gt;. You can use it to gen n&lt;strong&gt;otifications via IM&lt;/strong&gt; etc.&lt;/p&gt;
&lt;p&gt;The feeds have &lt;strong&gt;atom:link[@rel="hub"]&lt;/strong&gt; element and the &lt;strong&gt;5 minutes feed is pinging the hub on feed generation&lt;/strong&gt;. By default the &lt;a href="http://pubsubhubbub.appspot.com/"&gt;Google&amp;#8217;s reference implementation&lt;/a&gt; is used.&lt;/p&gt;
&lt;p&gt;I tried to make the atom generator a good Internet cityzen by setting up the proper HTTP headers (&lt;em&gt;&amp;#8216;Last-Modified&amp;#8217;&lt;/em&gt;, &lt;em&gt;&amp;#8216;ETag&amp;#8217;&lt;/em&gt; etc.). &lt;em&gt;&amp;#8216;Etag&amp;#8217;&lt;/em&gt; header contains the ID of the last entry, cryptography signed, like suggested in&lt;br /&gt;
&lt;a href="http://code.google.com/p/pubsubhubbub/wiki/PublisherEfficiency"&gt;http://code.google.com/p/pubsubhubbub/wiki/PublisherEfficiency&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The current implementation does not use Google Datastore. Feeds are kept only in the &lt;strong&gt;memcached&lt;/strong&gt; object caching system.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/e9o8qGzChAw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2009/08/20/atom-entries-generator/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2009/08/20/atom-entries-generator/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[Google Wave Federation Protocol with Prosody XMPP server]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2009/07/30/google-wave-prosody-xmpp-server/" />
		<id>http://zhekov.freehostia.com/blog/?p=148</id>
		<updated>2009-07-30T02:42:25Z</updated>
		<published>2009-07-30T02:42:25Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Work" /><category scheme="http://zhekov.freehostia.com/blog" term="google" /><category scheme="http://zhekov.freehostia.com/blog" term="gwave" /><category scheme="http://zhekov.freehostia.com/blog" term="prosody" /><category scheme="http://zhekov.freehostia.com/blog" term="xmpp" />		<summary type="html"><![CDATA[To be &#8220;on the wave&#8221; I&#8217;ve done some experiments with Google Wave Federation Protocol. Other people already made it working with OpenFire (and another OpenFire install) and ejabberd, so I decided to try with Prosody - very easy to install Lua-based XMPP server, I&#8217;m enjoing recently. From version 0.4.0 Prosody have support for external components. [...]]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2009/07/30/google-wave-prosody-xmpp-server/">&lt;p&gt;To be &amp;#8220;on the wave&amp;#8221; I&amp;#8217;ve done some experiments with &lt;a href="http://code.google.com/p/wave-protocol/"&gt;Google Wave Federation Protocol&lt;/a&gt;. Other people already made it working with &lt;a href="http://code.google.com/p/wave-protocol/wiki/Installation"&gt;OpenFire&lt;/a&gt; (and &lt;a href="http://en.dogeno.us/2009/07/my-attempt-to-install-google-wave-federation-protocol-on-a-ubuntu-server/"&gt;another OpenFire install&lt;/a&gt;) and &lt;a href="http://www.process-one.net/en/blogs/article/using_google_wave_reference_implementation_with_ejabberd/"&gt;ejabberd&lt;/a&gt;, so I decided to try with &lt;a href="http://prosody.im/"&gt;Prosody&lt;/a&gt; - very easy to install Lua-based XMPP server, I&amp;#8217;m enjoing recently. From version 0.4.0 Prosody have support for external components. My experiments was with the current (0.5.0) version.&lt;br /&gt;
&lt;br/&gt;&lt;br /&gt;
Like always in the beginning RTFM - &lt;a href="http://prosody.im/doc/components"&gt;&amp;#8220;Components in Prosody&amp;#8221;&lt;/a&gt;. For the Wave protocol - no differences from the other manuals - create fedone war, generate certificates, corect the &lt;em&gt;run-server.sh&lt;/em&gt; script etc.&lt;br /&gt;
&lt;br/&gt;&lt;br /&gt;
For the Prosody XMPP server (&lt;i&gt;/etc/prosody/prosody.cfg.lua&lt;/i&gt;):&lt;/p&gt;
&lt;pre&gt;
Host "*"
    ...
    -- External components
    component_ports = { 5275 }
    component_interface = "0.0.0.0"
    ...

-- Google Wave experiments
Component "wave.example.com"
    component_secret = "some_secret"
&lt;/pre&gt;
&lt;p&gt;Restart the Prosody server and execute the &lt;i&gt;run-server.sh&lt;/i&gt; (be sure the secret in the Prosody config file and in the run script are the same).&lt;br /&gt;
&lt;br/&gt;&lt;br /&gt;
Done. Enjoy.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/f5YYUdRFa3w" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2009/07/30/google-wave-prosody-xmpp-server/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2009/07/30/google-wave-prosody-xmpp-server/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[WebHooks on AppJet]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2009/02/23/webhooks-on-appjet/" />
		<id>http://zhekov.freehostia.com/blog/?p=146</id>
		<updated>2009-02-23T03:01:54Z</updated>
		<published>2009-02-23T03:01:54Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Work" /><category scheme="http://zhekov.freehostia.com/blog" term="appjet" /><category scheme="http://zhekov.freehostia.com/blog" term="heroku" /><category scheme="http://zhekov.freehostia.com/blog" term="programming" /><category scheme="http://zhekov.freehostia.com/blog" term="sinatra" /><category scheme="http://zhekov.freehostia.com/blog" term="webhooks" />		<summary type="html"><![CDATA[
Hi everybody,
I created a small lib-webhook library and a small companion hooks application  for easy working with webhooks on AppJet. Like maybe you know, webhooks are one of the current hot topics. They are a very easy way to implement a real-time communications between remote applications. 
What you can use it for:

Notify your AppJet [...]]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2009/02/23/webhooks-on-appjet/">&lt;p&gt;
Hi everybody,&lt;br /&gt;
I created a small &lt;a href="http://appjet.com/app/531554098/docs"&gt;lib-webhook library&lt;/a&gt; and a small companion &lt;a href="http://source.hooks.appjet.net/"&gt;hooks application&lt;/a&gt;  for easy working with &lt;a href="http://webhooks.pbwiki.com/"&gt;webhooks&lt;/a&gt; on &lt;a href="http://appjet.com/"&gt;AppJet&lt;/a&gt;. Like maybe you know, webhooks are one of the current hot topics. They are a very easy way to implement a real-time communications between remote applications. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What you can use it for:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Notify your &lt;strong&gt;AppJet&lt;/strong&gt; based application about changes (commits etc.) in your &lt;strong&gt;GitHub repository&lt;/strong&gt; - have for example ChangeLog + user notifications to some ML:
&lt;p&gt;Just go to &lt;a href="http://github.com/you.repo/edit/hooks/"&gt;GitHub Admin|Hooks page&lt;/a&gt; and if the already defined hooks are not enough put &lt;a href="http://github.com/you.repo/edit/hooks/"&gt;http://youhooks.appjet.net/github/SomeSecret/&lt;/a&gt; there.&lt;/li&gt;
&lt;li&gt;Post to your &lt;strong&gt;AppJet&lt;/strong&gt; based application by &lt;strong&gt;Jabber (XMPP)&lt;/strong&gt; or from an&lt;strong&gt; iPhone&lt;/strong&gt;:
&lt;p&gt;go to &lt;a href="https://ping.fm/custom/"&gt;https://ping.fm/custom/&lt;/a&gt; and enter &lt;a href="http://youhooks.appjet/pingfm/SomeSecret/"&gt;http://youhooks.appjet/pingfm/SomeSecret/&lt;/a&gt; .  ping.fm have a XMPP bot and an iPhone application which you can use.&lt;/li&gt;
&lt;li&gt;Post to your &lt;strong&gt;AppJet&lt;/strong&gt; application by &lt;strong&gt;email&lt;/strong&gt;:
&lt;p&gt;&lt;a href="http://www.smtp2web.com/"&gt;http://www.smtp2web.com/&lt;/a&gt; , define some email address and point the URL to &lt;a href="http://youhooks.appjet.net/something/SomeSecret/"&gt;http://youhooks.appjet.net/something/SomeSecret/&lt;/a&gt;. In fact I&amp;#8217;m first pointing it to one small application on GAE itself, because parsing &lt;em&gt;multipart/rfc-822&lt;/em&gt; coded message parameter will be difficult on AppJet. So I&amp;#8217;m parsing it with &lt;em&gt;message.get_payload()&lt;/em&gt; and repacking it in JSON payload. After this it can be send to AppJet.&lt;/li&gt;
&lt;li&gt;Posting to &lt;strong&gt;XMPP&lt;/strong&gt; from &lt;strong&gt;AppJet&lt;/strong&gt; - it still missing on AppJet, so I have a small &lt;a href="http://hooks.heroku.com/"&gt;Heroku-hosted Sinatra application&lt;/a&gt; to implement this feature.  So &lt;a href="http://youhooks.appjet.net/xmpp/SomeSecret/"&gt;http://youhooks.appjet.net/xmpp/SomeSecret/&lt;/a&gt; will in turn call that Sinatra application. If you do not trust me with your XMPP information, just create your own application somewhere, where XMPP is possible and call it with a webhooks API  (&lt;em&gt;your_url, JSON(payload),JSON(data)&lt;/em&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;How to use lib-webhook and hooks application:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Clone the &lt;em&gt;hooks application&lt;/em&gt; to (for example) &lt;a href="http://youhooks.appjet.net/"&gt;http://youhooks.appjet.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Set your secret token - it will be added to the end of the URLs:
&lt;pre&gt;
  // from the shell
  import ("storage", "lib-webhook");
  storage.token = "SomeSecret";
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Define users for the hooks, that needed them. I need for example user/password for the XMPP hook and user/key for the &lt;a href="http://bit.ly/"&gt;http://bit.ly/&lt;/a&gt; URL shortening service. In this way they will be not visible in your application sources.
&lt;pre&gt;
// from the shell
HOOK.addUser("xmpp", {user:"...", password:"..."});
&lt;/pre&gt;
&lt;p&gt;In the moment my hooks application just inserting the user&amp;#8217;s data with the same name as the hook, if such user exists:&lt;/p&gt;
&lt;pre&gt;
data = HOOK.addUserData(data, hook);
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The library itself provide two main functions:&lt;/p&gt;
&lt;pre&gt;
// universal caller - remote or local hooks:
string callH(url, JSON(payload), JSON(data));
// call local hooks by name
string callLocalH(name, payload, data);
&lt;/pre&gt;
&lt;p&gt;The rest are just some small helpers for user&amp;#8217;s data management.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll be very happy to see clones of &lt;a href="http://source.hooks.appjet.com/"&gt;hooks application&lt;/a&gt; with some interesting webhooks (&lt;a href="http://pbwiki.com/"&gt;http://pbwiki.com/&lt;/a&gt; for example also supporting webhooks. and by the way PayPal also wink ). And about &lt;em&gt;lib-webhook&lt;/em&gt; - will add twitter, identi.ca and maybe some others local hooks ASAP.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s the source be with you.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/UCJbpB4R2kU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2009/02/23/webhooks-on-appjet/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2009/02/23/webhooks-on-appjet/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	</entry>
		<entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[Ruby Sinatra: uninitialized constant Rack::File::MIME_TYPES]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2009/01/27/rack_file_mim/" />
		<id>http://zhekov.freehostia.com/blog/?p=144</id>
		<updated>2009-01-27T08:44:59Z</updated>
		<published>2009-01-27T08:44:59Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Work" /><category scheme="http://zhekov.freehostia.com/blog" term="programming" /><category scheme="http://zhekov.freehostia.com/blog" term="rack" /><category scheme="http://zhekov.freehostia.com/blog" term="ruby" /><category scheme="http://zhekov.freehostia.com/blog" term="sinatra" />		<summary type="html"><![CDATA[Original: rack newb problem w/ 0.9.0
When tried to run a sinatra based application, I received an error message:

./sinatra/lib/sinatra.rb:1156:in `mime': uninitialized constant Rack::File::MIME_TYPES (NameError)

According to Ryan Tomayko &#8220;&#8230;MIME_TYPES constant got shuffled around in this release (rack release)&#8230;&#8221;.
The solution (temporary) is to define Rack::File::MIME_TYPES by yourself before requiring sinatra:

require 'rack/file'
class Rack::File
   MIME_TYPES = Hash.new { [...]]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2009/01/27/rack_file_mim/">&lt;p&gt;Original: &lt;a href="http://groups.google.com/group/rack-devel/browse_thread/thread/1da54c9b6aa0bcfc"&gt;rack newb problem w/ 0.9.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When tried to run a sinatra based application, I received an error message:&lt;/p&gt;
&lt;pre&gt;
./sinatra/lib/sinatra.rb:1156:in `mime': uninitialized constant Rack::File::MIME_TYPES (NameError)
&lt;/pre&gt;
&lt;p&gt;According to Ryan Tomayko &lt;em&gt;&amp;#8220;&amp;#8230;MIME_TYPES constant got shuffled around in this release (rack release)&amp;#8230;&amp;#8221;&lt;/em&gt;.&lt;br /&gt;
The solution (temporary) is to define &lt;em&gt;Rack::File::MIME_TYPES&lt;/em&gt; by yourself &lt;strong&gt;before&lt;/strong&gt; requiring sinatra:&lt;/p&gt;
&lt;pre&gt;
require 'rack/file'
class Rack::File
   MIME_TYPES = Hash.new { |hash, key|
   Rack::Mime::MIME_TYPES[".#{key}"] }
end
require 'sinatra'
...
&lt;/pre&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/3C2pxVdE8HQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2009/01/27/rack_file_mim/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2009/01/27/rack_file_mim/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[Subscribe to this blog via XMPP (Jabber)]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2009/01/09/subscribe-to-this-blog-via-xmpp-jabber/" />
		<id>http://zhekov.freehostia.com/blog/?p=142</id>
		<updated>2009-01-09T09:04:09Z</updated>
		<published>2009-01-09T09:04:09Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Work" /><category scheme="http://zhekov.freehostia.com/blog" term="wordpress" /><category scheme="http://zhekov.freehostia.com/blog" term="xmpp" />		<summary type="html"><![CDATA[If you have http://notifixio.us/ account, you can receive notifications, for articles, posted to this blog via email, XMPP etc. I installed Notifixious Plugin (see the sidebar, Notifixio.us section). Need JavaScript enabled.
]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2009/01/09/subscribe-to-this-blog-via-xmpp-jabber/">&lt;p&gt;If you have &lt;a href="http://notifixio.us/"&gt;http://notifixio.us/&lt;/a&gt; account, you can receive notifications, for articles, posted to this blog via email, XMPP etc. I installed &lt;a href="http://wordpress.org/extend/plugins/notifixious-plugin/"&gt;Notifixious Plugin&lt;/a&gt; (see the sidebar, &lt;strong&gt;Notifixio.us&lt;/strong&gt; section). Need JavaScript enabled.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/dRpP6KJbYZM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2009/01/09/subscribe-to-this-blog-via-xmpp-jabber/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2009/01/09/subscribe-to-this-blog-via-xmpp-jabber/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[How to use Archlinux Pacman?]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2008/11/07/how-to-use-archlinux-pacman/" />
		<id>http://zhekov.freehostia.com/blog/?p=140</id>
		<updated>2008-11-07T03:48:25Z</updated>
		<published>2008-11-07T03:48:25Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Work" /><category scheme="http://zhekov.freehostia.com/blog" term="linux" /><category scheme="http://zhekov.freehostia.com/blog" term="sysadmin" />		<summary type="html"><![CDATA[
Packages installation:

pacman -Sy package_name - packages installation and local packages db sync
pacman -S package_name - packages installation along with dependencies
pacman -Sl repository_name - display packages list of a given repository
pacman -Sv package_name - information about operation


Removing packages:

pacman -R package_name - removing package without dependencies
pacman -Rs package_name - removing package along with dependencies
pacman -Rn package_name - [...]]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2008/11/07/how-to-use-archlinux-pacman/">&lt;ul&gt;
&lt;li&gt;Packages installation:
&lt;pre&gt;
pacman -Sy package_name - packages installation and local packages db sync
pacman -S package_name - packages installation along with dependencies
pacman -Sl repository_name - display packages list of a given repository
pacman -Sv package_name - information about operation
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Removing packages:
&lt;pre&gt;
pacman -R package_name - removing package without dependencies
pacman -Rs package_name - removing package along with dependencies
pacman -Rn package_name - purging package
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;System update:
&lt;pre&gt;
pacman -Su - update all the packages
pacman -Syu - update all the packages and synchronize local packages database
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Database queries:
&lt;pre&gt;
pacman -Ss keyword - search for all packages matching the keyword
                               (where the keyword is a part of the package name)
pacman -Qi package_name - information about package
pacman -Ql package_name - list files that a given package consist of
pacman -Qs package_name - search files installed on hard disk
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Other commands:
&lt;pre&gt;
pacman -Sw package_name - download package without installation
pacman -A /file/path/file.tar - install package
pacman -Sc - clean cache (old files)
pacman -Scc - clean cache (all files)
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://polishlinux.org/linux/arch/archlinux-tools-pacman/"&gt;Original article&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/toQ3-447rCI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2008/11/07/how-to-use-archlinux-pacman/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2008/11/07/how-to-use-archlinux-pacman/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[GMail backup]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2008/10/09/gmail-backup/" />
		<id>http://zhekov.freehostia.com/blog/?p=138</id>
		<updated>2008-10-09T05:49:38Z</updated>
		<published>2008-10-09T05:49:38Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Work" /><category scheme="http://zhekov.freehostia.com/blog" term="backup" /><category scheme="http://zhekov.freehostia.com/blog" term="email" /><category scheme="http://zhekov.freehostia.com/blog" term="gmail" /><category scheme="http://zhekov.freehostia.com/blog" term="google" />		<summary type="html"><![CDATA[After the rumors about locked GMail accounts, decided to backup my important emails. The article How to back up your Gmail on Linux in four easy steps helped me a lot. My setting in ~/.getmail/getmail.gmail are (IMAP, Maildir):

[retriever]
type = SimpleIMAPSSLRetriever
server = imap.gmail.com
username = my_name
password = my_secret
mailboxes = (&#8221;personal&#8221;,&#8221;important&#8221;)
[destination]
type = Maildir
path = ~/gmail-archive/
[options]
verbose = 2
message_log = [...]]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2008/10/09/gmail-backup/">&lt;p&gt;After the rumors about locked GMail accounts, decided to backup my important emails. The article &lt;a href="http://www.mattcutts.com/blog/backup-gmail-in-linux-with-getmail/"&gt;How to back up your Gmail on Linux in four easy steps&lt;/a&gt; helped me a lot. My setting in &lt;em&gt;~/.getmail/getmail.gmail&lt;/em&gt; are (IMAP, Maildir):&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
[retriever]&lt;br /&gt;
type = SimpleIMAPSSLRetriever&lt;br /&gt;
server = imap.gmail.com&lt;br /&gt;
username = my_name&lt;br /&gt;
password = my_secret&lt;br /&gt;
mailboxes = (&amp;#8221;personal&amp;#8221;,&amp;#8221;important&amp;#8221;)&lt;/p&gt;
&lt;p&gt;[destination]&lt;br /&gt;
type = Maildir&lt;br /&gt;
path = ~/gmail-archive/&lt;/p&gt;
&lt;p&gt;[options]&lt;br /&gt;
verbose = 2&lt;br /&gt;
message_log = ~/.getmail/gmail.log&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
The backup itself was done via:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
$ getmail -r ~/.getmail/getmail.gmail&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/HJuG8JrEFnM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2008/10/09/gmail-backup/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2008/10/09/gmail-backup/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[github error: failed to push some refs]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2008/09/29/github-error-failed-to-push-some-refs/" />
		<id>http://zhekov.freehostia.com/blog/?p=133</id>
		<updated>2008-09-29T02:21:07Z</updated>
		<published>2008-09-29T02:21:07Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Work" /><category scheme="http://zhekov.freehostia.com/blog" term="git" /><category scheme="http://zhekov.freehostia.com/blog" term="github" /><category scheme="http://zhekov.freehostia.com/blog" term="programming" /><category scheme="http://zhekov.freehostia.com/blog" term="scm" />		<summary type="html"><![CDATA[When trying to push to github received:

$ git push
To git@github.com:zh/laconica.git
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:zh/laconica.git'

The solution

$ git pull
....
$ git push

]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2008/09/29/github-error-failed-to-push-some-refs/">&lt;p&gt;When trying to push to &lt;a href="http://github.com/"&gt;github&lt;/a&gt; received:&lt;/p&gt;
&lt;pre&gt;
$ git push
To git@github.com:zh/laconica.git
 ! [rejected]        master -&gt; master (non-fast forward)
error: failed to push some refs to 'git@github.com:zh/laconica.git'
&lt;/pre&gt;
&lt;p&gt;The solution&lt;/p&gt;
&lt;pre&gt;
$ git pull
....
$ git push
&lt;/pre&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/pHaWoW7WB_4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2008/09/29/github-error-failed-to-push-some-refs/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2008/09/29/github-error-failed-to-push-some-refs/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	</entry>
		<entry>
		<author>
			<name>stoyan</name>
						<uri>http://tt.zhekov.net/</uri>
					</author>
		<title type="html"><![CDATA[Install merb from git]]></title>
		<link rel="alternate" type="text/html" href="http://zhekov.freehostia.com/blog/2008/09/16/install-merb-dev/" />
		<id>http://blog.zhekov.net//2008/08/06/install-merb-dev</id>
		<updated>2008-09-16T03:10:21Z</updated>
		<published>2008-09-16T03:10:21Z</published>
		<category scheme="http://zhekov.freehostia.com/blog" term="Home" /><category scheme="http://zhekov.freehostia.com/blog" term="merb" /><category scheme="http://zhekov.freehostia.com/blog" term="programming" /><category scheme="http://zhekov.freehostia.com/blog" term="ruby" /><category scheme="http://zhekov.freehostia.com/blog" term="web" />		<summary type="html"><![CDATA[Trying to install the development version of merb , i&#8217;ve got:

no such file to load -- extlib/tasks/release

Seems the extlib gem is too old for merb. Fix:

$ git clone git://github.com/sam/extlib.git
$ cd extlib
$ rake gem
$ sudo gem install pkg/extlib-0.9.4.gem

The rest of installation process:

$ sudo gem install sake erubis mime-types
$ sake -i http://merbivore.com/merb-dev.sake
$ mkdir ~/merb_src &#038;&#038; cd ~/merb_src
$ [...]]]></summary>
		<content type="html" xml:base="http://zhekov.freehostia.com/blog/2008/09/16/install-merb-dev/">&lt;p&gt;Trying to install the development version of merb , i&amp;#8217;ve got:&lt;/p&gt;
&lt;pre&gt;
no such file to load -- extlib/tasks/release
&lt;/pre&gt;
&lt;p&gt;Seems the extlib gem is too old for merb. Fix:&lt;/p&gt;
&lt;pre&gt;
$ git clone git://github.com/sam/extlib.git
$ cd extlib
$ rake gem
$ sudo gem install pkg/extlib-0.9.4.gem
&lt;/pre&gt;
&lt;p&gt;The rest of installation process:&lt;/p&gt;
&lt;pre&gt;
$ sudo gem install sake erubis mime-types
$ sake -i http://merbivore.com/merb-dev.sake
$ mkdir ~/merb_src &amp;#038;&amp;#038; cd ~/merb_src
$ sake merb:clone
$ sake merb:install:all
&lt;/pre&gt;
&lt;p&gt;Your first application:&lt;/p&gt;
&lt;pre&gt;
$ merb-gen app my_app --flat &amp;#038;&amp;#038; cd my_app
&lt;/pre&gt;
&lt;img src="http://feeds.feedburner.com/~r/Bloggitation/~4/M2MJEKCUvRA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://zhekov.freehostia.com/blog/2008/09/16/install-merb-dev/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://zhekov.freehostia.com/blog/2008/09/16/install-merb-dev/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
	</feed><!-- Dynamic Page Served (once) in 0.430 seconds -->
