<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Janrain</title>
	<atom:link href="http://janrain.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://janrain.com</link>
	<description></description>
	<lastBuildDate>Tue, 21 May 2013 20:38:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Impact of Social Data on the Marketing Funnel</title>
		<link>http://janrain.com/blog/impact-of-social-data-on-the-marketing-funnel/</link>
		<comments>http://janrain.com/blog/impact-of-social-data-on-the-marketing-funnel/#comments</comments>
		<pubDate>Tue, 21 May 2013 16:00:26 +0000</pubDate>
		<dc:creator>Bill Piwonka</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[segmentation]]></category>
		<category><![CDATA[social profile data]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22701</guid>
		<description><![CDATA[As marketers, we’re all familiar with the notion of the marketing funnel – the idea that there is a roughly linear journey one takes from an unaware-of-your-product prospective customer through to loyal consumer, one willing to be an advocate and re-purchase your offerings. Our goals have always been to improve performance throughout – generating more [...]]]></description>
				<content:encoded><![CDATA[<p><img class=" wp-image-22718 alignleft" alt="social-data-webinar" src="http://janrain.com/wp-content/uploads/2013/05/social-data-webinar.png" width="250" />As marketers, we’re all familiar with the notion of the marketing funnel – the idea that there is a roughly linear journey one takes from an unaware-of-your-product prospective customer through to loyal consumer, one willing to be an advocate and re-purchase your offerings. Our goals have always been to improve performance throughout – generating more awareness, consideration, conversion, loyalty and re-purchase – in order to drive shareholder returns.</p>
<p>But the rise of social media and an ever-connected consumer is fundamentally changing the way we need to think about this customer journey. Consumers, prospects, advocates and detractors are interacting with your products and your brand(s) at scale in ways previously not possible. With all the digital touchpoints available to a consumer, we have to consider the notion of a linear journey obsolete, and move to a different model – one that understands this “journey” will take a different course for each consumer as she moves back and forth and between the various stages. This model needs to exploit the availability of social data and consider the implications or signals this data is sending us to better deliver the right content at the right time to the right consumer.</p>
<p>As an example, let’s look at the awareness stage. What we’re looking for here is an indication that the consumer is aware of the brand and the product, and could be a likely target to ultimately make a purchase. We can get these clues through certain actions – has she received ad impressions, sponsored posts or tweets, clicked on offers, viewed content, shared or had content shared with her etc.? At the same time, we can get valuable insight by understanding <i>who</i> she is through her social profile data – her age, gender, location, likes, interests, friends, colleagues, etc. By combining our analysis of the sentiment – what is being said about our brand in the stream , and first person, declared data – who our prospects are, and how they compare to our existing customers, we can significantly improve our marketing efforts.</p>
<p>If you’re interested in learning more about this dynamic customer journey and the role of social data within it, I encourage you to register for our upcoming webinar: <a title="Altimeter Webinar" href="http://www1.janrain.com/webinar-20130530-altimeter.html" target="_blank"><i>Goodbye Marketing Funnel:  Using Social Data to Build Deeper Customers Relationships</i></a> <i> </i>in which Susan Etlinger, Principle Analyst with Altimeter Group will dive much more deeply into this subject. She’ll share recommendations on how to more effectively use social data and give example of companies doing this well today.</p>
<p><a class="button small thin" title="Altimeter Webinar" href="http://www1.janrain.com/webinar-20130530-altimeter.html" target="_blank">Register Now</a> <em>Thursday, May 30 &#8211; 10AM PT / 1PM ET</em></p>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/impact-of-social-data-on-the-marketing-funnel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Trouble with Passwords and Data Security</title>
		<link>http://janrain.com/blog/the-trouble-with-passwords-and-data-security/</link>
		<comments>http://janrain.com/blog/the-trouble-with-passwords-and-data-security/#comments</comments>
		<pubDate>Mon, 20 May 2013 18:54:14 +0000</pubDate>
		<dc:creator>Gina Rau</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[registration]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22657</guid>
		<description><![CDATA[For years, information security experts have emphasized the importance of practicing good password hygiene—that is, using a unique and unguessable password for every individual site on which registration is required. But online users are human, and password reuse happens a lot more frequently than security professionals would ever like to admit. In fact, a 2011 [...]]]></description>
				<content:encoded><![CDATA[<p dir="ltr">For years, information security experts have emphasized the importance of practicing good password hygiene—that is, using a unique and unguessable password for every individual site on which registration is required. But online users are human, and password reuse happens a lot more frequently than security professionals would ever like to admit. In fact, a <a title="Password analysis and risk of data exposure" href="http://www.troyhunt.com/2011/06/brief-sony-password-analysis.html" target="_blank">2011 analysis by Troy Hunt</a>, using real data from accounts that were compromised at Sony and Gawker in 2010, revealed that 67% of users registered at both Gawker and an affected Sony site used the same password at both sites. People who registered at two separate Sony sites reused the same password 92% of the time. And it’s hard to blame them, as the task of remembering “strong” and unique passwords across the number of sites where your users are registered is nearly impossible.</p>
<p dir="ltr">The net result of this issue is that even if you believe you have impenetrable defenses against hackers, your users and your data are vulnerable if a completely different site is hacked, due to password reuse/fatigue. Furthermore, it’s a rare company that truly has an impenetrable defense against hackers.</p>
<p dir="ltr">In addition to security issues, traditional registration on a site also comes along with increased costs. There is a cost to securing and encrypting registration data to prevent the kind of security breaches that have become all too common, but there are support costs, as well. Anyone running a site that requires users to sign in knows that the number one driver of customer support calls is users who can’t remember their credentials. In fact, Forrester has reported that password reset requests comprise 20-50% of the customer support volume for an online business, at an average cost of $70 per password-related support request. Ironically, the very reason why these users can’t sign in is often because they were practicing good password hygiene and can’t remember their secure passwords.</p>
<p dir="ltr"><img class="alignnone size-large wp-image-22692" alt="Password Security" src="http://janrain.com/wp-content/uploads/2013/05/passwords01-670x390.png" width="670" height="390" /></p>
<p><a class="button thin" style="cursor: pointer;" onclick="janrain.engage.share.setMessage(&quot;60% of online users have more than 5 unique passwords they have to remember. via @janrain&quot;);janrain.engage.share.showProvider(&quot;twitter&quot;);$(&quot;#janrainEngageShare&quot;).click();void(0);">Share</a> <em>60% of online users have more than 5 unique passwords they have to remember.</em></p>
<p dir="ltr">There are hidden costs related to traditional registration, as well. In a study commissioned by Janrain, <a title="Consumer perceptions of online registration research" href="http://janrain.com/resources/industry-research/2013-consumer-research-value-of-social-login/">nine out of ten people admitted to having left a website</a> when they could not remember the username or password they had registered there, costing companies customers and potential revenue.</p>
<p dir="ltr"><img class="alignnone size-large wp-image-22690" alt="Password Security - Dislike Creating Passwords" src="http://janrain.com/wp-content/uploads/2013/05/passwords03-670x390.png" width="670" height="390" /></p>
<p><a class="button thin" style="cursor: pointer;" onclick="janrain.engage.share.setMessage(&quot;50% of online users dislike the idea of creating new usernames and passwords. via @janrain&quot;);janrain.engage.share.showProvider(&quot;twitter&quot;);$(&quot;#janrainEngageShare&quot;).click();void(0);">Share</a> <em>50% of online users dislike the idea of creating new usernames and passwords.</em></p>
<p dir="ltr">Thankfully, there is a simple solution to these problems, and that is social login—enabling your users to register and sign in using the well-established identities they have already created at sites like Facebook, Twitter, Google, and Yahoo!. Not only can you eliminate the need for site visitors to create yet another account with a username and password that they are likely to forget, you can rest assured that they will still be able to get access to an email address for future marketing efforts.</p>
<p dir="ltr"><img class="alignnone size-large wp-image-22693" alt="Networds that provide and email address" src="http://janrain.com/wp-content/uploads/2013/05/email-address-networks-670x638.png" width="670" height="638" /></p>
<p><a class="button thin" style="cursor: pointer;" onclick="janrain.engage.share.setMessage(&quot;List of networks that provide a verified email address via social login. via @janrain&quot;);janrain.engage.share.showProvider(&quot;twitter&quot;);$(&quot;#janrainEngageShare&quot;).click();void(0);">Share</a> <em>List of networks that provide a verified email address via social login.</em></p>
<p dir="ltr">The concept of password hassle, or <a title="Password fatigue" href="http://janrain.com/blog/infographic-how-to-solve-the-online-registration-challenge/">Password Fatigue Syndrome</a>, really resonates with people when you stop to think about how many passwords you have and use on a daily basis. Can you relate to some of the <a title="People have too many passwords" href="http://janrain.com/blog/consumers-fatigued-by-password-overload-janrain-study-finds/">responses in this Harris Interactive study</a>?</p>
<p dir="ltr"><img class="alignnone size-large wp-image-22691" alt="40 percent would rather clean toilets then create a password" src="http://janrain.com/wp-content/uploads/2013/05/passwords04-670x390.png" width="670" height="390" /></p>
<p><a class="button thin" style="cursor: pointer;" onclick="janrain.engage.share.setMessage(&quot;40% of online visitors would rather scrub a toilet than create a new password. via @janrain&quot;);janrain.engage.share.showProvider(&quot;twitter&quot;);$(&quot;#janrainEngageShare&quot;).click();void(0);">Share</a> <em>40% of online visitors would rather scrub a toilet than create a new password.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/the-trouble-with-passwords-and-data-security/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Food Carts and the UNIX Philosophy</title>
		<link>http://janrain.com/blog/food-carts-and-the-unix-philosophy/</link>
		<comments>http://janrain.com/blog/food-carts-and-the-unix-philosophy/#comments</comments>
		<pubDate>Fri, 10 May 2013 16:24:11 +0000</pubDate>
		<dc:creator>Luc Perkins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22610</guid>
		<description><![CDATA[For as long as I can remember growing up here, Portland has been known for a small handful of things: beer, coffee, mopey indie rock, bikes, soul-crushing weather. Added to that list in the past few years have been Portlandia, the Timbers Army, Voodoo Doughnut, and, most importantly (IMHO), food carts. Food carts have become [...]]]></description>
				<content:encoded><![CDATA[<p>For as long as I can remember growing up here, Portland has been known for a small handful of things: <a href="http://www.portlandbeer.org/breweries/">beer</a>, <a href="http://pdx.eater.com/archives/2012/09/05/portlands-20-best-coffeehouses-and-roasters.php">coffee</a>, <a href="http://www.sweetadeline.net/">mopey indie rock</a>, bikes, soul-crushing weather. Added to that list in the past few years have been <em>Portlandia</em>, the <a href="http://timbersarmy.org/">Timbers Army</a>, <a href="http://voodoodoughnut.com/">Voodoo Doughnut</a>, and, most importantly (IMHO), <a href="http://www.foodcartsportland.com/">food carts</a>.</p>
<p>Food carts have become a key component of our culinary culture here in PDX. We love that we can get phenomenal food all over town without paying for the overhead associated with brick-and-mortar establishments. It also doesn&#8217;t hurt that we can then eat wherever we please—on a park bench, at the office, or, here at Janrain, on the rooftop of the <a href="http://en.wikipedia.org/wiki/Dekum_Building">Dekum building</a>, which is a magisterial thing on the 12 or so nice days we have in a calendar year.</p>
<p>There are lots of phenomenal food carts, but <a href="http://khaomangai.com/">Nong&#8217;s Khao Man Gai</a> is considered by <a href="http://www.yelp.com/biz/nongs-khao-man-gai-portland#query:nong%27s%20khao%20man%20gai">many</a> to be one of a very small handful of the best PDX food carts if not <em>the</em> absolute, undisputed best.</p>
<p>So what does Nong&#8217;s serve that makes it so special? Many would assume that Nong&#8217;s serves a broad, continuously shifting array of dishes. I mean, if this place is one of the best of Portland&#8217;s <a href="http://www.foodcartsportland.com/maps/">over 500</a> carts, then surely they must have earned this reputation through a diversity of offerings, right? That&#8217;s what <em>I</em> would have thought. And this is indeed the approach that the vast majority of food carts take, sometimes offering <em>dozens</em> of menu options.</p>
<p>But Nong&#8217;s seems to succeed because it offers you shockingly <em>little</em> choice. In the picture below you&#8217;ll see the only thing that you can get at Nong&#8217;s (excluding beverages, of course):</p>
<div class="figure">
<p><img alt="Yum" src="http://imonlyhereforthefood.com/images/Food/NongsKhaoManGai/NongsKhaoManGai004.jpg" /></p>
<p class="caption">Have a look at its <a href="http://www.foodcartsportland.com/maps/">online menu</a> to see what I mean (see the &#8220;Downtown/Alder&#8221; column on the left). Yes, that&#8217;s right: <strong>two menu items</strong>. Menu item #1 is chicken and rice. Menu item #2 is chicken and rice &#8220;Big Size.&#8221; That barely counts as a separate item! That&#8217;s like 1.27 menu items! Vegetarian or vegan? Too bad. Go somewhere else. Looking for other common Thai items like Pad Thai or fried rice? Too bad. Deal with it. There are plenty of other Thai carts out there.</p>
</div>
<p>But far from alienating their potential clientele, Nong&#8217;s thrives in a major way. They continuously win culinary awards of all sorts. They&#8217;re frequently featured in publications about Portland&#8217;s food culture. And, most tellingly, the lunchtime line is almost always exasperatingly long. And when you do make it through the line and bring your chicken and rice back to the office, your response is almost invariably the following: &#8220;That was barely a wait at all. I would have waited an hour or more for the fermented bean curd sauce alone.&#8221;</p>
<h3 id="the-unix-philosophy">The UNIX Philosophy</h3>
<p>So what on Earth does this have to do with UNIX? Well, it&#8217;s simple: Nong&#8217;s and UNIX have the same core philosophy. There are a variety of formulations of the UNIX philosophy, but I&#8217;ll do something super hacky and deprecated and consult the UNIX philosophy <a href="http://en.wikipedia.org/wiki/Unix_philosophy">Wikipedia page</a> and try to distill the philosophy into a few core tenets:</p>
<ul>
<li>Small is beautiful</li>
<li>Make each program do <em>one thing</em> * and one thing well</li>
<li>Favor simplicity and portability over feature completeness</li>
<li>Write programs to work together</li>
</ul>
<p>The antithesis of the UNIX philosophy in computing consists, then, of the following:</p>
<ul>
<li>Big is beautiful</li>
<li>Make programs do a whole variety of things</li>
<li>Favor comprehensiveness of function over simplicity</li>
<li>Write programs to work autonomously</li>
</ul>
<p>Yes, this is an extremely rough expression of the UNIX philosophy, but I do think that it elucidates some crucial points. According to this worldview, complex processes should almost always be broken up into smaller processes in the name of transparency (e.g. teasing out problems and speeding the application of solutions); it&#8217;s always better to have a toolbelt with a lot of small tools with clear purposes than to have a toolbelt with one big tool that does everything; and larger systems should be carefully woven out of these smaller pieces.</p>
<h3 id="the-unix-philosophy-in-action-at-nongs">The UNIX Philosophy in Action at Nong&#8217;s</h3>
<p>The UNIX philosophy is typically associated with computing—unsurprisingly—but I see no reason why it can&#8217;t be applied to organizational theory. Nong&#8217;s makes one thing—chicken and rice—and does it extremely well. In this, it is a spiritual devotee of the UNIX philosophy, even if an inadvertent one. Nong&#8217;s menu has no aspirations whatsoever to be comprehensive, and they seem to have no plans to change their menu. It might be fair to say that limited ambition is another core component of the UNIX philosophy.</p>
<p>Going down this path has benefited the organization in a variety of ways:</p>
<ul>
<li><strong>Efficiency</strong>: when the line gets long—as it very often does—doing one thing and doing it well helps Nong&#8217;s with queue efficiency in a drastic and immediately apparent way. No one dilly-dallies figuring out what to order, and the cashier doesn&#8217;t have to navigate a sophisticated user interface in taking orders.</li>
<li><strong>Friendlier learning curve</strong>: new personnel are quickly brought up to speed. Instead of learning how to cook 50 dishes, they learn how to make one. Now, Nong&#8217;s chicken and rice is deceptively complex, and there&#8217;s a lot of careful work that goes into it. Nonetheless, less conceptual overhead means quicker turnaround times for new employees.</li>
<li><strong>Competitive advantage</strong>: whereas other carts always face the possibility that another Thai or Indonesian or Lebanese or Ethiopian or whatever cart is going to cut into their profits, Nong&#8217;s absolutely <em>owns</em> chicken and rice. If anyone came along and tried to do exactly what they do, they would be seen as a cheap knock-off.</li>
</ul>
<p>With all of this going for it, is it any surprise that Nong&#8217;s succeeds?</p>
<h3 id="toward-a-unix-flavored-federation-of-processes">Toward a UNIX-Flavored Federation of Processes?</h3>
<p>If the UNIX philosophy can work for Nong&#8217;s, it can probably benefit all kinds of organizations and processes. Modularity and learning curves and feature completeness are not just concepts for IT departments. They also have a place in any and all discussion of organizational competency and success more broadly.</p>
<p>I long for the day when <em>all</em> of Portland&#8217;s food carts adopt the UNIX philosophy and drastically limit their scope. The result would be fewer total menu options but a far higher quotient of out-of-this-world menu options. The food cart ecosystem would be transformed from an assemblage of redundant menu offerings and reinvented wheels into a thriving federation of lean operations. So next you&#8217;re at a food cart, talk with the owner and share this vision. Urge them to consider seeking the Nong&#8217;s path.</p>
<p>What do you think, Dear Reader? Should modularity trump completeness? Are limited feature sets usually a good thing? Am I crazy for thinking that the UNIX philosophy has real-world relevance?</p>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/food-carts-and-the-unix-philosophy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Improve Email Performance with Profile Data</title>
		<link>http://janrain.com/blog/improve-email-performance-with-profile-data/</link>
		<comments>http://janrain.com/blog/improve-email-performance-with-profile-data/#comments</comments>
		<pubDate>Wed, 08 May 2013 17:34:43 +0000</pubDate>
		<dc:creator>Michael Olson</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[segmentation]]></category>
		<category><![CDATA[social profile data]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22542</guid>
		<description><![CDATA[If you are seeking to apply big data to connect with your consumers, email marketing is the low-hanging fruit. Targeted emails containing personalized content and offers enjoy a nearly 4X greater click-through rate than generic email offers. Unlike advertising and content personalization, whose complex algorithms are heavily reliant upon third-party data, successful email campaigns can [...]]]></description>
				<content:encoded><![CDATA[<p dir="ltr">If you are seeking to apply big data to connect with your consumers, email marketing is the low-hanging fruit. Targeted emails containing personalized content and offers enjoy a nearly 4X greater click-through rate than generic email offers. Unlike advertising and content personalization, whose complex algorithms are heavily reliant upon third-party data, successful email campaigns can be executed exclusively using data that you own – registration and transaction information.</p>
<p dir="ltr"><img class="alignnone size-full wp-image-22543" alt="Email Targeting and Segmentation" src="http://janrain.com/wp-content/uploads/2013/05/email-targeting.png" width="670" height="405" /></p>
<p dir="ltr">Using social login, marketers can instantly gain permission-based access to the profile data they care about &#8211; rich demographic data and interests straight from a consumer’s social network profile. This data set not only includes a pre-verified email address, name, location and birth date, but also relationship status, political views, hobbies, favorite books, music, movies and television shows. The key is to create micro-segments of consumers who share similar demographic or psychographic characteristics and use them as the basis for targeting.</p>
<p dir="ltr">By selecting the right tools to store and leverage social profile and consumer data, and taking the time to build intelligent segments, marketers can dramatically improve email marketing ROI.</p>
<p>Some of the email performance results organizations have achieved include:</p>
<ul>
<li dir="ltr">
<p dir="ltr">Email segmentation based on demographics and interests led to a <a href="http://www.silverpop.com/marketing-resources/case-studies/paperstyle.html" target="_blank">244% increase in email open rates, a 161% increase in email click through rates, and a 330% increase in revenue per mailing</a> for online retailer Paper Style</p>
</li>
<li dir="ltr">
<p dir="ltr">Email segmentation led to an <a href="http://www.silverpop.com/Clients/Silverpop-Case-Studies/Moosejaw/" target="_blank">80% increase in email open rates</a></p>
</li>
<li dir="ltr">
<p dir="ltr">Personalized eCommerce emails led to a <a href="http://www.certona.com/success-stories/Certona_Shoes.pdf" target="_blank">30% increase in average order value</a> for Shoes.com</p>
</li>
</ul>
<p>We share more real world examples and best practices for utilizing social profile data for email segmentation in our ebook titled <a href="http://janrain.com/resources/white-papers/understanding-big-data/">From Information to Insights: Understanding Big Data Online</a>, if you are interested in learning more.</p>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/improve-email-performance-with-profile-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expanded COPPA FAQs Come None Too Soon</title>
		<link>http://janrain.com/blog/expanded-coppa-faqs-come-none-too-soon/</link>
		<comments>http://janrain.com/blog/expanded-coppa-faqs-come-none-too-soon/#comments</comments>
		<pubDate>Wed, 01 May 2013 15:45:47 +0000</pubDate>
		<dc:creator>Lewis Barr</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[privacy]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22453</guid>
		<description><![CDATA[There is little time to lose for companies whose websites and online services will be subject to the &#8220;new&#8221; COPPA Rule, which I wrote about in January. The new COPPA Rule is currently scheduled for July 1.  While the FTC may respond positively to pending industry requests to push back the Rule&#8217;s effective date, it [...]]]></description>
				<content:encoded><![CDATA[<p>There is little time to lose for companies whose websites and online services will be subject to the <a href="http://janrain.com/blog/coppa-rule-strengthened-to-address-the-way-kids-connect-online-today/">&#8220;new&#8221; COPPA Rule</a>, which I wrote about in January. The new COPPA Rule is currently scheduled for July 1.  While the FTC may respond positively to pending industry requests to push back the Rule&#8217;s effective date, it may not.  So, the FTC&#8217;s expanded version of its COPPA FAQs released on April 25 is now a must read for those who will be affected by the new Rule.</p>
<p><a href="http://business.ftc.gov/documents/Complying-with-COPPA-Frequently-Asked-Questions" target="_blank">Complying with COPPA:  Frequently Asked Questions (A Guide for Business and Parents and Small Entity Compliance Guide)</a> has 92 questions covering all things COPPA.  Of special interest are the questions focused on the requirements of the new COPPA Rule, such as the following:</p>
<ul>
<li><strong><strong>What should I do about information I collected from children prior to the effective date that was not considered personal under the original Rule but now is considered personal information under the amended Rule?</strong></strong></li>
<li><strong><strong>I already have a privacy policy for my children’s app.  Do I have to change it to comply with the amended COPPA Rule?</strong></strong></li>
<li><strong>I know that the amended Rule made some changes to the direct notice that must be sent to parents before I collect personal information from children.  What are those changes?</strong></li>
</ul>
<p>A thorough review of the FAQs is recommended for a clearer understanding of the expanded COPPA requirements.</p>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/expanded-coppa-faqs-come-none-too-soon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technology Association of Oregon Honors Tech Companies of the Year</title>
		<link>http://janrain.com/blog/technology-association-of-oregon-honors-tech-companies-of-the-year/</link>
		<comments>http://janrain.com/blog/technology-association-of-oregon-honors-tech-companies-of-the-year/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 18:14:11 +0000</pubDate>
		<dc:creator>Gina Rau</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[janrain happenings]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22378</guid>
		<description><![CDATA[In a metropolitan city where our GDP growth rate is outpacing our population growth primarily thanks to our tech sector and the continual birth and growth of rock star startups, one might assume that it’s a dog-eat-dog world of fighting over talent, resources and the spotlight. But not so, in Portland. Our technology community is [...]]]></description>
				<content:encoded><![CDATA[<p dir="ltr"><img class="alignright size-medium wp-image-22382" alt="raising star award" src="http://janrain.com/wp-content/uploads/2013/04/Screen-Shot-2013-04-26-at-9.27.34-AM-300x268.png" width="300" height="268" />In a metropolitan city where our <a title="Business Week on Portland' GDP Growth" href="http://www.businessweek.com/articles/2013-03-21/which-u-dot-s-dot-cities-boomed-which-went-bust" target="_blank">GDP growth rate is outpacing our population growth</a> primarily thanks to our tech sector and the continual birth and growth of rock star startups, one might assume that it’s a dog-eat-dog world of fighting over talent, resources and the spotlight. But not so, in Portland. Our technology community is one that comes together (often) to inspire, share and support each other with the common goal of bringing the very best technology to the world.</p>
<p dir="ltr">Last night, the<a title="Oregon TAO Honors Tech Company of the Year 2013" href="http://www.oregonlive.com/silicon-forest/index.ssf/2013/04/oregon_tech_awards_honor_cloud.html?" target="_blank"> Technology Association of Oregon honored</a> some of those companies who are putting Oregon on the map with their technology and mission. It can’t be easy to choose just four to put a spotlight on, because Portland has an abundance of technology companies who have or are on the verge of success.</p>
<p dir="ltr">For all of us at Janrain, just to be in the company with the likes of <a title="Iovation" href="https://www.iovation.com" target="_blank">Iovation</a>, <a title="Puppet Labs" href="www.puppetlabs.com" target="_blank">Puppet Labs</a>, <a title="FEI" href="http://www.fei.com" target="_blank">FEI</a>, <a title="Digimarc" href="www.digimarc.com" target="_blank">Digimarc</a>, <a title="Vendscreen" href="http://vendscreen.com" target="_blank">Vendscreen</a> and the other nominees for Technology Company of the Year is such a compliment to all that we’ve achieved. And to be selected as the Rising Star Technology Company of the Year is a huge and humbling honor that reflects the smart, dedicated people who bring their talent and passion everyday to the important work we’re doing on behalf of our customers.</p>
<p dir="ltr">Congratulations to all the nominees, winners and those who devote themselves to this incredible technology community. Thanks to the Technology Association of Oregon for acknowledging the great work we, and the entire community, are doing.</p>
<p dir="ltr">By the way, the Portland tech community would likely edit that common goal mentioned above to read: bring the very best technology to the world, and put Portland, Oregon’s Silicon Forest on the global map as the premier community for starting and growing world-class technology companies.</p>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/technology-association-of-oregon-honors-tech-companies-of-the-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial: Building a Sample Application with Haskell Snap, PostgreSQL, and the PostgreSQL Simple Snaplet</title>
		<link>http://janrain.com/blog/tutorial-building-a-sample-application-with-haskell-snap-postgresql-and-the-postgresql-simple-snaplet/</link>
		<comments>http://janrain.com/blog/tutorial-building-a-sample-application-with-haskell-snap-postgresql-and-the-postgresql-simple-snaplet/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 16:22:03 +0000</pubDate>
		<dc:creator>Luc Perkins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[snap]]></category>
		<category><![CDATA[snaplet]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22086</guid>
		<description><![CDATA[If you&#8217;re reading this, you probably don&#8217;t need to be sold on using Haskell or Postgres, so I&#8217;ll cut to the chase. Instead of telling you why both are astonishingly and almost painfully amazing—and here at Janrain we use Haskell, the Snap web framework, and PostgreSQL (as well as the PostgreSQL Simple module itself) to [...]]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;re reading this, you probably don&#8217;t need to be sold on using <a href="http://www.haskell.org/haskellwiki/Haskell" target="_blank">Haskell</a> <em>or</em> <a href="http://www.postgresql.org/" target="_blank">Postgres</a>, so I&#8217;ll cut to the chase. Instead of telling you why both are astonishingly and almost painfully amazing—and here at Janrain we use <a href="http://download.fpcomplete.com/janrain-fp-complete-study.pdf" target="_blank">Haskell</a>, the <a href="http://snapframework.com/" target="_blank">Snap</a> web framework, and PostgreSQL (as well as the <a href="http://hackage.haskell.org/package/postgresql-simple" target="_blank">PostgreSQL Simple</a> module itself) to power our <a href="http://janrain.com/products/capture/">Janrain Capture</a> product, so we can vouch for that—I&#8217;ll skip straight to the tutorial.</p>
<p>What you&#8217;ll find below is more of a streamlined presentation of a lot of disparate sources (for example <a href="http://hackage.haskell.org/package/postgresql-simple" target="_blank">here</a> and <a href="http://ocharles.org.uk/blog/posts/2012-12-03-postgresql-simple.html" target="_blank">here</a>) than a 100% new tutorial, but I hope that it serves to put in easily digestible narrative form a lot of the currently existing information. I&#8217;ll be putting together an extremely simple product management tool (basically the most barebones and useful <a href="http://basecamp.com/" target="_blank">Basecamp</a> clone out there). I will do nothing on the UI level and will interact with the server only via <a href="https://httpkit.com/resources/HTTP-from-the-Command-Line/" target="_blank">cURL</a>. I&#8217;ll save views and fancy aesthetics for another day.</p>
<h3 id="get-a-snap-application-up-and-going">Get a Snap Application Up and Going</h3>
<p>Since this tutorial also serves as a rudimentary introduction to Snap for the uninitated, I&#8217;ll briefly walk through starting a new Snap application. If you&#8217;ve installed <a href="http://www.haskell.org/platform/" target="_blank">Haskell</a>, <a href="http://hackage.haskell.org/trac/hackage/wiki/CabalInstall" target="_blank">cabal</a>, and <a href="http://snapframework.com/download" target="_blank">Snap</a>, simply create a new project directory (we&#8217;ll call our project <code>projectomatic</code>), navigate to the directory, and initiate a new Snap application:</p>
<pre class="brush: bash; title: ; notranslate">
mkdir projectomatic
cd projectomatic
snap init
</pre>
<p>Once we&#8217;ve done that, if we run <code>ll</code> or <code>ls</code> or whatever, we&#8217;ll see that a variety of files and directories have been created. I won&#8217;t delve too deeply into that here, so I recommend reading up <a href="http://snapframework.com/docs/quickstart" target="_blank">here</a> if you want to learn more about the anatomy of a Snap application. I could have run <code>snap init barebones</code> to begin with a much more stripped-down application, but I&#8217;m going to go for a full installation so that we can more quickly get up to speed on using <a href="http://snapframework.com/snaplets" target="_blank">Snaplets</a>.</p>
<h3 id="setting-up-our-application-to-use-postgresql-simple">Setting up Our Application to Use PostgreSQL simple</h3>
<p>Snaplets are somewhat difficult to explain, but I&#8217;ll try to encapsulate it briefly. Snaplets are sort of a portal to the outside world from within a Snap application. Snaplets enable you to access state—database transactions being a perfect example of that—in a relatively painless fashion. Setting up our application to use PostgreSQL Simple involves using the very handy <a href="https://github.com/mightybyte/snaplet-postgresql-simple/" target="_blank">PostgreSQL Simple Snaplet</a>. First, install that using cabal (<code>cabal install snaplet-postgresql-simple</code>), then add that to your dependencies in your <code>projectomatic.cabal</code> file, run <code>cabal install</code>, then modify your <code>src/Application.hs</code> file like so:</p>
<pre class="brush: haskell; title: ; notranslate">
{-# LANGUAGE FlexibleInstances #-}

import Control.Lens
import Snap (get)
import Snap.Snaplet
import Snap.Snaplet.PostgresqlSimple

data App = App
    { _pg :: Snaplet Postgres }

makeLenses ''App

instance HasPostgres (Handler b App) where
    getPostgresState = with pg get
</pre>
<p>With the normal <code>snap init</code> install, your application is set up to use a few other Snaplets out of the box. Feel free to leave those in. I will remove them for the sake of brevity in this tutorial. What you see above is that I&#8217;ve embedded our Postgres Snaplet within our <code>App</code> data type and then used the <code>makeLenses ''App</code> function to generate an accessor <code>pg</code> that we can use elsewhere. Lastly, I&#8217;ll define the instance <code>HasPostgres (Handler b App)</code>, which will enable the application to have access to Postgres-related state.</p>
<p>Now that we have our handy <code>pg</code> accessor, we need to go over to our <code>src/Site.hs</code> file and do some additional setup. First, add the PostgreSQL Snaplet to the imports:</p>
<pre class="brush: haskell; title: ; notranslate">
import Snap.Snaplet.PostgresqlSimple
</pre>
<p>Now, we need to add our <code>pg</code> constructor to the core of the application. Let&#8217;s modify the definition of the <code>app</code> function to include our Postgres Snaplet:</p>
<pre class="brush: haskell; title: ; notranslate">
app :: SnapletInit App App
app = makeSnaplet &quot;app&quot; &quot;My stunningly advanced Snap application.&quot; Nothing $ do
    pg &lt;- nestSnaplet &quot;pg&quot; pg pgsInit
    addRoutes routes
    return $ App pg
</pre>
<p>We&#8217;re almost ready. All we have to do now is configure our Postgres connection. When we ran <code>cabal install</code> after adding the <code>snaplet-postgresql-simple</code> module to our dependencies, Snap created a <code>snaplets/postgresql-simple</code> directory on its own (wasn&#8217;t that sweet?). In that directory, there&#8217;s a file called <code>devel.cfg</code> where we specify our database connection. Here&#8217;s what mine will look like (yours will vary, of course!):</p>
<pre class="brush: bash; title: ; notranslate">
host = &quot;localhost&quot;
port = 5432
user = &quot;luc&quot;
pass = &quot;&quot;
db = &quot;projectomatic&quot;
</pre>
<p>There are other configuration possibilities, but this will be enough to get me up and going. Once this is done, try running <code>cabal install</code> and see if you get any compiler errors. If so, see if you can debug on your own. If not, then let&#8217;s move on to the next section.</p>
<h3 id="our-project-data-type">Our <code>Project</code> Data Type</h3>
<p>Haskell is a real stickler for data types, so we now have to start being both explicit and careful about everything we do. Let&#8217;s define our <code>Project</code> data type in our <code>src/Site.hs</code> file. We could do it in a separate file if we wanted to, but let&#8217;s keep it simple. I&#8217;ll be using the <code>Text</code> data type here—as use of strings is widely considered to be deprecated in Haskell)—so I&#8217;ll make sure and add <a href="http://hackage.haskell.org/packages/archive/text/0.11.2.0/doc/html/Data-Text.html"><code>Data.Text</code></a> to my imports:</p>
<pre class="brush: haskell; title: ; notranslate">
import qualified Data.Text as T
</pre>
<p>We&#8217;ll keep our data type simple:</p>
<pre class="brush: haskell; title: ; notranslate">
data Project = Project
  { title       :: T.Text
  , description :: T.Text
  }
</pre>
<h3 id="setting-up-postgres-to-handle-our-data">Setting up Postgres to Handle Our Data</h3>
<p>Postgres is a traditional columnar database (though with a of sugar on top), so we can&#8217;t simply start throwing a bunch of key/value pairs at it and expect it to start storing things. We&#8217;ll need to create tables that are ready to do our bidding. Oh, and our database. We should make one of those, too. Let&#8217;s start with that. In a *nix environment, chances are strong that you can create a new database from the command line (presuming that you have Postgres installed):</p>
<pre class="brush: bash; title: ; notranslate">
createdb projectomatic
</pre>
<p>If that doesn&#8217;t work, either consult one of many Postgres installation tutorials or cut to the chase and download <a href="http://postgresapp.com/" target="_blank">Postgres.app</a> for <em>real</em> ease of use. If that did work, then let&#8217;s write a <code>projectomatic.sql</code> file and place it in our main project directory. Here&#8217;s what it will need to look like:</p>
<pre class="brush: sql; title: ; notranslate">
CREATE TABLE projects (
  title TEXT NOT NULL,
  description TEXT NOT NULL,
);
</pre>
<p>Each project will simply have an integer identifier, a title, a description, and a set of users involved with the project. For sake of simplicity, we&#8217;ll set things up so that each user will simply have a username and a set of projects that they&#8217;re associated with, and none of the values we&#8217;re working with can be <code>NULL</code>.</p>
<p>Let&#8217;s open up our database using <code>psql projectomatic</code> in the command line and run our SQL script when we get there:</p>
<pre class="brush: bash; title: ; notranslate">
\i /path/to/application/dir/projectomatic.sql
</pre>
<p>If we get <code>CREATE TABLE</code> as a response, then we&#8217;re probably good to go. It&#8217;s a good idea to double check by running <code>\dt</code> and making sure that <code>projects</code> and <code>users</code> tables currently exist and are properly constructed. Once they do, we should be good to go within Postgres itself.</p>
<h3 id="making-our-data-types-ready-for-postgres">Making Our Data Types Ready for Postgres</h3>
<p>Like I said before, dealing with data types in Haskell is <em>tough</em>. While I would never assert that dealing with data types in <em>any</em> programming language is &#8220;easy&#8221; per se, Haskell really does present a pretty formidable learning curve. Fortunately, it&#8217;s not too bad if you&#8217;re doing fairly basic things.</p>
<p>Previously, we specified our <code>Project</code> data type, but that&#8217;s not yet enough to get them to actually interact with Postgres. Putting data <em>into</em> Postgres would likely work fine at this stage, but taking data <em>out of</em> Postgres and transforming it into something that Haskell can use within the application is going to take some work.</p>
<p>So in our <code>Site.hs</code> file, we need to set up a <code>FromRow</code> instance of both of our main data type. This will require the <code>Control.Applicative</code> module as well as a special submodule of PostgreSQL Simple, namely <code>FromRow</code>. Here&#8217;s what needs to be added to our <code>Site.hs</code> file:</p>
<pre class="brush: haskell; title: ; notranslate">
import Control.Applicative
import Database.PostgreSQL.Simple.FromRow

instance FromRow Project where
    fromRow = Project &lt;$&gt; field &lt;*&gt; field
</pre>
<p>The funny <code>&lt;$&gt;</code> and <code>&lt;*&gt;</code> operators come from the <code>Control.Applicative</code> module. The most important thing is that the number of <code>field</code>s that you use when constructing the instances matches the number of fields in the database, or else you&#8217;ll get all kinds of nasty compiler errors, just as you will if there&#8217;s a type mismatch (as when you try, for example, to put a Haskell integer into a Postgres field that takes only a <code>varchar</code> or <code>text</code>).</p>
<p>Setting up these <code>FromRow</code> instance constructors enables us to take data from Postgres (for example the results of a <code>SELECT * FROM projects</code>-style query) and use it in our pure, pristine Haskell application. One thing we should also do is to define a <code>Show</code> instance for our data type. This is necessary because when we make an HTTP request to see a <code>Project</code> (or a list thereof), we want to specify what that will actually <em>look like</em> in the command line. If we don&#8217;t specify a <code>Show</code> instance, that means that we won&#8217;t actually see anything, <em>even if we&#8217;ve done everything else right</em>. I&#8217;ll keep it basic:</p>
<pre class="brush: haskell; title: ; notranslate">
instance Show Project where
    show (Project title description) =
      &quot;Project { title: &quot; ++ T.unpack title ++ &quot;, description: &quot; ++ T.unpack description ++ &quot; }\n&quot;
</pre>
<p>Note that we need to use the <code>T.unpack</code> function, taken from the <code>Data.Text</code> module, to convert text into strings (else we get a compiler error).</p>
<h3 id="time-to-get-back-to-our-application">Time to Get Back to Our Application</h3>
<p>So that was a lot of setup, no doubt about it. Now it&#8217;s time to actually convert HTTP requests into PostgreSQL queries and consequently data. I&#8217;m going to set up our server to take requests that do the following things:</p>
<ol>
<li>Create a new project</li>
<li>Return a list of all projects</li>
<li>Delete a project</li>
</ol>
<p>Basically, we&#8217;re running simple CRUD operations on the <code>Project</code> data type.</p>
<p>Let&#8217;s start with creating a new project. First, our route:</p>
<pre class="brush: haskell; title: ; notranslate">
(&quot;/project/new&quot;, method POST createNewProject)
</pre>
<p>Here&#8217;s our corresponding function:</p>
<pre class="brush: haskell; title: ; notranslate">
createNewProject :: Handler App App ()
createNewProject = do
  title &lt;- getPostParam &quot;title&quot;
  description &lt;- getPostParam &quot;description&quot;
  newProject &lt;- execute &quot;INSERT INTO projects VALUES (?, ?)&quot; (title, description)
  redirect &quot;/&quot;
</pre>
<p>Let&#8217;s unpack this a bit. First, notice that this is embedded in a <code>do</code> block, which often (though certainly not always) means that you&#8217;ll be dealing with I/O. The first thing that this function does is extract the <code>title</code> of our new project out of the form data passed to the server with the <code>getPostParam</code> function (the same goes for our <code>description</code>). Now, we&#8217;ll use the <code>execute</code> function to actually interact with Postgres. In contrast to the <code>query_</code> function that we will encounter later, <code>execute</code> is typically used in situations where you don&#8217;t expect a return value (as when you write to a table).</p>
<p>The dual <code>?</code>s that you see are places in our SQL bytestring where we will insert values. Immediately after the bytestring, we specify which values we want inserted (in this case the <code>title</code> and the <code>description</code> that we derived from the URL).</p>
<p>Now, let&#8217;s work on using the <code>query_</code> function instead of <code>execute</code>. This is a bit trickier because it involves getting data back from Postgres that then needs to be processed and handled on the application side (whereas with the <code>execute</code> function we passed already-formed data on to Postgres). We&#8217;ll start with setting up a route that displays all projects. The route:</p>
<pre class="brush: haskell; title: ; notranslate">
(&quot;/projects&quot;, method GET getAllProjects)
</pre>
<p>And the handling function:</p>
<pre class="brush: haskell; title: ; notranslate">
getAllProjects :: Handler App App ()
getAllProjects = do
  allProjects &lt;- query_ &quot;SELECT * FROM projects&quot;
  liftIO $ print (allProjects :: [Project])
</pre>
<p>A few things to notice here. First, we store the results of the query in the <code>allProjects</code> variable. That&#8217;s pretty straightforward. What&#8217;s more difficult, however, is actually <em>displaying</em> those projects. First, have a look at the <code>print</code> function. What is being printed? The <code>allProjects</code> variable is going to be printed as a list of projects. But we can&#8217;t just use <code>print</code> on its own because <code>print</code> produces IO (which is always tricky in Haskell).</p>
<p>This is where the <a href="http://hackage.haskell.org/packages/archive/transformers/0.2.2.0/doc/html/Control-Monad-IO-Class.html#v:liftIO"><code>liftIO</code></a> function comes in handy. This function gives us access to the I/O in which the application is engaging, and in our case it will convert the type <code>IO ()</code> into the type <code>Handler App App ()</code>. And so <code>print</code> is producing IO which is then brought into the application context. Because we haven&#8217;t set up any views or anything fancy for displaying the data, the <code>print</code> function will make the results of our <code>GET</code> request show up in the console.</p>
<p>So now we can create a project and get all projects. Let&#8217;s add a route and a function for deleting specific projects. First, let&#8217;s set up a route to delete a project based on the project&#8217;s title:</p>
<pre class="brush: haskell; title: ; notranslate">
(&quot;/project&quot;, method DELETE deleteProjectByTitle)
</pre>
<p>In a serious project, you would probably want to delete on the basis of an integer project ID or something of the sort, but we&#8217;ll keep it simple. Now, our corresponding function:</p>
<pre class="brush: haskell; title: ; notranslate">
deleteProjectByTitle :: Handler App App ()
deleteProjectByTitle = do
  title &lt;- getPostParam &quot;title&quot;
  deleteProject &lt;- execute &quot;DELETE FROM projects WHERE title = ?&quot; (Only title)
  redirect &quot;/&quot;
</pre>
<p>Notice here that we&#8217;re only passing <em>one</em> value into our SQL bytestring, hence our reliance on the <code>Only</code> instance. Also notice that we&#8217;re not passing the project title via URL, but rather by way of form data.</p>
<p>So now we have some routes that interact with Postgres and do some really basic things. Let&#8217;s put our server to the test.</p>
<h3 id="curling-our-way-to-victory">cURLing Our Way to Victory</h3>
<p>As mentioned before, I&#8217;ve said nothing about views or HTML rendering or any of the sort. At the moment, our application has <strong>zero</strong> views. I&#8217;ll cover Snap&#8217;s default templating system, <a href="http://hackage.haskell.org/package/heist" target="_blank">Heist</a> in a future tutorial. For now, though, we&#8217;ll interact with our server the old-fashioned way: via cURL (my favorite tutorial can be found <a href="https://httpkit.com/resources/HTTP-from-the-Command-Line/" target="_blank">here</a>).</p>
<p>Let&#8217;s go through a set of examples involving each of the routes that I set up earlier. First, let&#8217;s fire up our server.</p>
<pre class="brush: bash; title: ; notranslate">
cabal install
projectomatic -p 3000
</pre>
<p>Now, let&#8217;s get a list of all of our projects:</p>
<pre class="brush: bash; title: ; notranslate">
curl -X GET http://localhost:3000/projects
</pre>
<p>At first, this should return an empty list (no surprises there). So let&#8217;s create a project. Let&#8217;s create a project called &#8220;Getting in shape&#8221; and give it the description &#8220;Daily exercise:&#8221;</p>
<pre class="brush: bash; title: ; notranslate">
curl -X POST http://localhost:3000/project/new \
-d 'title=Getting in shape' \
-d 'description=Daily exercise'
</pre>
<p>Now, when we run a <code>GET</code> request on <code>/projects</code> again, we should get the following in the CLI:</p>
<pre class="brush: bash; title: ; notranslate">
[Project { title: Getting in shape, description: Daily exercise}
]
</pre>
<p>This means that our server works. *whew*</p>
<p>Now, let&#8217;s delete the project that we just added to the database. Remember from above that the URL takes the form <code>/project</code>, while our <code>title</code> is passed in via form data. Our cURL request should look like this:</p>
<pre class="brush: bash; title: ; notranslate">
curl -X DELETE http://localhost:3000/project \
-d 'title=Getting in shape'
</pre>
<p>If we have more than one project in the database with the title &#8220;Get in shape,&#8221; then all projects with this title will be deleted. This is yet another reason why working with integer IDs for important data types is much better than working in terms of attributes like this. In a future tutorial, I&#8217;ll do a deeper dive into Snap and Postgres that does precisely this.</p>
<h3>Just a Basic Intro</h3>
<p>Like I said before, this application has no views or rendering, no error handling, no authentication. It&#8217;s just an HTTP server talking to Postgres. I&#8217;ve also only covered a minimal smattering of what the PostgreSQL Simple Snaplet <a href="http://hackage.haskell.org/packages/archive/snaplet-postgresql-simple/0.1/doc/html/Snap-Snaplet-PostgresqlSimple.html" target="_blank">has on offer</a>. But I hope that it has at least served to show that using Postgres and Haskell in a web development context is not as intimidating as it may seem at first. There are some conceptual leaps (at least for a previously OOP-oriented person like myself), but patience pays off.</p>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/tutorial-building-a-sample-application-with-haskell-snap-postgresql-and-the-postgresql-simple-snaplet/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>U.S.-EU Safe Harbor: Clearing the Waters</title>
		<link>http://janrain.com/blog/us-eu-safe-harbor-clearing-the-waters/</link>
		<comments>http://janrain.com/blog/us-eu-safe-harbor-clearing-the-waters/#comments</comments>
		<pubDate>Wed, 24 Apr 2013 17:49:16 +0000</pubDate>
		<dc:creator>Lewis Barr</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[privacy]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22166</guid>
		<description><![CDATA[For organizations collecting personal data across European markets, the waters of the U.S.-EU Safe Harbor may seem murky in the wake of some EU data authorities questioning its application to cloud computing and its long term viability in the face of upcoming changes in EU privacy law. I hope to provide some clarity here. Earlier this [...]]]></description>
				<content:encoded><![CDATA[<p>For organizations collecting personal data across European markets, the waters of the U.S.-EU Safe Harbor may seem murky in the wake of some EU data authorities questioning its application to cloud computing and its long term viability in the face of upcoming changes in EU privacy law. I hope to provide some clarity here.</p>
<p>Earlier this month I had the pleasure of meeting Krysten Jenci, the Director of Electronic Commerce for the International Trade Administration (ITA) and head of the U.S. Department of Commerce&#8217;s Safe Harbor Frameworks team, and Christopher Hoff, one of the two Administrators on that team. As part of the ITA&#8217;s effort to promote a better understanding of the role the Safe Harbor Frameworks play in facilitating commerce between the U.S. and Europe, Krysten and Chris came to Portland, OR to meet with privacy professionals and counsel (including fellow <a href="https://www.privacyassociation.org">IAPP</a> and <a href="https://www.privacyassociation.org">ACC</a> members) to discuss the continuing viability of the U.S.-EU Safe Harbor Framework and initiatives in furtherance of the <a href="http://www.whitehouse.gov/sites/default/files/privacy-final.pdf">White House Privacy Blueprint</a>. While they were preaching to the choir with regard to the continuing importance of the US-EU Safe Harbor Framework, some points made during the discussion bear repeating:</p>
<ul>
<li>Under existing law, the data protection authorities of the European Economic Area (EU member states, Liechtenstein, Iceland, and Norway) are obligated to accept that Safe Harbor-certified U.S. service providers are as &#8220;adequate&#8221; as EU-based service providers in providing data security for processing personal data transferred from the EU. Moreover, t<span style="line-height: 13px;">he U.S.-EU Safe Harbor applies to cloud service providers as well. This shouldn&#8217;t be news, but to counter questions raised by the non-binding <a href="http://ec.europa.eu/justice/data-protection/article-29/documentation/opinion-recommendation/files/2012/wp196_en.pdf">July 2012 Article 29 Data Protection Working Party Opinion on Cloud Computing</a> and related statements made by certain EU officials, the ITA recently published <a href="http://export.gov/static/Safe%20Harbor%20and%20Cloud%20Computing%20Clarification_April%2012%202013_Latest_eg_main_060351.pdf">clarifications</a> on this subject to set the record straight.</span></li>
</ul>
<ul>
<li>In a service agreement between a data controller and U.S. Safe Harbor-certified processor, it is not necessary to include the EU standard contractual clauses to assure the data security of personal data from the EU, because certifying adherence to the Safe Harbor principles provides adequate assurance of data protection. If you once negotiated with a European counterpart who insisted otherwise, you know that creating the proper understanding in this regard can be an uphill climb.</li>
</ul>
<ul>
<li><span style="line-height: 13px;">Even after the </span><span style="line-height: 13px;">proposed EU General Data Protection Regulation (Proposed Regulation) is finalized, the U.S.-EU Safe Harbor Framework may continue to be recognized as affording adequate assurance of personal data protection, because the Proposed Regulation grandfathers in such recognition. Although</span><span style="line-height: 13px;"> one proposed amendment to the Regulation (often referred to as the Albrecht amendment) would have the recognition sunset two years after the Proposed Regulation takes effect, passage of this amendment is not assured and even if it were enacted, the sunset provision would take effect no earlier than 2016. </span></li>
</ul>
<p>Finally, even where there is a clear understanding among a company&#8217;s privacy and legal teams on the value of the US-EU Safe Harbor Framework and its role in facilitating commerce between the U.S. and Europe, this understanding may not be shared with the company&#8217;s engineers tasked with planning how to transfer and process data from several countries most efficiently. Engineers lacking knowledge of the benefits of Safe Harbor could mistakenly conclude that EU law requires keeping EU data hosted within the EU, even when it would be more efficient or otherwise desirable from a business perspective to centralize hosting in the U.S. with a Safe Harbor-certified services provider.</p>
<p>So, here&#8217;s a call for spreading the good word on the continuing viability of Safe Harbor and clearing up any misunderstandings that may be muddying the waters for your engineering teams and others involved in planning international data exchanges. They will thank you for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/us-eu-safe-harbor-clearing-the-waters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“What are you up to?” Be direct to collect user profile data</title>
		<link>http://janrain.com/blog/what-are-you-up-to-be-direct-to-collect-user-profile-data/</link>
		<comments>http://janrain.com/blog/what-are-you-up-to-be-direct-to-collect-user-profile-data/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 20:55:48 +0000</pubDate>
		<dc:creator>Chris Mann</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[social profile data]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22175</guid>
		<description><![CDATA[My fiancé loves flowers. Although every time I buy them for her she gives me that squinty-eyed look of suspicion like I must have done something wrong. She holds the fake smile for a couple seconds and then asks, “What are you up to?” What are you up to? That’s a trending question these days. [...]]]></description>
				<content:encoded><![CDATA[<p dir="ltr">My fiancé loves flowers. Although every time I buy them for her she gives me that squinty-eyed look of suspicion like I must have done something wrong. She holds the fake smile for a couple seconds and then asks, “What are you up to?”</p>
<p dir="ltr">What are you up to? That’s a trending question these days. Most people are probably thinking that question when they visit your website. You probably want to collect profile data so you can offer them relevant emails, content, and/or product recommendations. But do they know that?</p>
<p dir="ltr">Unfortunately people are (very) skeptical and their trust is not easily won. Now, thanks to the advancing caliber of hackers in various basements and even high schools, the battle for trust becomes harder each time another high-profile brand has their database compromised.</p>
<p dir="ltr">Yet, just like my fiancé loves her flowers, people who visit your site love personalization and recommendations made just for them. Amazon is a poster child for using tailored content to win shoppers’ hearts, so how do you get users to trust you to do the same?</p>
<h3 dir="ltr">Tell Them What You’re Up To</h3>
<p dir="ltr">You just need to simply answer the question: What are you up to? Tell your site visitors why you’re collecting their data, how it’s going to benefit them, and what kind of control they have. Being informed increases comfort and trust.</p>
<p dir="ltr">Channel 4, one of the largest UK television broadcasters, went as far as to create a viewer promise, landing page and video for this very purpose (see below). The spirited and brutally honest talk show host Frank Carr walks users through everything from why Channel 4 collects personal data to the benefits of drawing in advertisers. The video makes the consumer the center of Ch4’s universe and eliminates any questions about how the user’s data is being used. This ambitious level of transparency catches the users’ attention, helps them see the benefits of registering, and eases their nerves.</p>
<p>Seldom do I visit a site that effectively calls out registration or the advantages of creating an account with a brand. Don’t keep the benefits of registration and data a secret from your users. You should be advertising the awesome and relevant experiences that providing a little profile data could provide.</p>
<p>So what are you up to?</p>
<p><object id="flashObj" width="480" height="270" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" bgcolor="#FFFFFF"><param name="flashVars" value="videoId=1659460328001&amp;playerID=821770867001&amp;playerKey=AQ~~,AAAAv1s3kdE~,keYL7jIviZqUQQ0GUEPo8mLFO2FO_w8o&amp;domain=embed&amp;dynamicStreaming=true" /><param name="base" value="http://admin.brightcove.com" /><param name="seamlesstabbing" value="false" /><param name="allowFullScreen" value="true" /><param name="swLiveConnect" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://c.brightcove.com/services/viewer/federated_f9?isVid=1&amp;isUI=1" /><param name="flashvars" value="videoId=1659460328001&amp;playerID=821770867001&amp;playerKey=AQ~~,AAAAv1s3kdE~,keYL7jIviZqUQQ0GUEPo8mLFO2FO_w8o&amp;domain=embed&amp;dynamicStreaming=true" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="swliveconnect" value="true" /><param name="pluginspage" value="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" /><embed id="flashObj" width="480" height="270" type="application/x-shockwave-flash" src="http://c.brightcove.com/services/viewer/federated_f9?isVid=1&amp;isUI=1" flashVars="videoId=1659460328001&amp;playerID=821770867001&amp;playerKey=AQ~~,AAAAv1s3kdE~,keYL7jIviZqUQQ0GUEPo8mLFO2FO_w8o&amp;domain=embed&amp;dynamicStreaming=true" base="http://admin.brightcove.com" seamlesstabbing="false" allowFullScreen="true" swLiveConnect="true" allowScriptAccess="always" flashvars="videoId=1659460328001&amp;playerID=821770867001&amp;playerKey=AQ~~,AAAAv1s3kdE~,keYL7jIviZqUQQ0GUEPo8mLFO2FO_w8o&amp;domain=embed&amp;dynamicStreaming=true" allowfullscreen="true" allowscriptaccess="always" swliveconnect="true" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" bgcolor="#FFFFFF" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/what-are-you-up-to-be-direct-to-collect-user-profile-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Real Reason Gartner Calls Janrain Cool</title>
		<link>http://janrain.com/blog/the-real-reason-gartner-calls-janrain-cool/</link>
		<comments>http://janrain.com/blog/the-real-reason-gartner-calls-janrain-cool/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 16:03:17 +0000</pubDate>
		<dc:creator>Larry Drebes</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[janrain happenings]]></category>

		<guid isPermaLink="false">http://janrain.com/?p=22060</guid>
		<description><![CDATA[When one of the best and most respected research firms in the world says that a company is cool, people listen. And this week, Gartner included Janrain in their 2013 Cool Vendors in Social Marketing report. How cool is that? We’re thrilled to be honored with membership into Gartner’s “cool social technology” club (our words, [...]]]></description>
				<content:encoded><![CDATA[<p>When one of the best and most respected research firms in the world says that a company is cool, people listen. And this week, Gartner included Janrain in their <a href="http://www.gartner.com/id=2415017" target="_blank">2013 Cool Vendors in Social Marketing report</a>.</p>
<p><img alt="Janrain is Cool" src="http://janrain.com/wp-content/uploads/2013/04/Janrain-is-cool.png" width="600" height="565" /></p>
<h3>How cool is that?</h3>
<p>We’re thrilled to be honored with membership into Gartner’s “cool social technology” club (our words, not theirs) along with 140 Proof, Influitive, Woobox and Zuberance. The report’s focus is around the opportunity that exists for digital marketers in leveraging the social web to reach their online goals, and goes on to recommend these cool vendors for organizations to call upon.</p>
<p>Our motivation at Janrain isn’t necessarily to “be cool” but we think it’s pretty darn awesome to work with brands we all like, know and buy from such as Universal Music Group, Fox, Dr Pepper, Samsung, AMC, Guitar Center and Pac12. In our book, it’s our customers that we find pretty cool because they understand exactly what Gartner analyst Julie Hopkins means when she writes:</p>
<blockquote><p>Janrain simplifies the process of managing multiple online identities to remove the “digital hassle” often associated with the user’s broad social participation.</p></blockquote>
<p>In other words: our customers know that <a href="http://janrain.com/about/newsroom/press-releases/online-americans-fatigued-by-password-overload-janrain-study-finds/">password fatigue is a real problem</a> and leverage our social login technology to remove the obstacles that stand in the way of allowing their website visitors to quickly log in to their site.</p>
<p>So, while we’re humbled to be called a “cool vendor” and thank Gartner for the recognition, we really want to thank <a title="Janrain Customers" href="http://janrain.com/customer-success/">our customers</a> who make us who we are by choosing Janrain in the first place and relying on us to earn their trust everyday.</p>
]]></content:encoded>
			<wfw:commentRss>http://janrain.com/blog/the-real-reason-gartner-calls-janrain-cool/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
