<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>The easiest way to add user accounts to your site.</description><title>DailyCred</title><generator>Tumblr (3.0; @dailycred)</generator><link>http://dailycred.tumblr.com/</link><item><title>DynamoDB's shortcomings (and our work arounds)</title><description>&lt;p&gt;At Dailycred we use DynamoDB as a data store, and there&amp;#8217;s a lot to like about it:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;scalability and simplicity of NoSQL&lt;/li&gt; 
&lt;li&gt;consistent performance&lt;/li&gt;
&lt;li&gt;low learning curve&lt;/li&gt;
&lt;li&gt;it comes with a decent object mapper for Java&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;It’s a great service considering how new it is, but it definitely still has some rough edges that make some things harder than we expected.&lt;/p&gt;

&lt;img src="http://media.tumblr.com/tumblr_me7sysGcEe1rrhf18.png"/&gt;&lt;h3&gt;DynamoDB&amp;#8217;s not ideal for storing events&lt;/h3&gt;

&lt;p&gt;Like most websites, we store a variety of user events.  A typical event has an event ID, a user ID, an event type and other attributes that describe actions performed by users. At Dailycred, &lt;b&gt;we needed an event storage that is optimized for reads&lt;/b&gt;. For our dashboard we need to quickly filter events by type, sort events by time and group events by user. However, we don’t need to record events as soon as they happen. A second of delay is fine.&lt;/p&gt;

&lt;p&gt;Using a relational database, we can store events in a denormalized table. Add indices to columns that answer query predicates. In this setup, writes are not very fast, but reads are extremely fast. We can use the richness of SQL to query events easily.&lt;/p&gt;

&lt;p&gt;A big limitation of DynamoDB and other non-relational database is the lack of multiple indices. In an events table, we could use the event ID as the hash key, the event time as the range key. This schema would enable us to retrieve most recent events, but we &lt;b&gt;can’t filter event by type without doing a full table scan&lt;/b&gt;. Scans are expensive in DynamoDB. You could store events in many tables, partitioned by event type or by user ID. Perhaps for each predicate, create an index table with the predicate’s value as the key and the event ID as an attribute. Is the added complexity worth it? Probably not. DynamoDB is great for lookups by key, not so good for queries, and abysmal for queries with multiple predicates.&lt;/p&gt;

&lt;p&gt;SQL was a better tool in this case, so we decided not to use DynamoDB at all for storing events.&lt;/p&gt;

&lt;h3&gt;DynamoDB overhead (compared to SQL)&lt;/h3&gt;
&lt;p&gt;DynamoDB supports transactions, but not in the traditional SQL sense. Each write operation is atomic to an item. A write operation either successfully updates all of the item’s attributes or none of its attributes. &lt;b&gt;There are no multi-operation transactions&lt;/b&gt;. For example, you have two tables, one to store orders and one to store the user-to-order mapping. When a new order comes in, you write to the order table first, then the mapping table. If the second write fails due to network outage, &lt;b&gt;you are left with an orphaned item&lt;/b&gt;. Your application has to recognize orphaned data. Periodically, you will want to run a script to garbage collect those data, which in turn involve a full table scan. The complexity doesn’t end here. Your script might need to increase the read limit temporarily. It has to wait long enough between rounds of scan to stay under the limit.&lt;/p&gt;

&lt;h3&gt;One strike, and you are out&lt;/h3&gt;

&lt;p&gt;While DynamoDB’s provisioned throughput lets you fine tune the performance of individual tables, it doesn&amp;#8217;t degrade gracefully. &lt;b&gt;Once you hit the read or write limit, your requests are denied&lt;/b&gt; until enough time has elapsed. In a perfect world, your auto-scaling script will adjust throughput based on anticipated traffic, increasing and decreasing limits as necessary, but unexpected traffic spikes is a fact of life. Say you bump up the limits as soon as DynamoDB throws a ProvisionedThroughputExceededException, the process could take a minute to complete. Until then, you are at the mercy of retries, a feature that is thankfully enabled by default by the official SDK.&lt;/p&gt;

&lt;p&gt;At Dailycred, it’s hard to accurately anticipate resource usage, due to the fact that we do not know when our clients are hit with a wave of visitors. What if the wave happens to multiple clients at once?&lt;/p&gt;

