<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Feedbin</title>
    <subtitle>A fast, simple RSS feed reader that delivers a great reading experience.</subtitle>
    <link rel="hub" href="http://pubsubhubbub.superfeedr.com/" />
    <link href="https://feedbin.com/blog/atom.xml" rel="self" />
    <link href="https://feedbin.com" />
    <updated>2017-08-22T17:14:51+00:00</updated>
    <id>https://feedbin.com</id>
    <author>
        <name>Feedbin</name>
        <email>support@feedbin.com</email>
    </author>

    
    <entry>
        <title>Podcast Playback Improvements</title>
        <author>
            <name>Ben Ubois</name>
        </author>
        <link href="https://feedbin.com/blog/2017/08/22/podcast-playing-improvements/" />
        
            <published>2017-08-22T17:15:00+00:00</published>
        
        
            <updated>2017-08-22T17:15:00+00:00</updated>
        
        <id>/2017/08/22/podcast-playing-improvements</id>
        <summary>There’s a few great improvements for playing and managing podcasts in Feedbin. An all new player. The player has both a mini-view and expanded-view, which features the podcasts’ artwork. You can click on the player to toggle between the views. The player is persistent. You can continue to use Feedbin...</summary>
        <content type="html">&lt;figure&gt;
    &lt;a href=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-08-22/recently-played-504c4dbdddf334bca90c96cef4b27dc68b19ed1c94ffd8fb4a243a51c48500ad.gif&quot;&gt;&lt;img src=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-08-22/recently-played-504c4dbdddf334bca90c96cef4b27dc68b19ed1c94ffd8fb4a243a51c48500ad.gif&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;There’s a few great improvements for playing and managing podcasts in Feedbin.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;An all new player. The player has both a mini-view and expanded-view, which features the podcasts’ artwork. You can click on the player to toggle between the views.&lt;/li&gt;
  &lt;li&gt;The player is persistent. You can continue to use Feedbin while the podcast is playing.&lt;/li&gt;
  &lt;li&gt;Feedbin remembers your progress for all podcasts so you can resume where you left off.&lt;/li&gt;
  &lt;li&gt;A new &lt;strong&gt;Recently Played&lt;/strong&gt; section so you can quickly find anything you were in the middle of listening to.&lt;/li&gt;
&lt;/ol&gt;

</content>
    </entry>
    
    <entry>
        <title>View Links in Feedbin</title>
        <author>
            <name>Ben Ubois</name>
        </author>
        <link href="https://feedbin.com/blog/2017/07/25/view-links-in-feedbin/" />
        
            <published>2017-07-25T19:50:00+00:00</published>
        
        
            <updated>2017-07-25T19:50:00+00:00</updated>
        
        <id>/2017/07/25/view-links-in-feedbin</id>
        <summary>Articles often link to other websites and blogs. I’ll usually open these links in a new tab as I go, to read what the links contain. However, I like to do all my reading in Feedbin because it’s a pleasant and consistent reading environment. This feature adds the ability to...</summary>
        <content type="html">&lt;figure&gt;
    &lt;a href=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-07-25/view-link-128004975c547282aa6840a23d30eb455d9b6a193c13334b6e6c8ba6197f7eb1.gif&quot;&gt;&lt;img src=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-07-25/view-link-128004975c547282aa6840a23d30eb455d9b6a193c13334b6e6c8ba6197f7eb1.gif&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;Articles often link to other websites and blogs. I’ll usually open these links in a new tab as I go, to read what the links contain. However, I like to do all my reading in Feedbin because it’s a pleasant and consistent reading environment.&lt;/p&gt;

&lt;p&gt;This feature adds the ability to view the contents of a link, all without leaving Feedbin. Only the article contents are displayed, so anything loaded this way is optimized for reading.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Feedbin Supports JSON Feed!</title>
        <author>
            <name>Ben Ubois</name>
        </author>
        <link href="https://feedbin.com/blog/2017/05/22/feedbin-supports-json-feed/" />
        
            <published>2017-05-23T01:10:00+00:00</published>
        
        
            <updated>2017-05-23T01:10:00+00:00</updated>
        
        <id>/2017/05/22/feedbin-supports-json-feed</id>
        <summary>Feedbin now supports subscribing to JSON Feeds. JSON Feed is an alternative to the RSS/Atom formats. The great thing about JSON Feed is that it encodes the content as JSON instead of XML. This is good because parsing and writing XML feeds is hard. The specification has a small surface...</summary>
        <content type="html">&lt;p&gt;Feedbin now supports subscribing to &lt;a href=&quot;https://jsonfeed.org/&quot;&gt;JSON Feeds&lt;/a&gt;.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-05-22/json-feed-7c740dc71e237fb2775dcc950e88900753ddd13ac77899c6df5f4c25aba64fcd.jpg&quot;&gt;&lt;img src=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-05-22/json-feed-7c740dc71e237fb2775dcc950e88900753ddd13ac77899c6df5f4c25aba64fcd.jpg&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;JSON Feed is an alternative to the RSS/Atom formats. The great thing about JSON Feed is that it encodes the content as JSON instead of XML. This is good because parsing and writing XML feeds is hard.&lt;/p&gt;

