<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>StorageRoom Blog</title>
    <description>StorageRoom is a JSON-based Content Management System for Web &amp; Mobile Applications.</description>
    <link>http://storageroomapp.com/blog</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/storageroom" /><feedburner:info uri="storageroom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Content Management for JavaScript and AJAX</title>
      <description>&lt;p&gt;StorageRoom's &lt;a href="http://storageroomapp.com/documentation"&gt;RESTful API&lt;/a&gt; is based on the lightweight &lt;a href="http://www.json.org/"&gt;JSON&lt;/a&gt; data-interchange format. We picked JSON as it is easier to read for humans and has a smaller footprint than XML, which is important for data access on slow mobile networks. Fast JSON parsers are available for all mobile platforms.&lt;/p&gt;

&lt;p&gt;Another big advantage of JSON is that it is a subset of JavaScript. Since it's basically JavaScript, it can be used in the language with no muss or fuss. It's incredibly simple to use StorageRoom as a &lt;strong&gt;content backend for JavaScript apps&lt;/strong&gt;. Editors manage content in our web-based interface and developers dynamically load it into their web apps.&lt;/p&gt;

&lt;h2&gt;Cross-Domain AJAX with CORS&lt;/h2&gt;

&lt;p&gt;AJAX requests across domains used to be blocked by the same origin policy of the browser. This limitation is still in the heads of most programmers, even though a technology arrived years ago that allows AJAX requests across domains in all modern browsers (yes, even IE8+). I'm not talking about &lt;a href="http://storageroomapp.com/documentation#formats.jsonp"&gt;JSONP&lt;/a&gt;, which works in even older browsers.&lt;/p&gt;

&lt;p&gt;The technology is called &lt;a href="http://storageroomapp.com/documentation#formats.json.cors"&gt;Cross-Origin Resource Sharing (CORS)&lt;/a&gt; and it enables web servers to provide their resources to web pages on different domains.&lt;/p&gt;

&lt;p&gt;The StorageRoom CMS supports CORS and JSONP, so that you can use JavaScript to easily load your content from our API into your app. Let me show you how it works.&lt;/p&gt;

&lt;h2&gt;Example: An AJAX CMS&lt;/h2&gt;

&lt;p&gt;You can use CORS without an additional JS library, but in this example I use jQuery to abstract individual AJAX browser implementations.&lt;/p&gt;

&lt;p&gt;The content of our blog is managed in &lt;a href="http://storageroomapp.com"&gt;StorageRoom&lt;/a&gt;. The following example loads the 3 latest blog posts:&lt;/p&gt;

&lt;script src="https://gist.github.com/2214553.js?file=storage_room_cors_example.js"&gt;&lt;/script&gt;




&lt;p class="load"&gt;
  &lt;a class="load js" href="#"&gt;Click here to load the posts with JavaScript&lt;/a&gt;
&lt;/p&gt;




&lt;ul class="list"&gt;&lt;/ul&gt;


&lt;p&gt;You can use this technique to load any kind of content into widgets, maps, games, web apps or even into native mobile applications that were built with JavaScript (&lt;a href="http://phonegap.com/"&gt;PhoneGap&lt;/a&gt;, &lt;a href="http://www.appcelerator.com/"&gt;Appcelerator Titanium&lt;/a&gt;, &lt;a href="https://trigger.io/"&gt;Trigger&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;New JS frameworks like &lt;a href="http://documentcloud.github.com/backbone/"&gt;Backbone.js&lt;/a&gt; or &lt;a href="http://emberjs.com/"&gt;Ember.js&lt;/a&gt; make this even simpler. We'll cover them in a future post.&lt;/p&gt;&lt;style&gt;html.external.blog a.load {
  font-size: 1.3em;
  margin: 30px !important;
  text-decoration: none;
}

html.external.blog p.load {
  text-align: center;
}

html.external.blog ul.list {
  background-color: ghostWhite;
  border: 1px solid #DEDEDE;
  padding: 1px 15px;

}

html.external.blog ul.list p {
  font-size: 0.9em !important;
  margin: 10px 0 !important
}