&lt;h3&gt;Backups: slow or expensive (pick one)&lt;/h3&gt;

&lt;p&gt;Another annoyance with provisioned throughput is that you &lt;b&gt;can only decrease your provisioned limit once a day&lt;/b&gt;. Say your daily backup script temporarily increases the read limits for the duration of the job. After the limits were reduced, your site gets a burst of traffic. After increasing the limits for the second time, you are stuck with the new limits for up to a day. In that regard, DynamoDB isn’t as elastic as other AWS services, where resources can be deallocated with no daily limits.&lt;/p&gt;

&lt;h3&gt;Unit tests: slow or expensive (pick one)&lt;/h3&gt;

&lt;p&gt;We also run a lot of tests that use DynamoDB, which means a lot of items are written and read very quickly. We run the tests several times a day, which means our development database tables are sitting completely idle most of the time, only to be hammered with reads and writes when we run our unit tests.  From a cost perspective, this isn&amp;#8217;t ideal.  However, it&amp;#8217;s even worse if a developer has to wait extra time for his unit tests to complete.&lt;/p&gt;

&lt;h3&gt;Our solution: Dynamonito, a lightweight caching utility for DynamoDB&lt;/h3&gt;

&lt;img src="http://media.tumblr.com/tumblr_me7rlbEic01rrhf18.png"/&gt;&lt;p&gt;To work around some of these limitations, we built Dynamonito.  Dynamonito is an open source tool we built to cache DynamoDB data, and save us an unnecessarily large bill.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Dynamonito is a drop in replacement for the high level mapper&lt;/b&gt;. It intercepts the DynamoDB save operations, serializes the object into DynamoDB’s native wire protocol format in json, and puts the json in cache. The cache is a &lt;a href="http://en.wikipedia.org/wiki/Cache_(computing)#Writing_policies"&gt;write-through cache&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There are two pluggable cache implementations: in-memory and Redis. The in-memory cache is backed by Guava’s cache which is in-process and is extremely fast. The cache cannot be shared among multiple application hosts, so its use is limited to tests. The Redis cache resides on a Redis server and is out-of-process and so it can be accessed by many hosts. Optionally, you can set a time-to-live duration for cached objects.&lt;/p&gt;

&lt;p&gt;Currently, Dynamonito can only cache objects that are mapped through the Java SDK, not through low level GetItem requests. It does not cache objects returned by the scan operation or the query operation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dailycred/dynamonito"&gt;Check out the Dynamonito project&lt;/a&gt; on Github.&lt;/p&gt;

&lt;p&gt;Dynamonito was written by &lt;a href="https://github.com/shaunma"&gt;Shaun Ma&lt;/a&gt;.&lt;/p&gt;</description><link>http://dailycred.tumblr.com/post/36976470649</link><guid>http://dailycred.tumblr.com/post/36976470649</guid><pubDate>Sat, 01 Dec 2012 16:06:05 -0500</pubDate></item><item><title>How we're fixing pricing</title><description>&lt;i&gt;[background: DailyCred is the best way to handle user accounts on your website]&lt;/i&gt;

&lt;p&gt;When we announced our &lt;a href="http://news.ycombinator.com/item?id=4669866"&gt;big update&lt;/a&gt; on HackerNews recently, we also changed our pricing.  We did a couple things wrong that scared away people who wanted to sign-up.&lt;/p&gt;