&lt;p&gt;The specification has a small surface area and is a great piece of technical writing. You &lt;a href=&quot;https://jsonfeed.org/version/1&quot;&gt;should check it out&lt;/a&gt;. If you publish a website, consider offering a JSON Feed alongside your RSS feed.&lt;/p&gt;

&lt;p&gt;One of the criticisms I’ve seen of JSON Feed is that there’s no incentive for feed readers to support JSON Feed. This is not true. One of the largest-by-volume support questions I get is along the lines of “Why does this random feed not work?” And, 95% of the time, it’s because the feed is broken in some subtle way. JSON Feed will help alleviate these problems, because it’s easier to get right.&lt;/p&gt;

&lt;p&gt;I also want JSON Feed to succeed because I remember how daunting RSS/Atom parsing were when building Feedbin. If JSON Feed was the dominant format back then, it would have been a non-issue.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Testing Huge PostgreSQL Backups for 37 Cents a Day</title>
        <author>
            <name>Ben Ubois</name>
        </author>
        <link href="https://feedbin.com/blog/2017/05/05/testing-huge-postgresql-backups-for-37-cents-a-day/" />
        
            <published>2017-05-05T18:23:00+00:00</published>
        
        
            <updated>2017-05-05T18:23:00+00:00</updated>
        
        <id>/2017/05/05/testing-huge-postgresql-backups-for-37-cents-a-day</id>
        <summary>I spent some time revisiting and improving Feedbin’s backup strategy recently. I was prompted by a couple of high-profile database incidents including GitLab and Instapaper. I already felt pretty good about the backup system I had in place. I had tested backup recovery manually and felt the tools were solid....</summary>
        <content type="html">&lt;p&gt;I spent some time revisiting and improving Feedbin’s backup strategy recently.&lt;/p&gt;

&lt;p&gt;I was prompted by a couple of high-profile database incidents including &lt;a href=&quot;https://about.gitlab.com/2017/02/01/gitlab-dot-com-database-incident/&quot;&gt;GitLab&lt;/a&gt; and &lt;a href=&quot;https://medium.com/making-instapaper/instapaper-outage-cause-recovery-3c32a7e9cc5f&quot;&gt;Instapaper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I already felt pretty good about the backup system I had in place. I had tested backup recovery manually and felt the tools were solid.&lt;/p&gt;

&lt;p&gt;However, if for some reason the database backup was failing or my restore procedure had a mistake, I would not know until I actually had to recover the database.&lt;/p&gt;

&lt;p&gt;Feedbin uses &lt;a href=&quot;https://github.com/wal-e/wal-e&quot;&gt;WAL-E&lt;/a&gt; from Heroku to continually back up the database. WAL-E, and the &lt;a href=&quot;https://www.postgresql.org/docs/current/static/continuous-archiving.html&quot;&gt;PostgreSQL architecture that enables it&lt;/a&gt;, gives you offsite backups that can be recovered to any specified point in time.&lt;/p&gt;

&lt;p&gt;WAL-E is set to back up the full database every day via Cron.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;
wal-e backup-push /var/lib/postgresql/9.2/main
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This command pushes the database to S3. This functions as a base backup that when combined with the WAL archives, that are continuously uploaded, can be restored to any point after the base backup started.&lt;/p&gt;

&lt;p&gt;WAL-E offers a counterpart command, &lt;code class=&quot;highlighter-rouge&quot;&gt;backup-fetch&lt;/code&gt;, to actually restore the data from a &lt;code class=&quot;highlighter-rouge&quot;&gt;backup-push&lt;/code&gt;. To test the backups I needed to build in an automated way to restore the database.&lt;/p&gt;

&lt;p&gt;Feedbin already uses &lt;a href=&quot;https://digitalocean.com&quot;&gt;Digital Ocean&lt;/a&gt; for a few things, so my first thought was to use Digital Ocean for this. I wrote a script to provision a Digital Ocean server, restore the backup to it and then delete the server after the backup completed.&lt;/p&gt;

&lt;p&gt;This turned out to be too expensive. Sending data to S3 is free, but reading it back out will cost you. For Feedbin’s database this worked out to be about $40 &lt;em&gt;every time&lt;/em&gt; I restored the database. I wanted to test backups daily but the data transfer cost would quickly add up to about $1,200/month.&lt;/p&gt;