html.external.blog ul.list h3 {
 font-size: 1em !important;
 margin-top: 10px !important;
 margin-bottom: 5px !important
}&lt;/style&gt;&lt;script type="text/javascript"&gt;
//&lt;![CDATA[
$(document).ready(function(){
  $('a.load').click(function() {
    var $list = $('ul.list');
    $list.empty();  
    var $loading = $('&lt;p&gt;').text('Loading...');
    $list.append($('&lt;li&gt;').append($loading));
    
    $.ajax({
        url: 'http://api.storageroomapp.com/accounts/4dd6fcd24d085d64de000003/collections/4f310bb261b0e576c9000005/entries.json',
        data: {
          auth_token: 'ZDv1xGceu1qzzBorJazP',
          meta_prefix: 'm_',
          sort: 'm_created_at',
          order: 'desc',
          per_page: 3
        },
        success: function(data) {  
          $list.empty();
          $.each(data.array.resources, function(index, post) {
            var $heading = $('&lt;h3&gt;').text(post.title);
            var $body = $('&lt;p&gt;').text(post.body.substring(0, 100) + '...');
            var $item = $('&lt;li&gt;').append($heading).append($body);
          
            $list.append($item);
          });
        },
        error: function() {
          list.empty();
          alert("The posts could not be loaded from StorageRoom.");
        }
    });
  
    return false;
  });
});
//]]&gt;
&lt;/script&gt;</description>
      <pubDate>27 Mar 2012</pubDate>
      <link>http://feedproxy.google.com/~r/storageroom/~3/6h0ZAdDegoI/content-management-javascript-ajax</link>
      <guid isPermaLink="false">http://storageroomapp.com/blog/content-management-javascript-ajax</guid>
    <feedburner:origLink>http://storageroomapp.com/blog/content-management-javascript-ajax</feedburner:origLink></item>
    <item>
      <title>4 Ways to Use Content in Any Mobile App</title>
      <description>&lt;p&gt;Many apps are based on editorial content: your favorite city guide, the cookbook app with the great recipes or the Spanish vocabulary trainer.&lt;/p&gt;

&lt;p&gt;But not all apps fall into this category. Many games, social networks and utility applications don't contain editorial content.&lt;/p&gt;

&lt;p&gt;Here are four ways to spice up any app with content that will engage and inform your users, bring your company more followers and revenue - and less support requests and bad reviews. You could use the same data on all platforms (iOS, Android, Windows Phone, JavaScript) or have unique content for each individual one.&lt;/p&gt;

&lt;h2&gt;Announcements and Notifications&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://files.storageroomapp.com/accounts/4dd6fcd24d085d64de000003/collection/4f5de81d61b0e57e0000000f/entries/4f6310bc61b0e5757600018a/fields/k4f5de81d61b0e57e00000010/file.png" class="announcement" alt="Announcements"/&gt;&lt;/p&gt;

&lt;p&gt;Push Notifications are a great way to inform your users about an action that one of their friends did, or about events happening in the application. Unfortunately, not everybody grants you this permission and pushing notifications too often annoys the users that you painstakingly acquired.&lt;/p&gt;

&lt;p&gt;Include announcements from StorageRoom instead of Push Notifications! It's incredibly easy to set up a small announcement view in your app that regularly checks for the latest announcements through our API. Each announcement could contain a text in multiple languages, images and links (external and internal ones). It's all up to you.&lt;/p&gt;

&lt;p&gt;With these announcements you can always reach your users. Tell them about the great blog post you wrote, the special promotion you're having today, service disruptions and upcoming versions of your app. Or get some social blessing and ask your users to follow you on Twitter or to like you on Facebook.&lt;/p&gt;

&lt;h2&gt;Help Sections&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://files.storageroomapp.com/accounts/4dd6fcd24d085d64de000003/collection/4f5de81d61b0e57e0000000f/entries/4f63109861b0e57576000181/fields/k4f5de81d61b0e57e00000010/file.png" class="help" alt="Help Section"/&gt;&lt;/p&gt;