&lt;h3&gt;How we screwed up:&lt;/h3&gt;
&lt;img src="http://media.tumblr.com/tumblr_md6q4i3DdD1rrhf18.png" class="centered"/&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;no free tier&lt;/b&gt; to try the service&lt;/li&gt;
&lt;li&gt;a &lt;b&gt;credit card screen&lt;/b&gt; that scared people away&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This seems obvious (but we got it wrong): &lt;b&gt;Developers need to try your service before they will buy it&lt;/b&gt;.  It&amp;#8217;s crucial that they can easily sign up and try it without risk, so they can learn about it and see if it&amp;#8217;s right for their project.&lt;/p&gt;  
&lt;br/&gt;&lt;h3&gt;How we&amp;#8217;re fixing it:&lt;/h3&gt;
&lt;img src="http://media.tumblr.com/tumblr_md6q3wiWnm1rrhf18.png" class="centered"/&gt;&lt;ul&gt;&lt;li&gt;now with &lt;b&gt;free tier&lt;/b&gt; up to 50 users&lt;/li&gt;
&lt;li&gt;&lt;b&gt;no credit card required&lt;/b&gt; to try it out&lt;/li&gt;
&lt;/ul&gt;&lt;br/&gt;&lt;h3&gt;Thank you:&lt;/h3&gt;
&lt;p&gt;As a thanks for giving DailyCred a look and signing up today, here&amp;#8217;s a 50% off coupon.  If you like the service (and we&amp;#8217;re sure you will!) you&amp;#8217;ll get a discounted rate when your site grows into one of the paid plans.  There&amp;#8217;s no risk - &lt;a href="https://www.dailycred.com/oauth/authorize?redirect_uri=https%3A%2F%2Fwww.dailycred.com%2Fsignup%2Fcallback%2Fdc&amp;amp;simple=false&amp;amp;client_id=dailycred"&gt;sign up today to lock in the discounted price!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://www.dailycred.com/oauth/authorize?redirect_uri=https%3A%2F%2Fwww.dailycred.com%2Fsignup%2Fcallback%2Fdc&amp;amp;simple=false&amp;amp;client_id=dailycred"&gt;
&lt;img src="http://media.tumblr.com/tumblr_md3igcuRQO1rrhf18.png" class="centered"/&gt;&lt;/a&gt;
&lt;/p&gt;
* coupon code expires Nov 14.</description><link>http://dailycred.tumblr.com/post/35311219235</link><guid>http://dailycred.tumblr.com/post/35311219235</guid><pubDate>Thu, 08 Nov 2012 21:06:00 -0500</pubDate></item><item><title>2 new ways for users to join your site</title><description>&lt;p&gt;
DailyCred now supports  and &lt;b&gt;Instagram&lt;/b&gt; and &lt;b&gt;Disqus&lt;/b&gt;, so users have more options in how they join your site.
&lt;/p&gt;
&lt;p&gt;
Adding these options is easy: simply enter the app id &amp;amp; secret to your &lt;a href="https://www.dailycred.com/admin/settings/identity-providers"&gt;settings page&lt;/a&gt; and choose which providers you want to offer.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://www.dailycred.com/admin/settings/identity-providers"&gt;
&lt;img src="http://media.tumblr.com/tumblr_mch4if8QII1rrhf18.png" class="centered"/&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;br/&gt;&lt;p&gt;
More options coming soon! If you&amp;#8217;d like to vote for your favorites, drop us a line: &lt;a href="mailto:support@dailycred.com"&gt;support@dailycred.com&lt;/a&gt;
&lt;/p&gt;</description><link>http://dailycred.tumblr.com/post/34327175308</link><guid>http://dailycred.tumblr.com/post/34327175308</guid><pubDate>Thu, 25 Oct 2012 19:59:00 -0400</pubDate><category>disqus</category><category>instagram</category><category>signup</category><category>login</category><category>auth</category><category>oauth</category><category>authentication</category><category>registration</category><category>api</category></item><item><title>Dailycred now supports Facebook, Twitter, Google, and Email user accounts</title><description>&lt;p&gt;
Now you can let users join your site with their &lt;b&gt;Facebook&lt;/b&gt;, &lt;b&gt;Twitter&lt;/b&gt;, or &lt;b&gt;Google&lt;/b&gt; accounts. No additional coding required!
&lt;/p&gt;
&lt;p&gt;
Simply visit your &lt;a href="https://www.dailycred.com/admin/settings/identity-providers"&gt;DailyCred dashboard&lt;/a&gt; and choose the providers you want to add. If you need help getting set up, please contact us at support@dailycred.com.
&lt;/p&gt;
&lt;p&gt;
More options means happier users and more signups!
&lt;/p&gt;
&lt;a href="https://www.dailycred.com/admin/settings/identity-providers"&gt;
&lt;img src="http://media.tumblr.com/tumblr_mc45jmeTkQ1rrhf18.png" class="centered"/&gt;&lt;/a&gt;