&lt;p&gt;While I was looking at S3 pricing, I found out that reading from S3 is free when it is read by an EC2 instance &lt;em&gt;in the same region&lt;/em&gt; as your S3 bucket. It was also possible to save money on the EC2 instance itself by using &lt;a href=&quot;https://aws.amazon.com/ec2/spot/&quot;&gt;Spot Instances&lt;/a&gt; instead of on-demand. With Spot Instances you bid on your instance and AWS tells you if you can have it for that price or not.&lt;/p&gt;

&lt;p&gt;Critically, no matter what your bid is, you &lt;strong&gt;never pay more than the spot price&lt;/strong&gt; which is “The current market price of a Spot instance per hour.” With this in mind you don’t have to guess what to bid and since your bid matches the on-demand price, your instance will never be terminated early due to the price exceeding your bid.&lt;/p&gt;

&lt;p&gt;The instance I want costs $0.78/hr so I bid $0.78/hr, but only end up paying the spot price of ~$0.18/hr.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-05-05/ec2-34c8a33e1c3d8e56dded2091a7902fd57b8ba5b776830e1b139a78e267496b05.png&quot;&gt;&lt;img src=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-05-05/ec2-34c8a33e1c3d8e56dded2091a7902fd57b8ba5b776830e1b139a78e267496b05.png&quot; height=&quot;221&quot; width=&quot;620&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;Price of database restore with On-Demand vs. Spot Instances&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I was new to the AWS CLI, but once I figured out the right data to send, it turned out to be a fairly simple script.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;AWS_SHARED_CREDENTIALS_FILE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/etc/aws.d/credentials.ini

&lt;span class=&quot;nv&quot;&gt;user_data&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;base64 --wrap 0 /etc/aws.d/pg_restore&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;launch_specification&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;cat &lt;span class=&quot;sh&quot;&gt;&amp;lt;&amp;lt;_EOF_
{
    &quot;UserData&quot;: &quot;${user_data}&quot;,
    &quot;ImageId&quot;: &quot;ami-6edd3078&quot;,
    &quot;SecurityGroupIds&quot;: [&quot;sg-XYXYXY&quot;],
    &quot;InstanceType&quot;: &quot;c4.4xlarge&quot;,
    &quot;SubnetId&quot;: &quot;subnet-XYXYXY&quot;,
    &quot;EbsOptimized&quot;: true,
    &quot;BlockDeviceMappings&quot;: [
        {
            &quot;DeviceName&quot;: &quot;/dev/sda1&quot;,
            &quot;Ebs&quot;: {
                &quot;DeleteOnTermination&quot;: true,
                &quot;SnapshotId&quot;: &quot;snap-0a7be01f9503d7bee&quot;,
                &quot;VolumeSize&quot;: 800,
                &quot;VolumeType&quot;: &quot;gp2&quot;
            }
        }
    ],
    &quot;IamInstanceProfile&quot;: {
        &quot;Name&quot;: &quot;database-restore&quot;
    }
}
_EOF_
&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;

/usr/local/bin/aws --region us-east-1 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
ec2 request-spot-instances &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
--spot-price &lt;span class=&quot;s2&quot;&gt;&quot;0.78&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
--instance-count 1 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
--type &lt;span class=&quot;s2&quot;&gt;&quot;one-time&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
--launch-specification &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;launch_specification&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This puts in a request to launch a &lt;code class=&quot;highlighter-rouge&quot;&gt;c4.4xlarge&lt;/code&gt; instance with 800GB of storage. It also specifies &lt;code class=&quot;highlighter-rouge&quot;&gt;UserData&lt;/code&gt; which is executed by the instance after it boots up, which is a perfect fit for the script that configures the machine to run postgres and restore the database backup.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# pg_restore&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# Add postgresql.org offical releases as an apt source&lt;/span&gt;
sh -c &lt;span class=&quot;s1&quot;&gt;'echo &quot;deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main&quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list'&lt;/span&gt;
apt-get install -y wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

&lt;span class=&quot;c&quot;&gt;# Install dependencies&lt;/span&gt;
apt-get -y update
apt-get install -y postgresql-9.2 postgresql-contrib-9.2 postgresql-server-dev-9.2 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
build-essential python3-dev python3-pip libevent-dev daemontools lzop pv ssl-cert

&lt;span class=&quot;c&quot;&gt;# Make the postgres user a sudoer so it can shut down the machine later&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;postgres ALL=(ALL) NOPASSWD:ALL&quot;&lt;/span&gt; &amp;gt; /etc/sudoers.d/postgres
chmod 440 /etc/sudoers.d/postgres

