<?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>Appcelerator Developer Center</title>
	<atom:link href="http://developer.appcelerator.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://developer.appcelerator.com/blog</link>
	<description>Appcelerator Developer Blog</description>
	<lastBuildDate>Sat, 18 May 2013 16:47:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Appcelerator Participates in NASA’s International Space Apps Challenge</title>
		<link>http://developer.appcelerator.com/blog/2013/05/appcelerator-participates-in-nasas-international-space-apps-challenge.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/05/appcelerator-participates-in-nasas-international-space-apps-challenge.html#comments</comments>
		<pubDate>Thu, 16 May 2013 21:11:55 +0000</pubDate>
		<dc:creator>Gregory DiPaolo</dc:creator>
				<category><![CDATA[ @en]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20988</guid>
		<description><![CDATA[Last month, NASA hosted the International Space Apps Challenge &#8211; a 48-hour hackathon that invited citizens from around the world to collaborate to create open-source solutions for problems NASA faces both in space and here on Earth. NASA released a list of more than 50 challenges for hackathon teams to tackle, including a wide range [...]]]></description>
			<content:encoded><![CDATA[<p>Last month, NASA hosted the <a title="Space Apps Challenge" href="http://spaceappschallenge.org/" target="_blank">International Space Apps Challenge</a> &#8211; a 48-hour hackathon that invited citizens from around the world to collaborate to create open-source solutions for problems NASA faces both in space and here on Earth. NASA released a list of more than 50 challenges for hackathon teams to tackle, including a wide range of topics such as solar flare, star maps, space stations and renewable energy. Teams could sign up to participate virtually from anywhere  in the world.</p>
<p>We are proud that a few teams from the Appcelerator community participated in the International Space Apps Challenge, and we are excited to showcase their work. Great job, everyone!</p>
<hr />
<p><em>by Ketan Majmudar</em></p>
<p><a title="Project T-10" href="http://spaceappschallenge.org/project/t-10/" target="_blank">Project: T-10</a> (pronounced “T-Minus Ten”)</p>
<p><strong>Team (Appcelerator community): </strong><br />
Kate Arkless Gray <a title="SpaceKate" href="https://twitter.com/SpaceKate" target="_blank">@SpaceKate</a><br />
João Neves <a title="jpgneves" href="https://twitter.com/jpgneves" target="_blank">@jpgneves</a><br />
Ketan Majmudar <a title="ketan" href="https://twitter.com/ketan" target="_blank">@ketan</a><br />
Dario Lofish <a title="dariolofish" href="https://twitter.com/dariolofish" target="_blank">@dariolofish</a></p>
<p><strong>The Challenge</strong>: <a title="Spot the Station" href="http://spaceappschallenge.org/challenge/spot-the-station/ " target="_blank">Spot the Station</a></p>
<p>NASA recently launched the <a title="Spot the station" href="http://spotthestation.nasa.gov" target="_blank">Spot the Station website</a>, which allows people to spot the space station and sign up for alerts when it flies overhead. The tasks were to:</p>
<ul>
<li>“Extend the functionality of the Spot the Station site by building an app that allows you to share your sightings with others.”</li>
<li>“Create a visualization with Spot the Station data.”</li>
</ul>
<p><strong>The Solution:</strong></p>
<p><iframe src="http://player.vimeo.com/video/65257119" frameborder="0" width="500" height="281"></iframe></p>
<p><a href="http://vimeo.com/65257119">T-10</a> from <a href="http://vimeo.com/user2099078">João Neves</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p><strong>Overview</strong></p>
<p>Our goal was to set up an alert to help astronauts on the International Space Station (ISS) take images of planet Earth under their specific desired circumstances. For example, they might want a picture of London with clear skies or a picture of New York during a thunderstorm.</p>
<p>The T-10 app allows astronauts to select cities of interest, time of day and the weather condition required. This data is then sent to our server, which waits for the correct conditions and finds the next scheduled times the ISS will be over the city in question. When both city and weather conditions are met, a push notice is sent to the app and provides an alert 10 minutes before the ISS will enter visibility of that city, giving astronauts enough time to prepare to take the photo.</p>
<p><img class="aligncenter" src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/t-10-blog.jpg" alt="" /></p>
<p>When the T-10 countdown begins, it also sends a push alert to any ground users who have the app installed and would like to send a digital wave back to the ISS and the astronauts aboard. This two-way communication creates a social connection and sense of unity, promoting the knowledge that people on Earth and in space are waving at each other.</p>
<p>In future updates, we hope to add the ability to add the #ISSWave hashtag to share pictures to and from the ISS and Earth. We also intend to add more complex controls to manage when and how alerts get stored and shared with others.</p>
<p><strong>Getting Started</strong></p>
<p>I signed up for the International Space Apps Challenge in London, held at the Google Campus in East London. I had been invited to take part in a European space apps hack recently, but due to working commitments, I completely missed it. When I saw the announcement for the International Space Apps challenge, I signed up as quickly as I could. Being a NASA-driven event just added to the awesomeness of the hackathon. My main goal was just to participate, and I wasn&#8217;t even intending to take part seriously in the challenge aspect. I was more than happy to network and tinker with some cool ideas and people over the weekend.</p>
<p>A very early start on Saturday morning was a challenge in itself, having been up late every night for the past two weeks working on the SCI-FI-LONDON film festival app, but I felt it was my duty to make the effort for this hackathon. To be honest, I didn&#8217;t know what kind of people would be present or if I would have the energy to stick through a whole weekend. I went in expecting to build an app using the Patino game engine for Titanium, as I’m on the private beta &#8211; perhaps a cosmic windchime or mapping related to a comet or near-Earth object. But in the midst of the opening pitches and the multitude of available broad challenges to choose from, fate and social connections led us to form our team and the app T-10.</p>
<p>I tweeted Kate Arkless Gray (<a title="SpaceKate" href="https://twitter.com/SpaceKate" target="_blank">@SpaceKate</a>) &#8211; whom I&#8217;d met through Bill Thompson (<a title="billt" href="https://twitter.com/billt" target="_blank">@billt</a>), a technology journalist who works for the BBC Click Radio programme &#8211; and we connected with an idea to build an alerting app system which related to current earth weather patterns. Although my original idea was more Earth-bound, Kate had actually asked astronauts from the ISS if they would use an app that would tell them when the weather was good so they could take snaps of the planet! This was a cool plan, and we set it in motion.</p>
<p>Kate&#8217;s friend Joao Neves (<a title="jpgneves" href="https://twitter.com/jpgneves" target="_blank">@jpgneves</a>), a software engineer and Android hacker from Stockholm, came on board, and we decided to use Titanium as the core of the application and build a server component. What I most enjoy about the Titanium platform is that it allows me to take the foundation of my learned skill sets and apply it to something amazing that is inclusive within the mobile community. Targeting multiple platforms is awesome, and being JavaScript-based, Titanium has helped me embrace the language in a way I never would have before.</p>
<p><strong>The Process</strong></p>
<p>We had to make sure we had the right APIs on hand and a suitable user-flow. We found a table that would be our home for the next 12 hours and had an open recruitment office in the form of stickies on the edge of our table. We sat and began coding an app that would use ACS push notifications and a bunch of open-source Titanium scripts. We had so much fun building, designing and conceptualising the app and solution that we wanted to weave a few more ideas in, knowing that we could never achieve the Flickr pool upload, share integration and Earth-based &#8220;wave&#8221; functionality that would enable people on the ground to send a virtual wave to the ISS as it flew over.</p>
<p>When our fourth team member, designer Dario Lofish (<a title="Dariolofish" href="https://twitter.com/dariolofish" target="_blank">@dariolofish</a>), logged on, our dream team was complete. We all connected online, made sure we were in tune with the concept and approach, then got back to our roles.</p>
<p>As fate would have it, the ISS was due to fly over London at around 9:30, and Kate dragged us (plus about 10 others) so we could see it fly over. Then back to the hacking. Under normal circumstances, we would have stayed all night, but by 22:30, I bailed to the far recesses of North London, promising to return the following morning.</p>
<p>App design during hackathons can be crazy, but we managed to have clear roles and had a simple core concept that we were all behind. Titanium made it easy to prototype ideas and integrate design ideas on the fly quickly.</p>
<p><strong>Highlights &amp; Insights</strong></p>
<p>Our demo at the end of the day went really well, and I demonstrated the functionality of setting and sending the event from my iPhone 4S plugged directly into the projector, with push notification responses. It was a real joy to be part of the team behind T-10, and I&#8217;m proud of the ease and speed with which our team locked into the development process and how easy we made all of our jobs seem.</p>
<p>I was pleased to see a lot of mobile solutions come out of the weekend, many of them trying to take complex space data and put them into the hands of ordinary people in a way that makes sense. There were some superb, inspiring solutions that bridged the gap between software and hardware. It was also incredible to see the cooperation and coordination of people, some in the same room, some located all over the world. Since I was 10, I have had this odd dream to become a developer &#8211; back then it was just a desire to be a computer programmer. Mobile development has suddenly become a huge business and one that has moved in from the fringe of society into an evolving and ever-shifting set of features and parameters. With every year, new concepts, gestures and devices evolve and play a role in how our societies interact with the world around us. It is very cool and exciting to be part of that change.</p>
<p>At the end of the hackathon, we were so excited when they announced that we had been chosen by the judges as one of the two winning London Challenge teams! We are hoping that we will do well in the global round coming up and that our app will be featured in the Victoria and Albert Museum as part of the Digital Futures: <a title="Urban Open Street Event" href="http://www.vam.ac.uk/whatson/event/2481/digital-futures-urban-open-space-3776/" target="_blank">Urban Open Space event</a>.</p>
<p>We are now in the People&#8217;s Choice voting phase, so you can vote for <a title="Project voting" href="http://spaceappschallenge.org/project/t-10/" target="_blank">T-10 via Twitter</a>. Wish us luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/05/appcelerator-participates-in-nasas-international-space-apps-challenge.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appcelerator Node.ACS Financial Stock Watch List</title>
		<link>http://developer.appcelerator.com/blog/2013/05/appcelerator-node-acs-financial-stock-watch-list.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/05/appcelerator-node-acs-financial-stock-watch-list.html#comments</comments>
		<pubDate>Tue, 14 May 2013 18:10:18 +0000</pubDate>
		<dc:creator>Leor Brenman</dc:creator>
				<category><![CDATA[ @en]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20967</guid>
		<description><![CDATA[Implementing a Financial Stock Watch List may seem pretty straightforward at first, but optimizing it for mobile in the most efficient way possible presents a few challenges. Today, I&#8217;d like to walk you through how you can use the Appcelerator Mobile Platform to streamline API calls and data over the wire for your mobile applications [...]]]></description>
			<content:encoded><![CDATA[<p>Implementing a Financial Stock Watch List may seem pretty straightforward at first, but optimizing it for mobile in the most efficient way possible presents a few challenges. Today, I&#8217;d like to walk you through how you can use the Appcelerator Mobile Platform to streamline API calls and data over the wire for your mobile applications leveraging remote data sources.</p>
<p>Appcelerator Custom Cloud Service (Node.ACS) allows Node.js based custom services to be published into the cloud and can be used to create a middleware tier to expose mobile-optimized web services to your application.</p>
<p>Instead of making multiple calls from the Titanium mobile client directly to the stock quote web service, we will create a Node.js service which will make multiple calls to a back end Stock Quote web service over the high speed internet and present aggregated data to the Titanium mobile client. The Titanium mobile client can then make a single mobile optimized web service call to Node.ACS over the slower cellular network to retrieve the Stock Watch List data. Furthermore, since the Watch List only displays 3 data values from the 13 provided by the stock quote web service, a substantial reduction in overhead is achieved which results in improved user experience and reduced data transmission.</p>
<p><strong>The Problem</strong></p>
<p>The mobile watch list we are trying to create is shown below:</p>
<p><center><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/node.acs.stocks_1.png" alt="" /></center>The Stock Watch List displays a list of Stock Symbols as well as the Last Price and Change (from the prior day) for each stock symbol in the list. The “As of” time and date is useful to display as well so the user can see when the stock data was last retrieved.</p>
<p>The stock web service used in this example is from <a href="http://markitondemand.com">Markit On Demand.</a></p>
<p>In order to implement the watch list, repeated calls to a stock quote web service needs to be made; one call for each stock symbol the user is “watching”. The data then needs to be assembled and applied to a list control (i.e. TableView).</p>
<p>Below is an example of a stock quote REST web service call and JSON reply from MarkitOnDemand for the stock symbol AAPL (Apple Inc):</p>
<p>Call:</p>
<p>&nbsp;</p>
<p><strong></strong></p>
<p>http://dev.markitondemand.com/Api/Quote/json?symbol=AAPL</p>
<p>Reply:</p>
<div style="width: 660px;">
<pre>{
	"Data":{
		"Name":"Apple Inc", "Symbol":"AAPL", "LastPrice":424.04,
                "Change":-3.36899999999997,
		"ChangePercent":-0.788237964104632,
		"Timestamp":"Tue Jan 22 10:58:00 UTC-07:00 2012",
		"MarketCap":395266765800,
                "Volume":263809,
		"ChangeYTD":402.64,
                "ChangePercentYTD":5.31492151798133,
                "High":424.99,
		"Low":423.22,
		"Open":424.86
	}
}</pre>
</div>
<p>From the reply above, you can see that we only need 3 of the 13 values returned by the web service for our watch list: LastPrice, Change and Timestamp. While these calls can be made from the Titanium mobile client, there is a large amount of overhead due to the unused data returned by the web service. Also, these calls are made across the often slow and unreliable cellular network as illustrated in the diagram below:</p>
<p><center><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/node.acs.stocks_2.png" alt="" width="660" /></center>SOLUTION</p>
<p>One solution to this problem is to change the application architecture so that the watch list is retrieved by Appcelerator&#8217;s Node.ACS Platform as a Service (PaaS). Then the Titanium mobile client only needs to make one web service call to Node.ACS to retrieve the watch list data. The Node.ACS service makes the repeated calls to the Stock Quote web service to collect the watch list data but it does this across the high speed Internet instead of the slow cellular network as illustrated below:</p>
<p><center><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/node.acs.stocks_3.png" alt="" width="660" /></center>The custom Node.ACS service is shown below. Note that an additional feature in this Node.ACS service is that the Watch List symbols are retrieved from ACS Custom Object. This enables watch lists to be maintained across mobile devices.</p>
<div style="width: 660px;">
<pre>var ACS = require('acs').ACS;
var logger = require('acs').logger;
var EventEmitter = require('events').EventEmitter;
var https = require('http');
var sessionID = null;
var stocks;
ACS.init('', ''); // use your ACS OAuth key and secret

function refreshPrice(req, res) {
    var uid = req.query.uid;
    var Event = new EventEmitter;
    var results = [],
        evt_count = 0;
    // SETUP EVENT LISTENER
    Event.on("HTTP_COMPLETE", function (e) {
        console.log("EVENT: HTTP_COMPLETE");
        evt_count++;
        console.log(evt_count);
        if (evt_count &gt;= stocks.length) {
            console.log("close response, results = " + JSON.stringify(results));
            res.write(JSON.stringify(results));
            res.end();
        }
    });
    ACS.Objects.query({
        page: 1,
        per_page: 100,
        classname: "stocks",
        where: {
            user_id: uid,
        }
    }, function (data) {
        console.log(JSON.stringify(data));
        stocks = data.stocks;
        var l = stocks.length;
        if (l == 0) {
            Event.emit("HTTP_COMPLETE");
        };
        for (var i = 0; i &lt; l; i++) {
            marketOnDemandQuote(stocks[i].symbol);
        }
    })

    function marketOnDemandQuote(symbol) {
        var myreq =
            https.get('http://dev.markitondemand.com/Api/Quote/json?symbol=' + symbol, function (r) {
            r.setEncoding('utf8');
            r.on('data', function (chunk) {
                console.log(chunk);
                var o = {}, d = JSON.parse(chunk);
                o.symbol = d.Data.Symbol;
                o.name = d.Data.Name;
                o.lastPrice = d.Data.LastPrice;
                o.change = d.Data.Change;
                o.changePercent = d.Data.ChangePercent;
                o.timestamp = d.Data.Timestamp;
                results.push(o);
                Event.emit("HTTP_COMPLETE");
            });
        });
    }
};
exports.refreshPrice = refreshPrice;
// Source code attribution: Asim Siddiqui and Bert Grantges</pre>
</div>
<p>Conclusion</p>
<p>Appcelerator’s Node.ACS Platform as a Service can be used to build mobile optimized middleware services in Node.js. The middleware service reduces the overhead in retrieving the watch list data by making repeated calls to a stock quote web service and presents the aggregated data that the mobile application needs. This results in improved user experience and reduced latency and throughput requirements of the mobile application.</p>
<p>While this example was designed around a stock watch list, the principles can be applied to many other use cases such as sales flash reports, key performance indicator dashboards and other applications where the back end data is not optimized for the mobile application or when data needs to be mashed up from disparate back end data sources.</p>
<p>The Node.ACS online documentation is a good next step for learning about Appcelerator Custom Cloud Service and can be found here: <a href="http://docs.appcelerator.com/titanium/latest/#!/guide/Node.ACS">http://docs.appcelerator.com/titanium/latest/#!/guide/Node.ACS</a></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/05/appcelerator-node-acs-financial-stock-watch-list.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Using ACS as a back-end for your App</title>
		<link>http://developer.appcelerator.com/blog/2013/05/using-acs-as-a-back-end-for-your-app.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/05/using-acs-as-a-back-end-for-your-app.html#comments</comments>
		<pubDate>Mon, 13 May 2013 23:46:11 +0000</pubDate>
		<dc:creator>Ricardo Alcocer</dc:creator>
				<category><![CDATA[ @en]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20955</guid>
		<description><![CDATA[On a previous post, I talked about consuming web services. Today I want to talk about ACS (Appcelerator Cloud Services), but before I go into what it is and how it can help you, let&#8217;s take a look at a scenario. Your client asks you to build an App where people can create an account, [...]]]></description>
			<content:encoded><![CDATA[<p>On a <a href="/2013/03/consuming-data-from-web-services">previous post</a>, I talked about consuming web services.  Today I want to talk about ACS (<a href="http://www.appcelerator.com/cloud/">Appcelerator Cloud Services</a>), but before I go into what it is and how it can help you, let&#8217;s take a look at a scenario.</p>
<p>Your client asks you to build an App where people can create an account, log in and display a feed with photos that people have uploaded.  Any user can then can snap a picture, upload it to the server and after being approved by an administrator let everyone else see it.</p>
<p>The App itself seems pretty straightforward.</p>
<ol>
<li>User login and photo feed are two API calls: you already know how to do that.
</li>
<li>Taking a picture is easy using the <a href="http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.Media-method-takePicture">Ti.Media.takePicture</a> method.  Then another API call to upload.  </li>
</ol>
<p>Now the back-end, that&#8217;s another story.  You need to:</p>
<ol>
<li>Find a server to host your back-end app</li>
<li>Create the database, establish relations between tables (unless you&#8217;re using NoSQL Databases)</li>
<li>Expose an API that returns JSON</li>
<li>Create an admin interface</li>
<li>Provide security </li>
<li>Get ready to scale in case your App is very successful and you need more space or bandwidth</li>
</ol>
<p>What if I tell you that with ACS you can do that right now, and maybe build your full App (front-end and back-end) in a day or two?  In fact, let&#8217;s do it!</p>
<p><strong>Setting up your app</strong></p>
<p>Launch Titanium Studio and go to File > New > Mobile Project.  Then select your Project Template. Now on the New Mobile Project screen, make sure you select &#8220;Cloud-enable this application&#8221;.</p>
<p><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/apikeys.png"/></p>
<p>Studio has added for you the <strong>ti.cloud</strong> module, and has created two API Keys: One for production and one for development.  What this really means is that you already have a back-end for your app!.  Let&#8217;s check it out.</p>
<p>Go to <a href="my.appcelerator.com">my.appcelerator.com</a> and click on My Apps; Login if you have to.  You&#8217;ll be taken to a screen with a list of all your Apps.  Locate the App you&#8217;ve just created and click on Manage ACS.  You are now on your Adminstrative Console.</p>
<p><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/console.png" width="450"/></p>
<p><strong>Using ACS</strong></p>
<p>ACS has too many features to mention in a single post.  If you want to know all there is to know about ACS, I&#8217;d suggest you go to <a href="http://docs.appcelerator.com/cloud/latest/">http://docs.appcelerator.com/cloud/latest/</a>.  For our example we&#8217;ll be using two services: <strong>Photos</strong> and <strong>Users</strong>.  To use ACS on your App, start by getting an instance to the ti.cloud module.</p>
<pre>
var Cloud = require('ti.cloud');
</pre>
<p>Your App already knows your API keys, so you&#8217;re ready to go.  The <a href="http://docs.appcelerator.com/cloud/latest/#!/api">ACS API</a> follows a very simple pattern:</p>
<pre>
Cloud.Namespace.method({
     property1: 'here',
     property2: 'here'
},function(e){
     // I'm the callback.  The method will call me and the response object is in e
});
</pre>
<p>Both the properties for the method and the object that is returned are documented on the <a href="http://docs.appcelerator.com/cloud/latest/#!/api">API reference</a>.  If you&#8217;d rather have a more tangible example, there&#8217;s a ACS KitchenSink at <a href="https://github.com/appcelerator-modules/ti.cloud/tree/master/commonjs/example">https://github.com/appcelerator-modules/ti.cloud/tree/master/commonjs/example</a>.</p>
<p><strong>User Login</strong></p>
<p>For simplicity, I will not implement a way of creating a new user from the App.  I&#8217;ll assume that the user is already created. To create a new user, scroll down on your ACS console, click on &#8220;Users&#8221; and then on &#8220;Create a New User&#8221;.</p>
<p><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/adduser.png" width="450"/></p>
<p>Fill out Email, Username, Password and Password Confirmation, and click &#8220;Submit&#8221;.  Now you have a user on the system and you&#8217;re ready to login.  As explained on the <a href="http://docs.appcelerator.com/cloud/latest/#!/api/Users-method-login">API documentation</a>, and based on the simple pattern described earlier, you can call the login method sending two properties: Login (can be email or userid) and Password.  Upon successful login you&#8217;ll receive an object with data for this user.</p>
<p><strong>Success Example:</strong></p>
<p><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/inspectobject.png" width="450"/></p>
<p><strong>Error Example:</strong></p>
<p><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/inspect_error.png" width="450"/></p>
<p><strong><em>PRO TIP: On Titanium you can do console.log(JSON.stringify(your_object)) to inspect the contents of the object that was returned.  Here I&#8217;m taking that response and viewing it on <a href="http://jsoneditoronline.org/">jsoneditoronline.org</a></em></strong></p>
<p>This means that your Titanium code may look something like this:</p>
<pre>
function doLogin(e){
     Cloud.Users.login({
        login: $.uid.value,
        password: $.pwd.value
    }, function (e) {
        if (e.success) {
            var win=Alloy.createController('feed').getView();
            win.open();
        }
        else {
           alert(e.message);
        }
    });
}
</pre>
<p><strong>The Photo Feed</strong></p>
<p>To implement the Photo Feed, we use the &#8220;query&#8221; method in the Photos namespace.  This method can receive many optional parameters.  We&#8217;ll only use one for retrieving the results in reverse order, so we do -created_at; the minus sign reverses the order.  The method will return an object will all the photos.</p>
<p><strong>Example Success</strong></p>
<p><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/inspect_photo.png" width="450"/></p>
<p>As you can see, ACS has already created 6 different versions of your photo: square_75, thumb_100, small_240, medium_500, medium_640 and large_1024.</p>
<p><strong><em>PRO TIP: Paging is supported using the &#8220;page&#8221;, &#8220;per_page&#8221;, &#8220;limit&#8221; and &#8220;skip&#8221; parameters, so implementing &#8220;lazy loading&#8221; is just a matter of writing the front-end code.</em></strong></p>
<p>To display the feed is as simple as looping through the &#8220;photos&#8221; array.  Your code may look something like this:</p>
<pre>
    Cloud.Photos.query({
        order: "-created_at"
    },function (e) {
        if (e.success) {
            if (e.photos.length == 0) {
                // no photos
                alert('There are no photos');
            }
            else {
                e.photos.forEach(function(item){
                    // work with this photo
                })
            }
        }
        else {
            alert(e);
        }
    })
</pre>
<p><strong>Uploading Photos</strong></p>
<p>To upload photos we use the &#8220;create&#8221; method, which receives the photo in binary form in a property named &#8220;photo&#8221;.  You may get the photo from the photo gallery using <a href="http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.Media-method-openPhotoGallery">Ti.Media.openPhotoGallery</a> or from the camera using <a href="http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.Media-method-takePicture">Ti.Media.takePicture</a>.  Once you have the photo, you may call the &#8220;create&#8221; method something like this:</p>
<pre>
     Cloud.Photos.create({
          photo : event.media
     }, function(e) {
          if(e.success) {
               // reload the feed?
          } else {
               alert(e.message);
          }
      });
</pre>
<p>So there you have it.  You very own secure and scalable cloud-based back-end!  I have built a proof-of-concept located at <a href="https://github.com/ricardoalcocer/tiphotogram">github.com/ricardoalcocer/tiphotogram</a>.  Here&#8217;s how it looks.</p>
<table>
<tr>
<td valign="top"><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/ios_screenshot.png" width="250"/></td>
<td valign="top"><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/android_screenshot.png"width="250"/></td>
</tr>
</table>
<p>I&#8217;ve thrown in some bonus conditional Alloy code to use Toolbars on iOS and ActionBar on Android.</p>
<p>This is not a finalized app, just a quick example of you can quickly put together an Alloy-based front-end with an ACS back-end.  Feel free to use, fix and improve upon it.</p>
<p><strong>Final thoughts</strong></p>
<p>You can use ACS with or without Titanium, so if you&#8217;re looking for a back-end for your web-based app, ACS may be what you&#8217;re looking for.  For this example we used the ACS SDK for Titanium, but you could also use the native iOS or Android SDK as well as the REST API.  ACS offers <a href="http://www.appcelerator.com/cloud/key-features/">20 pre-build services</a>, one of which is <a href="http://docs.appcelerator.com/cloud/latest/#!/api/CustomObjects">Custom Objects</a>.  This means that you can create your own data-sets, with your own data structure, and automatically get a REST API to interact with them.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/05/using-acs-as-a-back-end-for-your-app.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Please Review ListView Phase 2 specification</title>
		<link>http://developer.appcelerator.com/blog/2013/05/please-review-listview-phase-2-specification.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/05/please-review-listview-phase-2-specification.html#comments</comments>
		<pubDate>Wed, 08 May 2013 21:22:36 +0000</pubDate>
		<dc:creator>Ingo Muschenetz</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20944</guid>
		<description><![CDATA[Last month as part of our 3.1.0 release we introduced a new, faster version of TableView called ListView. As a refresher, it has several key features: Data-oriented vs view-oriented architecture A separate module. Does not replace the existing TableView so you can migrate on your schedule Extremely performant We&#8217;re now working on phase 2 of that [...]]]></description>
			<content:encoded><![CDATA[<p>Last month as part of our 3.1.0 release we introduced a new, faster version of TableView called ListView. As a refresher, it has several key features:</p>
<ul>
<li>Data-oriented vs view-oriented architecture</li>
<li>A separate module. Does not replace the existing TableView so you can migrate on your schedule</li>
<li>Extremely performant</li>
</ul>
<p>We&#8217;re now working on phase 2 of that implementation. Please review the specification and add your comments by <strong>EOD 5/15 (Next Wednesday)</strong>.</p>
<p>Link: <a href="https://wiki.appcelerator.org/display/community/Titanium+ListView+Specification">https://wiki.appcelerator.org/display/community/Titanium+ListView+Specification</a></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/05/please-review-listview-phase-2-specification.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Featured Developer &#8211; Lark Cookbook</title>
		<link>http://developer.appcelerator.com/blog/2013/05/featured-developer-spotlight-lark-cookbook.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/05/featured-developer-spotlight-lark-cookbook.html#comments</comments>
		<pubDate>Wed, 01 May 2013 19:53:06 +0000</pubDate>
		<dc:creator>Gregory DiPaolo</dc:creator>
				<category><![CDATA[ @en]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20919</guid>
		<description><![CDATA[Our featured developer spotlight this week comes from Jared Stoneberg. Jared and his web development company, Number 10 Web Company, leveraged a Kickstarter campaign to help fund the beautiful Titanium app &#8220;Lark &#8211; Cooking Against the Grain&#8221;. Read more about how Jared and team pulled together this app to showcase the favorite recipes of James [...]]]></description>
			<content:encoded><![CDATA[<p>Our featured developer spotlight this week comes from Jared Stoneberg. Jared and his web development company, <a target="_blank" href="http://number10webcompany.com/">Number 10 Web Company</a>, leveraged a <a target="_blank" href="http://www.kickstarter.com/projects/larkseattle/app-cookbook-from-lark-and-chef-john-sundstrom">Kickstarter campaign</a> to help fund the beautiful Titanium app &#8220;Lark &#8211; Cooking Against the Grain&#8221;. Read more about how Jared and team pulled together this app to showcase the favorite recipes of James Beard Award-winning Chef John Sundstrom.</p>
<hr />
<p><img class="aligncenter" src="http://www.appcelerator.com.s3.amazonaws.com/web/showcase/lark-icon.png" alt="Lark icon" /></p>
<p><strong>Tell us a little bit more about your product and app</strong><br />
James Beard Award-winner and Food &amp; Wine Magazine Best New Chef John Sundstrom takes you on a culinary journey through the Pacific Northwest. His Seattle restaurant, Lark, is a beloved institution, and in this app, he shares 144 of his favorite recipes, all lushly illustrated with full color step-by-step photographs and beautiful HD video demos and vignettes (<a target="_blank"  href="https://vimeo.com/55788955">video</a> | <a target="_blank" href="https://itunes.apple.com/us/app/lark-cookbook/id589853941?mt=8">iTunes</a>). Organized according to three distinct seasons &#8211; Evergreen, Bounty and Mist &#8211; the app is an homage to the majesty and bounty of the Northwest. Rich in detailed instruction, inspiring recipes, and stunning images, this app is a must-have for all home cooks.</p>
<p><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/lark-cookbook-001.png" alt="Lark cookbook" /></p>
<p><strong>Why did you decide to use a mobile development platform instead of developing with the native SDKs?</strong><br />
We are a web development shop that has seen a growing number of requests from our clients for native app development over the last 2 years. Our decision to use Titanium allowed us to put to work the Javascript expertise we use everyday in web development to build native applications and for us that is very valuable.</p>
<p><strong>Why did you pick Titanium for your development needs? What other platforms did you consider?</strong><br />
We also explored Phonegap/Cordova. Our experience was that when rendered on the device the experience felt nicer with Titanium. We also wanted to be able to have more complex controls, and performance seemed to suffer when we built these in HTML5. We took a short dead end path into using phonegap, but quickly realized it was not going to be suitable for our application requirements.</p>
<p><strong>What Titanium modules did you use in your app? Did you develop any of your own modules?</strong><br />
As we were developing a cooking app, we were most concerned with the quality of the content. Our editorial team was also widely distributed, with the Author and Chef developing the recipes, his staff turning them into things a normal person could cook at home, and a large panel of testers cooking (and eating) the results. We had folks all over the US, and even an editor in London helping out. As a result we need a good toolset for data entry and management. The Drupal tools we use for our normal web development allowed us to build an online data entry site for everyone to use as a collaborative tool.</p>
<p>Then we extended the site using a Drupal query builder called Views so we could expose the data directly to Titanium via a REST interface with endpoints on the recipe data set. On the Titanium side, we chose to use a module called <a target="_blank" title="JSONDB" href="https://github.com/irlgaming/jsondb-public#readme" target="_blank">JSONDB</a> (deprecated now in favor of <a target="_blank" title="Sculejs" href="https://github.com/dan-eyles/sculejs" target="_blank">SculeJS</a>) for local data storage since it provided a familiar MongoDB style of interaction. During data entry and content testing we ran regular exports from the site so we could develop against a “real” data set. Once the data was finalized it was a simple matter of importing into the local database, knowing we had already found most of the edge cases during data entry.</p>
<p><strong>Can you walk me through how you developed this application?</strong><br />
Early on in the process we realized that implementing our interface design was going to present some major performance challenges. The book is broken up into “plates” each of which consists of one or more recipes, and each recipe has multiple steps. Each step is made up of a large number of views, with up to 5 variable length text items, and dynamically determined spacing for controls on each step.</p>
<p>While displaying some of this complex data we experienced significant lag that caused a poor user experience. Drawing these steps means calculating text lengths dynamically, and the combined rendering and redraw time after the length could be calculated was unacceptable. Our solution was to create a second “render robot” app from the same code base, that ran through the entire data set, rendered the displays, and stored the heights/lengths of all the steps in a JSONDB table. We then were able to use that table to display the steps in the real app using absolute measurements, which resulted in a massive improvement in performance even on the most visually complex screens! See a short video here of this in action here:</p>
<p><iframe src="http://player.vimeo.com/video/65165887?byline=0&amp;portrait=0" frameborder="0" width="500" height="281"></iframe></p>
<p><a href="http://vimeo.com/65165887">LARK &#8211; Cooking Against the Grain iPad App Demo</a> from <a href="http://vimeo.com/user10175706">Lark Cookbook</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>A short tour of the iPad cookbook app with a look at the Chocolate Madeleines recipe.</p>
<hr />
<p>Big thanks to Jared for taking the time to give us some insight into his experience and success with Titanium app development. Interested in having your Titanium app showcased? Send us an email at <a title="community@appcelerator.com" href="mailto:community@appcelerator.com" target="_blank">community@appcelerator.com</a> and share your story with us!</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/05/featured-developer-spotlight-lark-cookbook.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beginners: Javascript Objects and Arrays</title>
		<link>http://developer.appcelerator.com/blog/2013/04/beginners-javascript-objects-and-arrays.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/04/beginners-javascript-objects-and-arrays.html#comments</comments>
		<pubDate>Thu, 25 Apr 2013 17:25:08 +0000</pubDate>
		<dc:creator>Ricardo Alcocer</dc:creator>
				<category><![CDATA[ @en]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20638</guid>
		<description><![CDATA[If you&#8217;re new to Titanium, first of all Welcome! If you are just starting out with Javascript, this post will definitely help you understand two very important features of Javascript: Object and Array literals. Knowing their syntax will not only help you understand how Titanium works, but will speed up your understanding of CommonJS and [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
    .appc_snippet{
      border: 1px solid #a8a8a8;
      padding: 5px;
      background-color: #eaeaea;
      margin-bottom: 5px;
    }
  </style>
<p>If you&#8217;re new to Titanium, first of all Welcome!</p>
<p>If you are just starting out with Javascript, this post will definitely help you understand two very important features of Javascript: Object and Array literals.  Knowing their syntax will not only help you understand how Titanium works, but will speed up your understanding of CommonJS and JSON.</p>
<p>Perhaps you don&#8217;t know them by name, but the truth is that when you work with Javascript, you&#8217;re working with Objects all the time without realizing it.  Take a look at the following example:</p>
<div class="appc_snippet">
<pre>
var carmake='Honda';
console.log(carmake.toUpperCase());
</pre>
</div>
<p>Where did toUpperCase come from? Here you have used an Object.  Every time you create a String variable, you&#8217;re actually creating a String Object.  This object has properties and methods, toUpperCase being just one of them.  More details about the String object <a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String" target="_blank">here</a>.  Get used to the word &#8220;Object&#8221;, because is the foundation of modern programming.</p>
<p><strong><br />
<h2>Object Literals</h2>
<p></strong></p>
<p>Object Literals are Objects that you create on the fly.  The syntax for Object literals is simple:  </p>
<ul>
<li>Enclose it in curly brackets</li>
<li>separate properties with comma</li>
<li>separate keys and values with a colon</li>
</ul>
<div class="appc_snippet">
<pre>
var person={
    name: 'jack',
    email: 'jack@ctu.com',
    twitter: '@jackb_ctu'
};
</pre>
</div>
<p>To access the values on this object, you can use &#8220;dot notation&#8221;, that is, the name of the object, a dot, and the name of the property.</p>
<div class="appc_snippet">
<pre>
console.log(person.name);
console.log(person.twitter);
</pre>
</div>
<p>  <strong><br />
<h2>Array Literals</h2>
<p></strong></p>
<p>Just like objects, arrays can also be created on the fly.  The syntax rules for array literals: </p>
<ul>
<li>Enclose it in square brackets</li>
<li>separate each element with comma</li>
</ul>
<div class="appc_snippet">
<pre>
var arr=[
            'value1',
            'value2',
            'value3'
        ];
</pre>
</div>
<p>To access the values, you use a numerical index:</p>
<div class="appc_snippet">
<pre>
console.log(arr[0]);
</pre>
</div>
<p>  <strong><br />
<h2>The fun part</h2>
<p></strong></p>
<p>The power of Javascript Object and Array literals comes by combining them.  A combination of Objects and Arrays make up a complex, multidimensional object.  </p>
<p>  <strong><br />
<h3>Array literal with two objects as values</h3>
<p></strong></p>
<div class="appc_snippet">
<pre>
var arr=[
           {key1:'value1'},
           {key2:'value2'}
        ];
console.log(arr[0].key1);
</pre>
</div>
<p>  <strong><br />
<h3>Object literal with a two-item array as property</h3>
<p></strong></p>
<div class="appc_snippet">
<pre>
var obj={
            key:[
                   'value1',
                   'value2'
                ]
        };
console.log(obj.key[1]);
</pre>
</div>
<p>  <strong><br />
<h3>Array literal with one property that is a two-item array</h3>
<p></strong></p>
<div class="appc_snippet">
<pre>
var arr=[
           {
              key:[
                    'value1',
                    'value2'
                  ]
            }
         ];
console.log(arr[0].key[1]);
</pre>
</div>
<p>This syntax is very popular in today&#8217;s <a href="http://developer.appcelerator.com/blog/2013/03/consuming-data-from-web-services.html">web services</a> and perhaps you&#8217;ve heard of JSON (Javascript Object Notation).  <A href="http://json.org">JSON</a> is an implementation of this syntax designed to be a way of transporting data across the Internet.</p>
<p>  <strong><br />
<h2>Applying these concepts in Titanium</h2>
<p></strong></p>
<p>Titanium itself is a JavaScript SDK (Software Development Kit) that works as an &#8220;Object Factory&#8221;.  This means that it has methods that generate Objects, and most of the times these methods receive Objects as arguments.  It sounds more confusing than it is.</p>
<div class="appc_snippet">
<pre>
var win=Titanium.UI.createWindow({
    backgroundColor: '#fff',
    fullscreen: true
})
</pre>
</div>
<p>The result of this operation is a Titanium Window Object stored in the variable win.  However, the createWindow method received an object as argument, and object with the properties backgroundColor and fullscreen.  As you can see, knowing how an object is constructed allows you to understand that the createWindow() and the toUpperCase() methods are very similar.  The difference is that you are sending an Object Literal to the createWindow method.</p>
<p>A full description of Titanium&#8217;s objects can be found at <a href="http://docs.appcelerator.com/titanium/latest/" target="_blank">Titanium API Documentation</a>.</p>
<p>I hope this short tutorial can help you understand Titanium&#8217;s syntax and how powerful it can be.</p>
<p>Codestrong!</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/04/beginners-javascript-objects-and-arrays.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Making it easy to port your apps to Tizen: A promotion from appbackr for Titanium developers</title>
		<link>http://developer.appcelerator.com/blog/2013/04/making-it-easy-to-port-your-apps-to-tizen-a-promotion-from-appbackr-for-titanium-developers.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/04/making-it-easy-to-port-your-apps-to-tizen-a-promotion-from-appbackr-for-titanium-developers.html#comments</comments>
		<pubDate>Wed, 24 Apr 2013 22:18:31 +0000</pubDate>
		<dc:creator>Gregory DiPaolo</dc:creator>
				<category><![CDATA[ @en]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20905</guid>
		<description><![CDATA[The following guest spot is from Trevor Cornwell, Founder and CEO at appbackr. You can follow him on Twitter at @trevorcornwell Titanium makes it easy for developers to build mobile apps and publish them across platforms. It is a big step forward. appbackr is focused on motivating more developers to build across newly emerging platforms. [...]]]></description>
			<content:encoded><![CDATA[<p><em>The following guest spot is from Trevor Cornwell, Founder and CEO at appbackr. You can follow him on Twitter at <a href="https://twitter.com/trevorcornwell" title="Trevor Cornwell" target="_blank">@trevorcornwell</a></em></p>
<hr />
<p>Titanium makes it easy for developers to build mobile apps and publish them across platforms. It is a big step forward.  appbackr is focused on motivating more developers to build across newly emerging platforms.</p>
<p>Encouraging distribution to other platforms is challenging because of a few basic reasons, starting with “Is it worth my time to port to any given new platform?” Because selling apps, like any content, is a matter of aggregating medium and long-tail users, we believe that porting to a new platform makes sense.  Except that there are tedious sign-up processes, long contracts that may subsume distribution rights and unknown SDKs, which all create just enough friction to make the process eminently skippable.</p>
<p>And the problem exists on the other side: new platforms want great apps, but not necessarily sub-prime, chop-shop apps.</p>
<p>So how do great developers with the best new apps meet great, emerging platforms efficiently?</p>
<p>appbackr is providing a promotion to Titanium developers to help! We’ve made it possible for every app that you create to get scored for quality and relevance on a 1 to 10 scale.  The <a href="http://www.appbackr.com/xchange/" title="appbackr" target="_blank">best apps receive tools and a guarantee number of downloads based on the store’s needs</a> and how well your app fits.</p>
<p>As part of this promotion, once you build your app on Titanium, you can see the score and your offer.  With the announcement of Titanium’s support of Tizen, appbackr has scored every app and Titanium developers will be receiving a <a href="http://www.appbackr.com/tizen" title="Tizen port" target="_blank">simple 3-step process for porting to Tizen</a> and getting a minimum guarantee for your app.</p>
<p>You can also sign on to Xchange and track your installs on one dashboard and even consolidate payments so you don’t have to provide your bank account information to every new platform that asks for it.</p>
<p>Why Tizen?  This is a chance to have your app, live, right from the start of a brand-new operating system built on HTML5 and part of the Linux Foundation.  It has heavy support from Samsung, Intel and major carriers around the world.</p>
<p>And once your app is live in Tizen, we can give you additional offers like free translation into launch country languages, and even offers to port to additional HTML5 platforms that are relevant to your app.</p>
<p>You made a great decision building with Titanium.  Your app is ready to go in Tizen. Now, submit it through Xchange and receive the financial incentives that your app deserves.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/04/making-it-easy-to-port-your-apps-to-tizen-a-promotion-from-appbackr-for-titanium-developers.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Featured Developers &#8211; OpenRest</title>
		<link>http://developer.appcelerator.com/blog/2013/04/featured-developers-openrrest.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/04/featured-developers-openrrest.html#comments</comments>
		<pubDate>Mon, 22 Apr 2013 17:23:44 +0000</pubDate>
		<dc:creator>Gregory DiPaolo</dc:creator>
				<category><![CDATA[ @en]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20886</guid>
		<description><![CDATA[Today&#8217;s featured developer story comes from the guys at OpenRest. OpenRest was founded in 2010 with the intent of revolutionizing mobile online food ordering. With the help of Titanium, Danny Leshem and Yoav Amit have delivered over 300 restaurant apps. Read more about their story and how they&#8217;re leveraging Titanium. Interview with Danny Leshem and [...]]]></description>
			<content:encoded><![CDATA[<style>.question { font-size:1.2em; font-weight:bold; }</style>
<p><img style="float: left; height: 128px; padding-right: 20px;" src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/open_rest_devs.png" alt="OpenRest" /><em>Today&#8217;s featured developer story comes from the guys at <a target="_blank" href="http://www.openrest.com/" title="OpenRest">OpenRest</a>. OpenRest was founded in 2010 with the intent of revolutionizing mobile online food ordering. With the help of Titanium, Danny Leshem and Yoav Amit have delivered over 300 restaurant apps. Read more about their story and how they&#8217;re leveraging Titanium.</em></p>
<h2 style="padding-bottom: 20px;">Interview with Danny Leshem and Yoav Amit from OpenRest</h2>
<div style="padding-left: 20px;">
<p class="question">What is your background as mobile developers?</p>
<p><a target="_blank" href="https://www.openrest.com/" title="OpenRest" target="_blank">OpenRest</a> was founded by Danny Leshem and Yoav Amit in late 2010 in order to revolutionize online food ordering. The company originally focused on web development, but quickly realized that the future of the business was in mobile and that a tremendous opportunity exists for great products in this field. </p>
<p>With an amazing team and a clear vision, OpenRest entered the mobile development world in late 2011 and never looked back. We currently have over 300 restaurant apps live on the appstore.</p>
<p>All software developers at OpenRest have a strong background in writing enterprise systems, from embedded code that’s executed on millions of TVs worldwide to security products that are now part of Microsoft’s enterprise solutions. We look for developers who see new programming languages and new platforms as opportunities and not as barriers, which may be the reason why we do things a bit differently.</p>
<p>As the name suggests, OpenRest strives on an open atmosphere. New ideas are implemented and released just as quickly as they are brought up, in two week sprints. We believe in giving back to the development community and encourage our developers to answer questions in forums and to open-source our internal non-core tools and libraries (<a href="https://github.com/openrest" title="Github repo" target="_blank">Github repo</a>). OpenRest&#8217;s R&#038;D is in sunny Israel, &#8220;the startup nation&#8221; &#8211; our office has a great view of the Tel Aviv beach.</p>
<p class="question">So tell us a little bit about your apps</p>
</p>
<p>OpenRest builds the smartest online ordering portals. Simply put, our platform lets anyone operate their own “Seamless” or “GrubHub” like food ordering portal. Our clients are local food portals that see the value in having the best technology and in offering their users the best experience, all under their own brand. Obviously, mobile apps are an important part of the platform.</p>
<p>Furthermore, our product also lets portal owners create white-label online ordering websites and mobile apps for the restaurants they service. Using a simple graphical interface, portal owners enter the restaurant’s information, customize its design, upload images and a few clicks later a unique restaurant app is generated and distributed to the App Store and to Google Play. It’s as simple as that.</p>
<p>Our existing clients in Israel, Belgium, Canada, the UK and the US use this platform to create and distribute their portal apps, as well as hundreds of white-label restaurant apps. Every day, thousands of people order food deliveries and take-outs using our apps and websites.</p>
<p><img src="http://www.appcelerator.com.s3.amazonaws.com/blog/dev/open_rest_apps.png"></p>
<p class="question">Why did you pick Titanium for your app development?</p>
</p>
<p>The first version of our restaurant app was actually developed in pure Objective C, and we released several apps based on it.</p>
<p>When we decided to expand to more platforms, we started looking for frameworks that would allow us to share code between iOS, Android, and the web. We didn&#8217;t mind dumping our existing code as we figured that in the long run the time saved by a unified codebase would well cover the one-time cost of the rewrite.</p>
<p>Our top requirements from such framework were:</p>
<ul>
<li>Performance: in online ordering, a fluid user experience directly correlates to revenues. This meant we had to focus on native frameworks rather than on HTML5.
</li>
<li>Multi-platform: at the very least iOS and Android (extra bonus points for web).
</li>
<li>Support: large and active development community (extra bonus points for open-source).
</ul>
<p>We found Titanium to be a perfect fit.</p>
<p class="question">What were some of the highlights of Titanium development for you?</p>
</p>
<p>First and foremost, by implementing a <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter" title="Model View Presenter" target="_blank">Model-View-Presenter</a> design our entire line of client-side products is now based on a unified JavaScript codebase: native mobile (utilizing Titanium), mobile-web (utilizing &#8220;The M Project&#8221;) and desktop web (utilizing jQuery). This translates to huge time savings that allow us to focus on innovation rather than on maintenance.</p>
<p>Second, the large community behind Titanium means that we are never left hanging. On rare occasions when we didn&#8217;t get answers from the community, a quick look at Titanium’s source code was enough.</p>
<p>Last, Titanium enabled us to create self updating native apps. We use this extensively during development to eliminate the constant need for long and tiresome deployments, and in our production Android apps.</p>
<p>We plan to write a series of technical posts on all of this in our <a href="http://tech.openrest.com/" title="Tech Blog" target="_blank">Tech Blog</a>, so stay tuned.</p>
<p class="question">How many people worked on it? How long did it take to design, implement, and test?</p>
</p>
<p>Our app development is ongoing as we continuously add more features, and our unified codebase approach means that all OpenRest developers occasionally write Titanium code. Still, the majority of our Titanium-specific code was written by two people over the course of a few months.</p>
<p>It takes us far less time to design and implement apps in JavaScript using Titanium than in standard native code &#8211; mainly thanks to code sharing, but also because it is much easier to find good JavaScript resources and developers.</p>
<p class="question">What resources did you use to learn and develop with Titanium?</p>
</p>
<p>Coming from native development background, we found Titanium to be very easy and intuitive to learn.</p>
<p>We started by studying the KitchenSink code and various online tutorials, and today we mainly use the API documentation, the developer forums and StackOverflow. When needed, we also dive into the native code.</p>
<p>All our developers follow Appcelerator&#8217;s blog for platform updates. </p>
<p class="question">Do you have plans for updates to the OpenRest Platform or future Titanium apps? Care to share some details?</p>
</p>
<p>We continuously update our platform and our apps with new features, designs and bug fixes requested by our clients. Right now we’re closing our mobile-web version, which will also be integrated into several 3rd-party apps that wish to leverage our affiliate program.</p>
<p>Looking forward we plan to expand our mobile apps beyond online ordering, to help our clients keep their commanding positions as technology leaders in their respective markets. We’ll also be the first to support any new platform &#8211; for that we are counting on Titanium’s quick response to new emerging technologies.</p>
<p class="question">Any additional thoughts or notes on Titanium development?</p>
</p>
<p>Our apps keep pushing the limits for performance, and lately we started feeling that we have reached the barrier with our Titanium-based apps. We are anxiously waiting for Titanium’s new ListView implementation which should boost performance across all our apps. We’d also love to see official cross-platform support for background threads in future versions of Titanium, e.g. based on the web worker interface.</p>
<p>Another feature that all Titanium users should benefit from are ready-made integrations with mobile ad networks. Effective marketing is a major contributor to mobile apps’ success, so giving Titanium developers the tools to support such efforts would be highly advantageous for everyone.</p>
<p class="question">Why is being a mobile developer the coolest job on the planet?</p>
</p>
<p>On the grand scheme of things, mobile developers can instantly share their creations with millions of people by simply uploading an app to the appstore. Mobile is the “new frontier” for software developers, and everyone (and we mean EVERYONE) has “the next awesome idea for a mobile app”. This is unparalleled in our history.</p>
<p>On a day to day basis, it’s just fun to wake up in the morning, meet clients, designers and marketing people, and create cool apps that your users love (and they keep telling you that in appstore rankings). There’s just something special about sitting somewhere and noticing a random person take out their iPhone and casually use something you created. Oh, and the pay is great! :)</p>
<p>Developing mobile apps is much more challenging than, say, developing standard web applications. In fact, it has a lot in common with writing embedded code when it comes to the limitations you have to face. Finding creative solutions for these limitations is a big part of the fun.</p>
<p class="question">What is the most exciting problem that you’ve attacked as a mobile developer?</p>
</p>
<p>We want our apps to deliver an amazing experience as it directly correlates to usage and popularity, but achieving this on mobile devices is difficult due to limitations in screen size, processing power and network latency. Alas, this doesn&#8217;t prevent our users from having extremely high expectations!</p>
<p>Getting there requires us to continuously combine good-old-fashioned code optimizations and a variety of UX tricks. It&#8217;s a problem that can&#8217;t be solved by simply programming the right way or having a great design, but by finding smart ways to combine the two. It requires all the brains in the company working together to find creative solutions.</p>
<p class="question">What advice do you have for companies that want to delight their users with mobile?</p>
</p>
<p>First, go native. The future of mobile apps may (or may not) be HTML5, but delivering the best experience to your users right now requires you to write native apps (Titanium apps included, of course)</p>
<p>Second, don&#8217;t underestimate the power of design. Good programming is only half of what makes a great app. For your app to spread like wildfire, for people to talk about it, use it again and again and give it high ratings – the app must be beautiful. And that requires great designers&#8230; and just a bit of luck :)</p>
<p>Finally, you must have good analytics. Define success metrics, measure user engagement and continuously identify your app’s hot spots. Understand how users actually use the app, and use this knowledge to make their experience better.</p>
<p class="question">What inspires you about the future of mobile?</p>
</p>
<p>The rate of change is simply overwhelming. Do you realize that the first iPhone was released less than 6 years ago, and that 3 years ago we didn&#8217;t have iPads? Every year brings new paradigm shifting technologies that rapidly spread worldwide. These are very exciting times to be living in!</p>
<p class="question">Do you have some links you would like to share?</p>
<p><a href="http://www.openrest.com/" title="Website" target="_blank">OpenRest website</a><br />
<a href="http://blog.openrest.com/" title="Blog" target="_blank">Blog</a> &#8211;<br />
<a href="http://tech.openrest.com/" title="Tech Blog" target="_blank">Tech blog</a><br />
<a href="http://www.facebook.com/Openrest" title="Facebook" target="_blank">Facebook</a><br />
<a href="http://www.twitter.com/Openrest" title="Twitter" target="_blank">Twitter</a>
</div>
<p>Do you have an interesting story to tell about your development on Titanium? We would love to hear it. Drop us a line at <a href="mailto:community@appcelerator.com" title="community@appcelerator.com" target="_blank">community@appcelerator.com</a> and tell us more. </p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/04/featured-developers-openrrest.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adding PHP, Ruby or Python support to Titanium Studio</title>
		<link>http://developer.appcelerator.com/blog/2013/04/adding-php-ruby-or-python-support-to-titanium-studio.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/04/adding-php-ruby-or-python-support-to-titanium-studio.html#comments</comments>
		<pubDate>Tue, 16 Apr 2013 23:58:47 +0000</pubDate>
		<dc:creator>Ingo Muschenetz</dc:creator>
				<category><![CDATA[ @en]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[release_3.1]]></category>
		<category><![CDATA[Studio]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20876</guid>
		<description><![CDATA[As part of our latest 3.1.0 release, we slimmed down Titanium Studio by making certain pieces optional installs, namely the support for server-side languages. Fear not! It&#8217;s easy to add them back in again: Launch Titanium Studio; Go to Help &#62; Install New Software… Enter the following URL in the &#8220;Work with: &#8221; field: PHP [...]]]></description>
			<content:encoded><![CDATA[<p>As part of our latest 3.1.0 release, we slimmed down Titanium Studio by making certain pieces optional installs, namely the support for server-side languages. Fear not! It&#8217;s easy to add them back in again:</p>
<ol>
<li>Launch Titanium Studio;</li>
<li>Go to Help &gt; Install New Software…</li>
<li>Enter the following URL in the &#8220;Work with: &#8221; field:
<ul>
<li>PHP - <a href="http://download.appcelerator.com/aptana/studio3/php/update/stable">http://download.appcelerator.com/aptana/studio3/php/update/stable</a></li>
<li>Ruby - <a href="http://download.appcelerator.com/aptana/studio3/ruby/update/stable">http://download.appcelerator.com/aptana/studio3/ruby/update/stable</a></li>
<li>Pydev - <a href="http://download.appcelerator.com/aptana/studio3/pydev/update/stable">http://download.appcelerator.com/aptana/studio3/pydev/update/stable</a></li>
</ul>
</li>
<li>Check the top level node in the table and go through the wizard to install.</li>
</ol>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/04/adding-php-ruby-or-python-support-to-titanium-studio.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Announcing Titanium 3.1 and Node.ACS Production Releases</title>
		<link>http://developer.appcelerator.com/blog/2013/04/announcing-titanium-3-1-and-node-acs-production-releases.html</link>
		<comments>http://developer.appcelerator.com/blog/2013/04/announcing-titanium-3-1-and-node-acs-production-releases.html#comments</comments>
		<pubDate>Tue, 16 Apr 2013 20:28:37 +0000</pubDate>
		<dc:creator>Ingo Muschenetz</dc:creator>
				<category><![CDATA[ @en]]></category>

		<guid isPermaLink="false">http://developer.appcelerator.com/blog/?p=20851</guid>
		<description><![CDATA[It’s all about enterprise connectivity, performance and new platforms We have kept ourselves pretty busy here at Appcelerator over the last couple of months. Today we are excited to announce a major release for both the Titanium and Cloud products: Titanium Studio and SDK 3.1 and Node.ACS GA. Titanium 3.1 In the 3.1 release we [...]]]></description>
			<content:encoded><![CDATA[<h2>It’s all about enterprise connectivity, performance and new platforms</h2>
<p>We have kept ourselves pretty busy here at Appcelerator over the last couple of months. Today we are excited to announce a major release for both the Titanium and Cloud products: Titanium Studio and SDK 3.1 and Node.ACS GA.</p>
<h3>Titanium 3.1</h3>
<p>In the 3.1 release we focused on 3 key areas: performance optimization, APIs, and new platform support. Please see the <a title="3.1.0 Release notes" href="http://docs.appcelerator.com/titanium/release-notes/?version=3.1.0.GA" target="_blank">release notes</a> for further details.</p>
<h3>Performance Optimization</h3>
<ul>
<li>We spent significant time optimizing the core architecture of Titanium, focusing on object creation, window creation, image usage and other key areas with broad applicability. For these integral pieces:</li>
<ul>
<li>iOS apps will run on average 20% faster over our 3.0.0 release</li>
<li>Android apps will run on average 36% faster over our 3.0.0 release</li>
</ul>
<li>We have also released the ListView component which functions several times faster than the TableView component.</li>
</ul>
<p>In short you should notice a performance improvement for all of your apps running under 3.1.0.</p>
<h3>Alloy Updates</h3>
<p>We have also been hard at work extending Alloy, our MVC framework. The amount of positive feedback that we have received on Alloy has been outstanding, and It is being adopted at a rate faster than we ever expected.</p>
<p>Titanium Studio 3.1.0 now supports the following features for Alloy apps:</p>
<ul>
<li>Content assist</li>
<li>Debugging</li>
</ul>
<h3>APIs</h3>
<p><strong>ListView</strong><br />
This release introduces ListView, a new Titanium component to replace the existing TableView. ListView uses a data-oriented approach versus TableView’s view-oriented approach which greatly improves performance.</p>
<p><strong>iOS EventKit UI Framework</strong><br />
The iOS EventKit framework, allowing access to calendar events and reminders, is now available from within Titanium.</p>
<h3>Modules</h3>
<p>In this release we have also released some new modules. Specifically:</p>
<ul>
<li><a title="Newsstand module" href="https://marketplace.appcelerator.com/apps/5484?1244467005" target="_blank">Newsstand</a> (iOS): Publish a magazine or periodical with Titanium</li>
<li><a title="NFC" href="https://marketplace.appcelerator.com/apps/5483?1079629308" target="_blank">NFC</a> (Android): Read NFC (Near-Field Communication) tags from inside Titanium applications.</li>
<li>Facebook V3 (<a title="Facebook module" href="https://github.com/appcelerator/titanium_modules/blob/master/facebook/mobile/android/dist/facebook-android-3.0.0.zip" target="_blank">Android</a>, <a title="iOS FB module" href="https://github.com/appcelerator/titanium_modules/blob/master/facebook/mobile/ios/facebook-iphone-3.1.1.zip" target="_blank">iOS</a>) API support</li>
</ul>
<h3>New Platforms</h3>
<p>3.1 contains support for mobile platforms beyond iOS and Android:</p>
<p><strong>Tizen</strong><br />
<a title="Tizen" href="https://www.tizen.org" target="_blank"> Tizen</a> is an open source, standards-based, mobile software platform supported by leading mobile operators and device manufacturers including Samsung and Intel. It is now a full member of the Titanium family, supported in Titanium 3.1.0 Studio and SDK.</p>
<p><strong>BlackBerry</strong><br />
Our Blackberry 10 support is now in beta. Please begin building apps for the BlackBerry 10 and provide us with <a title="BlackBerry feedback" href="https://groups.google.com/forum/#!forum/appc-ti-mobile-blackberry" target="_blank">feedback</a>. In this beta release we believe there are the majority of features to get you started, including Alloy support, MapView, WebView, Database, Localization Support, and much, much more. </p>
<p>To use the BlackBerry beta, you must download a 3.2 version of the Titanium SDK from the continuous integration (CI) server. Note that the 3.2 builds have not received any testing except for the BlackBerry beta. For all other platforms, these builds should be regarded as unstable builds</p>
<h3>Downloading 3.1.0</h3>
<p>For new users, download Titanium 3.1 by clicking <a style="font-size: 13px; font-weight: normal;" title="Signup for Titanium" href="https://my.appcelerator.com/auth/signup" target="_blank">here</a>.</p>
<p>For existing Titanium Studio users, you will be prompted to update automatically on the next restart. You can also manually check for updates by selecting the “Check for Titanium SDK Updates” from the “Help” menu within Titanium Studio.</p>
<p><strong>If you previously installed the Release Candidate versions of the Titanium CLI and Alloy</strong>, that is, <em>npm install titanium@3.1.0-cr</em> and <em>npm install alloy@1.1.0-cr</em>, or any -beta or -cr packages, you need to first uninstall these components before installing or updating to 3.1.0.GA. The <a href="http://docs.appcelerator.com/titanium/release-notes/?version=3.1.0.GA">release notes</a> contain specific instructions on how to do so.</p>
<h3>Node.ACS version 1.0 (GA)</h3>
<p>Node.ACS extends Appcelerator Cloud Services by providing the popular Node.JS development framework on the middle-tier. Using Node.ACS, you can implement and deploy server services using JavaScript on the Appcelerator Cloud. You can develop connectors to enterprise data back-ends like Oracle or Salesforce for your entire mobile app portfolio, extend the functionality of prebuilt services provided by Appcelerator Cloud Services (ACS) or simply use any of the 1000’s Node.JS modules published by the developer community.</p>
<p>As a developer, you will immediately realize the benefits of:</p>
<ul>
<li>a single programming language (JavaScript) and development environment (Studio) for both client and server side code.</li>
<li>a single location to host your business and application logic</li>
<li>easy access to the ACS database and storage</li>
<li>an MVC framework for creating scalable Node.ACS apps</li>
<li>ability to update your Node.ACS app independently from your mobile app</li>
<li>reliable, scalable infrastructure for your backend</li>
</ul>
<p>With Node.ACS, Appcelerator Cloud becomes a comprehensive MBaaS (Mobile Backend-as-a-Service) that any enterprise can use for deploying the server code for its mobile apps. Node.ACS will be available as part of the Appcelerator Platform offering. Node.ACS apps can be deployed both on the public Appcelerator Cloud and a Virtual Private Cloud.</p>
<p><strong>Getting Started with Node.ACS</strong></p>
<p>To start developing Node.ACS apps, use the resources below:</p>
<ul>
<li><a title="Node ACS quickstart" href="http://docs.appcelerator.com/cloud/latest/#!/guide/node_quickstart" target="_blank">Node.ACS quickstart guide</a></li>
</ul>
<p><em>Note: if you were participating in the Node.ACS developer preview, see the <a title="Node.ACS release notes" href="http://docs.appcelerator.com/cloud/latest/#!/guide/node_releasenotes" target="_blank">Node.ACS Release Notes</a> for instructions on how to migrate your Node.ACS apps.</em></p>
<p>As always I want to thank our 450,000 strong community of developers for your constant feedback and support.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.appcelerator.com/blog/2013/04/announcing-titanium-3-1-and-node-acs-production-releases.html/feed</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
	</channel>
</rss>