&lt;div class="center"&gt;
&lt;a href="http://news.ycombinator.com/item?id=4669866"&gt;
  &lt;img style="padding:5px;width:20px;height:20px" src="https://farm8.staticflickr.com/7175/6643579091_5c2c9d6918.jpg"/&gt;Discuss on HackerNews
&lt;/a&gt;
&lt;/div&gt;</description><link>http://dailycred.tumblr.com/post/33865842609</link><guid>http://dailycred.tumblr.com/post/33865842609</guid><pubDate>Thu, 18 Oct 2012 20:07:00 -0400</pubDate><category>OAuth</category><category>coding</category><category>websites</category><category>social</category><category>signin</category></item><item><title>Surprise!  People hate being forced to use Facebook</title><description>&lt;style&gt;
.centered { 
 display: block;
 margin-left: auto;
 margin-right: auto;
}
&lt;/style&gt;&lt;script type="text/javascript"&gt;
&lt;!--
window.location = "https://www.dailycred.com/blog/6/surprise-people-hate-being-forced-to-use-facebook"
//--&gt;
&lt;/script&gt;&lt;p&gt;When you sign up for a new website, do you use the convenient &amp;#8220;Connect with Facebook&amp;#8221; option?  Or do you just make an email &amp;amp; password account?&lt;/p&gt;
&lt;p&gt;In this post we take a look at signups for our previous startup and conduct a &amp;#8220;man on the street&amp;#8221; survey to see how people feel about Facebook Connect.&lt;/p&gt;
&lt;h3&gt;Survey says&amp;#8230; &amp;#8220;hell no&amp;#8221;&lt;/h3&gt;
&lt;p&gt;We wanted to know how real people feel about this, so we hit the streets to ask random tourists in Seattle&amp;#8217;s Pike Place market for their reaction.&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t worry, we used pictures to make sure they knew what we were talking about.&lt;/p&gt;
&lt;p&gt;Here are the results:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m8vph2EDUN1rrhf18.png" class="centered"/&gt;&lt;/p&gt;
&lt;p&gt;The most surprising thing about the survey was 1) people actually understood what we were asking them, 2) the pure vitriolic hatred of being forced to use the Sign Up with Facebook option.  Some people said &amp;#8220;of course - I love Facebook&amp;#8221;, but many more said, &amp;#8220;No - never. Never never never.&amp;#8221;&lt;/p&gt;
&lt;h3&gt;Actual user signup behavior&lt;/h3&gt;
&lt;p&gt;We shouldn&amp;#8217;t trust small un-scientific surveys too much, and there&amp;#8217;s a difference between what people say and what they do. So we looked back over a year&amp;#8217;s worth of signups for one of our sites, Shopobot, to get some more meaningful numbers. This is a better test, because the signup screen offers both options with equal weight and we have over 70,000 organic signups.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m8vks5nhJ51rrhf18.png" class="centered"/&gt;&lt;/p&gt;
&lt;h3&gt;Younger &amp;amp; Tech Savvy use Facebook More&lt;/h3&gt;
&lt;p&gt;Back in early 2011, the beta testers were somewhat open to signing up using their Facebook account, with 42% choosing to connect.  Apparently the &lt;b&gt;tech-savvy HackerNews / TechCrunch crowd is either not super concerned about their privacy, or we did a great job of convincing them we were trustworthy&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m8vpus6R0J1rrhf18.png" class="centered"/&gt;&lt;/p&gt;
&lt;h3&gt;Mainstream Audiences use Facebook Less&lt;/h3&gt;
&lt;p&gt;But once the site was released publicly in June and more mainstream users started coming in from NYTimes, CNN, and other big media sites, you can see the preference to &lt;b&gt;not&lt;/b&gt; connect with Facebook.  Only 23% took this choice, and the other 77% created an email &amp;amp; password account instead.&lt;/p&gt;
&lt;p&gt;It turns out real people actually are concerned about their privacy and wall spam, and would rather not connect to Facebook on their first experience with your site.&lt;/p&gt;
&lt;h3&gt;tl;dr&lt;/h3&gt;
&lt;p&gt;If you&amp;#8217;re building a consumer facing site, you should really offer an email &amp;amp; password signup option.  The vast majority of users prefer this.&lt;/p&gt;
&lt;br/&gt;&lt;div class="center"&gt;
&lt;a href="http://news.ycombinator.com/item?id=4461417"&gt;
  &lt;img style="padding:5px;width:20px;height:20px" src="https://farm8.staticflickr.com/7175/6643579091_5c2c9d6918.jpg"/&gt;Discuss on HackerNews