&lt;p&gt;Bad reviews from users that don't understand your app are one of the worst problems for app developers. You should obviously design the interface so that everybody understands it without further explanation, but it's easy to mess things up and some bozos will probably never get it.&lt;/p&gt;

&lt;p&gt;So you somehow made a huge usability mistake in your new version and users are complaining all over the place? You cannot reach your users and you're having a bad sleep until the next updated version is through the lengthy approval process?&lt;/p&gt;

&lt;p&gt;Well, why didn't you include a dynamic help section in the first place? It's simple to set up FAQs, a tip of the day or a detailed help section with StorageRoom. Include the content in your app's bundle so that it's available without an Internet connection after the initial download, but every time the user goes online you synchronize it automatically and adjust your help section based on the feedback you get.&lt;/p&gt;

&lt;p&gt;This way your users will learn how to play your game or use your app and you can optimize your copy on the fly.&lt;/p&gt;

&lt;h2&gt;Cross Promotions&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://files.storageroomapp.com/accounts/4dd6fcd24d085d64de000003/collection/4f5de81d61b0e57e0000000f/entries/4f6310ac61b0e53e2a000032/fields/k4f5de81d61b0e57e00000010/file.png" class="crosspromotion" alt="Cross Promotions"/&gt;&lt;/p&gt;

&lt;p&gt;You are beyond one app and building an app imperium? Probably the most expensive part of your business is to acquire new users. So why don't you get more of your existing users to use your other apps? How could you do this?&lt;/p&gt;

&lt;p&gt;Embed a list of all your applications - including descriptions, the icon and screenshots - in every app. Basically a small app store within all of your apps. Easily cross-promote your apps to existing users. And on the Apple App Store, if you use an affiliate link, you even get a commission for your own paid app downloads.&lt;/p&gt;

&lt;p&gt;Another option might be to promote services from a partner and to create your own small ad network.&lt;/p&gt;

&lt;h2&gt;Legal Documents&lt;/h2&gt;

&lt;p&gt;Oh those legal issues. You might have to include terms and conditions or a privacy policy in your app. But your company name just changed or you need to add a new paragraph? Wouldn't it be nice to change this without a new release of the app?&lt;/p&gt;

&lt;p&gt;Manage your legal documents in StorageRoom and update them automatically in all of your apps. This can be useful in many cases. As always, check with your lawyers first.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;That's it for this post. Do you have any cool ideas that you want to share on how content from StorageRoom can be used in an app?&lt;/p&gt;&lt;style&gt;img.announcement, img.help, img.crosspromotion {
  float: right;
  padding: 0px 0 10px 25px; 
}&lt;/style&gt;</description>
      <pubDate>16 Mar 2012</pubDate>
      <link>http://feedproxy.google.com/~r/storageroom/~3/yKvmtOxRSEE/creative-content-in-mobile-apps</link>
      <guid isPermaLink="false">http://storageroomapp.com/blog/creative-content-in-mobile-apps</guid>
    <feedburner:origLink>http://storageroomapp.com/blog/creative-content-in-mobile-apps</feedburner:origLink></item>
    <item>
      <title>BeMyApp - The 2012 App Olympics</title>
      <description>&lt;p&gt;&lt;a href="http://bemyapp.com"&gt;BeMyApp&lt;/a&gt; was a mobile app hackathon for developers, designers and marketers that took place in several cities around the world simultaneously. We at StorageRoom were thrilled to attend the event in Berlin and proud to be one of its sponsors.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://files.storageroomapp.com/accounts/4dd6fcd24d085d64de000003/collection/4f5de81d61b0e57e0000000f/entries/4f5de84a61b0e57bf7000005/fields/k4f5de81d61b0e57e00000010/file.png" alt="BeMyApp" class="bemyapp"/&gt;&lt;/p&gt;

&lt;p&gt;App ideas were presented on Friday night, multiple competing teams were formed and the applications were developed in &lt;a href="http://en.wikipedia.org/wiki/Club-Mate"&gt;Club Mate&lt;/a&gt; powered hacking sessions until Sunday evening.&lt;/p&gt;

