<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Zougg Blog</title>
	<link>http://www.zougg.com/blog</link>
	<description>Proof that I've Thought of These Things.</description>
	<pubDate>Sat, 15 Dec 2007 01:35:13 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2</generator>
	<language>en</language>
			<item>
		<title>Amazon SimpleDB / SDS</title>
		<link>http://www.zougg.com/blog/2007/12/14/amazon-simpledb-sds/</link>
		<comments>http://www.zougg.com/blog/2007/12/14/amazon-simpledb-sds/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 21:36:57 +0000</pubDate>
		<dc:creator>zougg</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.zougg.com/blog/2007/12/14/amazon-simpledb-sds/</guid>
		<description><![CDATA[Amazon today launched a limited beta of the SimpleDB service.  Unlike the S3, this service provides storage for structured data.  In their developer documentation, this service is described as complementary to S3:
 Unlike Amazon S3, Amazon SimpleDB is not storing raw data.  Rather, it takes your data as input and expands it [...]]]></description>
			<content:encoded><![CDATA[<p>Amazon today launched a limited beta of the <a href="http://aws.amazon.com/simpledb" title="SimpleDB">SimpleDB </a>service.  Unlike the S3, this service provides storage for <strong>structured </strong>data.  In their developer documentation, this service is described as complementary to S3:</p>
<blockquote><p> Unlike Amazon S3, Amazon SimpleDB is not storing raw data.  Rather, it takes your data as input and expands it to create indices across multiple dimensions, which enables you to quickly query that data.  Additionally, Amazon S3 and Amazon SimpleDB use different types of physical storage.  Amazon S3 uses dense storage drives that are optimized for storing larger objects inexpensively.  Amazon SimpleDB stores smaller bits of data and uses less dense drives that are optimized for data access speed.</p>
<p>In order to optimize your costs across AWS services, large objects or files should be stored in Amazon S3, while smaller data elements or file pointers (possibly to Amazon S3 objects) are best saved in Amazon SimpleDB.  Because of the close integration between services and the free data transfer within the AWS environment, developers can easily take advantage of both the speed and querying capabilities of Amazon SimpleDB as well as the low cost of storing data in Amazon S3, by integrating both services into their applications.</p></blockquote>
<p>This new service undoubtedly generated quite a bit of enthusiasm: <a href="http://radar.oreilly.com/archives/2007/12/amazon_launches.html">O&#8217;Reilly</a>,<a href="http://www.techcrunch.com/2007/12/14/amazon-takes-on-oracle-and-ibm-with-simple-db-beta/">TechCrunch</a>&#8230;.  For <a href="http://gigaom.com/2007/12/14/amazon-web-services-launches-simpledb-beta/">some</a>, this is the long awaited &#8220;database&#8221; in the cloud and is seen as Amazon&#8217;s addressing the requirements and realities of today&#8217;s web application development.    While this is no doubt an important service that complements Amazon&#8217;s S3 and EC2, is it really the &#8216;database&#8217; that your average web application developer is hoping for?  Is this the MySQL in the sky and <a href="http://www.techcrunch.com/2007/12/14/amazon-takes-on-oracle-and-ibm-with-simple-db-beta/">a challenger to Oracle</a>?</p>
<p>From a technical standpoint, the answer is, &#8220;No.&#8221;  While SimpleDB supports storage and indexing of <strong>Structured Data</strong>, it is <strong>not</strong> a drop-in replacement of a RDBMS for a very simple reason:  It supports <strong>atomic updates</strong> at a single Item level.  According to its developer documentation:</p>
<blockquote><p> The PutAttributes operation creates or replaces attributes in an item. You specify new attributes using a combination of the Attribute.X.Name and Attribute.X.Value parameters. You specify the first attribute by the parameters Attribute.0.Name and Attribute.0.Value, the second attribute by the parameters Attribute.1.Name and Attribute.1.Value, and so on.</p></blockquote>
<p>Multiple REST calls to update multiple entities (Items) mean separate, atomic updates with <a href="http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/SDB_Glossary.html#glossary_EventualConsistency">eventual  consistency</a>.  A read (GET attributes) of an item following immediately a write (PUT attributes) is not guaranteed to return the updated attribute values, since the subsequent read may be served by a node that has yet to receive the update.  In simple terms, SimpleDB does not support the notion of updates to multiple entities in a single transaction.  The granularity of the transaction (taking into account of eventual consistency) is at the single item level.</p>
<p>I think this is an important consideration when one looks at SimpleDB as a &#8216;replacement&#8217; of MySQL.  It all depends on how the application is designed.  Strictly speaking, SimpleDB is a <strong>structured index</strong> with the semantics of a MultiMap (list of attribute-value pairs, where multiple values can be associated to an attribute).  It is schema-less (as in a big HashMap with up to 256 keys) and transaction-less (across multiple entities/ items anyway).  It is a structured index not unlike Google Base (ST anyone?). It is not a MySQL equivalent.  Application developers need to take this into consideration:  if their application assumes consistency of transactional update of multiple entities (tables), SimpleDB is not the solution.</p>
<p>Having said all this, I think SimpleDB is a great service.  If anything, using it will force the application developers to carefully consider the data model of the application.   Most of the time, running on top of a RDBMS is just overkill given the complexity and overhead of keeping a RDBMS running, not to mention the scalability problems (or the headache that follows with sharding the databases.)  It very nicely complements S3 by providing ability to index structured data, saving you from having to implement your own <a href="http://lucene.apache.org/">Lucene</a> index sitting on top of data in S3.   The only thing I am not so sure about is all this is implemented as REST over HTTP/S, with the results implemented in XML rather than JSON.  It would be nice to have an optional, lighter weight API specifically optimized for clients running on EC2&#8230;. possibly using a lightweight RPC layer such as Facebook&#8217;s <a href="http://developers.facebook.com/thrift/">Thrift</a> or some clone of Google&#8217;s Protocol Buffer?</p>
<p><strong>Update / &#8220;Second Thoughts&#8221; </strong></p>
<p>Actually, it&#8217;s not even quite like having Lucene sitting on S3, because SimpleDB&#8217;s query language does not support full text search (<a href="http://www.satine.org/archives/2007/12/13/amazon-simpledb/">technical discussion here</a>).  So as-is, each Domain in SimpleDB basically looks like a table where the columns are indexed and more columns (up to 256) can be added at any time.  For example, you can have a Domain called Employee with a set of attributes like name, department and the query allows trivial searches by name and department quite easily.  Set operations like union and intersections are also possible.  Queries operate on a given Domain.  So it might be tricky to have a separate Domain called Person and try to find say the intersection of Employee and Person.  Also, if you want to have a record of a Person who is also an employee as items in separate Domains, SimpleDB&#8217;s API does not seem to provide that transactional semantics. The only way is to denormalize your data into one catch-all Domain/ table.   For most applications, this is not so much a limitation but an opportunity to design for performance and scalability.</p>
<p>Cases described above are all things that a typical RDBMS user takes for granted.  This is no longer the case in the world of SimpleDB (or say Google&#8217;s BigTable or HBase) and applications need to be architected accordingly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zougg.com/blog/2007/12/14/amazon-simpledb-sds/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Scaling Web Apps with Apache 2.2 and mod_proxy_balancer on Debian</title>
		<link>http://www.zougg.com/blog/2007/07/26/scaling-web-apps-with-apache-22-on-debian/</link>
		<comments>http://www.zougg.com/blog/2007/07/26/scaling-web-apps-with-apache-22-on-debian/#comments</comments>
		<pubDate>Fri, 27 Jul 2007 06:48:16 +0000</pubDate>
		<dc:creator>zougg</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.zougg.com/blog/2007/07/26/scaling-web-apps-with-apache-22-on-debian/</guid>
		<description><![CDATA[Using Apache as a reverse proxy to front application servers (like mod_jk with Tomcat) is a common pattern in web application architecture, including applications based on Weblogic or WebSphere.  Weblogic for instance, has a load balancer module for clustering of app servers.
In version 2.2 onward, the mod_proxy module of the Apache server has been [...]]]></description>
			<content:encoded><![CDATA[<p>Using Apache as a reverse proxy to front application servers (like <strong>mod_jk</strong> with Tomcat) is a common pattern in web application architecture, including applications based on Weblogic or WebSphere.  Weblogic for instance, has a load balancer module for clustering of app servers.</p>
<p>In version 2.2 onward, the <strong>mod_proxy</strong> module of the Apache server has been extended to support load balancing with the <strong>mod_proxy_balancer</strong> module.  For a lot of Rails installations, this seems to be a popular way of<a href="http://blog.innerewut.de/articles/2006/04/21/scaling-rails-with-apache-2-2-mod_proxy_balancer-and-mongrel" target="_blank"> scaling</a>.   To implement this on Debian, here are the basic steps:</p>
<p><strong>1. Install Apache2</strong><br />
To install Apache2 on Debian, use the <a href="http://newbiedoc.sourceforge.net/system/apt-get-intro.html" target="_blank">apt-get</a> command to install the <a href="http://packages.debian.org/stable/net/apache2" target="_blank">apache2 package</a>.  This step is pretty much automatic:<br />
<code>apt-get apache2</code></p>
<p><strong>2. Configure Required Modules</strong><br />
Apache2 on Debian has a slightly different layout.  The files are in the /etc/apache2 directory and are divided into modules and sites:<br />
<code><br />
domU-12-31-36-00-31-41:/etc/apache2# ls -alkn<br />
total 60<br />
drwxr-xr-x  7 0 0  4 2007-07-27 05:18 .<br />
drwxr-xr-x 45 0 0  4 2007-07-26 22:41 ..<br />
-rw-r--r--  1 0 0 24 2007-03-27 12:53 apache2.conf<br />
drwxr-xr-x  2 0 0  4 2007-07-17 07:57 conf.d<br />
-rw-r--r--  1 0 0  1 2007-03-27 12:58 envvars<br />
-rw-r--r--  1 0 0  0 2007-07-17 07:57 httpd.conf<br />
drwxr-xr-x  2 0 0  4 2007-07-26 08:06 mods-available<br />
drwxr-xr-x  2 0 0  4 2007-07-26 08:17 mods-enabled<br />
-rw-r--r--  1 0 0  1 2007-07-17 07:57 ports.conf<br />
drwxr-xr-x  2 0 0  4 2007-07-26 08:08 sites-available<br />
drwxr-xr-x  2 0 0  4 2007-07-26 08:08 sites-enabled</code><br />
So instead of one monolithic httpd.conf file, things are broken down to small fragments of files for each moduel and the use of symbolic links allows quick changes of configuration.  To faciliate configuration, several commands are available: a2enmod, a2ensite, etc.  <a href="http://www.debian-administration.org/articles/207">Here is a good reference</a>.</p>
<p>At a minimum, several modules need to be configured and enabled.  The module names are basically the file basenames in the <strong>mods-available</strong> directory.</p>
<p>In this example, the application server nodes are running locally at different ports and we want to reverse proxy requests to these nodes via the load balancer.   The configuration files are to be stored in the <strong>mods-available</strong> directory.  Here are the sample configurations.<br />
The balancer:<br />
<code>domU-12-31-36-00-31-41:/etc/apache2# more <strong>mods-available/proxy_balancer.conf </strong><br />
&lt;Proxy balancer://app&gt;<br />
# cluster member<br />
BalancerMember http://127.0.0.1:8080 loadfactor=1<br />
BalancerMember http://127.0.0.1:8081 loadfactor=1<br />
&lt;/Proxy&gt;<br />
</code></p>
<p>The main config file:<br />
<code> domU-12-31-36-00-31-41:/etc/apache2# more <strong>sites-enabled/000-default</strong><br />
#NameVirtualHost *<br />
&lt;virtualhost *:80&gt;<br />
ServerAdmin webmaster@localhost<br />
ProxyPass /  balancer://app/<br />
ProxyPassReverse / balancer://app/<br />
ErrorLog /var/log/apache2/error.log<br />
LogLevel warn<br />
CustomLog /var/log/apache2/access.log combined<br />
ServerSignature On<br />
&lt;/virtualhost&gt;<br />
</code><br />
It&#8217;s important to note the use of &#8216;/&#8217; in the ProxyPassReverse directives and how they bind to the cluster name defined in the config file for the balancer (proxy_balance.conf).  Once the config files are ready, the modules need to be enabled&#8230;<strong>3. Enable Modules</strong><br />
After the modules configuration files are complete, the modules are enabled via:</p>
<p><code> a2enmod proxy<br />
a2enmod proxy_balancer<br />
a2enmod proxy_http</code></p>
<p>For some reason, proxy_http is frequently overlooked.  Without it, Apache will throw 403 errors when accessing resources at proxied URLs.  In the logs, error messages like<br />
<code><br />
[Thu Jul 26 07:06:13 2007] [warn] proxy: No protocol handler was valid for the URL /foo. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.<br />
</code><br />
To show the loaded modules:<br />
<code><br />
domU-12-31-36-00-31-41:/etc/apache2# apache2ctl -t -D DUMP_MODULES<br />
Loaded Modules:<br />
core_module (static)<br />
log_config_module (static)<br />
logio_module (static)<br />
mpm_worker_module (static)<br />
http_module (static)<br />
so_module (static)<br />
alias_module (shared)<br />
auth_basic_module (shared)<br />
authn_file_module (shared)<br />
authz_default_module (shared)<br />
authz_groupfile_module (shared)<br />
authz_host_module (shared)<br />
authz_user_module (shared)<br />
autoindex_module (shared)<br />
cache_module (shared)<br />
cgid_module (shared)<br />
dir_module (shared)<br />
env_module (shared)<br />
mime_module (shared)<br />
negotiation_module (shared)<br />
proxy_module (shared)<br />
proxy_balancer_module (shared)<br />
proxy_http_module (shared)<br />
rewrite_module (shared)<br />
setenvif_module (shared)<br />
status_module (shared)<br />
Syntax OK</code></p>
<p>Once the server is restarted (apache2ctl -k restart), the changes will take effect and requests should now be routed to the application server nodes running on ports 8080 and 8081 as configured in the example.</p>
<p>The load balancer module is quite powerful: it has options for setting load factors to better balance load across nodes of varying capacity.  For more information on configuration options, see the <a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html" target="_blank">documentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zougg.com/blog/2007/07/26/scaling-web-apps-with-apache-22-on-debian/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Running Amazon EC2</title>
		<link>http://www.zougg.com/blog/2007/07/14/running-amazon-ec2/</link>
		<comments>http://www.zougg.com/blog/2007/07/14/running-amazon-ec2/#comments</comments>
		<pubDate>Sat, 14 Jul 2007 23:50:08 +0000</pubDate>
		<dc:creator>zougg</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.zougg.com/blog/2007/07/14/running-amazon-ec2/</guid>
		<description><![CDATA[So I was told the other day that I had 48 hours to migrate one of my previous AMI (Amazon Machine Image) instances, because the instance was running on degraded hardware (which apparently had some hardware failure).  Amazon was pro-active about it and had stopped billing for this particular instance.  In any case, [...]]]></description>
			<content:encoded><![CDATA[<p>So I was told the other day that I had 48 hours to migrate one of my previous AMI (Amazon Machine Image) instances, because the instance was running on degraded hardware (which apparently had some hardware failure).  Amazon was pro-active about it and had stopped billing for this particular instance.  In any case, I was able to login to this instance and retrieve files that are specific to this instance.</p>
<p>One great thing about EC2 is that there is a wide selection of public AMIs available.  This means one can experiment with different system configurations, from the different Linux distributions (e.g. Debian, Fedora, Gentoo) to the software installed (e.g. a full LAMP stack).   Since my old instance has been running the Amazon-provided Fedora4, I figure it&#8217;s time to try something else and also document the steps.</p>
<p><strong>1. Getting the certificate and private key ready<br />
</strong>Amazon provides a set of command-line tools (written in Java) for working with EC2.  These tools use HTTPS to communicate with the web service and therefore requires X.509 certificates and private keys to be around.  Once you are in the EC2 program (currently Beta at <a href="http://aws.amazon.com" target="_blank">aws.amazon.com</a>), you can generate the required certificate and keys.    Since I already have these generated before, there&#8217;s little to do here.  Amazon recommends putting these credential files in, say, ~/.ec2, like so:</p>
<p><code>$ ls -alkn ~/.ec2<br />
total 12<br />
drwx------    5 501  501   170 Jul 14 15:05 .<br />
drwxr-xr-x   53 501  501  1802 Jul 14 14:11 ..<br />
-rw-r--r--    1 501  501   689 Jul 14 14:11 cert-A6O5VGEIFPYKTCNTXVK4D2XE5ESNCB7U.pem<br />
-rw-r--r--    1 501  501   721 Jul 14 14:11 pk-A6O5VGEIFPYKTCNTXVK4D2XE5ESNCB7U.pem<br />
</code></p>
<p><strong>2. Install EC2 Tools<br />
</strong>The command line tools are available from the Developer Connection site (<a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351&amp;categoryID=88" target="_blank">here</a>).  These tools also expect Java to be installed on your machine.   Once installed, the tools are ready for use after setting a few environment variables.  For example, the downloaded zip file unzips to directory foo, and the environment variables are then set as follows:<br />
<code><br />
export EC2_HOME=~/projects/ec2/ec2-api-2007-03-01/ec2-api-tools<br />
export PATH=$EC2_HOME/bin:$PATH<br />
export EC2_PRIVATE_KEY=~/.ec2/pk-A6O5VGEIFPYKTCNTXVK4D2XE5ESNCB7U.pem<br />
export EC2_CERT=~/.ec2/cert-A6O5VGEIFPYKTCNTXVK4D2XE5ESNCB7U.pem<br />
</code><br />
That&#8217;s it!</p>
<p><strong>3. Finding public AMIs, checking instances<br />
</strong> Several commands are useful:</p>
<p><code>ec2-describe-images -a</code>  This shows a list of available AMIs.  This has grown to be a pretty long list from the early days of EC2.  This information is also available at <a href="http://developer.amazonwebservices.com/connect/kbcategory.jspa?categoryID=101" target="_blank">http://developer.amazonwebservices.com/connect/kbcategory.jspa?categoryID=101</a></p>
<p>Since this new instance will be serving web pages with a Java and S3 backend, an AMI that is small, optimized for Xen, would be ideal.  For this, I decided to try out the Gentoo distribution (ami-8b8a6fe2).  This particular AMI has the basics like openssh and Apache2 and that&#8217;s about it.</p>
<p><code>ec2-describe-instances </code>basically shows any currently running instances.  There is also a Firefox plugin that simplifies much of these tasks by providing a nice UI.  Still, command line tools are scriptable&#8230;</p>
<p><strong>4. Running a new AMI instance</strong><br />
With the tools in place and the cert/keys ready, starting up a new instance is pretty trivial.  First, we need to generate a keypair for the new instance.  An instance of a public AMI has no password and logging in via ssh requires public/private keypair.  Since this is specific to <em>my instantiations</em> of the AMI, a keypair need to be generated so that one half of the keypair is embedded in this AMI allowing me to login later on with the other half of the keypair.  To do this, simply use the command:</p>
<p><code>ec2-add-keypair ami-8b8a6fe2-gentoo-base-eminent </code></p>
<p>The key name <strong>ami-8b8a6fe2-gentoo-base-eminent</strong> is created following a simple convention that denotes which AMI (ami-8b8a6fe2) and the configuration (gentoo-base-eminent).  This key is important in later starting up new instances of this AMI.  This command prints out the private RSA key necessary for ssh login (via the -i option) later:<br />
<code><br />
-----BEGIN RSA PRIVATE KEY-----<br />
MIIEpgIBAAKCAQEAmmVOcPrBRXgGbo3XtvKxld/Glmuqi9gGKLNzyfUspKCuSjwmgHB91y7e8aH+<br />
tGyHdbYnHPC/nNbh15F3jjdneM5W1GphcUJu4m2HylAklgTOC8pYVdS8XacKiGSBaUXvZimXCsH/<br />
Uzcm3rxfxwNESwWpsg9aPXYi//T0quqM1xvZNFXO1s1s5ZJfKugCUUJrq365afaOR1hiipx+02U5<br />
zKSTYZc9XWKbbaNSSeIDCPh8CZTxEH/FEuutaMxisMJ26uAqD0plnc1sj+mv8NNCl+/XgTlPLzVg<br />
...<br />
-----END RSA PRIVATE KEY-----<br />
</code><br />
Since this output needs to be captured in a file, we can just do this:</p>
<p><code>ec2-add-keypair ami-8b8a6fe2-gentoo-base-eminent &gt; ~/.ec2/ami-8b8a6fe2-gentoo-base-eminent.id</code></p>
<p>Change the permission of the id file (<code>chmod 600 ~/.ec2/ami-8b8a6fe2-gentoo-base-eminent.id</code>) or ssh won&#8217;t like it!  Now that we have the keypair, start up a new instance:</p>
<p><code>ec2-run-instances ami-8b8a6fe2 -k ami-8b8a6fe2-gentoo-base-eminent </code></p>
<p>This here starts up one instance of the Gentoo AMI (ami-8b8a6fe2) identified by the keypair (ami-8b8a6fe2-gentoo-base-eminent) .  This instance is started with the default group.  In order to gain ssh access, we need to authorize port access (for the default group):</p>
<p><code>ec2-authorize default -p 22  </code>for ssh, and<code> ec2-authorize default -p 80</code> for HTTP.</p>
<p><strong>5. Connecting to the new AMI instance</strong><br />
Now to connect to the new instance, we first find out how to get to it:<br />
<code><br />
$ ec2-describe-instances<br />
...<br />
INSTANCE        i-8d688be4      ami-8b8a6fe2    ec2-72-44-51-245.z-1.compute-1.amazonaws.com ...<br />
</code><br />
To connect to it, simply ssh to the hostname listed above:<br />
<code><br />
ssh -i ~/.ec2/ami-8b8a6fe2-gentoo-base-eminent.id root@ec2-72-44-51-245.z-1.compute-1.amazonaws.com<br />
</code></p>
<p>That&#8217;s it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zougg.com/blog/2007/07/14/running-amazon-ec2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hello world!</title>
		<link>http://www.zougg.com/blog/2007/06/16/hello-world/</link>
		<comments>http://www.zougg.com/blog/2007/06/16/hello-world/#comments</comments>
		<pubDate>Sat, 16 Jun 2007 07:00:39 +0000</pubDate>
		<dc:creator>zougg</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Well, here we go.  This is my very, very first post.  In true programming fashion, here&#8217;s the prototypical &#8220;Hello World!&#8221; statement.  From this point on, this blog will document many interesting thoughts, opinions, and experiments, covering interesting topics-of-the-day in technology, commerce, and media.  At least that&#8217;s the plan:  to create a place to document and [...]]]></description>
			<content:encoded><![CDATA[<p>Well, here we go.  This is my very, very first post.  In true programming fashion, here&#8217;s the prototypical &#8220;Hello World!&#8221; statement.  From this point on, this blog will document many interesting thoughts, opinions, and experiments, covering interesting topics-of-the-day in technology, commerce, and media.  At least that&#8217;s the plan:  to create a place to document and prove that these thoughts actually existed in my head at some point in time&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zougg.com/blog/2007/06/16/hello-world/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