&lt;/a&gt;
&lt;/div&gt;</description><link>http://dailycred.tumblr.com/post/30602034530</link><guid>http://dailycred.tumblr.com/post/30602034530</guid><pubDate>Fri, 31 Aug 2012 15:55:00 -0400</pubDate></item><item><title>Tutorial: Creating a Rails To-Do app with Dailycred</title><description>&lt;p&gt;Today I’ll be showing you guys how to add DailyCred to a fully functional Ruby on Rails application to get comprehensive authentication functionality. This tutorial assumes you have a basic understanding of Ruby on Rails (RoR) and can follow along basic tutorials. Before you get started you need to &lt;a href="https://www.dailycred.com/oauth/authorize?client_id=dailycred"&gt;sign up for dailycred&lt;/a&gt; so you can get API keys, which you can obtain on your &lt;a href="https://www.dailycred.com/admin/settings/keys"&gt;settings&lt;/a&gt; page.&lt;/p&gt;

&lt;p&gt;The first step is to clone the wonderful demo To-Do app that &lt;a href="http://engineyard.com"&gt;Engine Yard&lt;/a&gt; has provided on github as an example RoR app. This app already includes everything you need to create tasks and save them to a list. We will be adding the functionality to authenticate  into the app and save tasks to specific user accounts. To start, open your terminal and execute:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone &lt;a href="https://github.com/engineyard/todo.git"&gt;https://github.com/engineyard/todo.git&lt;/a&gt; todo
cd todo
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Next, add the &lt;code&gt;dailycred&lt;/code&gt; gem to your gemfile.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem 'dailycred'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I also removed the line &lt;code&gt;"gem 'mysql2', '~&amp;gt; 0.2.7'"&lt;/code&gt; as I don’t wish to use or install the mysql2 gem (and you don’t either to follow along with this tutorial). When you’re all set, bundle your gems by running:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;bundle
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now have your dailycred &lt;code&gt;client_id&lt;/code&gt; and &lt;code&gt;secret_key&lt;/code&gt; ready and run:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rails g dailycred your_client_id your_secret_key
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This will generate everything you need to get going with authentication, including a user model, session controller, omniauth initializer, javascript tracking code, and many helper variables.&lt;/p&gt;

&lt;h3&gt;Congratulations!!&lt;/h3&gt;

&lt;p&gt;You’ve officially set up authentication on your rails site. Start your server with &lt;code&gt;rails s&lt;/code&gt; and point your browser to &lt;a href="http://localhost:3000/auth"&gt;locahost:3000/auth&lt;/a&gt;. Click the ‘Sign Up’ button and go ahead an create an account.&lt;/p&gt;

&lt;p&gt;But you may feel like something is missing. While you can sign in and out of your app, the experience isn’t personal at all! We need a way to allow users to have their own lists and tasks.&lt;/p&gt;

&lt;p&gt;Next let’s add a property to tasks and lists to associate them with a specific user. We will use the classic “belongs_to” relationship, where a user has many tasks and lists. We will you the “has_many :through” relationship to describe how users have many tasks through lists. First run some migrations to add a user_id property to tasks and lists:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rails g migration AddUserIdToLists user_id:string
rake db:migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;open the file &lt;code&gt;app/models/list.rb&lt;/code&gt; and add the line:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;belongs_to :user
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;open &lt;code&gt;app/models/user.rb&lt;/code&gt; and add&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;has_many :tasks , :through =&amp;gt; :lists
has_many :lists , :dependent =&amp;gt; :destroy
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That takes care of our relationships. Open up &lt;code&gt;app/controllers/lists_controller.rb&lt;/code&gt; and edit line &lt;code&gt;4&lt;/code&gt; to&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@list = current_user.lists.new(params[:list])    
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This changes the creation of the list to belong to the current signed in user. Open &lt;code&gt;app/controllers/tasks_controller.rb&lt;/code&gt; and add the following &lt;code&gt;before_filter&lt;/code&gt; methods.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;before_filter :authenticate
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This makes it so that a user who isn’t yet authenticated is automatically redirected to the login screen. It also creates creates a &lt;code&gt;@user&lt;/code&gt; instance variable that is available in all controller methods for convenience. Finally change the &lt;code&gt;index&lt;/code&gt; method in &lt;code&gt;tasks_controller.rb&lt;/code&gt; to the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def index
  @todo   = current_user.tasks.where(:done =&amp;gt; false)
  @task   = current_user.tasks.new
  @lists  = current_user.lists
  @list   = current_user.lists.new

  respond_to do |format|
    format.html
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;h1&gt;Congratulations!!!&lt;/h1&gt;