&lt;p&gt;All teams made a live demo of their applications and a jury had the tough job of selecting a winner. The quality of the applications was incredibly high for such a short development time.&lt;/p&gt;

&lt;p&gt;One of our favorites and the winner of the Berlin AppOlympics was &lt;a href="http://app.unlockyourbrain.org/"&gt;UnlockYourBrain&lt;/a&gt;, an Android application that locks the screen periodically to disrupt long playing sessions of kids with educational quizes. A series of multiple-choice questions must be answered correctly before the device gets unlocked and the child can keep on playing.&lt;/p&gt;

&lt;p&gt;We've been talking to the winning team and they liked the idea of using StorageRoom to manage their app content. It would be the perfect solution to edit and distribute the questions and answers for their E-Learning game.&lt;/p&gt;

&lt;p&gt;More coverage of the event can be found on &lt;a href="http://venturevillage.eu/berlin-mobile-app-olympics-roundup"&gt;VentureVillage&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://files.storageroomapp.com/accounts/4dd6fcd24d085d64de000003/collection/4f5de81d61b0e57e0000000f/entries/4f5df54361b0e54bd9000005/fields/k4f5de81d61b0e57e00000010/file.jpg" alt="UnlockYourBrain" class="unlockyourbrain"/&gt;&lt;/p&gt;&lt;style&gt;img.bemyapp {
  float: right;
  padding: 10px 0 10px 25px;
}

img.unlockyourbrain {
  margin: 0 auto;
  display: block;
  padding-top: 10px;
}&lt;/style&gt;</description>
      <pubDate> 3 Mar 2012</pubDate>
      <link>http://feedproxy.google.com/~r/storageroom/~3/Mw0k8bmfhH4/bemyapp-weekend</link>
      <guid isPermaLink="false">http://storageroomapp.com/blog/bemyapp-weekend</guid>
    <feedburner:origLink>http://storageroomapp.com/blog/bemyapp-weekend</feedburner:origLink></item>
    <item>
      <title>Hello World</title>
      <description>&lt;p&gt;A lot has happened since we launched the initial version of &lt;a href="http://storageroomapp.com"&gt;StorageRoom&lt;/a&gt; last summer, but building the StorageRoom CMS has kept us so busy that we never found the time to create a blog. We're excited to get one up and running now and will try to provide you with weekly to biweekly posts on our service, new features, interesting use cases and the CMS space in general.&lt;/p&gt;

&lt;p&gt;Many of our customers already use StorageRoom as a backend to manage content for applications or sites that aren't native mobile apps. So we thought, why use Wordpress, &lt;a href="https://github.com/mojombo/jekyll"&gt;Jekyll&lt;/a&gt; or another blogging platform when we already have a very powerful content backend directly at our fingertips?&lt;/p&gt;

&lt;p&gt;This blog therefore uses StorageRoom for content management. It relies on the &lt;a href="https://github.com/thriventures/storage_room_gem"&gt;Ruby Gem&lt;/a&gt; to load posts through StorageRoom's RESTful JSON API and creates a page-cached version of the blog once a user hits the site. The caches are being expired through Webhooks any time a post is added, updated or deleted. Comments are handled through Disqus and tada, our customized blog was ready in no time, included in our existing layout and with a nice web-based interface for managing posts. Including tags, custom permalinks and Markdown support.&lt;/p&gt;

&lt;p&gt;Probably we should create yet another "How to create an awesome blog in 10 minutes" screencast for other developers! Take a look at our &lt;a href="http://storageroomapp.com/documentation"&gt;API Documentation&lt;/a&gt; until that's ready.&lt;/p&gt;</description>
      <pubDate>18 Feb 2012</pubDate>
      <link>http://feedproxy.google.com/~r/storageroom/~3/vQghRbcyoiU/hello-world</link>
      <guid isPermaLink="false">http://storageroomapp.com/blog/hello-world</guid>
    <feedburner:origLink>http://storageroomapp.com/blog/hello-world</feedburner:origLink></item>
  </channel>
</rss>