&lt;span class=&quot;c&quot;&gt;# Install and configure WAL-E&lt;/span&gt;
python3 -m pip install wal-e[aws]
mkdir -p /etc/wal-e.d/env
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;secret-key&quot;&lt;/span&gt;   &amp;gt; /etc/wal-e.d/env/AWS_SECRET_ACCESS_KEY
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;access-key&quot;&lt;/span&gt;   &amp;gt; /etc/wal-e.d/env/AWS_ACCESS_KEY_ID
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'s3://bucket/'&lt;/span&gt; &amp;gt; /etc/wal-e.d/env/WALE_S3_PREFIX
chown -R root:postgres /etc/wal-e.d

&lt;span class=&quot;c&quot;&gt;# Download the latest backup&lt;/span&gt;
service postgresql stop
rm -Rf /var/lib/postgresql/9.2/main
envdir /etc/wal-e.d/env /usr/local/bin/wal-e backup-fetch --pool-size&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;16 /var/lib/postgresql/9.2/main LATEST

&lt;span class=&quot;c&quot;&gt;# set the postgres recovery settings&lt;/span&gt;
sudo -u postgres bash -c &lt;span class=&quot;s2&quot;&gt;&quot;cat &amp;gt; /var/lib/postgresql/9.2/main/recovery.conf &amp;lt;&amp;lt;- _EOF_
restore_command = 'envdir /etc/wal-e.d/env /usr/local/bin/wal-e wal-fetch --prefetch=16 &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%f&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%p&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;'
recovery_end_command = 'mail -s &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Database Restore Complete&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; email@example.com &amp;amp;&amp;amp; sudo shutdown -h now'
_EOF_
&quot;&lt;/span&gt;

service postgresql start
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This is all that is needed to stand-up a fully functioning PostgreSQL server and restore the database. No Chef, Ansible or any other provisioning tools required.&lt;/p&gt;

&lt;p&gt;The important part here is that postgres lets you specify a command to run once recovery is complete, the &lt;code class=&quot;highlighter-rouge&quot;&gt;recovery_end_command&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;recovery_end_command &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'mail -s &quot;Database Restore Complete&quot; email@example.com &amp;amp;&amp;amp; sudo shutdown -h now'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Here I have it send me an email and shut down the server, which terminates the EC2 instance so it’s no longer incurring cost.&lt;/p&gt;

&lt;p&gt;If the email goes missing, then I know the restore never completed and I can go figure out what went wrong. AWS helps you out here too. The results of the UserData script are automatically logged to &lt;code class=&quot;highlighter-rouge&quot;&gt;/var/log/cloud-init-output.log&lt;/code&gt; So you can seen exactly where the restore went wrong.&lt;/p&gt;

&lt;p&gt;I would be interested in &lt;a href=&quot;https://twitter.com/feedbin&quot;&gt;hearing&lt;/a&gt; any questions or comments about this.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Subscribe Improvements</title>
        <author>
            <name>Ben Ubois</name>
        </author>
        <link href="https://feedbin.com/blog/2017/03/22/subscribe-improvements/" />
        
            <published>2017-03-22T14:24:00+00:00</published>
        
        
            <updated>2017-03-22T14:24:00+00:00</updated>
        
        <id>/2017/03/22/subscribe-improvements</id>
        <summary>There’s a great new interface for subscribing to feeds. The process of adding a new feed has been streamlined by giving you the ability to rename and tag feeds while subscribing. Before, subscribing, renaming and tagging were separate operations. You had to click around a lot to get your new...</summary>
        <content type="html">&lt;p&gt;&lt;a href=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-03-22/subscribe-f76a17872dc5b71ef8f61d5112de7773185bd2d9ba538bd0fe580d43e85ec7b0.gif&quot;&gt;&lt;img src=&quot;https://dhy5vgj5baket.cloudfront.net/assets-site/blog/2017-03-22/subscribe-f76a17872dc5b71ef8f61d5112de7773185bd2d9ba538bd0fe580d43e85ec7b0.gif&quot; height=&quot;316&quot; width=&quot;561&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There’s a great new interface for subscribing to feeds. The process of adding a new feed has been streamlined by giving you the ability to rename and tag feeds &lt;em&gt;while&lt;/em&gt; subscribing.&lt;/p&gt;

&lt;p&gt;Before, subscribing, renaming and tagging were separate operations. You had to click around a lot to get your new feed in the right place with the right name.&lt;/p&gt;

&lt;p&gt;Also, you can now see a favicon and the feed URL for what you are about to subscribe to. And the whole thing is easy to navigate using just the keyboard.&lt;/p&gt;
</content>
    </entry>
    
</feed>