&lt;p&gt;You are all set up. You have a fully functional to-do application where users can sign in to your app and create lists and tasks. You should be proud of yourself.&lt;/p&gt;

&lt;h4&gt;Finishing up&lt;/h4&gt;

&lt;h6&gt;Custom Events&lt;/h6&gt;

&lt;p&gt;Wouldn’t it be fun to be able to keep track of when your users created new tasks and lists? Dailycred has a custom events feature that lets you do just that.&lt;/p&gt;

&lt;p&gt;Go back to your &lt;code&gt;app/controllers/tasks_controller.rb&lt;/code&gt; and edit the &lt;code&gt;create&lt;/code&gt; method to look like the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def create
  @list = List.find(params[:list_id])
  @task = @list.tasks.new(params[:task])
  if @task.save
      dailycred.event(current_user.uid, "New Task", @task.name)
      flash[:notice] = "Your task was created."
  else
      flash[:alert] = "There was an error creating your task."
  end
  redirect_to(list_tasks_url(@list))
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And do something similiar in &lt;code&gt;app/controllers/lists_controller.rb&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def create
  @list = current_user.lists.new(params[:list])
  if @list.save
      dailycred.event(current_user.uid, "New List", @list.name)
      flash[:notice] = "Your list was created"
  else
      flash[:alert] = "There was an error creating your list."
  end
  redirect_to(list_tasks_url(@list))
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now when new tasks and lists are created by your users, you can see the events being created in your &lt;a href="https://www.dailycred.com/admin/dashboard"&gt;dashboard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Finishing up&lt;/h3&gt;

&lt;p&gt;You’re all set up! I hope this was helpful in getting more acquainted with Dailycred and how to work with our service. Thanks for checking us out and always email us at &lt;a href="mailto:support@dailycred.com"&gt;support@dailycred.com&lt;/a&gt; For any questions!&lt;/p&gt;</description><link>http://dailycred.tumblr.com/post/30072505656</link><guid>http://dailycred.tumblr.com/post/30072505656</guid><pubDate>Thu, 23 Aug 2012 21:26:00 -0400</pubDate></item><item><title>Get an email when press, investors, or competitors use your app</title><description>&lt;p&gt;During our fund-raising and launch process, we always wanted to know when a journalist or potential investor signed up for our service.  Starting today we&amp;#8217;ll email you the instant a VIP signs up for your app or website.&lt;/p&gt;

&lt;img style="margin:20px;padding: 4px;background-color: #fff;border: 1px solid #ccc;border: 1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);" src="https://s3.amazonaws.com/file.dailycred.com/blog/email-alert.png"/&gt;&lt;p&gt;But we don&amp;#8217;t stop there.  We&amp;#8217;ll also link you to their user profile in DailyCred&amp;#8217;s CRM so you can watch them use your service in real-time.  Don&amp;#8217;t go into another pitch meeting blind; go in knowing what kind of experience they had using your service.&lt;/p&gt;

&lt;img style="width:550px;margin:20px;padding: 4px;background-color: #fff;border: 1px solid #ccc;border: 1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);" src="https://s3.amazonaws.com/file.dailycred.com/blog/crm.png"/&gt;&lt;p&gt;We also include the tag in your app&amp;#8217;s subsequent API requests.  Why?  So you can give press and investors free perks of course.  :-)  For example including extending free trials.  (But you might want to &lt;b&gt;validate emails first&lt;/b&gt;, which we also do.)
&lt;/p&gt;

