<?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>Gravity Jack &#187; Search Results  &#187;  asp</title>
	<atom:link href="http://gravityjack.com/search/asp/feed/rss2/" rel="self" type="application/rss+xml" />
	<link>http://gravityjack.com</link>
	<description>Gravity Jack - Software Studio</description>
	<lastBuildDate>Wed, 01 Feb 2012 18:48:41 +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>Augmented Reality (AR) Demo from Gravity Jack &#8211; [Video]</title>
		<link>http://gravityjack.com/augmented-reality-ar-printer-demo-from-gravity-jack-video</link>
		<comments>http://gravityjack.com/augmented-reality-ar-printer-demo-from-gravity-jack-video#comments</comments>
		<pubDate>Wed, 16 Nov 2011 18:59:49 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[AR Newsflash]]></category>
		<category><![CDATA[Demo-lition]]></category>
		<category><![CDATA[Videos]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[augmented]]></category>
		<category><![CDATA[augmented reality]]></category>
		<category><![CDATA[reality]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=1862</guid>
		<description><![CDATA[Here’s a new video from us, here at Gravity Jack, showcasing a practical (and pretty awesome) application for augmented reality (AR) that we have been working to develop. Augmented reality has already become headliner for the “future of technology” show, and much of this support is due to one, simple fact: Augmented Reality drops jaws. ...]]></description>
			<content:encoded><![CDATA[<p>Here’s a new video from us, here at Gravity Jack, showcasing a practical (and pretty awesome) application for augmented reality (AR) that we have been working to develop. Augmented reality has already become headliner for the “future of technology” show, and much of this support is due to one, simple fact: Augmented Reality drops jaws.</p>
<p>Any time someone uses AR for the first time, regardless of what they’ve been told, how many videos they’ve seen, or how well they think they understand the concept, they leave the experience as a fan, and want more.  It is for this reason that the all-star developers at Gravity Jack are constantly working to keep up with all the new, innovative uses for augmented reality. (When your industry niche is being the hands-down best, it’s something that is mandatory.)</p>
<p>The video showcases one of our office printers. What makes this short video (about a printer, nonetheless) exciting is the sheer possibility that pours from this kind of production, in the future. Go ahead and have a look at the short video, before we explain how you&#8217;ll, without a doubt, have this stuff in your house sooner than you think.</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/TmORJcTWohI?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>According to Shawn Poindexter, Director of Development here at Gravity Jack, uses for augmented reality that have been considered (by other studios) to be futuristic, are closer than you think.</p>
<p>“Augmented reality is often known by its ‘wow’ factor,” admits Poindexter, “but, a place where (augmented reality) will be getting into, very soon, is guide development and demos.”</p>
<p>In the future, Gravity Jack looks to use our patented AR technology to make information, regarding product development, guides, demos, and quality control much more efficient.<br />
As for how it works, we’ll explain:</p>
<p>First, the app is looking to see if it recognizes anything that we have programmed it to. Once it recognizes the marker, it can tell, based on the size and location of the marker, where the printer is in the view. The app is programmed to already know the internal dimensions and parts, so at this point, it is able to overlay the 3-dimensional parts, created by our developers, on top of what you’re seeing. Now, they can be animated, moved, and used to display anything you could do, with the actual printer, without consequence.</p>
<p>The concept makes sense, but its implication for the future does not stop with our printer.</p>
<p>“In the future, augmented reality could reduce error,” Poindexter continues, “and in the event an error occurs, correct them before causing future mistakes.”</p>
<p>Take, for example, a tutorial on how to change the air filter in your car:</p>
<p>Anyone, using AR, could be led, step by step, through the simple process, in a matter of minutes.  The demo could highlight the part to be moved, and recognize when it had been done, then directing the user with the next, correct step.</p>
<p>Are you starting to get the picture? The ramifications for the future are widespread and have the opportunity to affect every aspect, of every industry.</p>
<p>We’re just stoked we’re the ones bringing it to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/augmented-reality-ar-printer-demo-from-gravity-jack-video/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Countering HTML5&#8242;s shortcomings, with a native app and JavaScript alerts</title>
		<link>http://gravityjack.com/countering-html5s-shortcomings-with-a-native-app-and-javascript-alerts</link>
		<comments>http://gravityjack.com/countering-html5s-shortcomings-with-a-native-app-and-javascript-alerts#comments</comments>
		<pubDate>Tue, 01 Nov 2011 15:49:44 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Jack's Journal]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=1811</guid>
		<description><![CDATA[The late Steve Jobs made it a point to say that HTML5 will end up replacing Flash. The problem is, Flash has been in the game long enough to have quite an extensive plugin, running their proprietary language. They built this plugin for one major reason: to overcome the ability to access client side system ...]]></description>
			<content:encoded><![CDATA[<p>The late Steve Jobs made it a point to say that HTML5 will end up replacing Flash. The problem is, Flash has been in the game long enough to have quite an extensive plugin, running their proprietary language. They built this plugin for one major reason: to overcome the ability to access client side system resources. This is the major shortcoming with HTML5. Users have no control over what the browser will let you do, and what you <em>can do</em> is very limited.</p>
<p>HTML5 is just a catch phrase for Dynamic HTML (DHTML), which is just a combination of HTML, JavaScript, and CSS. The DHTML coding modal has been around for years, and all HTML5 brings to the table is more DOM tags to manipulate, and a few new JavaScript methods. One of the major issues with the modal is that the user has no control over the client side computer. In other words, there is no communication possible between the app and the viewing computer, beyond the scope of web browsing. So, why code in such a limited language set?</p>
<p>“Because…Steve Jobs said so.”<em>  </em>Buwahaha, No. <em></em></p>
<p>It’s because of the portability of the app. The great thing with DHTML is that it will run on any browser that supports the DOM that you are using. This makes interpolation an <em>almost </em>painless process.</p>
<p>So, you want a super badass HTML5 site, and you want to build it in a way that runs on all the devices known to man. This is quite easy—as long as you don’t care about audio effects, loading times, code security, or any of the sensors/hardware on the given device. I have found that most of the mobile browsers on the market today are extremely limited. On Android (API Level 8 and below), and also on iPhone (all versions), the webkit browsers have only one audio channel, user dialog (that can take up valuable screen space), and an incessant need to run everything its own way.  How do we overcome these problems? There are many options out there to make a so-called “webapp” (like PhoneGap, and XNA). These frameworks are a beautiful start to making a library, which is a plug and play solution, to gain access to system resources, from a web page. I have often found that what our clients need, exceed the scope of what they can do— and these systems are far to bloated for what we need.</p>
<p>So, we are left with one option; we make our own native app, which can create a web browser in a symbiotic relationship. We have a native device app that can spin up an instance of webkit, and only use the pieces we need for our given project to work. In the coding world, this is known as a “webUIView”, which can be utilized on all of the popular, full web enabled devices. With this web view, we have a system that can expose the hardware layer to our webapp. So, how are we going to communicate, back and forth, between the device and the webapp? In a nut shell, we have JavaScript injection, in order to inject some code in the DOM and run it, access to the DOM headers and control of the URL to run GET and POST procedures, access to the JavaScript console for debugging, and finally, the power to override the JavaScript dialog system for an events model, to be used from the DOM.</p>
<p>JavaScript injection is a process to create a string of DHTML, and push it to the DOM before the “onLoad” events are fired. This works like any other server side system, (i.e. PHP, ASP.NET, etc.) in that they have the ability to execute code before we hand it off to the browser. Having this, gives us the ability to pass information (and code) to the webapp for its own use (i.e., geo-location). This can also offer some security to your site by making the webapp worthless, unless executed from your native app.</p>
<p>Having access to the URL allows us to focus the user’s browser where we want them to go, and nowhere else. We can also place URL parameters in a load.url statement, forcing a POST action to happen. Lastly, this means that we can execute callback function, to run anything within our web app.</p>
<p>This is great. We have everything we need to push information to the webapp to enrich the user’s experience, but what about when we need the webapp to fire an event, inside the native code? Well, we can use the JavaScript console to pass serialized data to the native app, or we can use a JavaScript alert. In practice, I use the JavaScript Console for debugging, and the JavaScript alert system for events, mostly because I never use the JavaScript alert system at all (not cool enough). This benefits me, by keeping the debug system and events (JavaScript alert) system apart.</p>
<p>So, now I’ve come full circle, and have the ability create robust applications that will run on any platform (the way I want them to), without eating up resources, better utilized elsewhere. As time passes, technology will become better and these new standards will be finalized. When this happens, it will (without a doubt) be the way to develop on mobile platforms.</p>
<p>- Jack</p>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/countering-html5s-shortcomings-with-a-native-app-and-javascript-alerts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Recession? We&#8217;re Expanding!</title>
		<link>http://gravityjack.com/what-recession-were-expanding</link>
		<comments>http://gravityjack.com/what-recession-were-expanding#comments</comments>
		<pubDate>Tue, 25 Oct 2011 18:13:22 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Gravity Jack News]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=1788</guid>
		<description><![CDATA[When I was young, I had a striped rugby shirt.  To be honest, for the three years I wore that shirt, I probably looked more like a bumblebee than a rugby player but I wore it religiously.  Eventually, when my wrists started showing and the bottom seam crept higher on my waistline, I came to ...]]></description>
			<content:encoded><![CDATA[<p>When I was young, I had a striped rugby shirt.  To be honest, for the three years I wore that shirt, I probably looked more like a bumblebee than a rugby player but I wore it religiously.  Eventually, when my wrists started showing and the bottom seam crept higher on my waistline, I came to a realization: It had been the perfect shirt for the time, but I had to change; I had to accommodate growth.  So, I went and found a new one— One that fit.<em></em></p>
<p>It’s a lesson that everyone learns, and is one that Gravity Jack has experienced first-hand since we started with 5 employees, two years ago.  Now, sporting 38 (all-star) employees, with plenty more growth on hand, the time has come for Jack to take action.  Grab your cardboard boxes and packing tape, folks, because two years after we started, Gravity Jack is proud to say, “What recession?”</p>
<p>We’re moving up, moving out, and moving in to a new pad.</p>
<p>Gravity Jack will soon be cutting the ribbon to our brand-spankin’ new office on Appleway Avenue and, while we may only be moving just far enough to work up a pre-jog sweat, we’re psyched. The new office (pictured in its current state, below) will be the epicenter of shock waves, sending augmented reality in to the future. Boom.</p>
<p><a href="http://gravityjack.com/wp-content/uploads/newoffice1-size.jpg"><img class="alignnone size-medium wp-image-1789" src="http://gravityjack.com/wp-content/uploads/newoffice1-size-300x224.jpg" alt="New Office, photo 1" width="300" height="224" /></a><a href="http://gravityjack.com/wp-content/uploads/newoffice2-sized.jpg"> <img class="alignnone size-medium wp-image-1790" src="http://gravityjack.com/wp-content/uploads/newoffice2-sized-300x224.jpg" alt="New Office, photo 2" width="300" height="224" /></a></p>
<p>It’s big, and it’s got the size Gravity Jack needs to keep all hands on deck, moving forward with what we do best. The new location will house the entire development floor, the administrative offices and a conference room, keeping all aspects of our business working close together.  The best part, of course, is that we’re staying right here in Liberty Lake, where we’ve always called home.</p>
<p>We can’t wait to show you the finished digs, but we’re more excited about what it means for our future. We’ll be sure to keep you in the loop by posting photos, as the new place comes together!</p>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/what-recession-were-expanding/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iOS 5 for developers: What you need to know</title>
		<link>http://gravityjack.com/ios-5-for-developers-what-you-need-to-know</link>
		<comments>http://gravityjack.com/ios-5-for-developers-what-you-need-to-know#comments</comments>
		<pubDate>Wed, 08 Jun 2011 19:19:56 +0000</pubDate>
		<dc:creator>GravityJack</dc:creator>
				<category><![CDATA[Gravity Jack News]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=1615</guid>
		<description><![CDATA[Wow Apple has added a TON of new features for developers in iOS 5. Make sure you read this article if you are an iPhone / iPad developer to get the skinny on what is coming. This article summarizes the key developer-related features introduced in iOS 5.0. This version of the operating system runs on ...]]></description>
			<content:encoded><![CDATA[<h1 id="pageTitle"><span style="font-weight: normal; font-size: 13px;">Wow Apple has added a TON of new features for developers in iOS 5. Make sure you read this article if you are an iPhone / iPad developer to get the skinny on what is coming. This article summarizes the key developer-related features introduced in iOS 5.0. This version of the operating system runs on current iOS-based devices. In addition to describing the key new features, this article lists the documents that describe those features in more detail.</span></h1>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 20px; font-weight: bold;">iCloud Storage APIs</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The iCloud storage APIs let your application write user documents and data to a central location and access those items from all of a user’s computers and iOS devices. Making a user’s documents ubiquitous using iCloud means that a user can view or edit those documents from any device without having to sync or transfer files explicitly. Storing documents in a user’s iCloud account also provides a layer of security for that user. Even if a user loses a device, the documents on that device are not lost if they are in iCloud storage.</p>
<p>&nbsp;</p>
<p>There are two ways that applications can take advantage of iCloud storage, each of which has a different intended usage:</p>
<p>&nbsp;</p>
<ul>
<li><strong>iCloud document storage</strong>—Use this feature to store user documents and data in the user’s iCloud account.</li>
<li><strong>iCloud key-value data storage</strong>—Use this feature to share small amounts of data among instances of your application.</li>
</ul>
<p>&nbsp;</p>
<p>Most applications will use iCloud document storage to share documents from a user’s iCloud account. This is the feature that users think of when they think of iCloud storage. A user cares about whether documents are shared across devices and can see and manage those documents from a given device. In contrast, the iCloud key-value data store is not something a user would see. It is a way for your application to share very small amounts of data (tens of kilobytes) with other instances of itself. Applications can use this feature to store important state information. A magazine application might save the issue and page that the user read last, while a stocks application might store the stock symbols the user is tracking.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="text-align: center;"><img class="aligncenter" src="http://gravityjack.com/wp-content/uploads/syncing_intro.jpg" alt="image: ../Art/syncing_intro.jpg" width="407" height="193" /></p>
<p>&nbsp;</p>
<p>The summary for using the iCloud storage APIs in your application is as follows:</p>
<p>&nbsp;</p>
<ol>
<li>Use the iOS Provisioning Portal to enable iCloud storage for your iOS application.Enabling this feature requires that you have an updated provisioning profile on your development systems. Xcode 4 handles this step for you automatically.</li>
<li>Add an Entitlements file to your application and use it to configure the iCloud features your application uses</li>
<li>Implement iCloud document storage as follows:
<ul>
<li>Use the <code>UIDocument</code> class to read and write the contents of your user documents; alternatively, incorporate support for file presenters and file coordinators into the custom classes that you use to manage user documents. The iCloud service uses the file coordination mechanism to notify your application when a document changes. (The <code>UIDocument</code> class implements support for file presenters and file coordinators for you and is recommended.)</li>
<li>Use the <code>NSFileManager</code> class to move the appropriate documents to the user’s iCloud storage. It is recommended that you give users the option to move documents to iCloud</li>
<li>Use the <code>NSMetadataQuery</code> interfaces to search for documents in a user’s iCloud storage;</li>
<li>Be prepared to handle version conflicts that might arise when two devices try to update a document at the same time;</li>
</ul>
</li>
<li>To implement iCloud key-value data storage, use the <code>NSUbiquitousKeyValueStore</code> class to read and write keys and values.</li>
</ol>
<p>&nbsp;</p>
<p>The sections that follow provide more details about how to implement different aspects of iCloud storage for your application. For additional information about using specific classes and interfaces, see the corresponding reference documentation.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Storing and Using Documents in iCloud</span></p>
<p>&nbsp;</p>
<p>Documents in iCloud provide the central location from which updates can be delivered to a user’s computers and iOS devices. All documents must be created in your application’s sandbox initially and moved to a user’s iCloud account later. A document targeted for iCloud storage is not moved to iCloud immediately, though. First, it is moved out of your application sandbox and into a local system-managed directory where it can be monitored by the iCloud service. After that transfer, the file is transfered to iCloud and to the user’s other devices as soon as possible.</p>
<p>&nbsp;</p>
<p>While in iCloud storage, changes made on one device are stored locally and then pushed to iCloud using a local daemon, as shown in Figure 1. To prevent large numbers of conflicting changes from occurring at the same time, applications are expected to use file coordinator objects to perform all changes. File coordinators mediate changes between your application and the daemon that facilitates the transfer of the document to and from iCloud. In this way, the file coordinator acts like a locking mechanism for the document, preventing your application and the daemon from modifying the document simultaneously.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>Figure 1</strong> Pushing document changes to iCloud</p>
<p style="text-align: center;">
<p style="text-align: center;"><img class="aligncenter" src="http://gravityjack.com/wp-content/uploads/syncing_overview.jpg" alt="" width="353" height="398" /></p>
<p>&nbsp;</p>
<p>From an implementation perspective, the easiest way to manage documents in iCloud is to use the <code>UIDocument</code> class. This class does most of the heavy lifting required to read and write files that are stored in iCloud. Specifically, the <code>UIDocument</code> class handles the creation and use of file coordinators to modify the document. This class also seamlessly integrates document changes coming from other devices. The class even helps handle the potential conflicts that can arise when two devices do manage to update the same file in conflicting ways. You are not required to use the <code>UIDocument</code> class to manage your application’s documents, but using it requires less effort on your part.</p>
<p>&nbsp;</p>
<p><strong>Important:</strong> Applications that store documents to iCloud must specify one or more containers in which to store those documents. You specify which containers your application supports using the <code>com.apple.developer.ubiquity-container-identifiers</code> entitlement.</p>
<div>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p>The sections that follow discuss the basic mechanics of how you move documents to iCloud and manage them (with and without the help of the<code>UIDocument</code> class).</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-weight: bold;">Moving a Document to iCloud Storage</span></p>
<p>&nbsp;</p>
<p>To move a document to iCloud storage:</p>
<p>&nbsp;</p>
<ol>
<li>Create and save the file locally in your application sandbox.</li>
<li>If you are not using the <code>UIDocument</code> class to manage your file, create a file presenter to be responsible for it.</li>
<li>Create an <code>NSURL</code> object that specifies the destination of the file in a user’s iCloud storage.You must put files in one of the container directories associated with your application. Call the <code>URLForUbiquityContainerIdentifier:</code>method of <code>NSFileManager</code> to get the root URL for the directory, and then append any additional directory and filenames to that URL. (Applications may put documents in any container directory for which they have the appropriate entitlement.</li>
<li>Call the <code>setUbiquitous:itemAtURL:destinationURL:error:</code> method of <code>NSFileManager</code> to move the file to the specified destination in iCloud.</li>
</ol>
<p>&nbsp;</p>
<p>When moving documents to iCloud, you can create additional subdirectories inside the container directory to manage your files. It is strongly recommended that you create a <code>Documents</code> subdirectory and use that directory for storing user documents. In iCloud, the contents of the<code>Documents</code> directory are made visible to the user so that individual documents can be deleted. Everything outside of the <code>Documents</code> directory is grouped together and treated as a single entity that a user can keep or delete. You create subdirectories in a user’s iCloud storage using the methods of the <code>NSFileManager</code> class just as you would any directory.</p>
<p>&nbsp;</p>
<p>After you move a document to iCloud, it is not necessary to save a URL to the document’s location persistently. If you manage a document using a <code>UIDocument</code> object, that object automatically updates its local data structures with the document’s new URL. However, it does not save that URL to disk, and neither should your custom file presenters. Instead, because documents can move while in a user’s iCloud storage, you should use an <code>NSMetadataQuery</code> object to search for documents. Searching guarantees that your application has the correct URL for accessing the document.</p>
<h4></h4>
<h4>Searching for Documents in iCloud</h4>
<p>&nbsp;</p>
<p>To locate documents in iCloud storage, your application must search using an <code>NSMetadataQuery</code> object. Searching is a guaranteed way to locate documents both in a user’s iCloud storage and in your application sandbox. You should always use query objects instead of saving URLs persistently because the user can delete files from iCloud storage when your application is not running. Using a query to search is the only way to ensure an accurate list of documents.</p>
<p>&nbsp;</p>
<p>In iOS 5.0, the <code>NSMetadataQuery</code> class supports the following search scopes for your documents:</p>
<p>&nbsp;</p>
<ul>
<li>Use the <code>NSMetadataQueryUbiquitousDocumentsScope</code> constant to search for documents in iCloud that reside somewhere inside a<code>Documents</code> directory. (For any given container directory, put documents that the user is allowed to access inside a <code>Documents</code> subdirectory.)</li>
<li>Use the <code>NSMetadataQueryUbiquitousDataScope</code> constant to search for documents in iCloud that reside anywhere other than in a<code>Documents</code> directory. (For any given container directory, use this scope to store user-related data files that your application needs to share but that are not files you want the user to manipulate directly.)</li>
<li>Use the <code>NSMetadataQueryLocalDocumentsScope</code> constant to search the <code>Documents</code> directory in your application’s sandbox.</li>
</ul>
<p>&nbsp;</p>
<p>To use a metadata query object to search for documents, create a new <code>NSMetadataQuery</code> object and do the following:</p>
<p>&nbsp;</p>
<ol>
<li>Set the search scope of the query to an appropriate value (or values).</li>
<li>Add a predicate to narrow the search results. To search for all files, specify a predicate with the format <code>NSMetadataItemFSNameKey == *</code>.</li>
<li>Register for the query notifications and configure any other query parameters you care about, such as sort descriptors, notification intervals, and so on.The <code>NSMetadataQuery</code> object uses notifications to deliver query results. At a minimum, you should register for the<code>NSMetadataQueryDidUpdateNotification</code> notification, but you might want to register for others in order to detect the beginning and end of the results-gathering process.</li>
<li>Call the <code>startQuery</code> method of the query object.</li>
<li>Run the current run loop so that the query object can generate the results.If you started the query on your application’s main thread, simply return and let the main thread continue processing events. If you started the query on a secondary thread, you must configure and execute a run loop explicitly.</li>
<li>Process the results in your notification-handler methods.When processing results, always disable updates first. Doing so prevents the query object from modifying the result list while you are using it. When you are done processing the results, reenable updates again to allow new updates to arrive.</li>
<li>When you are ready to stop the search, call the <code>stopQuery</code> method of the query object.</li>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-weight: bold;">Working with Documents in iCloud</span></p>
<p>&nbsp;</p>
<p>When your application needs to read or write a document in iCloud, it must do so in a coordinated manner. Your application might not be the only application trying to manipulate the local file at any given moment. The daemon that transfers the document to and from iCloud also needs to manipulate it periodically. To prevent your application from interfering with the daemon (and vice versa), iOS provides a coordinated locking mechanism that works with the files and directories you target for iCloud storage.</p>
<p>&nbsp;</p>
<p>At the heart of the iCloud locking mechanism are file coordinators and file presenters. Whenever you need to read and write a file, you do so using a <strong>file coordinator</strong>, which is an instance of the <code>NSFileCoordinator</code> class. The job of a file coordinator is to coordinate the reads and writes performed by your application and the sync daemon on the same document. For example, your application and the daemon may both read the document at the same time but only one may write to the file at any single time. Also, if one process is reading the document, the other process is prevented from writing to the document until the reader is finished.</p>
<p>&nbsp;</p>
<p>In addition to coordinating operations, file coordinators also work with file presenters to notify applications when changes are about to occur. A<strong>file presenter</strong> is any object that conforms to the <code>NSFilePresenter</code> protocol and takes responsibility for managing a specific file (or directory of files) in an application. The job of a file presenter is to protect the integrity of its own data structures. It does this by listening for messages from other file coordinators and using those messages to update its internal data structures. In most cases, a file presenter may not have to do anything. However, if a file coordinator declares that it is about to move a file to a new URL, the file presenter would need to replace its old URL with the new one provided to it by the file coordinator. The <code>UIDocument</code> class is an example of a file presenter that tracks changes to its underlying file or file package.</p>
<p>&nbsp;</p>
<p>Here is a checklist of the things your application must do to work with documents in iCloud:</p>
<ul>
<li>Manage each document in iCloud using a file presenter. The recommended way to do this is to use the <code>UIDocument</code> class, but you may define custom file presenters if you prefer. You can use a single file presenter to manage a file package or a directory of files.</li>
<li>After creating a file presenter, register it by calling the <code>addFilePresenter:</code> class method of <code>NSFileCoordinator</code>. Registration is essential. The system can notify only registered presenter objects.</li>
<li>Before deleting a file presenter, unregister it by calling the <code>removeFilePresenter:</code> method of <code>NSFileCoordinator</code>.</li>
</ul>
<p>&nbsp;</p>
<p>All file-related operations must be performed through a file coordinator object. To read or write a document, or move or delete it, follow these steps:</p>
<ol>
<li>Create an instance of the <code>NSFileCoordinator</code> class and initialize it with the file presenter object that is about to perform the file operation.</li>
<li>Use the methods of the <code>NSFileCoordinator</code>object to read or write the file:
<ul>
<li>To read all or part of a single file, use the <code>coordinateReadingItemAtURL:options:error:byAccessor:</code> method</li>
<li>To write to a file or delete it, call the <code>coordinateWritingItemAtURL:options:error:byAccessor:</code> method.</li>
<li>To perform a sequence of read or write operations, use the<code>coordinateReadingItemAtURL:options:writingItemAtURL:options:error:byAccessor:</code> method.</li>
<li>To write to multiple files, or to move a file to a new location, use the<code>coordinateWritingItemAtURL:options:writingItemAtURL:options:error:byAccessor:</code> method.</li>
</ul>
<p>You perform the actual file-related operations in the block that you pass to these methods. You should perform operations as quickly as possible to avoid blocking other applications that might be trying to access the file at the same time.</li>
<li>When you are done with the operations, release the file coordinator object.</li>
</ol>
<p>&nbsp;</p>
<p><span style="font-weight: bold;">Handling File-Version Conflicts</span></p>
<p>&nbsp;</p>
<p>When multiple instances of your application (running on different computers or iOS devices) try to modify the same document in iCloud, a conflict can occur. For example, if the devices are not connected to the network and the user makes changes on both, both devices try to push their changes to iCloud when they are reconnected to the network. At this point, iCloud has two different versions of the same file and has to decide what to do with them. Its solution is to make the most recently modified file the <strong>current file</strong> and to mark any other versions of the file as <strong>conflict versions</strong>.</p>
<p>&nbsp;</p>
<p>Your application is notified of conflict versions through its file presenter objects. It is the job of the file presenter to decide how best to resolve any conflicts that arise. Applications are encouraged to resolve conflicts quietly whenever possible, either by merging the file contents or by discarding the older version if the older data is no longer relevant. However, if discarding or merging the file contents is impractical or might result in data loss, your application might need to prompt the user for help in choosing an appropriate course of action. For example, you might let the user choose which version of the file to keep, or you might offer to save the older version under a new name.</p>
<p>&nbsp;</p>
<p>Applications should always attempt to resolve conflict versions as soon as possible. When conflict versions exist, all of the versions remain in a user’s iCloud storage (and locally on any computers and iOS devices) until your application resolves them. The current version of the file and any conflict versions are reported to your application using instances of the <code>NSFileVersion</code> class.</p>
<p>&nbsp;</p>
<p>To resolve conflicts:</p>
<p>&nbsp;</p>
<ol>
<li>Get the current file version using the <code>currentVersionOfItemAtURL:</code> class method of <code>NSFileVersion</code>.</li>
<li>Get an array of conflict versions using the <code>unresolvedConflictVersionsOfItemAtURL:</code> class method of <code>NSFileVersion</code>.</li>
<li>For each conflict version object, perform whatever actions are needed to resolve the conflict. Options include:
<ul>
<li>Merging the conflict versions with the current file automatically, if it is practical to do so.</li>
<li>Ignoring the conflict versions, if doing so does not result in any data loss.</li>
<li>Prompting the user to select which version (current or conflict) to keep. This should always be your last option.</li>
</ul>
</li>
<li>Update the current file as needed.
<ul>
<li>If the current file version remains the winner, you do not need to update the current file.</li>
<li>If a conflict version is chosen as the winner, use a coordinated write operation to overwrite the contents of the current file with the contents of the conflict version.</li>
<li>If the user chooses to save the conflict version under a different name, create the new file with the contents of the conflict version.</li>
</ul>
</li>
<li>Set the <code>resolved</code> property of the conflict version objects to <code>YES</code>.Setting this property to <code>YES</code> causes the conflict version objects (and their corresponding files) to be removed from the user’s iCloud storage.</li>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3></h3>
<h3>Storing Key-Value Data in iCloud</h3>
<p>&nbsp;</p>
<p>An application can use the <code>NSUbiquitousKeyValueStore</code> class to share small amounts of data with other instances of itself running on other computers and iOS devices. This class provides a similar service as the <code>NSUserDefaults</code> class in that it allows you to save simple data types (numbers, strings, dates, arrays, and so on) persistently and retrieve that data later. The main difference is that the<code>NSUbiquitousKeyValueStore</code> class writes that data to the user’s iCloud storage so that it can be retrieved by the application running on different iOS devices or computers.</p>
<div></div>
<div><strong>Important:</strong> Applications that use the <code>NSUbiquitousKeyValueStore</code> class must also request the <code>com.apple.developer.ubiquity-kvstore-identifier</code>entitlement. If you configure multiple applications with the same value for this entitlement, all of them share the same key-value data. For more information about configuring iCloud entitlements, see “Requesting Entitlements for iCloud Storage.”</div>
<p>&nbsp;</p>
<p>The amount of available space in a single key-value store is limited to 64 KB and the data for a single key cannot exceed 4 KB. Thus, you can use this storage to record small details about your application but should not use it to store user documents or other large data archives. Instead, you should use the information in the key-value store to improve the user experience for your application. For example, a magazine application might store the current issue and page number that the user is reading. That way, if the user opens the application on another device, the version of your application on that device can open to the same issue and page as the previous device.</p>
<p>&nbsp;</p>
<p>The <code>NSUbiquitousKeyValueStore</code> class should not be used as a replacement or supplement for the <code>NSUserDefaults</code> class. An application should always write all of its configuration data to disk using the <code>NSUserDefaults</code> class. It should then write the data it intends to share to the key-value data store using the <code>NSUbiquitousKeyValueStore</code> class. This guarantees that your application always has a valid copy of the data available locally.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3></h3>
<h3>Requesting Entitlements for iCloud Storage</h3>
<p>&nbsp;</p>
<p>To protect the data each application creates, applications must request specific entitlements at build time in order to use iCloud storage. These entitlements are tied to the application’s provisioning profile and are used to differentiate your application’s documents and data from that of other applications.</p>
<p>&nbsp;</p>
<p>There are two entitlements an application can request, depending on which iCloud features it uses:</p>
<p>&nbsp;</p>
<ul>
<li>To use iCloud document storage, request the <code>com.apple.developer.ubiquity-container-identifiers</code> entitlement. The value of this key is an array of container identifier strings. (The first string in the array must not contain any wildcard characters.)</li>
<li>To use the iCloud key-value data store, request the <code>com.apple.developer.ubiquity-kvstore-identifier</code> entitlement. The value of this key is a single container identifier string.</li>
</ul>
<p>&nbsp;</p>
<p>A <strong>container identifier</strong> string must be of the form <em>&lt;TEAM_ID&gt;</em><code>.</code><em>&lt;CUSTOM_STRING&gt;</em>, where <em>&lt;TEAM_ID&gt;</em> is the unique ten-character identifier associated with your developer account. The contents of <em>&lt;CUSTOM_STRING&gt;</em> are at your discretion, but it is recommended that you use a reverse-DNS string similar to your application’s bundle identifier. In practice, the string can be anything that makes sense to your development team. You can even use the same container identifier string for multiple applications if you want them to share the same storage space.</p>
<p>&nbsp;</p>
<p>Applications using iCloud document storage can specify multiple containers for storing documents and data. The value of the<code>com.apple.developer.ubiquity-container-identifiers</code> key is an array of strings. The first string in this array must be the main container identifier to associate with your application. If your company develops multiple applications, though, you can include additional container identifiers for your other applications. An application that supports multiple containers may read and write the documents and data in all of those containers, and searches always return a merged set of results.</p>
<p>&nbsp;</p>
<p>Listing 1 shows the XML from an entitlements file that requests the keys for an iPad application. In this example, the iPad application can read and write its own documents (which it stores in the container directory identified using the <code>A1B2C3D4E5.com.example.MyApp.ipad</code>) and it can read and write files from the iPhone version of the same application (which may or may not use a different file format).</p>
<p>&nbsp;</p>
<p><strong>Listing 1</strong> iCloud keys in the <code>entitlements.plist</code> file</p>
<div>
<table>
<tbody>
<tr>
<td scope="row">
<pre>&lt;key&gt;com.apple.developer.ubiquity-container-identifiers&lt;/key&gt;</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>&lt;array&gt;</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>   &lt;string&gt;A1B2C3D4E5.com.example.MyApp.ipad&lt;/string&gt;</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>   &lt;string&gt;A1B2C3D4E5.com.example.MyApp.iphone&lt;/string&gt;</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>&lt;/array&gt;</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>&lt;key&gt;com.apple.developer.ubiquity-kvstore-identifier&lt;/key&gt;</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>&lt;string&gt;A1B2C3D4E5.com.example.MyApp.ipad&lt;/string&gt;</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div></div>
<div></div>
<div><strong>Note:</strong> The strings you specify in your entitlements property-list file are also the strings you pass to the<code>URLForUbiquityContainerIdentifier:</code>method when requesting the location of a directory in the user’s iCloud storage.</div>
<p>&nbsp;</p>
<h3></h3>
<h3>Using iCloud Storage Responsibly</h3>
<p>&nbsp;</p>
<p>Applications that take advantage of iCloud storage features should act responsibly when storing data in there. The space available in each user’s account is limited and is shared by all applications. In addition, users can see how much space is consumed by a given application and choose to delete documents and data associated with your application. For these reasons, it is in your application’s interest to be responsible about what files you store. Here are some tips to help you manage documents appropriately:</p>
<p>&nbsp;</p>
<ul>
<li>Rather than storing all documents, let a user choose which documents to store in an iCloud account. If a user creates a large number of documents, storing all of those documents in iCloud could overwhelm that user’s available space. Providing a way for a user to designate which documents to store in iCloud gives that user more flexibility in deciding how best to use the available space.</li>
<li>Remember that deleting a document removes it from a user’s iCloud account and from all of that user’s computers and devices. Make sure that users are aware of this fact and confirm any delete operations. For your application to refresh the local copy of a document, use the<code>evictUbiquitousItemAtURL:error:</code> method of <code>NSFileManager</code>.</li>
<li>When storing documents in iCloud, place them in a <code>Documents</code> directory whenever possible. Documents inside a <code>Documents</code> directory can be deleted individually by the user to free up space. However, everything outside that directory is treated as data and must be deleted all at once.</li>
<li>Never store caches or other files that are private to your application in a user’s iCloud storage. A user’s iCloud account should be used only for storing user data and content that cannot be re-created by your application.</li>
</ul>
<p>&nbsp;</p>
<h2></h2>
<h2>iCloud Backup</h2>
<p>&nbsp;</p>
<p>Users can now opt to have their applications and application data backed up directly to their iCloud account, making it easier to restore applications to their most recent state. Having data backed up in iCloud makes it easy for a user to reinstall that data to a new or existing iOS device. However, because the amount of space in a user’s iCloud account is limited, applications should be even more selective about where they store files.</p>
<p>&nbsp;</p>
<p>The placement of files in your application’s home directory determines what gets backed up and what does not. Anything that would be backed up to a user’s computer is also backed up wirelessly to iCloud. Thus, everything in the <code>Documents</code> directory and most (but not all) of your application’s <code>Library</code> directory. To minimize the amount of data stored in the user’s iCloud account, developers are encouraged to put more files in the <code>Library/Caches</code> directory, especially if those files can be easily re-created or obtained in another way.</p>
<div></div>
<div><strong>Note:</strong>Any documents that your application stores explicitly in iCloud (using the iCloud storage APIs) are not backed up with your application. (Those documents are already stored in the user’s iCloud account and therefore do not need to be backed up separately.) For information about how to store user documents in iCloud, see “Storing and Using Documents in iCloud.”</div>
<p>&nbsp;</p>
<h2></h2>
<h2>Automatic Reference Counting</h2>
<p>&nbsp;</p>
<p><strong>Automatic Reference Counting (ARC)</strong> is a compiler-level feature that simplifies the process of managing the lifetimes of Objective-C objects. Instead of you having to remember when to retain or release an object, ARC evaluates the lifetime requirements of your objects and automatically inserts the appropriate method calls at compile time.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://gravityjack.com/wp-content/uploads/ARC_design_final.gif" alt="image: ../Art/ARC_design_final.gif" width="395" height="295" /></p>
<p>&nbsp;</p>
<p>To be able to deliver these features, ARC imposes some restrictions—primarily enforcing some best practices and disallowing some other practices:</p>
<ul>
<li>Do not call the <code>retain</code>, <code>release</code>, <code>autorelease</code>, or <code>dealloc</code> methods in your code.In addition, you cannot implement custom <code>retain</code> or <code>release</code> methods.Because you do not call the <code>release</code> method, there is often no need to implement a custom <code>dealloc</code> method—the compiler synthesizes all that is required to relinquish ownership of instance variables. You can provide a custom implementation of <code>dealloc</code> if you need to manage other resources.</li>
<li>Do not store object pointers in C structures.Store object pointers in other objects instead of in structures.</li>
<li>Do not directly cast between object and nonobject types (for example, between <code>id</code> and <code>void*</code>).You must use special functions or casts that tell the compiler about an object’s lifetime. You use these to cast between Objective-C objects and Core Foundation objects.</li>
<li>You cannot use <code>NSAutoreleasePool</code> objects.Instead, you must use a new <code>@autoreleasepool</code> keyword to mark the start of an autorelease block, and the <code>@end</code> keyword to mark the end of it.</li>
</ul>
<p>&nbsp;</p>
<p>ARC encourages you to think in terms of object graphs, and the relationships between objects, rather than in terms of retain and release. For this reason, ARC introduces new lifetime qualifiers for objects, including <strong>zeroing weak references</strong>. The value of a zeroing weak reference is automatically set to <code>nil</code> if the object to which it points is deallocated. There are qualifiers for variables, and new <code>weak</code> and <code>strong</code> declared property attributes, as illustrated in the following examples:</p>
<p>&nbsp;</p>
<div>
<table>
<tbody>
<tr>
<td scope="row">
<pre>// The following declaration is a synonym for: @property(retain) MyClass *myObject;</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>@property(strong) MyClass *myObject;</pre>
</td>
</tr>
<tr>
<td scope="row"></td>
</tr>
<tr>
<td scope="row">
<pre>// The following declaration is similar to "@property(assign) MyOtherClass *delegate;"</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>// except that if the MyOtherClass instance is deallocated,</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>// the property value is set to nil instead of remaining as a dangling pointer</pre>
</td>
</tr>
<tr>
<td scope="row">
<pre>@property(weak) MyOtherClass *delegate;</pre>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Xcode provides migration tools to help convert existing projects to use ARC.</p>
<p>&nbsp;</p>
<h2></h2>
<h2>Storyboards</h2>
<p>Storyboards are the new way to define your application’s user interface. In the past, you used nib files to define your user interface one view controller at a time. A storyboard file captures your entire user interface in one place and lets you define both the individual view controllers and the transitions between those view controllers. As a result, storyboards capture the flow of your overall user interface in addition to the content you present.</p>
<p>&nbsp;</p>
<p>If you are creating new applications, the Xcode templates come preconfigured to use storyboards. For other applications, the process for using storyboards is as follows:</p>
<p>&nbsp;</p>
<ol>
<li>Configure your application’s <code>Info.plist</code>file to use storyboards:
<ul>
<li>Add the <code>UIMainStoryboardFile</code> key and set its value to the name of your storyboard file.</li>
<li>Remove the existing <code>NSMainNibFile</code> key. (Storyboards replace the main nib file.)</li>
</ul>
</li>
<li>Create and configure the storyboard file in Xcode; see “Creating Storyboard Files.”</li>
<li>Update your view controllers to handle storyboard transitions; see “Preparing to Transition to a New View Controller.”</li>
<li>If you ever need to present a view controller manually (perhaps to support motion-related events), use the storyboard classes to retrieve and present the appropriate view controller; see “Presenting Storyboard View Controllers Programmatically.”</li>
</ol>
<p>&nbsp;</p>
<p>Applications can use a single storyboard file to store all of their view controllers and views. At build time, Interface Builder takes the contents of the storyboard file and divides it up into discrete pieces that can be loaded individually for better performance. Your application never needs to manipulate these pieces directly, though. All you must do is declare the main storyboard in your application’s <code>Info.plist</code> file. UIKit handles the rest.</p>
<p>&nbsp;</p>
<h3></h3>
<h3>Creating Storyboard Files</h3>
<p>&nbsp;</p>
<p>You use Interface Builder to create storyboard files for your application. Most applications need only one storyboard file, but you can create multiple storyboard files if you want. Every storyboard file has a view controller known as the <strong>initial view controller</strong>. This view controller represents the entry point into the storyboard. For example, in your application’s main storyboard file, the initial view controller would be the first view controller presented by your application.</p>
<p>&nbsp;</p>
<p>Each view controller in a storyboard file manages a single scene. For iPhone applications, a <strong>scene</strong> manages one screen’s worth of content, but for iPad applications the content from multiple scenes can be on screen simultaneously. To add new scenes to your storyboard file, drag a view controller from the library to the storyboard canvas. You can then add controls and views to the view controller’s view just as you would for a nib file. And as before, you can configure outlets and actions between your view controller and its views.</p>
<p>&nbsp;</p>
<p>When you want to transition from one view controller to another, Control-click a button, table view cell, or other trigger object in one view controller, and drag to the view controller for a different scene. Dragging between view controllers creates a <strong>segue</strong>, which appears in Interface Builder as a configurable object. Segues support all of the same types of transitions available in UIKit, such as modal transitions and navigation transitions. You can also define custom transitions and transitions that replace one view controller with another.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Preparing to Transition to a New View Controller</span></p>
<p>&nbsp;</p>
<p>Whenever a user triggers a segue in the current scene, the storyboard runtime calls the <code>prepareForSegue:sender:</code> method of the current view controller. This method gives the current view controller an opportunity to pass any needed data to the view controller that is about to be displayed. When implementing your view controller classes, you should override this method and use it to handle these transitions.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Presenting Storyboard View Controllers Programmatically</span></p>
<p>&nbsp;</p>
<p>Although the storyboard runtime usually handles transitions between view controllers, you can also trigger segues programmatically from your code. You might do so when setting up the segue in Interface Builder is not possible, such as when using accelerometer events to trigger the transition. There are several options for transitioning to a new view controller:</p>
<p>&nbsp;</p>
<ul>
<li>If a storyboard file contains an existing segue between the current view controller and the destination view controller (perhaps triggered by some other control in the view controller), you can trigger that segue programmatically using the <code>performSegueWithIdentifier:sender:</code>method of <code>UIViewController</code>.</li>
<li>If there is no segue between the view controllers but the destination view controller is defined in the storyboard file, first load the view controller programmatically using the <code>instantiateViewControllerWithIdentifier:</code> method of <code>UIStoryboard</code>. Then present the view controller using any of the existing programmatic means, such as by pushing it on a navigation stack.</li>
<li>If the destination view controller is not in the storyboard file, create it programmatically and present it as described in <em>View Controller Programming Guide for iOS</em>.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Newsstand Support</h2>
<p>&nbsp;</p>
<p>Newsstand provides a central place for users to read magazines and newspapers. Publishers who want to deliver their magazine and newspaper content through Newsstand can create their own iOS applications using the Newsstand Kit framework (<code>NewsstandKit.framework</code>), although doing so is not required. A big advantage of the Newsstand Kit framework, however, is that you can use it to initiate background downloads of new magazine and newspaper issues. After you start a download, the system handles the download operation and notifies your application when the new content is available.</p>
<p>&nbsp;</p>
<p>Unlike other iOS applications, Newsstand applications appears only in Newsstand itself, not in a user’s Home screen. And instead of displaying an application icon, the application typically displays the cover of their most recent issue, with some additional adornments provided by Newsstand. When the user taps that cover art, your application launches normally to present the current issue or any back issues that were downloaded and are still available.</p>
<div></div>
<div><strong>Note:</strong> Newsstand applications must include the <code>UINewsstandApp</code> key in their <code>Info.plist</code> file to indicate that they support Newsstand. For more information about this key, see <em>Information Property List Key Reference</em>.</div>
<p>&nbsp;</p>
<p>Creating an application that uses Newsstand Kit requires some interplay between the actual application and the content servers that you manage. Your servers are responsible for notifying the application when new content is available, typically using a push notification. If your Newsstand application includes the <code>UIBackgroundModes</code> key with the <code>newsstand-content</code> value in its <code>Info.plist</code> file, your Newsstand application is launched in the background so that it can start downloading the latest issue. The download process itself is managed by the system, which notifies your application when the content is fully downloaded and available.</p>
<p>&nbsp;</p>
<p>When your server is alerting your application of a new issue, that server should include the <code>content-available</code> property (with a value of <code>1</code>) in the JSON payload. This property tells the system that it should launch your application so that it can begin downloading the new issue. Applications are launched and alerted to new issues once in a 24-hour period at most, although if your application is running when the notification arrives, it can begin downloading the content immediately.</p>
<p>&nbsp;</p>
<p>In addition to your server providing content for each new issue, it should also provide cover art to present in Newsstand when that issue is available. This cover art is displayed in place of the application’s default icon, which is specified by the Newsstand-specific icons in the<code>CFBundleIcons</code> key of your application’s <code>Info.plist</code> file. Cover art gives users a more visual cue that a new issue is available. Your application can also add a badge to new issues.</p>
<p>&nbsp;</p>
<p><span style="font-size: 20px; font-weight: bold;">AirPlay Improvements</span></p>
<p>&nbsp;</p>
<p>AirPlay lets users stream audio and video from an iOS-based device to AirPlay–enabled devices such as televisions and audio systems. In iOS 5, developers can now use AirPlay to present application content on a nearby Apple TV 2. Users can now mirror the content of an iPad 2 to an Apple TV using AirPlay for any application. And developers who want to display different content (instead of mirroring) can assign a new window object to any <code>UIScreen</code> objects connected to an iPad 2 via AirPlay.</p>
<p>&nbsp;</p>
<p>In addition, you can now take advantage of AirPlay in the following ways:</p>
<ul>
<li>Applications that use AV Foundation can now use the <code>AVPlayer</code> class to stream audio and video content over AirPlay; see <em>AV Foundation Framework Reference</em>.</li>
<li>The Media Player framework includes support for displaying “Now Playing” information in several locations, including as part of the content delivered over AirPlay; see <em>MPNowPlayingInfoCenter Class Reference</em>.</li>
<li>The <code>UIWebView</code> class now supports the presentation of multimedia content over AirPlay. This support is enabled by default, but you can opt out of it if you want to.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2></h2>
<h2>New Frameworks</h2>
<p>&nbsp;</p>
<p>In iOS 5.0, there are several new frameworks you should investigate.</p>
<p>&nbsp;</p>
<h3></h3>
<h3>GLKit Framework</h3>
<p>&nbsp;</p>
<p>The GLKit framework (<code>GLKit.framework</code>) contains a set of Objective-C based utility classes that simplify the effort required to create an OpenGL ES 2.0 application. GLKit provides support for four key areas of application development:</p>
<ul>
<li>The <code>GLKView</code> and <code>GLKViewController</code> classes provide a standard implementation of an OpenGL ES–enabled view and associated rendering loop. The view manages the underlying framebuffer object on behalf of the application; your application just draws to it.</li>
<li>The <code>GLKTextureLoader</code> class provides image conversion and loading routines to your application, allowing it to automatically load texture images into your context. It can load textures synchronously or asynchronously. When loading textures asynchronously, your application provides a completion handler block to be called when the texture is loaded into your context.</li>
<li>The GLKit framework provides implementations of vector, matrix, and quaternions as well as a matrix stack operation to provides the same functionality found in OpenGL ES 1.1.</li>
<li>The <code>GLKBaseEffect</code>, <code>GLKSkyboxEffect</code>, and <code>GLKReflectionMapEffect</code> classes provide precreated, configurable graphics shaders that implement commonly used graphics operations. In particular, the <code>GLKBaseEffect</code> class implements the lighting and material model found in the OpenGL ES 1.1 specification, simplifying the effort required to migrate an application from OpenGL ES 1.1 to OpenGL ES 2.0.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Core Image Framework</span></p>
<p>&nbsp;</p>
<p>The Core Image framework (<code>CoreImage.framework</code>) provides a powerful set of built-in filters for manipulating video and still images. You can use the built-in filters for everything from simple operations (like touching up and correcting photos) to more advanced operations (like face and feature detection). The advantage of using these filters is that they operate in a nondestructive manner so that your original images are never changed directly. In addition, Core Image takes advantage of the available CPU and GPU processing power to ensure that operations are fast and efficient.</p>
<p>&nbsp;</p>
<p>The <code>CIImage</code> class provides access to a standard set of filters that you can use to improve the quality of a photograph. To create other types of filters, you can create and configure a <code>CIFilter</code> object for the appropriate filter type.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Twitter Framework</span></p>
<p>&nbsp;</p>
<p>The Twitter framework (<code>Twitter.framework</code>) provides support for sending Twitter requests on behalf of the user and for composing and sending tweets. For requests, the framework handles the user authentication part of the request for you and provides a template for creating the HTTP portion of the request. (Refer to the Twitter API for populating the content of the request.) The composition of tweets is accomplished using the <code>TWTweetComposeViewController</code> class, which is a view controller that you post with your proposed tweet content. This class gives the user a chance to edit or modify the tweet before sending it.</p>
<p>&nbsp;</p>
<p>Users control whether an application is allowed to communicate with Twitter on their behalf using Settings. The Twitter framework also works in conjunction with the Accounts framework (<code>Accounts.framework</code>) to access the user’s account.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Accounts Framework</span></p>
<p>&nbsp;</p>
<p>The Accounts framework (<code>Accounts.framework</code>) provides a single sign-on model for certain user accounts. Single sign-on improves the user experience, because applications no longer need to prompt a user separately for login information related to an account. It also simplifies the development model for you by managing the account authorization process for your application. In iOS 5.0, applications can use this framework in conjunction with the Twitter framework to access a user’s Twitter account.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Generic Security Services Framework</span></p>
<p>&nbsp;</p>
<p>The Generic Security Services framework (<code>GSS.framework</code>) provides a standard set of security-related services to iOS applications. The basic interfaces of this framework are specified in IETF RFC 2743 and RFC 4401. In addition to offering the standard interfaces, iOS includes some additions for managing credentials that are not specified by the standard but that are required by many applications.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 20px; font-weight: bold;">Application Design-Level Improvements</span></p>
<p>&nbsp;</p>
<p>The following sections describe new capabilities that you can incorporate into the model, view, and controller layers of your application.</p>
<p>&nbsp;</p>
<h3></h3>
<h3>Document Support</h3>
<p>&nbsp;</p>
<p>Cocoa Touch now includes a <code>UIDocument</code> class for managing the data associated with user documents. If you are implementing a document-based application, this class reduces the amount of work you must do to manage your document data. In addition to providing a container for all of your document-related data, the <code>UIDocument</code> class provides built-in support for a number of features:</p>
<ul>
<li>Asynchronous reading and writing of data on a background queue, allowing your application to remain responsive to users while reading and writing operations occur.</li>
<li>Support for coordinated reading and writing of documents, which is required for documents in iCloud storage.</li>
<li>Safe saving of document data by writing data first to a temporary file and then replacing the current document file with it.</li>
<li>Support for resolving conflicts between different versions of your document if a conflict occurs.</li>
<li>Automatic saving of document data at opportune moments.</li>
<li>Support for flat file and package file representations on disk.</li>
<li>For applications that use Core Data to manage their content, there is also a <code>UIManagedDocument</code> subclass to manage interactions with documents in the database.</li>
</ul>
<p>&nbsp;</p>
<p>If you are implementing an application that supports iCloud storage, the use of document objects makes the job of storing files in iCloud much easier. Document objects are file presenters and handle many of iCloud-related notifications that you might otherwise have to handle yourself.</p>
<p>&nbsp;</p>
<h3></h3>
<h3>Data Protection Improvements</h3>
<p>&nbsp;</p>
<p>Introduced in iOS 4.0, data protection lets you store application and user data files on disk in an encrypted format so that they can be accessed only when a user’s device is unlocked. In iOS 5.0, you now have more flexibility regarding when your application can access protected files.</p>
<ul>
<li>Using the <code>NSFileProtectionCompleteUnlessOpen</code> option, your application can access a file while the device is unlocked and, if you keep the file open, continue to access that file after the user locks the device.</li>
<li>Using the <code>NSFileProtectionCompleteUntilFirstUserAuthentication</code> option, your application cannot access the file while the device is booting or until the user unlocks the device. After the user unlocks the device for the first time, you can access the file even if the user subsequently locks the device again.</li>
</ul>
<p>&nbsp;</p>
<p>You should protect files as soon as possible after creating them.</p>
<p>&nbsp;</p>
<h3></h3>
<h3>Custom Appearance for UIKit Controls</h3>
<p>&nbsp;</p>
<p>You can now customize the appearance of many UIKit views and controls to give your application a unique look and feel. For example, you might use these customizations to make the standard system controls match the branding for the rest of your application.</p>
<p>&nbsp;</p>
<p>UIKit supports the following customizations:</p>
<ul>
<li>You can set the tint color, background image, and title position properties (among other) on a wide variety of objects, including toolbars, navigation bars, search bars, buttons, sliders, and some other controls.</li>
<li>You can set attributes of some objects directly, or you can set the default attributes to use for a class using an appearance proxy.An appearance proxy is an object you use to modify the default appearance of visual objects such as views and bar items. Classes that adopt the <code>UIAppearance</code> protocol support the use of an appearance proxy. To modify the default appearance of such a class, retrieve its proxy object using the <code>appearance</code> class method and call the returned object’s methods to set new default values. A proxy object implements those methods and properties from its proxied class that are tagged with the <code>UI_APPEARANCE_SELECTOR</code> macro. For example, you can use a proxy object to change the default tint color (through the <code>progressTintColor</code> or <code>trackTintColor</code> properties) of the <code>UIProgressView</code>class.If you want to set a different default appearance based on how a given object is used in your application, you can do so using the proxy object returned by the <code>appearanceWhenContainedIn:</code>method instead. For example, you use this proxy object to set specific default values for a button only when it is contained inside a navigation bar.Any changes you make with a proxy object are applied, at view layout time, to all instances of the class that exist or that are subsequently created. However, you can still override the proxy defaults later using the methods and properties of a given instance.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Container View Controller Support</span></p>
<p>&nbsp;</p>
<p>The <code>UIViewController</code> class now allows you to define your own custom container view controllers and present content in new and interesting ways. Examples of existing container view controllers include <code>UINavigationController</code>, <code>UITabBarController</code>, and<code>UISplitViewController</code>. These view controllers mix custom content with content provided by one or more separate view controller objects to create a unique presentation for application content. Container view controllers act as a parent for their contained view controllers, forwarding important messages about rotations and other relevant events to their children.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Settings</span></p>
<p>&nbsp;</p>
<p>Applications that deliver custom preferences can now use a new radio group element. This element is similar to the multivalue element for selecting one item from a list of choices. The difference is that the radio group element displays its choices inline with your preferences instead of on a separate page.</p>
<p>&nbsp;</p>
<p><span style="font-size: 20px; font-weight: bold;">Xcode Tools</span></p>
<p>&nbsp;</p>
<p>The following sections describe the improvements to the Xcode tools and the support for developing iOS applications. For detailed information about the features available in Xcode 4.2, see <em>Xcode New Features User Guide</em>.</p>
<p>&nbsp;</p>
<h3></h3>
<h3>Xcode Improvements</h3>
<p>&nbsp;</p>
<p>Xcode 4.2 adds support for many features that are available in iOS 5.0.</p>
<ul>
<li>The LLVM compiler supports Automatic Reference Counting (ARC), and Xcode includes a menu item to convert targets to use ARC. (For more information about ARC and about how to use it in your applications, see “Automatic Reference Counting.”)</li>
<li>The Interface Builder user interface provides support for creating storyboard files for your iOS applications. (For more information about using storyboards in your iOS applications, see “Storyboards.”)</li>
<li>In iOS Simulator, you can now simulate different locations for applications using the Core Location framework.</li>
<li>You can download your application data from an iOS device and automatically restore that data when debugging or testing in iOS simulator or on a device.</li>
</ul>
<p>&nbsp;</p>
<h3></h3>
<h3>OpenGL ES Debugging</h3>
<p>&nbsp;</p>
<p>The debugging experience in Xcode has been updated to include a new workflow for debugging OpenGL ES applications. You can now use Xcode to do the following for your OpenGL ES applications:</p>
<ul>
<li>Introspect OpenGL ES state information and objects such as view textures, shaders, and so on.</li>
<li>Set breakpoints on OpenGL ES errors, set conditional OpenGL ES entry point breakpoints, break on frame boundaries, and so on.</li>
</ul>
<p>&nbsp;</p>
<h3></h3>
<h3>UI Automation Enhancements</h3>
<p>&nbsp;</p>
<p>The Automation instrument now includes a script editor and the ability to capture (record) actions into your script as you perform them on a device. There are also enhancements to the objects that you use in the Automation instrument to automate UI testing:</p>
<ul>
<li>The <code>UIATarget</code> object can now simulate rotate gestures and location changes.</li>
<li>The <code>UIAHost</code> object supports executing a task from the Instruments application itself.</li>
<li>The <code>UIAElement</code> object can now simulate a rotate gesture centered on the element.</li>
<li>Several functions that were previously available only in <code>UIAWindow</code> and <code>UIAPopover</code> were moved to <code>UIAElement</code> because they are common to all element objects.</li>
<li>The <code>UIAKeyboard</code> object now supports performing a sequence of keyboard taps to simulate the typing of a string.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Instruments</span></p>
<p>&nbsp;</p>
<p>The Instruments application in Xcode 4.2 adds several new instruments for iOS developers:</p>
<ul>
<li>System Trace for iOS—Uses several instruments to profile aspects of Mac OS X or iOS that could be affecting application performance, such as system calls, thread scheduling, and VM operations.</li>
<li>Network Connections instrument—Inspect how your application is using TCP/IP and UDP/IP connections. With this instrument it is possible to see how much data is flowing through each connection and for each application. You can also use it to display interesting statistics, such as round trip times and retransmission request information.</li>
<li>Network Activity (located in Energy Diagnostics)—Helps bridge the gap between networking (cellular and WiFi) and energy usage. You use it to display device-wide data flow through each network interface alongside energy usage level data that is taken directly from the battery.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 20px; font-weight: bold;">Additional Framework Enhancements</span></p>
<p>&nbsp;</p>
<p>In addition to the items discussed in the preceding sections, the following frameworks have additional enhancements. For a complete list of new interfaces, see <em>iOS 5.0 API Diffs</em>.</p>
<p>&nbsp;</p>
<h3></h3>
<h3>UIKit</h3>
<p>&nbsp;</p>
<p>The UIKit framework includes the following enhancements:</p>
<ul>
<li>The <code>UIViewController</code> class can now be used to create custom container view controllers; see “Container View Controller Support.”</li>
<li>The UIKit framework provides support for loading and using storyboards; see “Storyboards.”</li>
<li>Bars and bar button items can now be tinted and customized for your application; see “Custom Appearance for UIKit Controls.”</li>
<li>The <code>UIPageViewController</code> class is a new container view controller for creating page-turn transitions between view controllers.</li>
<li>The <code>UIReferenceLibraryViewController</code> class adds support for presenting a custom dictionary service to the user.</li>
<li>The <code>UIImagePickerController</code> class supports new options for specifying the quality of video recordings.</li>
<li>The <code>UIStepper</code> class is a new control for incrementing a floating-point value value up or down within a configurable range.</li>
<li>View-based animations now support cross-dissolve, flip-from-top, and flip-from-bottom animations; see <em>UIView Class Reference</em>.</li>
<li>The <code>UIApplication</code> class now reports the language directionality of the running application.</li>
<li>The <code>exclusiveTouch</code> property of the <code>UIControl</code> class now defaults to <code>YES</code> instead of <code>NO</code>.</li>
<li>The <code>UITableView</code> class adds support for automatic row animations, moving rows and sections, multiselection, and copy and paste behaviors for cells.</li>
<li>The <code>UIScreen</code> class lets you specify overscan compensation behaviors for video delivered over AirPlay or through an attached HDMI cable. You can also programmatically set a screen’s brightness.</li>
<li>The <code>UIScrollView</code> class now exposes its gesture recognizers so that you can configure them more precisely for your application.</li>
<li>The <code>UISegmentedControl</code> class now supports proportional segment widths.</li>
<li>The <code>UIAlertView</code> class now supports password-style text entry and special configurations for entering text securely.</li>
<li>The <code>UIColor</code> class includes support for Core Image and new methods to retrieve individual color values.</li>
<li>The <code>UIImage</code> class includes support for Core Image, support for stretching an image by tiling part of its content, and support for looping animations.</li>
<li>The <code>UITextInputTraits</code> protocol adds support for a Twitter-specific keyboard and separate spell-checking behavior.</li>
<li>The <code>UIAccessibility</code> protocol includes new interfaces that define the activation point within an element and indicate whether an element is modal or contains hidden elements. There are also new notifications that inform you of changes in system-provided accessibility features, such as zoom, audio status, and closed captioning.</li>
<li>The <code>UIAccessibilityReadingContent</code> protocol allows you to provide a continuous, page-turning reading experience to VoiceOver users.</li>
<li>The <code>UIAccessibilityIdentification</code> protocol allows you to uniquely identify elements in your app so that you can refer to them in automation scripts.</li>
<li>The <code>UIWebView</code> class automatically supports the presentation of multimedia content over AirPlay. You can opt out of this behavior by changing the value in the <code>mediaPlaybackAllowsAirPlay</code> property of the class. This class also exposes a <code>scrollView</code> property so that you can access the scrolling properties of your web interfaces.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">OpenAL</span></p>
<p>&nbsp;</p>
<p>The OpenAL framework has two significant extensions:</p>
<ul>
<li>You can get notifications about source state changes and changes regarding the number of audio buffers that have been processed.</li>
<li>The Apple Spatial Audio extension in iOS 5.0 adds three audio effects that are especially useful for games: reverberation, obstruction effects, and occlusion effects.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Message UI</span></p>
<p>&nbsp;</p>
<p>The Message UI framework adds a new notification for tracking changes to the device’s ability to send text messages.</p>
<p>&nbsp;</p>
<h3></h3>
<h3>Media Player</h3>
<p>&nbsp;</p>
<p>The Media Player framework includes the following enhancements:</p>
<ul>
<li>There is now support for displaying “Now Playing” information in the lock screen and multitasking controls. This information can also be displayed on an Apple TV and with content delivered via AirPlay.</li>
<li>You can detect whether video is being streamed to an AirPlay device using the <code>airPlayVideoActive</code> property of the<code>MPMoviePlayerController</code> class.</li>
<li>Applications can now use the framework to play content from iTunes University.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Map Kit</span></p>
<p>&nbsp;</p>
<p>The Map Kit framework supports the ability to use heading data to rotate a map based on the user’s current orientation. As you can with the Maps application, you can configure your map view to scroll the map according to the user’s current location. For example, a walking tour application might use this to show the user their current location on the tour.</p>
<p>&nbsp;</p>
<p>For information on the interfaces you use to implement map scrolling and rotation, see <em>Map Kit Framework Reference</em>.</p>
<div></div>
<div><strong>Note:</strong>If you are currently using Map Kit for geocoding, you should switch to using the Core Location framework for that feature; see “Core Location.”</div>
<p>&nbsp;</p>
<h3></h3>
<h3>iAd</h3>
<p>&nbsp;</p>
<p>The iAd framework provides new callback methods for developers who use multiple add networks and want to be notified when a new ad is available. The <code>bannerViewWillLoadAd:</code> method (defined in the <code>ADBannerViewDelegate</code> protocol) is called when a banner has confirmed that an ad is available but before the ad is fully downloaded and ready to be presented. The <code>interstitialAdWillLoad:</code> method (defined in the<code>ADInterstitialAdDelegate</code> protocol) offers similar behavior for interstitial ads.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Game Kit</span></p>
<p>&nbsp;</p>
<p>The Game Kit framework and Game Center now have the following features:</p>
<ul>
<li>The <code>GKTurnBasedMatch</code> class provides support for turn-based gaming, which allows games to create persistent matches whose state is stored in iCloud. Your game manages the state information for the match and determines which player must act to advance the state of the match.</li>
<li>Your game can now adjust the default leaderboard (implemented by the <code>GKLeaderboard</code> class) shown to each player. If your game does not change the default leaderboard for a player, that player sees the leaderboard configured for your application in iTunes Connect.</li>
<li>The <code>GKNotificationBanner</code> class implements a customizable banner similar to the banner shown to players when they log in to Game Center. Your game may use this banner to display messages to the player.</li>
<li>When your game reports an achievement, it can automatically display a banner to the player using the <code>GKAchievement</code> class.</li>
<li>A <code>GKMatchmakerViewController</code> object can now add players to an existing match in addition to creating a new match.</li>
<li>The <code>GKMatchDelegate</code> protocol now includes a method to reconnect devices when a two-player match is disconnected.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Foundation</span></p>
<p>&nbsp;</p>
<p>The Foundation framework includes the following enhancements:</p>
<ul>
<li>The <code>NSFileManager</code> class includes new methods for moving a file to a user’s iCloud storage.</li>
<li>The new <code>NSFileCoordinator</code> class and <code>NSFilePresenter</code> protocol implement now locking support and notifications when manipulating documents in iCloud.</li>
<li>The new <code>NSFileVersion</code> class reports and manages conflicts between different versions of a file in iCloud.</li>
<li>The <code>NSURL</code> class includes new methods and constants to support syncing items to a user’s iCloud storage.</li>
<li>The new <code>NSMetadataQuery</code> class supports attributes for items synced to a user’s iCloud storage. Several other metadata-related classes were also added, including <code>NSMetadataItem</code>, <code>NSMetadataQueryResultGroup</code>, and <code>NSMetadataQueryAttributeValueTuple</code>.</li>
<li>The new <code>NSJSONSerialization</code> class is a new class that supports back-and-forth conversions between JSON data and Foundation types.</li>
<li>The new <code>NSLinguisticTagger</code> class is a new class lets you break down a sentence into its grammatical components, allowing the determination of nouns, verbs, adverbs, and so on. This tagging works fully for English and the class also provides a method to find out what capabilities are available for other languages.</li>
<li>This framework now includes the <code>NSFileWrapper</code> class for managing file packages—that is, files implemented as an opaque directory.</li>
<li>The new <code>NSOrderedSet</code> collection class offers the semantics of sets, whereby each element occurs at most once in the collection, but where elements are in a specific order.</li>
<li>Most delegate methods are now declared using formal protocols instead of as categories on <code>NSObject</code>.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Event Kit and Event Kit UI</span></p>
<p>&nbsp;</p>
<p>The Event Kit framework includes the following enhancements:</p>
<ul>
<li>The class hierarchy has been restructured. There is now a common base class called <code>EKObject</code> and portions of the <code>EKEvent</code> class have been moved into a new base class called <code>EKCalendarItem</code>.</li>
<li>With the <code>EKEventStore</code> class, you can now create and delete calendars programmatically, fetch calendars based on their identifier, save and remove events in batches, and trigger a programmatic refresh of calendar data.</li>
<li>The new <code>EKSource</code> class represents the source for creating new calendars and events.</li>
<li>The <code>EKCalendar</code> class now provides access to a calendar’s UUID, source, and other attributes.</li>
</ul>
<p>&nbsp;</p>
<p>The Event Kit UI framework now includes the <code>EKCalendarChooser</code> class, which provides a standard way for selecting from the user’s iCal calendars.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Core Motion</span></p>
<p>&nbsp;</p>
<p>The Core Motion framework now supports reporting heading information and magnetometer data for devices that have the corresponding hardware.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Core Location</span></p>
<p>&nbsp;</p>
<p>The Core Location framework (<code>CoreLocation.framework</code>) now includes support for both forward and reverse geocoding location data. This support allows you to convert back and forth between a set of map coordinates and information about the street, city, country (and so on) at that coordinate.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Core Graphics</span></p>
<p>&nbsp;</p>
<p>The Core Graphics framework (<code>CoreGraphics.framework</code>) includes some new interfaces to support the creation of paths. Specifically, there are new interfaces for creating paths with an ellipse or rectangle and for adding arcs to existing paths.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Core Data</span></p>
<p>&nbsp;</p>
<p>The Core Data framework includes the following enhancements:</p>
<ul>
<li>Core Data provides integration with the iOS document architecture and iCloud storage. The <code>UIManagedDocument</code> class is a concrete subclass of <code>UIDocument</code> that uses a Core Data persistent store for document data storage.</li>
<li>For applications built for iOS 5.0 or later, persistent stores now store data by default in an encrypted format on disk. The default protection level prevents access to the data until after the user unlocks the device for the first time. You can change the protection level by assigning a custom value to the <code>NSPersistentStoreFileProtectionKey</code> key when configuring your persistent stores. For additional information about the data protection that are new in iOS 5.0, see “Data Protection Improvements.”</li>
<li>Core Data formalizes the concurrency model for the <code>NSManagedObjectContext</code> class with new options. When you create a context, you can specify the concurrency pattern to use with it: thread confinement, a private dispatch queue, or the main dispatch queue. The<code>NSConfinementConcurrencyType</code> option provides the same behavior that was present on versions of iOS prior to 5.0 and is the default. When sending messages to a context created with a queue association, you must use the <code>performBlock:</code> or <code>performBlockAndWait:</code>method if your code is not already executing on that queue (for the main queue type) or within the scope of a <code>performBlock...</code> invocation (for the private queue type). Within the blocks passed to those methods, you can use the methods of <code>NSManagedObjectContext</code> freely. The<code>performBlockAndWait:</code> method supports API reentrancy. The <code>performBlock:</code> method includes an autorelease pool and calls the<code>processPendingChanges</code> method upon completion.</li>
<li>You can create nested managed object contexts, in which the parent object store of a context is another managed object context rather than the persistent store coordinator. This means that fetch and save operations are mediated by the parent context instead of by a coordinator. This pattern has a number of usage scenarios, including performing background operations on a second thread or queue and managing discardable edits, such as in an inspector window or viewNested contexts make it more important than ever that you adopt the “pass the baton” approach of accessing a context (by passing a context from one view controller to the next) rather than retrieving it directly from the application delegate.</li>
<li>Managed objects support two significant new features: ordered relationships, and external storage for attribute values. If you specify that the value of a managed object attribute may be stored as an external record, Core Data heuristically decides on a per-value basis whether it should save the data directly in the database or store a URI to a separate file that it manages for you.</li>
<li>There are two new classes, <code>NSIncrementalStore</code> and <code>NSIncrementalStoreNode</code>, that you can use to implement support for nonatomic persistent stores. The store does not have to be a relational database—for example, you could use a web service as the back end.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Core Audio</span></p>
<p>The Core Audio family of frameworks includes the following changes in iOS 5.0:</p>
<ul>
<li>Audio-session routing information is now specified using dictionary keys. There are also new modes for managing your application’s audio behavior:
<ul>
<li>Voice chat mode optimizes the system for two-way voice conversation.</li>
<li>Video recording mode configures the device for video capture.</li>
<li>Measurement mode disables automatic compression and limiting for audio input.</li>
<li>Default mode provides iOS 4.3.3 behavior.</li>
</ul>
</li>
<li>Core Audio adds seven new audio units for handling advanced audio processing features in your application, such as reverb, adjustable equalization, and time compression and stretching. The new Sampler unit lets you create music instruments, for which you can provide your own sounds. The new AUFilePlayer unit lets you play sound files and feed them directly to other audio units.</li>
<li>The 3D Mixer audio unit is enhanced in iOS 5.0 to provide reverb and other effects useful in game audio.</li>
<li>You can automate audio unit parameters in an audio processing graph, which lets you build a music mixer that remembers fader positions and changes.</li>
<li>You can now use the advanced features of Apple Core Audio Format files in iOS. For example, you might create new voices for the Sampler audio unit.</li>
<li>There is now programmatic support for adjusting the audio input gain.</li>
<li>Core Audio now supports 32-bit floating-point audio data for applications that need to provide high quality audio.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">AV Foundation</span></p>
<p>&nbsp;</p>
<p>The AV Foundation framework includes the following enhancements:</p>
<ul>
<li>There is automatic support for playing audio and video content over AirPlay. Applications can opt out of transmitting video over AirPlay using the <code>allowsAirPlayVideo</code> property of the <code>AVPlayer</code> class.</li>
<li>New properties on the <code>AVPlayerItem</code> class indicate whether the item supports fast-forwarding or rewinding of the content.</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Assets Library</span></p>
<p>&nbsp;</p>
<p>The Assets Library framework includes the following enhancements:</p>
<ul>
<li>Support for accessing photo streams</li>
<li>Support for creating new albums in the user’s photo library</li>
<li>Support for adding assets to albums</li>
<li>The ability to get an aspect ratio thumbnail for an asset</li>
<li>The ability to modify saved assets</li>
</ul>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Address Book</span></p>
<p>&nbsp;</p>
<p>The Address Book framework adds support for importing and exporting vCard data. It also adds new keys to associate social network affiliations with a user record.</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-weight: bold;">Security</span></p>
<p>&nbsp;</p>
<p>The Security framework (<code>Security.framework</code>) now includes the Secure Transport interfaces, which are Apple’s implementation of the SSL/TLS protocols. You can use these interfaces to configure and manage SSL sessions, manage ciphers, and manage certificates.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/ios-5-for-developers-what-you-need-to-know/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Choose the Right Content Management System (cms) for You</title>
		<link>http://gravityjack.com/choose-the-right-content-management-system-cms-for-you</link>
		<comments>http://gravityjack.com/choose-the-right-content-management-system-cms-for-you#comments</comments>
		<pubDate>Thu, 15 Jul 2010 19:04:21 +0000</pubDate>
		<dc:creator>GravityJack</dc:creator>
				<category><![CDATA[Gravity Jack News]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=1066</guid>
		<description><![CDATA[With an explosion of online content there is consequently an explosion of content management systems (CMS) available to help you manage that content, with literally thousands of vendors to sift through. But most CMS' still end up being too expensive, too difficult to maintain, and eventually inadequate. This is often the result of purchase decisions based on technology, and not business requirements. ]]></description>
			<content:encoded><![CDATA[<p><html><br />
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"></p>
<p>With an explosion of online content there is consequently an explosion of content management systems (CMS) available to help you manage that content, with literally thousands of vendors to sift through. But most CMS&#8217; still end up being too expensive, too difficult to maintain, and eventually inadequate. This is often the result of purchase decisions based on technology, and not business requirements. </p>
<p>So then, how are CMS solutions chosen? You will usually compare product features, ask friends and colleagues, and look to different analyst ratings. In theory, this should be an excellent way to pick the right solution and sometimes it is. But content management systems have been around for over two decades and the features and functionality for the most part are starting to become commoditized . The &#8216;bells and whistles&#8217; that these solutions try to distinguish themselves with, ultimately have no bearing on your content-specific needs. And this is why most solutions you purchase will end up being junked after they fail to do what is asked of them.  </p>
<p>To ensure successful implementation and adoption, the CMS solution must be implemented like any other large enterprise application, with clear objectives and systematic planning mechanisms. So letâ€™s look at some best practices that should be on everyoneâ€™s checklist before deploying any CMS within your organization. </p>
<p><b>#1 Define CMS Goals </b></p>
<p>Before installing a CMS, it is extremely important to identify key business goals that must be achieved. Business goals can be defined around parameters like productivity, efficiency, quality, ROI, or branding. Without this clear vision of the business goals, CMS implementations are very likely to fail. It is not surprising to find that most CMS implementations often overshoot budgets and in the long run, consume far more time, energy and resources than ever expected&#8211;just to stay functional.</p>
<p>Think of this step like vacationing in an exotic locale. You can go two ways: hope that when you get there, everything you need and want to do will be waiting for you. Or like most of us you plan accordinly: where you&#8217;re going to stay, what sites you will visit, and find all the best deals in the process. Which makes more sense to you?</p>
<p><b>#2 Evaluate the Content Information Landscape </b></p>
<p>The next step is to start gathering details of your content information landscape. Rather than looking only at technology, you should look at how processes, business rules, and the content are defined. </p>
<p>With these details on the content information landscape, parameters can be defined for CMS selection. The CMS purchased should also easily integrate with multiple systems that affect this landscape as well as are necessary to help meet your defined business goals &#8211; such as campaign management systems or CRM applications. The sequitur here is: donâ€™t purchase CMS before clearly defining your requirements. You will save yourself time and resources with a clearly envisioned road map to guide you. </p>
<p><b>#3 Select the Right CMS Solution for Your Organization </b></p>
<p>Selecting the right CMS involves consideration of a host of factors, including: </p>
<p>1.	Ease of use for users and IT administrators </p>
<p>Like any other business application, the success of a CMS depends on adoption by the end user community. Subject matter experts (SMEs) with no technical knowledge must be absolutely comfortable using the system to achieve the exact look and feel they want for content presentation. Similarly, IT administrators must be able to easily enforce policies across multiple Websites using a single console, and integrate the CMS effortlessly into the organizationâ€™s IT landscape. Consider everyoneâ€™s roles and responsibilities and make sure the CMS can meet those demands.</p>
<p>â€¢	Speed of deployment </p>
<p>There is a direct correlation between CMS implementation/configuration time and costs incurred. A CMS that requires extensive coding will definitely increase implementation costs. Hence, a CMS will only be effective if it can be rapidly configured and deployed, and as such, requires minimal training for use by non-technical professionals. </p>
<p>â€¢	Total-cost-of-ownership (TCO) </p>
<p>Most organizations make the classic mistake of buying a CMS based on license price. The real work of owning a CMS begins after the site is live and as such CMS maintenance/support expenses far exceed purchase costs. Be sure to factor this into your overall costs and consider the TCO of an application to arrive at an informed decision. </p>
<p><b>#4 Involve All Critical Stakeholders </b></p>
<p>Just as it is important to have top management support for CMS implementations, it is equally crucial to encourage the participation of internal stakeholders. These content owners should be identified and their feedback on usability leveraged to build and customize the system. Involving non-technical SMEs in the design of the new CMS will also help minimize reluctance to use the system. The success of the CMS rests on this acceptance of the CMS by the shareholders . </p>
<p><b>#5 Donâ€™t Forget the Services Aspect </b></p>
<p>As we said in step 3 the real work in any CMS implementation begins post-launch. There is a spike in effort levels at the beginning of any implementation &#8211; but for a relatively short period of time compared to the average CMS lifetime.</p>
<p>Change is a constant with most Web sites and your CMS needs to be as flexible as your organization, whether this is a simple template change or an entire site redesign. You need to factor in and expect that you will need to have some level of service be it from your internal IT department, your Web agency or your software vendor </p>
<p>On top of ongoing support and management, you also need basic application and infrastructure support of the installed software. This requires the efforts of a dedicated team, responsible for managing hardware, software, and the network. </p>
<p>For some organizations this is not a problem: with dedicated in-house teams for HTML template creation and modification, workflow revisions, architecture changes, site redesign support, and training, they can prepare for the worst. But for the vast majority, this is often overlooked as a part of an ongoing CMS implementation. Without this dedicated team small businesses often outsource these â€˜servicesâ€™ to a third party vendor, adding to the implementation costs. To avoid the distress of exceeding budget, these costs must be factored into the total implementation costs. </p>
<p><b># 6 Plan for the Future </b></p>
<p>How scalable and flexible is the CMS when it comes to incorporating new features or managing an explosion of content? You must make sure that the chosen CMS partner/vendor has the technological bandwidth and capability to quickly capitalize on emerging communication media. </p>
<p><b>Conclusion </b></p>
<p>CMS implementation processes can be a lengthy and energy-consuming. But following the guidelines illustrated here: clearly defined goals, processes mapped to the application, gaps identified, and looking for a customized application with dependable scalability and flexibility, you can help yourself avoid some common potholes and choose the right CMS for you.</p>
<p>Article Source: <a href="http://www.articlesbase.com/web-design-articles/choose-the-right-content-management-system-cms-for-you-377087.html" title="Choose the Right Content Management System (cms) for You">http://www.articlesbase.com/web-design-articles/choose-the-right-content-management-system-cms-for-you-377087.html</a></p>
<p></body><br />
</html></p>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/choose-the-right-content-management-system-cms-for-you/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating A Shopping Cart</title>
		<link>http://gravityjack.com/creating-a-shopping-cart</link>
		<comments>http://gravityjack.com/creating-a-shopping-cart#comments</comments>
		<pubDate>Wed, 16 Jun 2010 18:43:34 +0000</pubDate>
		<dc:creator>GravityJack</dc:creator>
				<category><![CDATA[Gravity Jack News]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=998</guid>
		<description><![CDATA[For many developers , the humble shopping cart holds a special place in their hearts. Although PHP and My SQL are the fodder for arrange of Web applications, many developers learned their trade with the ambition to write the ubiquitous shopping cart]]></description>
			<content:encoded><![CDATA[<p>For  many developers , the humble shopping  cart holds a special place in their hearts. Although PHP and My SQL are the fodder for arrange of Web applications, many developers learned their trade with the ambition to write the ubiquitous shopping cart. If  there is a Zen to Web development, it is likely to be experienced while writing shopping cart.. Its  a helpful  tool for a  web development  firm and<a href="http://www.reelay.in"> </a> web design ecommerce solutions.       Although a common sight on the Web, shopping  carts do come in a variety of different flavors. The various incarnation typically differ in ways that are specific to the the type of business using software by the different  <strong>ecommerce solutions</strong> firms. If you have worked in the restaurant or sales industry in the past, then you are probably familiar with the concept of up-selling. Up-selling is the practice of offering additional products or services to a customer based on their original search criteria or purchases. For example, if an individual is about to purchase an MP3 player, then an appropriate up-sell would be to recommend a set of headphones to go with the MP3 player. Many shopping carts offer this kind of feature in a  automated fashion, allowing the webmaster to create groups of related products that can be sold together. These groups of products are then used to create recommendations for the customer at checkout time. This kind of feature will not only enhance the convenience of your customer&#8217;s shopping experience, but it will also increase your sales revenue as well!Most customer&#8217;s are more inclined to buy a product or service when they see that previous customer&#8217;s have been satisfied with it in the past. Customer confidence is a crucial aspect in encouraging the sales of your products, and there is no better way to establish trust than through genuine user reviews. A good shopping cart will allow your customer&#8217;s to view reviews of the product they are purchasing, thereby prompting them to complete the sale. It is also optimal to have a shopping cart that encourages new customers to leave their own reviews.</p>
<p><strong>Author: Reelay John</strong></p>
<p>Article Source: <a title="Creating A Shopping Cart" href="http://www.articlesbase.com/programming-articles/creating-a-shopping-cart-2564538.html">http://www.articlesbase.com/programming-articles/creating-a-shopping-cart-2564538.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/creating-a-shopping-cart/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9 Steps to a Hassle Free and Effective Software Development Project</title>
		<link>http://gravityjack.com/9-steps-to-a-hassle-free-and-effective-software-development-project</link>
		<comments>http://gravityjack.com/9-steps-to-a-hassle-free-and-effective-software-development-project#comments</comments>
		<pubDate>Mon, 14 Jun 2010 18:39:20 +0000</pubDate>
		<dc:creator>GravityJack</dc:creator>
				<category><![CDATA[Gravity Jack News]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=983</guid>
		<description><![CDATA[For any software development or other project initiative your company may be considering, it is critical to have in place and practice a set of effective and proven guidelines to ensure project success and delivery of the expected results:]]></description>
			<content:encoded><![CDATA[<p>Has your company developed entirely new software or added to software already in use throughout the organization and found the process cumbersome, frustrating, and sometimes not living up to expectations or meeting organizational goals?  If so, the solution to a smooth and effective development program may be as easy as staffing a well-qualified project manager and adopting a proven development process.</p>
<p>For any software development or other project initiative your company may be considering, it is critical to have in place and practice a set of effective and proven guidelines to ensure project success and delivery of the expected results:  taking into consideration the role and responsibilities of a well-qualified project manager, knowledge of important business and financial aspects, and a step-by-step process that all contribute to the solid foundation and implementation of an effective project plan.</p>
<p><strong>Developing a Practical Approach: The Role of the Project Manager</strong></p>
<p>When undertaking a software development project, the first element to consider is the establishment of a comprehensive yet practical approach to the initiative that ultimately will lead to a successful end result.</p>
<p>The in-house project manager has a key role in ensuring each phase of the project is carried out as planned.  The project manager is responsible for considering the potential risks involved with the project and how to avoid and resolve them, establishing and maintaining momentum throughout the project, ensuring individual project team member tasks are assigned appropriately and carried out according to specifications, and successfully addressing and resolving any conflicts that may arise during the length of the development project.</p>
<p>A well-qualified project manager is able to address what may seem to be an overwhelmingly complex process by developing an organized approach where the process is broken down into manageable individual tasks and understanding how to keep those involved in the project dedicated to the ultimate goal of meeting and even exceeding the expected end result.</p>
<p>If the project manager dedicates the necessary time, effort, and resources to the preparation of an efficient, comprehensive, and practical approach, then the project team may progress with ease and confidence as they deliver on their individual tasks, having a solid foundation and strategic framework at the outset. Far too often, however, failures with such projects are the result of not only a poorly executed plan, but one that ultimately lacked the fundamental elements of a well-though-out approach rooted in adequate preparation and commitment from the project manager and project team.</p>
<p>Designing a strategic plan means taking into consideration all aspects that can contribute to success or potential failure.</p>
<p><strong>Embarking on the Initiative: Key Steps to Consider</strong></p>
<p>With a comprehensive approach and a competent project manager in place to guide the new software development initiative, there is another important element your organization may find helpful as you embark on the project: establishing specific steps that can be followed to project completion that are based on proven industry experience in such a project environment.</p>
<p>Following are a set of practical guidelines to approach a software development project, established by two university professors and business consultants with specialized expertise in the computing, engineering, and general business environments.</p>
<p>Dr. Gordon Scott Gehrs is an adjunct instructor at the Illinois Institute of Technology (IIT) and a business consultant for the Jules F. Knapp Entrepreneurship Center at IIT. Dr. Dorota Huizinga is associate dean of the College of Engineering and Computer Science and a professor in the Computer Science Department at California State University, Fullerton, as well as a frequent business seminar speaker, a business consultant, and co-author of Automated Defect Prevention: Best Practices in Software Management.</p>
<p>Read on for nine key steps to consider as you embark on a software development project.</p>
<p><strong>Step #1: Conduct Feasibility Analysis</strong><br />
According to Dr. Gehrs, a critical first step is to interview stakeholders in order to uncover whether a specific need exists, identify this exact need, and determine whether the proposed project can feasibly deliver the expected software development. â€œMany times, this is the point at which an ROI study will be carried out in order to determine project costs and benefits,â€ says Dr. Gehrs.</p>
<p><strong>Step #2: Analyze and Determine Requirements </strong><br />
When it comes to the next step of determining requirements, Dr. Gehrs believes a proper analysis should consist of interviews with end users and others who will be associated with the new software system. In addition, a thorough review and a keen understanding of user documents, business rules, and processes are keys to determining appropriate and necessary features and functionality. This is a valuable and significant step in the development process and the point at which such deliverables as those documents outlining the scope of the project and those detailing the software product requirement will be produced.</p>
<p>Dr. Huizinga notes the importance of having the minimum technology infrastructure in place before beginning a software project, which include:</p>
<p>â€¢ Desktops for development with an advanced integrated development environment suite.<br />
â€¢ A server with a configuration management system for document tracking and version control.<br />
â€¢ A staging server for integration testing and a production server for deployment of the final product.<br />
â€¢ A requirement/task/defect tracking tool.<br />
â€¢ An automated build system.<br />
â€¢ A regression testing tool.<br />
â€¢ An automated reporting system.</p>
<p>â€œInvesting in the proper infrastructure is essential and will pay back quickly,â€ asserts Dr. Huizinga. There are three key elements the proper infrastructure provides:</p>
<p>â€¢ Product and project visibility<br />
â€¢ Automation of repetitive and mundane tasks<br />
â€¢ Facilitation of collaboration</p>
<p><strong>Step #3: Consider Industry Best Practices</strong><br />
When defining a software development process, consider proven industry best practices. Dr. Huizinga recommends a good, customized Agile process with emphasis on pictorial documentation both for requirements and technical documentation. It is important to follow a standard template and all activities should be traceable through a requirements/task/defect tool and shared document repository.</p>
<p><strong>Step #4: Design </strong><br />
During the design phase, the software architect, programmer, and/or developer may put together a detailed design document outlining exactly how the software will meet the specified requirements. Dr. Gehrs recommends the use of mock-ups to accompany the design document as a way of illustrating user-interface elements.</p>
<p>In some cases, customization is required in order to meet specific, individual project needs. For example, Dr. Huizinga notes that this might include the use of specialized COTS (commercial off-the-shelf) hardware and software components. The wide spectrum of products from databases to game engines is dictated by the market shift to customization of existing commercial applications to fit project needs rather than in-house development of such systems. According to Dr. Huizinga, COTS can offer higher quality because they are developed by vendors who specialize in systems that provide the required functionality and are well-tested by many users.</p>
<p><strong>Step #5: Measuring and Tracking Progress</strong><br />
Without the proper technology infrastructure in place, it is difficult to collect and measure key project data. â€œConsequently, the software projects cannot be managed effectively,â€ says Dr. Huizinga. Project indicators can help to ensure the prompt identification of potential or existing problems, therefore allowing them to be recognized and remedied in a timely manner. When observed over an extended period, notes Dr. Huizinga, these indicators can be used to determine product quality and deployment readiness.</p>
<p><strong>Step #6: Development </strong><br />
At the development phase, the design document is translated into a real piece of software. When prior careful planning has been executed, the software will match the requirements of the business driver that initiated the need for the project. Dr. Gehrs points out that development cycles may produce several versions of the software:</p>
<p>â€¢ Alpha: preliminary feature/functionality only<br />
â€¢ Beta: used for internal testing or usability testing<br />
â€¢ Release Candidates: usually a very stable build that may need minor tweaks<br />
â€¢ Production Build or Gold Master: ready for release.</p>
<p>Project managers need feedback on the userâ€™s navigational experience, task-completion times, ease of use, and other information related to the user interface and user-centric elements.</p>
<p><strong>Step #7: Addressing Automation </strong><br />
Another key step is to ensure the automation of repetitive tasks:</p>
<p>â€¢ Code builds;<br />
â€¢ Static code analysis scans;<br />
â€¢ Regression tests;<br />
â€¢ Collection of project- and product-related measures.</p>
<p>Dr. Huizinga believes that taking such measures reduces the error-prone human influence when the software is implemented. It also facilitates the use of best practices and collection of project-related data. â€œAll repetitive and mundane tasks should be automated whenever possible in any portion of the software life cycle,â€ she adds.</p>
<p><strong>Step #8: Testing</strong><br />
As the project continues on through each phase and on to testing, a general progression of action is as follows: software features are laid out in some sort of list, scripts are written for each task the user might perform, and those features are tested to ensure they function properly. Dr. Gehrs points out that testing also may vary quite widely depending on the individual testing procedures adopted by the organization. Testing can consist of several sub-stages as well, such as quality assurance and staging.</p>
<p>Once the software is in general use, any bugs found at this point are addressed based on a criticality scale: urgent fixes are scheduled to be carried out as soon as possible. In addition, feature enhancements/changes may be slated for future upgrade versions.</p>
<p><strong>Step #9:  Gradual Implementation Practices</strong><br />
â€œIncremental implementation of the above practices is critical to success. The approach of gradually introducing change group by group and practice by practice is essential to achieving the desired organizational culture change, as change is unsettling, and there will always be some degree of resistance,â€ points out Dr. Huizinga. Because of the complex nature of software projects and the technology involved, new software development warrants this systematic approach.</p>
<p>Understanding the role of the project leader and importance of having well-thought-out development processes in place may be a companyâ€™s only real competitive advantage in an increasingly competitive marketplace.  It is the ultimate secret weapon to winning business and successfully delivering new easy-to-use software.</p>
<p>With workable and disciplined software project guidelines and well-qualified project managers, your organization canâ€™t lose.</p>
<p>Article Source: <a title="9 Steps to a Hassle Free and Effective Software Development Project" href="http://www.articlesbase.com/software-articles/9-steps-to-a-hassle-free-and-effective-software-development-project-869180.html">http://www.articlesbase.com/software-articles/9-steps-to-a-hassle-free-and-effective-software-development-project-869180.html</a></p>
<p><strong>About the Author</strong></p>
<p>ExecutiveBrief, the technology management resource for business leaders, offers articles loaded with proven tips, techniques, and action plans that companies can use to better manage people, processes and tools â€“ the keys to improving their business performance.<br />
For more information visit us at: <a href="http://www.executivebrief.com">http://www.executivebrief.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/9-steps-to-a-hassle-free-and-effective-software-development-project/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft just brought sexy back</title>
		<link>http://gravityjack.com/microsoft-just-brought-sexy-back</link>
		<comments>http://gravityjack.com/microsoft-just-brought-sexy-back#comments</comments>
		<pubDate>Wed, 17 Feb 2010 00:36:27 +0000</pubDate>
		<dc:creator>GravityJack</dc:creator>
				<category><![CDATA[Gravity Jack News]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=531</guid>
		<description><![CDATA[...I realized the change was like upgrading from Windows 3.1 to Windows 7. Now Microsoft has done something cool again, which just goes to show you that billions of dollars can still effect change (unless of course the government is doing the spending)]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="...in my pants" src="http://www.digitaltrends.com/wp-content/uploads/2010/02/800t-w7p-startscreen.jpg" alt="" width="424" height="800" />Over the last year or so Microsoft has been leaving my radar. Not because I don&#8217;t like them &#8211; in fact, I got my start as a Microsoftee, however they just are clunky. I mean when I upgraded my WinMo phone to an iPhone; I realized the change was like upgrading from Windows 3.1 to Windows 7. Now Microsoft has done something cool again, which just goes to show you that billions of dollars can still effect change (unless of course the government is doing the spending)</p>
<p>I have renewed faith in Microsoft, commerce and therefore the world. See how fickle I am that a new phone OS can make me feel that way? :)</p>
<p>- Jack</p>
<p>From the MS press release:</p>
<p>With Windows Phone 7 Series, Microsoft takes a fundamentally different approach to phone software. Smart design begins with a new, holistic design system that informs every aspect of the phone, from its visually appealing layout and motion to its function and hardware integration. On the Start screen, dynamically updated â€œlive tilesâ€ show users real-time content directly, breaking the mold of static icons that serve as an intermediate step on the way to an application. Create a tile of a friend, and the user gains a readable, up-to-date view of a friendâ€™s latest pictures and posts, just by glancing at Start.</p>
<p>Every Windows Phone 7 Series phone will come with a dedicated hardware button for Bing, providing one-click access to search from anywhere on the phone, while a special implementation of Bing search provides intent-specific results, delivering the most relevant Web or local results, depending on the type of query.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/P5VQPtfOsgc&amp;hl=en_US&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/P5VQPtfOsgc&amp;hl=en_US&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Windows Phone 7 Series creates an unrivaled set of integrated experiences on a phone through Windows Phone hubs. Hubs bring together related content from the Web, applications and services into a single view to simplify common tasks. Windows Phone 7 Series includes six hubs built on specific themes reflecting activities that matter most to people:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">â€¢</td>
<td><strong>People. </strong>This hub delivers an engaging social experience by bringing together relevant content based on the person, including his or her live feeds from social networks and photos. It also provides a central place from which to post updates to Facebook and Windows Live in one step.</td>
</tr>
<tr>
<td valign="top">â€¢</td>
<td><strong>Pictures.</strong> This hub makes it easy to share pictures and video to a social network in one step. Windows Phone 7 Series also brings together a userâ€™s photos by integrating with the Web and PC, making the phone the ideal place to view a personâ€™s entire picture and video collection.</td>
</tr>
<tr>
<td valign="top">â€¢</td>
<td><strong>Games.</strong> This hub delivers the first and only official Xbox LIVE experience on a phone, including Xbox LIVE games, Spotlight feed and the ability to see a gamerâ€™s avatar, Achievements and gamer profile. With more than 23 million active members around the world, Xbox LIVE unlocks a world of friends, games and entertainment on Xbox 360, and now also on Windows Phone 7 Series.</td>
</tr>
<tr>
<td valign="top">â€¢</td>
<td><strong>Music + Video.</strong> This hub creates an incredible media experience that brings the best of Zune, including content from a userâ€™s PC, online music services and even a built-in FM radio into one simple place that is all about music and video. Users can turn their media experience into a social one with Zune Social on a PC and share their media recommendations with like-minded music lovers. The playback experience is rich and easy to navigate, and immerses the listener in the content.</td>
</tr>
<tr>
<td valign="top">â€¢</td>
<td><strong>Marketplace.</strong> This hub allows the user to easily discover and load the phone with certified applications and games.</td>
</tr>
<tr>
<td valign="top">â€¢</td>
<td><strong>Office.</strong> This hub brings the familiar experience of the worldâ€™s leading productivity software to the Windows Phone. With access to Office, OneNote and SharePoint Workspace all in one place, users can easily read, edit and share documents. With the additional power of Outlook Mobile, users stay productive and up to date while on the go.</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/microsoft-just-brought-sexy-back/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://ecn.channel9.msdn.com/o9/ch9/5/3/9/8/2/5/FirstLookWindowsPhone7_ch9.wmv" length="294760259" type="video/x-ms-wmv" />
<enclosure url="http://ecn.channel9.msdn.com/o9/ch9/wp7.mp4" length="220470762" type="audio/mp4" />
		</item>
		<item>
		<title>Apple iPad is released. Get the skinny here&#8230;</title>
		<link>http://gravityjack.com/apple-ipad-is-released-get-the-skinny-here</link>
		<comments>http://gravityjack.com/apple-ipad-is-released-get-the-skinny-here#comments</comments>
		<pubDate>Wed, 27 Jan 2010 21:19:35 +0000</pubDate>
		<dc:creator>GravityJack</dc:creator>
				<category><![CDATA[Gravity Jack News]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=438</guid>
		<description><![CDATA[Us nerds here at Gravity Jack have been waiting for the iPad announcement. The only bad news we heard was that it doesn't have a camera and GPS. So it won't be the augmented reality device we were hoping for....]]></description>
			<content:encoded><![CDATA[<p>YES! Finally after a month of sleepless nights it is announced. Us nerds here at Gravity Jack have been waiting for the iPad announcement. The only bad news we heard was that it doesn&#8217;t have a camera and GPS. So it won&#8217;t be the augmented reality device we were hoping for. In fact there isn&#8217;t THAT much that is revolutionary about the iPad. It is just a big ass iPhone. Well ok there are SOME cool things. :) For one this will start the revolution to kill the Kindle.</p>
<p>The major points:</p>
<p>1) It runs iPhone OS and runs the iPhone apps that exist in full screen mode</p>
<p>2) It is a half inch thick</p>
<p>3) It supports 16 to 64 GB of memory</p>
<p>4) It has bluetooth, wifi and optional 3GS from AT&amp;T</p>
<p>5) You get 10 hours of battery life, a month if you don&#8217;t turn the sucker on</p>
<p>6) It is sexy looking and you can read all your PDFs plus iBooks are the thing, a boatload of publishers have signed up to provide content</p>
<h2>Pricing</h2>
<table style="height: 76px;" width="442">
<tbody>
<tr>
<th></th>
<th style="text-align: left;">16 GB</th>
<th style="text-align: left;">32 GB</th>
<th style="text-align: left;">64 GB</th>
</tr>
<tr>
<td>Wi-Fi</td>
<td>$499</td>
<td>$599</td>
<td>$699</td>
</tr>
<tr>
<td>Wi-Fi + 3G</td>
<td>$629</td>
<td>$729</td>
<td>$829</td>
</tr>
</tbody>
</table>
<p>If you want 3G it is 14.99 for 250 MB per month and 29.99 for unlimited data. Not a bad deal and this is no contract and the device is not locked to AT&amp;T</p>
<h1>For you programmers out there:</h1>
<h2>User Interface Changes</h2>
<p>Applications running on iPad have several new options for presenting content and receiving input from the user.</p>
<h3>Popovers</h3>
<p>Popovers are floating views that reside above your applicationâ€™s window and help you organize the contents of your user interface. Popovers help to eliminate the clutter that might occur in applications that need to display important controls or information in an unobtrusive way that does not distract from the main content.</p>
<p>The benefit of using a popover is that:</p>
<ul>
<li>It appears only in response to specific user interactions and is dismissed automatically when the user taps outside of its bounds. This behavior makes the popover less obtrusive to the user.</li>
<li>It typically covers only a small portion of the screen and so does not obscure as much of the underlying content as a modal view might.</li>
</ul>
<h3>Split Views</h3>
<p>The <code>UISplitViewController</code> class is a new container view controller that you use to manage two side-by-side content views. These content views are typically used to create a master-detail interface, whereby selecting an item in one view causes the other view to display detailed information about the selection. The views themselves are managed by view controllers that you provide.</p>
<p>The split view controller coordinates any interactions between your view controllers and the system. For example, when the user rotates the device, the split view controller rotates both view controllers together, forwarding any needed notifications to both of them.</p>
<h3>Custom Input Views</h3>
<p>Instances of the <code>UIResponder</code> class now support the ability to display custom input and accessory views when they become the first responder. Now, you can provide input views for any of your custom views and have them presented automatically by the system. (Previously, the keyboard was the only supported input view, and it was supported only by text view and text field objects.)</p>
<p>In addition to input views, you can also provide a custom accessory view to display above the input view. Accessory views are commonly used to provide additional buttons and controls when the keyboard is displayed. The explicit support now provided by responder objects makes it easy to animate your accessory views into position.</p>
<h3>External Display Support</h3>
<p>An iPad can be connected to an external display through a set of supported cables. When connected, the associated screen can be used by the application to display content. Information about the screen, including its supported resolutions, is accessible through the interfaces of the UIKit framework. You also use that framework to associate your applicationâ€™s windows with one screen or another.</p>
<ul>
<li>The <code>UIScreen</code> class provides support for retrieving screen objects for all available screens (including the deviceâ€™s main screen). Each screen object contains information about the properties of the screen itself, including the dimensions that correctly take into account the size and pixel aspect ratio of the screen.</li>
<li>The <code>UIScreenMode</code> class provides information about one particular size and pixel aspect ratio setting of a screen.</li>
<li>Windows (represented by the <code>UIWindow</code> class) can now be assigned to a specific screen.</li>
</ul>
<h3>Gesture Recognizers</h3>
<p>Gesture recognizers are objects that you attach to views and use to detect common types of gestures. After attaching it to your view, you tell it what action you want performed when the gesture occurs. The gesture recognizer object then tracks the raw events and applies the system-defined heuristics for what the given gesture should be. Prior to gesture recognizers, the process for detecting a gesture involved tracking the raw stream of touch events coming to your view and applying potentially complicated heuristics to determine whether the events represented the given gesture.</p>
<p>UIKit now includes a <code>UIGestureRecognizer</code> class that defines the basic behavior for all gesture recognizers. You can define your own custom gesture recognizer subclasses or use one of the system-supplied subclasses to handle any of the following standard gestures:</p>
<ul>
<li>Tapping (any number of taps)</li>
<li>Pinching in and out (for zooming)</li>
<li>Panning or dragging</li>
<li>Swiping (in any direction)</li>
<li>Rotating (fingers moving in opposite directions)</li>
<li>Long presses</li>
</ul>
<h2>Improved Text Support</h2>
<p>In iPhone OS 3.2, there is significant new support for text input and rendering. This support is provided for applications, such as word processors, that need more sophisticated text-handling capabilities.</p>
<h3>Core Text</h3>
<p>The Core Text framework (<code>CoreText.framework</code>) contains a set of simple, high-performance C-based interfaces for laying out text and handling fonts. The Core Text framework provides a complete text layout engine that you can use to manage the placement of text on the screen. The text you manage can also be styled with different fonts and rendering attributes.</p>
<p>This framework is intended for use by applications that require sophisticated text handling capabilities, such as word processing applications. If your application requires only simple text input and display, you should continue to use the existing classes of the UIKit framework.</p>
<h3>Text Input Support</h3>
<p>The UIKit framework (<code>UIKit.framework</code>) includes new protocols that allow you to implement custom text-input objects. If you are implementing an application that requires sophisticated text-handling capabilities, you can use these protocols to implement new views and controls for receiving incoming text. Depending on your needs, there are different protocols for receiving text input. Which protocols you use will depend on the complexity of your user interface.</p>
<ul>
<li>The <code>UIKeyInput</code> protocol lets you define simple objects (like text fields) that are capable of character-by-character input.</li>
<li>The <code>UITextInput</code> protocol lets you define complex text views that support multiple lines of text, selections, pasteboard operations, and more.</li>
</ul>
<h3>Custom Font Support</h3>
<p>Applications that want to use custom fonts can now include those fonts in their application bundle and register those fonts with the system by including the <code>UIAppFonts</code> key in their <code>Info.plist</code> file. The value of this key is an array of strings identifying the font files in the applicationâ€™s bundle. When the system sees the key, it loads the specified fonts and makes them available to the application.</p>
<h3>ICU Regular-Expression Support</h3>
<p>The BSD layer of iPhone OS now exposes a modified version of 4.2 of the International Components for Unicode (ICU) libraries. ICU is an open-source project for Unicode support and software internationalization. The installed version of ICU includes only those header files necessary to support regular expressions.</p>
<h2>File and Document Support</h2>
<p>In iPhone OS 3.2, there is new support for exchanging and opening files. This support makes it easier to implement more document-centric applications, similar to what you might find on a desktop computer, while still maintaining a simplified interface for your users.</p>
<h3>File-Sharing Support</h3>
<p>Applications that want to share files with the user can now do so using the file-sharing support in iPhone OS 3.2. Hereâ€™s how it works:</p>
<ol>
<li>An application indicates that it wants to share files by including the <code>UIFileSharingEnabled</code> key in its <code>Info.plist</code> file.</li>
<li>It puts whatever files it wants to share in its <code>Documents/Shared</code> directory.</li>
<li>When the device is plugged into the userâ€™s computer, a mount point is added to the system and the contents of any shared directories appear on the userâ€™s desktop.</li>
<li>Users can modify the contents of this directory freely by copying files out, deleting files, or dragging new files in.</li>
</ol>
<p>Applications that support file sharing should recognize when files have been added to the directory or removed and respond appropriately. For example, if the user added files to the directory, your iPad application might make those files available from its interface. You should never expect the user to go searching for files in this directory, nor should your application rely on any files being in this directory. It is strictly for sharing files with the userâ€™s computer.</p>
<h3>Document Support</h3>
<p>An application can now register the file types it supports with the system and receive notifications when a file of the given type needs to be opened. It does this by including the <code>CFBundleDocumentTypes</code> key in its Info.plist file. An application that registers one or more file types may also be expected to open files of those types at some point later. It does this by implementing the <code>application:didFinishLaunchingWithOptions:</code> method in its application delegate and look for a file in the <code>UIApplicationLaunchOptionsURLKey</code> key of the provided dictionary.</p>
<p>Complimenting the ability to open files of known types is the addition of the <code>UIDocumentInteractionController</code> class in the UIKit framework. This class provides a user-based interaction model for managing files that your application does not know how to open. The document interaction controller provides options for previewing the contents of a file in place or opening it in another application. Document interaction controllers are particularly useful for email applications or applications that may download files from the network.</p>
<h3>PDF Generation</h3>
<p>The UIKit framework (<code>UIKit.framework</code>) includes new functions for generating PDF files and data objects from your applicationâ€™s custom content. You can use this support to generate PDF-based content for use within your application or for storing to the local disk. The UIKit functions manage the setup and pagination for the PDF data. You provide the actual content using the same native platform graphics technologies (UIKit, Core Graphics, Core Text, and so on) already available for drawing to the screen. (You cannot draw to a PDF context directly using OpenGL commands. However, you can transfer the pixels of your rendered content to a <code>CGImageRef</code> data type and draw that.)</p>
<h2>Xcode Tools</h2>
<p>Xcode includes new features to make developing applications that run on iPad much simpler, including the following:</p>
<ul>
<li>Xcode simplifies the process of sharing code between your iPhone and iPad applications by helping you update your existing iPhone projects to include the necessary files to support iPad. The Transition command (in the Project menu) creates a new target for the iPad and modifies a copy of your projectâ€™s nib files to support the larger screen size.</li>
<li>Xcode simplifies the validation and submission process of your applications by allowing you to debug signed applications.</li>
<li>You can now easily transfer your iPhone developer identity information to a new computer. The Organizer window includes an option to export your profile and certificate information. To begin developing on a new computer, all you have to do is import the resulting data file into Xcode on that computer.</li>
<li>Interface Builder supports the new view controllers and window sizes available for iPad.</li>
</ul>
<h2>API Changes</h2>
<p>The following frameworks and technologies include additional incremental changes.</p>
<h3>UIKit Framework Changes</h3>
<p>The UIKit framework includes the following additions:</p>
<ul>
<li>The <code>UIBezierPath</code> class is a new class that supports the creation of vector-based shapes. This class provides an object-oriented wrapper around Core Graphics paths.</li>
<li>The <code>UIScrollViewDelegate</code> protocol includes additional methods for processing zoom-related events in a scroll view.</li>
<li>Modal view controllers can now be presented in a style other than full screen. The <code>UIViewController</code> class includes a <code>modalPresentationStyle</code> property that allows you to present modal view controllers using one of several predefined styles.</li>
<li>The <code>UIMenuController</code> class now allows you to add custom menu items. You can use custom menu items to augment the Cut, Copy, Paste, and Select behavior provided by the system.</li>
<li>Support for popovers, described in â€œPopovers.â€</li>
<li>The <code>UISplitViewController</code> class, described in â€œSplit Views.â€</li>
<li>Support for gesture recognizers, described in â€œGesture Recognizers.â€</li>
<li>Support for implementing custom input and accessory views, described in â€œCustom Input Views.â€</li>
<li>Support for getting information about externally connected displays, described in â€œExternal Display Supportâ€</li>
<li>Support for creating PDF files, described in â€œPDF Generation.â€</li>
<li>Support for previewing and opening documents, described in â€œDocument Support.â€</li>
</ul>
<h3>Media Player Framework Changes</h3>
<p>The video classes in the Media Player framework (<code>MediaPlayer.framework</code>) have been redesigned to give you more control over the presentation of video content. Instead of simply playing a video full screen, the <code>MPMoviePlayerController</code> class now vends a view that you can incorporate into your interface however you want. This class also includes more sophisticated support for managing and controlling the playback of movies.</p>
<p>For situations where you want a simpler alternative to movie presentation, you can now use the <code>MPMoviePlayerViewController</code> class. This new class provides a view controller-based wrapper for a movie interface and is for applications that want the same basic behavior offered by the older movie player controller design.</p>
<h3>Core Animation Changes</h3>
<p>The Core Animation technology (defined in <code>QuartzCore.framework</code>) includes the following additional features:</p>
<ul>
<li>The <code>CATextLayer</code> class is now available for incorporating text-based content into your layer hierarchies.</li>
<li>You can now apply shadow effects to a layer and customize the appearance of the shadow using the <code>shadowOpacity</code>, <code>shadowRadius</code>, <code>shadowOffset</code>, <code>shadowColor</code>, and <code>shadowPath</code> properties.</li>
<li>You can configure the rasterization behavior of the layer using the <code>shouldRasterize</code> and <code>rasterizationScale</code> properties.</li>
</ul>
<h3>MapKit Framework Changes</h3>
<p>The <code>MKReverseGeocoder</code> class now includes a <code>placemark</code> property for accessing the placemark that was computed by the reverse geocoding service. You can use this property to retrieve placemark information after the results are reported to the associated delegate object.</p>
<h3>Foundation Framework Changes</h3>
<p>The <code>NSString</code> class now includes the ability to search the text of a string using regular expressions. The <code>NSStringCompareOptions</code> type includes a new flag called <code>NSRegularExpressionSearch</code>, which you can use in conjunction with the following methods:</p>
<ul>
<li><code>rangeOfString:options:</code></li>
<li><code>rangeOfString:options:range:</code></li>
<li><code>rangeOfString:options:range:locale:</code></li>
</ul>
<p>When you pass the <code>NSRegularExpressionSearch</code> as an option, the search string is interpreted as a regular expression instead of a string literal. The regular expression syntax conforms to the syntax used by the International Components for Unicode (ICU) library. When performing regular expression searches, the only other options you can include in the mask parameter are the <code>NSCaseInsensitiveSearch</code> and the <code>NSAnchoredSearch</code> flags.</p>
<p>Because some regular expressions can trigger a match but still return a zero-length range, you should check both the location and range length of the result. If a match was unsuccessful, the search methods always return a range whose location is set to <code>NSNotFound</code> and whose length is <code>0</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/apple-ipad-is-released-get-the-skinny-here/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing SQL 2008 / VS2008 / Crystal Reports on EC2</title>
		<link>http://gravityjack.com/installing-sql-2008-vs2008-crystal-reports-on-ec2</link>
		<comments>http://gravityjack.com/installing-sql-2008-vs2008-crystal-reports-on-ec2#comments</comments>
		<pubDate>Wed, 13 Jan 2010 00:20:35 +0000</pubDate>
		<dc:creator>GravityJack</dc:creator>
				<category><![CDATA[Gravity Jack News]]></category>

		<guid isPermaLink="false">http://gravityjack.com/?p=273</guid>
		<description><![CDATA[How to install SQL Server 2008, Visual Studio 2008 and Crystal Reports ALL on Amazon EC2]]></description>
			<content:encoded><![CDATA[<p><strong>Installing SQL 2008, Visual Studio 2008 and Crystal Reports ALL on Amazon EC2</strong></p>
<p><strong>Aaron Lennon &#8211; CTO, Gravity Jack<br />
</strong></p>
<p><strong><br />
</strong>I noticed many postings on Amazon.com complaining about the 10 GB limited for AMIâ€™s and how this prevented the installation of critical development components.  I like the idea of Amazon keeping their AMI images as small as possible.</p>
<p>I will say it is not â€œsimpleâ€ but there is a way to get the job done without having to perform any strange hacks that allow other drives to be seen as part of the system drive.</p>
<p>1)	Start your windows AMI.<br />
a.	 Any of the free default AMIâ€™s that Amazon offers will do.</p>
<p>2)	Create an EBS volume and attach it to your windows instance and attach it to your instance.<br />
a.	If you need help attaching the EBS volume then follow these instructions. http://www.reynoldsftw.com/2009/01/attaching-an-ebs-volume-to-ec2/<br />
b.	If you are hosting development environments on Amazon like I am it is good to checkout your Subversion repositories and host all SQL Server database files (.MDF .LDF) on an EBS volume for a fast and simple backup measure.<br />
c.	Make your EBS Volume 100GB or larger.  I used 10GB for this example but there is no point to a 10GB EBS volume.</p>
<p>3)	Install VS 2008<br />
a.	Select the options you want. I installed all languages because we host our development servers on Amazon and it is nice to be able to open a project in Visual Studio on the server is something is not working correctly after deployment. I also installed with Crystal Reports.  The only options I didnâ€™t install are a number of development tools for mobile applications and VSTO (Visual Studio Tools for Microsoft Office).</p>
<p>4)	Install VS 2008 Service Pack<br />
a.	Now, assuming you have enough free space left install the Visual Studio 2008 service packs.  These service packs donâ€™t really take up much space at all but will fail to install if you donâ€™t have a little over 3 gig free.  If the installation does fail due to lack of free space then just install it again after the next step</p>
<p>5)	Delete the following files to free a lot of space or move them to the D drive.<br />
a.	$NTServicePackUninstall*  and $NtUninstallKB*<br />
b.	C:\WINDOWS\SoftwareDistribution\Download\</p>
<p>6)	Install SQL Server 2008 and customize the installation so the databases are stored to the EBS volume you created in step 2.</p>
<p>7)	Did it work?  Check to be sure everything is working and clear your browser cache and uninstall any unneeded programs etc.<br />
a.	If everything went well you should still have over 2 GB of free space.</p>
<p>8)	Bundle your new perfectly configured windows instance. (You donâ€™t want to lose all the work you have done)<br />
a.	This is done easily from your AWS control panel. Just right click on your instance and choose Bundle Instance.<br />
b.	After you complete the bundle process you are able to start new Servers easily and the configurations can be replicated with a single click.</p>
<p>9)	Take a Snapshot of your EBS Volume. (You donâ€™t want to lose all the work you have done)<br />
a.	This is also easily done from your AWS Control Panel.  Just right click on your EBS Volume and choose to make a Snapshot.<br />
b.	A new snapshot should be taken on regular intervals so you always have a good backup of your EBS volume.</p>
<p>If you have any questions about Amazon EC2 support for your applications, please contact me. I am happy to help.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 726px; width: 1px; height: 1px;">
<p class="MsoNormal"><span style="font-size: 16pt;">lling SQL 2008 and VS2008 and Crystal Reports ALL on Amazon EC2.</span></p>
<p class="MsoNormal">I noticed many postings on Amazon.com complaining about the 10 GB limited for AMIâ€™s and how this prevented the installation of critical development components. Â I like the idea of Amazon keeping their AMI images as small as possible.</p>
<p class="MsoNormal">
<p class="MsoNormal">I will say it is not â€œsimpleâ€ but there is a way to get the job done without having to perform any strange hacks that allow other drives to be seen as part of the system drive.</p>
<p class="MsoNormal">
<p class="MsoListParagraph" style="text-indent: -0.25in;"><!--[if !supportLists]--><span><span>1)<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><strong>Start your windows AMI</strong>.</p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>a.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--> Any of the free default AMIâ€™s that Amazon offers will do.</p>
<p class="MsoListParagraph" style="text-indent: -0.25in;"><!--[if !supportLists]--><span><span>2)<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><strong>Create an EBS volume and attach it to your windows instance and attach it to your instance.</strong></p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>a.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->If you need help attaching the EBS volume then follow these instructions<strong>. <a href="http://www.reynoldsftw.com/2009/01/attaching-an-ebs-volume-to-ec2/">http://www.reynoldsftw.com/2009/01/attaching-an-ebs-volume-to-ec2/</a> </strong></p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>b.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->If you are hosting development environments on Amazon like I am it is good to checkout your Subversion repositories and host all SQL Server database files (.MDF .LDF) on an EBS volume for a fast and simple backup measure.</p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>c.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Make your EBS Volume 100GB or larger.Â  I used 10GB for this example but there is no point to a 10GB EBS volume.</p>
<p class="MsoListParagraph" style="text-indent: -0.25in;"><!--[if !supportLists]--><span><span>3)<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><strong>Install VS 2008</strong></p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>a.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Select the options you want. I installed all languages because we host our development servers on Amazon and it is nice to be able to open a project in Visual Studio on the server is something is not working correctly after deployment. I also installed with Crystal Reports.Â  The only options I didnâ€™t install are a number of development tools for mobile applications and VSTO (Visual Studio Tools for Microsoft Office).</p>
<p class="MsoListParagraph" style="text-indent: -0.25in;"><!--[if !supportLists]--><span><span>4)<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><strong>Install VS 2008 Service Pack</strong></p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>a.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Now, assuming you have enough free space left install the Visual Studio 2008 service packs.Â  These service packs donâ€™t really take up much space at all but will fail to install if you donâ€™t have a little over 3 gig free.Â  If the installation does fail due to lack of free space then just install it again after the next step <span style="font-family: Wingdings;">J</span></p>
<p class="MsoListParagraph" style="text-indent: -0.25in;"><!--[if !supportLists]--><span><span>5)<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><strong>Delete the following files to free a lot of space or move them to the D drive</strong>.</p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>a.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->$NTServicePackUninstall*Â  and $NtUninstallKB*</p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>b.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->C:\WINDOWS\SoftwareDistribution\Download\</p>
<p class="MsoListParagraph" style="text-indent: -0.25in;"><!--[if !supportLists]--><span><span>6)<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><strong>Install SQL Server 2008 and customize the installation so the databases are stored to the EBS volume you created in step 2.</strong></p>
<p class="MsoListParagraph" style="text-indent: -0.25in;"><!--[if !supportLists]--><span><span>7)<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><strong>Did it work?Â  Check to be sure everything is working and clear your browser cache and uninstall any unneeded programs etc. </strong></p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>a.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->If everything went well you should still have over 2 GB of free space.</p>
<p class="MsoListParagraph" style="text-indent: -0.25in;"><!--[if !supportLists]--><span><span>8)<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><strong>Bundle your new perfectly configured windows instance. (You donâ€™t want to lose all the work you have done)</strong></p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>a.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->This is done easily from your AWS control panel. Just right click on your instance and choose Bundle Instance.</p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>b.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->After you complete the bundle process you are able to start new Servers easily and the configurations can be replicated with a single click.</p>
<p class="MsoListParagraph" style="text-indent: -0.25in;"><!--[if !supportLists]--><span><span>9)<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]--><strong>Take a Snapshot of your EBS Volume. (You donâ€™t want to lose all the work you have done)</strong></p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>a.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->This is also easily done from your AWS Control Panel.Â  Just right click on your EBS Volume and choose to make a Snapshot.</p>
<p class="MsoListParagraph" style="margin-left: 1in; text-indent: -0.25in;"><!--[if !supportLists]--><span><span>b.<span style="font-family: &amp;amp;amp; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->A new snapshot should be taken on regular intervals so you always have a good backup of your EBS volume.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">If you have any questions about Amazon EC2 support for your applications, please contact me. I am always happy to help.</p>
<p class="MsoNormal">
<p class="MsoNormal">Screenshot of final server instance contents is below.</p>
<p class="MsoNormal"><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"  o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"  stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="Picture_x0020_2" o:spid="_x0000_i1025" type="#_x0000_t75"  alt="" style='width:744pt;height:560.25pt'> <v:imagedata src="file:///C:\Users\alrichey\AppData\Local\Temp\msohtmlclip1\01\clip_image001.jpg" mce_src="file:///C:\Users\alrichey\AppData\Local\Temp\msohtmlclip1\01\clip_image001.jpg"   o:href="cid:image002.jpg@01CA92F4.71F15F80" /> </v:shape><![endif]--><!--[if !vml]--><img src="file:///C:/Users/alrichey/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg" border="0" alt="" width="992" height="747" /><!--[endif]--></p>
<p class="MsoNormal">
<p class="MsoNormal"><strong><span style="font-size: 16pt; color: #1f497d;">Aaron Lennon</span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 10pt; color: #c00000;">CTO</span></strong></p>
<table class="MsoNormalTable" style="border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="padding: 0.75pt; width: 150pt;" width="200">
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 8pt; font-family: &amp;amp;amp; color: #1f497d;"><a href="mailto:alennon@gravityjack.com">alennon@gravityjack.com</a></span></p>
<p><a href="../">http://gravityjack.com/</a></p>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 8pt; font-family: &amp;amp;amp; color: #1f497d;">Office </span><span style="font-size: 9pt; color: #1f497d;">(877)Â 691-3048 </span><span style="font-size: 9pt; font-family: &amp;amp;amp; color: #1f497d;"> </span><span style="font-size: 8pt; font-family: &amp;amp;amp; color: #1f497d;"><br />
yahoo= aaron_at_gravityjack<br />
skype = aaron_at_gravityjack<br />
msn = <a href="mailto:alennon@gravityjack.com">alennon@gravityjack.com</a><br />
ICQ = 290619095</span></p>
</td>
<td style="padding: 0.75pt; width: 165pt;" width="220">
<p class="MsoNormal"><span style="font-size: 12pt; color: #1f497d;"><!--[if gte vml 1]><v:shape    id="Picture_x0020_1" o:spid="_x0000_i1026" type="#_x0000_t75" alt="200x98.gif"    style='width:150pt;height:73.5pt'> <v:imagedata src="file:///C:\Users\alrichey\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif" mce_src="file:///C:\Users\alrichey\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif"     o:href="cid:image001.gif@01CA92E9.364669E0" /> </v:shape><![endif]--><!--[if !vml]--><img src="file:///C:/Users/alrichey/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif" border="0" alt="200x98.gif" width="200" height="98" /><!--[endif]--></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><strong><span style="font-size: 10pt; color: #1f497d;">We build your vision, your software, your future, and most importantly your trust</span></strong></p>
<p class="MsoNormal">
</div>
]]></content:encoded>
			<wfw:commentRss>http://gravityjack.com/installing-sql-2008-vs2008-crystal-reports-on-ec2/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