&lt;img style="margin:20px;padding: 4px;background-color: #fff;border: 1px solid #ccc;border: 1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);" src="https://s3.amazonaws.com/file.dailycred.com/blog/mejson.png"/&gt;&lt;p&gt;Our default tagging config includes:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;investor&lt;/b&gt; (VCs and investment banks)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;press&lt;/b&gt; (newspapers and prominent blogs)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;bureaucrat&lt;/b&gt; (US legislators and bureaucrats)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;incubator&lt;/b&gt; (techstars and the like)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If you&amp;#8217;d like to set up your own tagging system, &lt;a href="https://github.com/juliuss/dc_autotag/blob/master/autotag.xml"&gt;feel free to fork our full list on Github&lt;/a&gt; and we&amp;#8217;ll get you set up.&lt;/p&gt;

&lt;p&gt;Need some ideas for custom tags?  Here are some fun ones:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;competitor&lt;/b&gt;: find out when &lt;a href="http://techcrunch.com/2012/04/04/what-took-so-long-germanys-samwer-brothers-rumored-to-launch-a-square-clone-soon/"&gt;competitors and clone factories&lt;/a&gt; log in to your service to copy all your ideas.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;fakemail&lt;/b&gt; if your service needs a legit email, add services like &lt;a href="http://mailinator.com/"&gt;mailinator&lt;/a&gt; to a tag.  When they attempt to do a sensitive action, like posting links, ask them to update their email.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;
&lt;a href="http://news.ycombinator.com/item?id=4419583"&gt;
  &lt;img style="padding:5px;width:20px;height:20px" src="https://farm8.staticflickr.com/7175/6643579091_5c2c9d6918.jpg"/&gt;Discuss on HackerNews
&lt;/a&gt;
&lt;/p&gt;</description><link>http://dailycred.tumblr.com/post/29951775485</link><guid>http://dailycred.tumblr.com/post/29951775485</guid><pubDate>Wed, 22 Aug 2012 02:01:00 -0400</pubDate></item><item><title>Meet the team</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_m8gh72bxWF1rz98fco1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Meet the team&lt;/p&gt;</description><link>http://dailycred.tumblr.com/post/29004625671</link><guid>http://dailycred.tumblr.com/post/29004625671</guid><pubDate>Wed, 08 Aug 2012 17:33:02 -0400</pubDate></item><item><title>"#1 thing startups waste the most time building: Sign in.
#2: analytics to watch users sign in."</title><description>“#1 thing startups waste the most time building: Sign in.&lt;br/&gt;
#2: analytics to watch users sign in.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;span&gt;Hark founder - David Aronchick&lt;/span&gt;&lt;/em&gt;</description><link>http://dailycred.tumblr.com/post/25602269773</link><guid>http://dailycred.tumblr.com/post/25602269773</guid><pubDate>Thu, 21 Jun 2012 18:13:13 -0400</pubDate><category>startup</category></item><item><title>Hello world!  Introducing DailyCred</title><description>&lt;p&gt;Startups work best when we focus on our unique value, and &lt;strong&gt;don&amp;#8217;t waste time reinventing the wheel&lt;/strong&gt;.  We don&amp;#8217;t need to build our own servers, payment, or monitoring systems anymore - those are all available off the shelf, and are great, cheap, and easy to use. &lt;/p&gt;
&lt;p&gt;The #1 thing that startups still waste their time building: &lt;strong&gt;User Sign in&lt;/strong&gt;.  &lt;br/&gt;(#2 is analytics, so we can watch our users sign in.)&lt;/p&gt;
&lt;p&gt;We&amp;#8217;re launching DailyCred to fix this.  &lt;strong&gt;DailyCred handles user authentication&lt;/strong&gt;, so you get a polished and secure account system for your website or app, instantly, without having to build it yourself.&lt;/p&gt;</description><link>http://dailycred.tumblr.com/post/25602266060</link><guid>http://dailycred.tumblr.com/post/25602266060</guid><pubDate>Thu, 21 Jun 2012 18:13:09 -0400</pubDate><category>Startup launch login authentication oauth</category></item></channel></rss>
