<?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>The Net Whisperer</title>
	<atom:link href="http://www.netwhisperer.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.netwhisperer.com</link>
	<description></description>
	<lastBuildDate>Thu, 16 May 2013 20:03:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>The Black Hole of the SEO World</title>
		<link>http://www.netwhisperer.com/2013/05/16/black-hole-of-seo-world/</link>
		<comments>http://www.netwhisperer.com/2013/05/16/black-hole-of-seo-world/#comments</comments>
		<pubDate>Thu, 16 May 2013 20:03:09 +0000</pubDate>
		<dc:creator>Cory Fagerskog</dc:creator>
				<category><![CDATA[Content Marketing]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[black hat]]></category>
		<category><![CDATA[keywords]]></category>
		<category><![CDATA[link magnets]]></category>
		<category><![CDATA[search engine optimization]]></category>
		<category><![CDATA[SERP]]></category>
		<category><![CDATA[white hat]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=2206</guid>
		<description><![CDATA[White and black has always represented two sides to something—yin and yang, Spy vs. Spy, Oreo’s. As with the rest of the world, there are two distinct sides to search engine optimization (SEO), white hat and black hat. White hat tactics follow the rules put in place by the search engines to rank better, whereas...]]></description>
			<content:encoded><![CDATA[<p>White and black has always represented two sides to something—yin and yang, Spy vs. Spy, Oreo’s. As with the rest of the world, there are two distinct sides to search engine optimization (SEO), white hat and black hat. White hat tactics follow the rules put in place by the search engines to rank better, whereas black hat tactics try to fool the search engine. Where there is good there will always be evil, and this evil’s name is black hat.</p>
<p>Search engines put these rules in place early on to combat the number of spammers out there and create a more user-friendly experience by increasing the quality of the search result. Since search engines know it is generally in human nature to lie, cheat and steal, they started penalizing those for doing the same with SEO and &#8220;black hat&#8221; tactics.<span id="more-2206"></span></p>
<h2><strong>What are black hat tactics, and how do you avoid them?</strong></h2>
<p>In SEO, black hat tactics are used to get a website to rank higher on the search engine result page (SERP) that do not follow the rules search engines have put into place. These tactics are in no way illegal, but do pose the threat to be penalized by the search engine. Examples of such tactics include:</p>
<ol>
<li><strong>Cloaking:</strong> hiding your website, keywords, links or images from the search engine spider or user</li>
<li><strong>Link buying:</strong> attaining or purchasing links from lower quality websites or link farms just to bring up your link count</li>
<li><strong>Keyword stuffing:</strong> using keywords in your content unnaturally and excessively</li>
</ol>
<p>Black hat tactics aren’t just unethical; they can also cause search engines to remove your website completely from their index, just ask <a href="http://www.nytimes.com/2011/02/13/business/13search.html?pagewanted=all#New%20York%20Times%20The%20Dirty%20Little%20Secrets%20of%20Search">J.C. Penny</a>. That means even if someone searches for your website by name, you <strong>will not</strong> rank. It is reversible, but it takes a lot of time to remove all the penalties from your site.</p>
<p>So how do you avoid black hat tactics? Well, it’s quite simple really—only use tactics considered to be white hat. White hat tactics are used in SEO to influence ranking by improving internal and external factors on your website. The search engine will never penalize you if you are white hat, and it will help to improve your website, rankings and content. Examples of white hat tactics include:</p>
<ol>
<li><strong>Link magnets: </strong>create quality content people want to link to instead of buying links</li>
<li><strong>Stemming keywords:</strong> use keywords naturally in your content and variations of those keywords when appropriate (manage, managing, management)</li>
<li><strong>Constantly add new content:</strong> search engines will reward you for frequently updating your site with fresh content that is useful to your visitors</li>
</ol>
<p>Remember to follow the rules set in place by search engines to avoid penalties, and your site will have a better chance at ranking for the keywords for which you are optimizing. Whether you are doing your own SEO or hiring a company to do if for you, remember to ask what types of tactics they use and always stay away from black hat!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2013/05/16/black-hole-of-seo-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Major Innovation in Mobile Prototyping</title>
		<link>http://www.netwhisperer.com/2013/04/30/major-innovation-mobile-prototyping/</link>
		<comments>http://www.netwhisperer.com/2013/04/30/major-innovation-mobile-prototyping/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 16:00:52 +0000</pubDate>
		<dc:creator>John Tumminaro</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=2159</guid>
		<description><![CDATA[ Coming May 1st a revolution in creating functional prototypes of native applications for rapid iteration is coming and not a moment too soon.]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s no secret that prototyping mobile applications is hard. HTML5 doesn&#8217;t really provide a great facsimile for native apps—you just don&#8217;t get the responsiveness or layout that makes you want to develop native in the first place—and a lot of tools that are great for web functional prototypes, like our much beloved Axure RP, are not necessarily ideal for prototyping native mobile applications depending on the UI complexity. We, here at ThoughtMatrix, are huge fans of Axure which is not going to change anytime soon, but we do realize its limitations for certain types of applications.<span id="more-2159"></span></p>
<p>Fortunately for all of us, the lack of really great native app prototyping tools has not gone unnoticed and coming May 1st is a revolutionary tool in creating functional prototypes of native applications for rapid iteration. Rather than bore you with a bunch of long-winded explanations in words on why this technology is so cool, I think the demo video the team behind it cooked up does a better job than I ever could in showing just how groundbreaking this really is.</p>
<p><a href="http://vimeo.com/64645542">Introducing Briefs</a></p>
<p>This is not a flash-in-the-pan either. Briefs is a serious, multi-year labor of love by its creator after <a href="http://blog.robrhyne.com/post/1015614125/google-voice-says-hi" target="_blank">running into challenges</a> with the previous version and Apple&#8217;s review process. This new iteration—humorously dubbed &#8220;Briefs 2&#8243;—completes the vision Rob Rhyne set out on years ago, and we look forward to adding it to our arsenal when it is released.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2013/04/30/major-innovation-mobile-prototyping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Salesforce for Authentication</title>
		<link>http://www.netwhisperer.com/2013/04/26/using-salesforce-for-authentication/</link>
		<comments>http://www.netwhisperer.com/2013/04/26/using-salesforce-for-authentication/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 15:26:55 +0000</pubDate>
		<dc:creator>Greg Burdett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[portal]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[SFDC]]></category>
		<category><![CDATA[SOAP API]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=2038</guid>
		<description><![CDATA[Recently, a WordPress-based web portal was built for a technology company to serve the needs of several thousand partners and resellers worldwide, which included providing access to confidential documents for registered users. The new portal replaced a very basic site they had built using Salesforce&#8217;s &#8220;Partner Portal&#8221; offering. As such, we had to evaluate the...]]></description>
			<content:encoded><![CDATA[<p>Recently, a WordPress-based web portal was built for a technology company to serve the needs of several thousand partners and resellers worldwide, which included providing access to confidential documents for registered users. The new portal replaced a very basic site they had built using Salesforce&#8217;s &#8220;Partner Portal&#8221; offering. As such, we had to evaluate the options for logins to the new WordPress site:<span id="more-2038"></span></p>
<ol>
<li>Create a completely new authentication system</li>
<li>Utilize the existing Salesforce portal authentication system</li>
</ol>
<p>The first option would would involve developing a new authentication system and require our client to create thousands of new credentials to roll out to partners. The resulting cost and disruption to the business made this option very unattractive to say the least. Thus, utilizing the existing Salesforce portal authentication system was the only practical way to proceed. Several strategies were evaluated for implementation; however, the best solution was to leverage the functionality provided by the Salesforce SOAP API for authentication. This approach offered two highly desirable features:</p>
<ol>
<li>No new authentication system was required, as Salesforce would conduct the actual authentication</li>
<li>Users could retain their existing credentials, making the transition to the new portal seamless</li>
</ol>
<p>The Salesforce SOAP API provides a toolkit enabling developers to build applications that interact with Salesforce.com in various ways. For example, a client can develop an application on their server, connect to Salesforce to extract leads or contact data, manipulate the data and present it on a custom-written web page. These types of applications—similar to our authentication solution—are hosted on a client&#8217;s server, not on Salesforce.com. In addition, the flexibility seems virtually endless; applications can be built in Java or C#, can be based on example code from Salesforce and code can be translated to PHP if desired—although not without some effort as Salesforce generally only provides sample code for Java and C#.</p>
<h2>Sample Implementation</h2>
<p>The overall architecture of our client solution is shown below, with the relationship between the remote site and Salesforce.com (SFDC).</p>
<div id="attachment_2076" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.netwhisperer.com/wp-content/uploads/2013/04/sfdc-solution-copy.png"><img class="size-full wp-image-2076" title="sfdc-solution-copy" src="http://www.netwhisperer.com/wp-content/uploads/2013/04/sfdc-solution-copy.png" alt="Architecture of Client Solution with SFDC Authentication" width="500" height="225" /></a><p class="wp-caption-text">Architecture of Client Solution with SFDC Authentication</p></div>
<ol>
<li>User logs into the remote site; login credentials are passed to custom Java app</li>
<li>Java app makes login request to SFDC Web Services using the SOAP API</li>
<li>SFDC Web Services issues a response with session ID if user if successfully authenticated</li>
<li>Custom app redirects to a landing page and displays a &#8220;login success&#8221; message</li>
<li>Custom app seamlessly redirects user to an SFDC page (optional)</li>
</ol>
<p>By utilizing SFDC authentication in this way, users have valid session IDs that can be used to seamlessly redirect to pages on Salesforce.com without the need to log in again. This, in effect, becomes a single sign-on (SSO) solution for the remote site and Salesforce.com, although limited to a one-way path from the remote site to Salesforce. Engineers always appreciate a well-designed system and I have to say the Salesforce technical team did an excellent job in developing the SOAP API. However, the documentation for the API is a bit sparse and generally assumes the reader already has a good grasp on the workings of the system. To help you, I describe the fundamental steps to developing an application that will utilize the SOAP API for authentication a bit further below.</p>
<h2>Setting Up the Toolkit</h2>
<p>The basic requirements for a development environment are:</p>
<ul>
<li>Java 6—must be available in the development environment</li>
<li>J2EE application server, such as Tomcat—you can use Java 7 with Tomcat, if desired</li>
<li>Java development tool, such as Eclipse</li>
<li>SFDC account for testing and administration—Salesforce will provide a developer account for free, which will work fine</li>
<li>Appropriate WSDL file for your organization</li>
<li>Salesforce Web Service Connector (WSC) toolkit</li>
</ul>
<p>The SOAP API toolkit is not available as a binary download—you have to generate it yourself, based on your organization&#8217;s SFDC Web Service Definition Language (WSDL) file. The WSDL essentially defines all of the API calls and data fields available for your organization. The details of the WSDL may vary between different organizations, as they may have access to different services. They can also define &#8220;custom fields&#8221; that appear in the underlying SFDC database. Hence, each organization&#8217;s WSDL is potentially unique, and the API toolkit must be built for a specific WSDL. If you sign up for the free developer account, your &#8220;organization&#8221; will just be you. Your organization&#8217;s WSDL is available in Salesforce.com and can be obtained as follows:</p>
<ol>
<li>Log in to Salesforce—this may be SFDC, the &#8220;sandbox&#8221; test.salesforce.com site or developer.salesforce.com</li>
<li>In the top right corner of the home page, click the down arrow next to your name and choose &#8220;Setup&#8221;</li>
<li>From the menu on the left side of the page, under &#8220;App Setup&#8221;, click the down arrow next to &#8220;Develop&#8221;, then click &#8220;API&#8221;</li>
<li>On the &#8220;API WSDL&#8221; page, click &#8220;Generate Enterprise WSDL&#8221;—you should then see a page of XML, save the XML in a file on your local machine and name it something like &#8220;enterprise.wsdl&#8221;</li>
</ol>
<p>The Salesforce WSC toolkit is used to generate a JAR file containing all the classes and methods your custom application will require. You can obtain the Salesforce WSC toolkit from <a href="http://code.google.com/p/sfdc-wsc/downloads/list" target="_blank">http://code.google.com/p/sfdc-wsc/downloads/list</a>. At the time of writing, the latest version of the WSC is &#8220;wsc-22.jar&#8221;. Now is where Java 6 is needed because the &#8220;wsc-22-jdk-1.7.jar&#8221; file on the Google Code page appears unable to generate the desired JAR file when executed under Java 7. Once the JAR is created, it may be deployed in Tomcat running under Java 7, but it must be initially built using Java 6. For Windows users, it is quite easy to have two different JDKs installed on the same machine. For Mac users, this can be a little problematic as a recent OSX update removed the &#8220;Java Preferences&#8221; utility that enabled different versions of the JDK to be swapped in and out. Although my Mac has Java 7 installed, I found Java 6 was still present in the folder &#8220;/System/Library/Frameworks/JavaVM.framework/Home/bin/java&#8221;. This can be tested in a command window as follows:</p>
<p style="padding-left: 30px;">mymac$  /System/Library/Frameworks/JavaVM.framework/Home/bin/java -version</p>
<p>The system should respond with something like:</p>
<p style="padding-left: 30px;">java version &#8220;1.6.0_37&#8243; Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)</p>
<p>Assuming you are able to get access to Java 6 and the WSDL file is named &#8220;enterprise.wsdl&#8221;, the command to generate the JAR file is:</p>
<p style="padding-left: 30px;">/Java6 path/java -classpath wsc-22.jar com.sforce.ws.tools.wsdlc  enterprise.wsdl  enterprise.jar</p>
<p>After success completion of that step, you will have a file named &#8220;enterprise.jar&#8221;. Using your IDE of choice, create a web application and drop the JAR file into the WEB-INF/lib folder. The JAR file will contain various classes with methods that you can call to interact with Salesforce.com.</p>
<h2>Using the SOAP API for Authentication</h2>
<p>The pieces of data required for you to connect to SFDC include:</p>
<ul>
<li>Salesforce username and password for testing purposes (obtained from SFDC)</li>
<li>Authorization endpoint</li>
<li>Service endpoint</li>
</ul>
<p>The latter two values are URLs containing the server you will use for authentication and the appropriate version of the API. The appropriate server name for your circumstance can be determined by logging into the relevant Salesforce account—developer, test or production—and noting the URL to which you are redirected. For example, my developer login is redirected to &#8220;https://na9.salesforce.com/&#8230;&#8221;. The current version of the API is 26, so the authorization and service endpoint URLs—in my case—are both going to be &#8220;https://na9.salesforce.com/services/Soap/c/26.0&#8243;. We now have everything we need to write an application to interact with SFDC. Let&#8217;s look at the basic skeleton code to do a simple login authentication.</p>
<pre><span style="color: #008000;">//Do some imports from our enterprise .jar file.</span> <span style="color: #800000;">
import</span> com.sforce.soap.enterprise.Connector; <span style="color: #800000;">
import</span> com.sforce.soap.enterprise.EnterpriseConnection; <span style="color: #800000;">
import</span> com.sforce.soap.enterpriseGetUserInfoResult; <span style="color: #800000;">
import</span> com.sforce.ws.ConnectionException;
<span style="color: #800000;">import</span> com.sforce.ws.ConnectorConfig;</pre>
<pre><span style="color: #800000;">public class</span> SFDCAuthenticator {
<span style="color: #800000;">     public</span> ProfileObject doLogin (String username, String password) {
          EnterpriseConnection connection;
          ProfileObject profileObject = <span style="color: #800000;">new</span> ProfileObject();
          ConnectorConfig config = <span style="color: #800000;">new</span> ConnectorConfig();
          config.setUsername(ussername);
          config.setPassword(password);
<span style="color: #800000;">          try</span> {
             config.setAuthEndpoint
               ("https://na9.salesforce.com/services/Soap/c/26.0");
             config.setServiceEndpoint
               ("https://na9.salesforce.com/services/Soap/c/26.0"); 

<span style="color: #008000;">            //Create a new connection</span>
            connection = Connector.newConnection (config);
            System.out.println("Yay! Login successful!");
            profileObject.setStatus(<span style="color: #800000;">true</span>);
            profileObject.setSessionId(config.getSessionId());
            profileObject.setServerUrl(config.getServiceEndpoint());

<span style="color: #008000;">            //Do something else here</span>
        }
<span style="color: #800000;">        catch</span> (ConnectionException ce) {
           System.out.println("Failed to connect or login");
           ce.printStackTrack();
           profileObject.setStatus(<span style="color: #800000;">false</span>);
        }
<span style="color: #800000;">        catch</span> (Exception e) {
           System.out.println("Something bad happened");
           e.printStackTrace();
           profileObject.setStatus(<span style="color: #800000;">false</span>);
        }
<span style="color: #800000;">        return</span> profileObject;
    }
}</pre>
<p>This class takes a username, password, authorization endpoint and service endpoint, and sets values in a ConnectorConfig object. When we create the new connection, the login is performed by the API toolkit. We could have simply returned a boolean value of &#8220;true or false&#8221; to indicate login success or failure, but we would usually want to build a user profile and return that to the method&#8217;s caller. There is nothing special about the &#8220;ProfileObject class; it&#8217;s a Java bean I created with string members to store the user data.</p>
<p>Now, let&#8217;s consider some things we might like to do under the &#8220;Do something else here&#8221; comment in the above example.</p>
<pre><span style="color: #008000;">//Obtain some details about the user from the GetUserInfoResult object</span>
GetUserInfoResult userInfo = connection.getUserInfo();
profileObject.setLanguage(userInfo.getUserLanguage());
profileObject.setTimeZone(userInfo.getUserTimeZone());</pre>
<pre><span style="color: #008000;">
//Obtain information about the user's login session</span>
profileObject.setValidTime(userInfo.getSessionSecondsValid());</pre>
<p>For a complete description of the SFDC API functionality, refer to the &#8220;SOAP API Developer&#8217;s Guide&#8221; at <a href="http://www.salesforce.com/us/developer/docs/api/index.htm" target="_blank">http://www.salesforce.com/us/developer/docs/api/index.htm</a></p>
<p>The API toolkit also provides access to the SFDC database, along with the &#8220;Salesforce Object Query Language&#8221; (SOQL) that behaves mostly like SQL. A developer can perform SQL-like queries against the database as well as retrieve the results using the toolkit objects and methods.</p>
<p>Returning to the code example, you may have noticed two lines in the section where we created the connection:</p>
<pre style="padding-left: 30px;">profileObject.setSessionID(config.getSessionID());
profileObject.setServerURL(config.getServiceEndpoint());;</pre>
<p>The session ID and the service endpoint can be used to add functionality that gives some polish to the authentication system. There are two basic features we should add:</p>
<ol>
<li>Session refresh</li>
<li>Logout</li>
</ol>
<p>The &#8220;session refresh&#8221; functionality is particularly important in our situation. Looking back at the overview diagram, the authentication request is initiated by our remote web site. This site will presumably have plenty of interesting resources to keep users engaged after they&#8217;re logged in; however, the authentication functionality is provided by services on Salesforce.com. In a typical use case, a user logs into our site, is authenticated via Salesforce and then proceeds to surf around. Meanwhile, the Salesforce server doesn&#8217;t receive any indication of the user being active. When the session timer expires. Salesforce terminates the session; this goes unnoticed by our portal until the user attempts a &#8220;seamless redirect&#8221; to Salesforce or accesses some Salesforce data and is then confronted by a login page again. Hence, our site must be able to keep the session alive as long as our user is active.</p>
<p>The code to perform the refresh is similar to the login example above, except the required parameters are not username and password—to refresh the session, input the session ID and the service endpoint URL. This is why those values were obtained from the ConnectorConfig object after the connection was made; they were stored in the profile object and returned to the calling application so the site could make use of them for this purpose. Here is a code sample, abbreviated to include only the essential statements:</p>
<pre><span style="color: #800000;">public</span> boolean doRefresh (String sessionId, String serverURL) {
     EnterpriseConnection connection;
<span style="color: #800000;">     try</span> {
          ConnectorConfig config = <span style="color: #800000;">new</span> ConnectorConfig();
          config.setSessionId(sessionId);
          config.setServiceEndpoint(serverUrl);
          connection = Connector.newConnection(config);
          return true;
          }
          catch (ConnectionException ce) {
               return false;
          }
}</pre>
<p>In order to refresh the session, take the session ID and server URL, set them in a ConnectorConfig object and then make a method call for a new connection. This will not create a new session ID, but will revitalize the old one and set the session countdown back to the default value—determined by your Salesforce account settings. You cannot refresh a session that has already expired, so you will need to call this method at regular intervals.</p>
<p>The logout functionality is similar to the refresh; however, it calls a special method to invalidate the session. After this is performed, the session ID will no longer be valid and the user is logged out by SFDC. Our site will need to keep track of the user&#8217;s login status, making sure we don&#8217;t allow access to the site when the SFDC session is no longer active. Here is an abbreviated logout code sample:</p>
<pre><span style="color: #800000;">public</span> boolean doLogout (String sessionId, String serverURL) {
     EnterpriseConnection connection;
<span style="color: #800000;">     try {</span>
          String{} sessionIds = <span style="color: #800000;">new</span> String[1];
          sessionIds[0] = session Id;
          ConnectorConfig config = <span style="color: #800000;">new</span> ConnectorConfig();
          config.setSessionId(sessionId);
          config.setServiceEndpoint(serverUrl);
          connection = Connector.newConnection(config);
          connection.invalidateSessions(sessionIds);
          return (true);
     }
<span style="color: #800000;">     catch</span> (ConnectionException ce) {
<span style="color: #800000;">          return</span> (false);
     }
}</pre>
<p>The doLogout method uses the session ID and server URL to create a new connect, then calls the &#8220;invalidateSessions&#8221; method to destroy the session. It may seem odd to effectively perform a &#8220;refresh&#8221; operation on the session and then destroy it, but it&#8217;s because we&#8217;re twisting the original purpose of this part of the toolkit for our web-based remote site. These methods are better suited for &#8220;batch&#8221; modes, where a program creates a user session, performs some data extraction operations then destroys the session without user intervention.</p>
<p>The Salesforce SOAP API toolkit takes a bit of effort to set up. That  being said, it offers a vast array of features and functionality, and  the authentication system described here is just one potential use of  the toolkit—perhaps one which will whet your appetite for more  exploration!</p>
<p style="padding-left: 30px;">
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2013/04/26/using-salesforce-for-authentication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LinkedIn Performs Last Rites for HTML5 Mobile App Development</title>
		<link>http://www.netwhisperer.com/2013/04/25/linkedin-html5-mobile-app-development/</link>
		<comments>http://www.netwhisperer.com/2013/04/25/linkedin-html5-mobile-app-development/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 15:36:28 +0000</pubDate>
		<dc:creator>John Tumminaro</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[mobile app development]]></category>
		<category><![CDATA[native app development]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=2164</guid>
		<description><![CDATA[LinkedIn the company who just last year espoused how HTML5 client development was still extremely relevant released a major new update to their application in the last week and without any forewarning they quietly let it slip that they have moved from a hybrid application over to an all native design.]]></description>
			<content:encoded><![CDATA[<p>We experienced quite the extraordinary turn of events this past week, though not entirely surprising to those up on industry trends. Simply put, LinkedIn—the company who just last year espoused how <a href="http://arstechnica.com/information-technology/2012/10/a-behind-the-scenes-look-at-linkedins-mobile-engineering/" target="_blank">HTML5 client development was still extremely relevant</a>—released a major new update to their application and without any forewarning <a href="http://venturebeat.com/2013/04/17/linkedin-mobile-web-breakup/" target="_blank">quietly let it slip</a> that they have moved from a hybrid application to an all native design.<span id="more-2164"></span></p>
<p>I take some satisfaction in having recognized this trend early having given up most hybrid development two years ago, but not for the usual ideological reasons most people cite. Rather, I knew very well we heard the same &#8220;write-once run-anywhere&#8221; promise from Java apps in the late 90s&#8230;how did that work out again?</p>
<p>Server applications—one area where Java has been very successful—are a different ballgame entirely, but consumer apps live or die based on their UI and how well executed it is. And like it or not, when you design a cross platform UI you really have three choices:</p>
<ol>
<li><strong>Build a custom UI framework</strong> to standardize across platforms. Forget it, pretty much only Adobe does this or can afford to. Sure, games get away with it, but games have very few actual UI components—3D engines are extremely advanced and completely different than a text field or navigation bar. This produces good results in only very select situations where you want someone trained in a complex program—like Solidworks, Maya or Photoshop—to be able to work on any platform and not worry about the underlying OS.</li>
<li><strong>Use a third-party cross-platform library</strong>. This sounds like a decent option except that universally it not been very successful, especially on mobile. Things like Qt and Adobe Air have their place, but in consumer apps—where you need to deliver the most cutting-edge features in the best presentation possible—you are always going to be catering to the lowest common denominator.</li>
<li><strong>Leverage HTML5/JS frameworks, like Sencha Touch and jQuery Mobile. </strong>These are both excellent choices for web apps and lower budget projects that need a large footprint at low cost, but they can&#8217;t compete with apps that are custom built for the platform and tuned by a seasoned developer who knows how to maximize the capabilities of the platform they are working on.</li>
</ol>
<p>LinkedIn eventually gave up, but not without a valiant effort and certainly quite an investment—from contributing their best engineering talent to trying to drum up industry support even after Facebook threw in the towel. There are many reasons why native is a better solution, but this is a pretty common refrain. Developers are abandoning Cordova for medium to high-end development in droves, much like the sputtering of Java Desktop apps that landed with a thud and then retreated never to be heard from again.</p>
<p>What&#8217;s this mean for you and your business? Find good mobile developers with specialization in a platform and treat them well—they are perhaps the single most important variable in you being able to realize a successful mobile product.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2013/04/25/linkedin-html5-mobile-app-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Who’s Qualifying Whom?</title>
		<link>http://www.netwhisperer.com/2013/04/23/whos-qualifying-whom/</link>
		<comments>http://www.netwhisperer.com/2013/04/23/whos-qualifying-whom/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 22:38:09 +0000</pubDate>
		<dc:creator>Carl Agers</dc:creator>
				<category><![CDATA[Marketing Strategy]]></category>
		<category><![CDATA[decision-making process]]></category>
		<category><![CDATA[purchase decision]]></category>
		<category><![CDATA[sales funnel]]></category>
		<category><![CDATA[sales process]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=2125</guid>
		<description><![CDATA[Having started my career in sales and attending countless sales training courses and seminars, there’s one thing that was engrained in my thinking for the better part of 20 years—“Sales is a process, regardless of which of the many ‘proven approaches’ you follow, and following a defined process will equal success.” Each of these processes...]]></description>
			<content:encoded><![CDATA[<p>Having started my career in sales and attending countless sales training courses and seminars, there’s one thing that was engrained in my thinking for the better part of 20 years—“Sales is a process, regardless of which of the many ‘proven approaches’ you follow, and following a defined process will equal success.” Each of these processes shared one thing in common—they were all linear. One of the first steps in each process was learning how to qualify a customer. If they’re not qualified when you meet them, either move on or find a way to present something to them that would move them into a qualification phase.</p>
<p>No matter how you looked at it, the salesperson was responsible for capturing a potential customer early in their buying cycle and moving them through the proverbial funnel. Every company and executive sales leader subscribed to some sort of sales and marketing funnel.<span id="more-2125"></span></p>
<p>This was the “Holy Grail.” I used to sit through, and even conduct, funnel management meetings dissecting how each customer was moving through, or out of, the funnel and devising strategies to address those that were not. Was this an accurate assessment of how purchase decisions were made? I am not so sure it was then, but it certainly is not today.</p>
<div id="attachment_2135" class="wp-caption alignright" style="width: 330px"><a href="http://www.netwhisperer.com/wp-content/uploads/2013/04/Funnel1.jpg"><img class="size-full wp-image-2135    " title="Funnel" src="http://www.netwhisperer.com/wp-content/uploads/2013/04/Funnel1.jpg" alt="Traditional Funnel" width="320" height="293" /></a><p class="wp-caption-text">Traditional funnels assume an unrealistic linear flow</p></div>
<p>Customers just don’t move methodically through five to seven steps, checking off each item and making a purchase decision. They move back and forth, up and down. Consider the last time you made a significant purchase. Chances are you researched options online—should I buy a sedan, wagon or dreaded minivan, for example—then talked with friends, or colleagues, who have already purchased something similar. Then armed with new knowledge, back online you went but this time on your smartphone while killing time in line at the market. You may have also read some new media reviews. Back and forth, up and down. It’s highly likely that along the way, you saw the same company get the best ratings, coverage and more. Whether overt or subtle, your needs were slowly shaped. Then, once you felt confident you knew as much as you could without talking to a salesperson, you finally engaged with one to either negotiate the deal—but you were already “sold”—or get your final elusive questions answered.</p>
<p>Let’s face it, since the dawn of time salespeople were the gateway to information. Sure, customers could reach out to industry analysts and others for their opinions, but that was and still is costly and time consuming. Even still, they could only acquire limited information about a company and its products and services, and ultimately they would need to talk to a salesperson.</p>
<p>That was then, and this is now. Regardless of whose numbers you believe—a recent study by Google and the CEB puts it at 57%—the majority of the sales process begins well before the customer engages with a salesperson. Sure, there are those lucky times when a customer is just sitting in their office waiting for a salesperson to enlighten them on how their business could be transformed with their product, and they weren’t even thinking about such a product or service, but…well you get it.</p>
<div id="attachment_2136" class="wp-caption alignleft" style="width: 510px"><a href="http://www.netwhisperer.com/wp-content/uploads/2013/04/Purchase-Progess-Chart.jpg"><img class="size-full wp-image-2136" title="Purchase-Progess-Chart" src="http://www.netwhisperer.com/wp-content/uploads/2013/04/Purchase-Progess-Chart.jpg" alt="Sales engaged after 60% of decision making process has elapsed" width="500" height="185" /></a><p class="wp-caption-text">(SOURCE: CEB Marketing Leadership Council 2012 Customer Purchase Decision-Making Survey)</p></div>
<p>In today’s connected world, content in every form is available to prospective customers, and they use it. Whether you provide content or it comes from your competitors, media, analysts or the myriad of pundits that create content—biased or not—continuously, your target customers are consuming it.</p>
<p>So the question is what are you doing about it? If a large percentage of the decision is made before your salespeople are really engaged, what is a sales and marketing organization to do? I would submit there are three things every marketing-driven organization must be doing and refining.</p>
<h2><strong>Commit to becoming a content driven organization.</strong></h2>
<p><strong> </strong>While prospective customers are not interested in talking with your salespeople on day one—or day 75 for that matter—they are interested in your expert knowledge. In both B2B and B2C transactions, there’s a learning process and that’s the first opportunity to begin shaping their opinions in your favor. Even though your prospective customer’s journey is not linear, it does exist and they do consume content throughout the journey. Your job is to continually create content to help inform them along the way.</p>
<h2><strong>Take it personally and make it personal.</strong></h2>
<p>It’s a dialogue, not a monologue. While it’s not feasible to have one-on-one conversations—and of course, as I’ve mentioned they don’t want to—they still want information as relevant to them as possible. It’s no longer sufficient to create one size fits all experiences and hope for the best. Each engagement from campaign responses to search is creating an invaluable trail of individualized information. Capture it, and harness it. Create dynamically driven content for each customer, or at least each customer segment or persona.</p>
<h2><strong>Syndicate everywhere.</strong></h2>
<p>Sure, mobile can no longer be ignored, but it’s much bigger than devices and browser sizes. Customers rely on different sites, forums, communities and even offline to shape their opinions. Each of these touch points is an opportunity. Continually monitor and measure as many touch points as you can, and create content that is touch point appropriate and engage in mutually beneficial dialogue.</p>
<p>While the customer may be bouncing around the so-called funnel like BBs in a boxcar, there’s a great opportunity for your brand to be where they land each time. Being there with relevant, informative content is your best opportunity to help customers qualify themselves and make your sales force as efficient as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2013/04/23/whos-qualifying-whom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SDL Tridion &#8211; 2013</title>
		<link>http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/</link>
		<comments>http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/#comments</comments>
		<pubDate>Fri, 29 Mar 2013 20:38:04 +0000</pubDate>
		<dc:creator>Madhu Subramanian</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[SDL]]></category>
		<category><![CDATA[SDL Tridion]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=1998</guid>
		<description><![CDATA[Review about new features of SDL Tridion 2013 version. Release: End of March 2013]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago, I attended the 2013 SDL Tridion Bootcamp conducted by Mihai Cadariu and Alvin Reyes. Some pretty exciting stuff, and it just so happens the new 2013 version is being released today!<span id="more-1998"></span></p>
<h2>New Features</h2>
<h3><strong>Personal Information Center</strong> <strong>- Activities and Tasks</strong></h3>
<p>The Personal Information Center—located at the top right on the CME interface—is a new feature that allows Activities and Tasks to go through the workflow process. You can also kick off a workflow without an actual item associated with it.</p>

<a href='http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/5-3/' title='Bundle in a Workflow'><img width="150" height="150" src="http://www.netwhisperer.com/wp-content/uploads/2013/03/5-150x150.png" class="attachment-thumbnail" alt="Bundle in a Workflow" title="Bundle in a Workflow" /></a>
<a href='http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/5a/' title='Add Item to a Bundle'><img width="150" height="150" src="http://www.netwhisperer.com/wp-content/uploads/2013/03/5a-150x150.png" class="attachment-thumbnail" alt="Add Item to a Bundle" title="Add Item to a Bundle" /></a>
<a href='http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/4-3/' title='Workflow Settings'><img width="150" height="150" src="http://www.netwhisperer.com/wp-content/uploads/2013/03/4-150x150.png" class="attachment-thumbnail" alt="Workflow Settings" title="Workflow Settings" /></a>
<a href='http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/3-4/' title='Start Activity'><img width="150" height="150" src="http://www.netwhisperer.com/wp-content/uploads/2013/03/3-150x150.png" class="attachment-thumbnail" alt="Start Activity" title="Start Activity" /></a>
<a href='http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/2-4/' title='Assign Task'><img width="150" height="150" src="http://www.netwhisperer.com/wp-content/uploads/2013/03/2-150x150.png" class="attachment-thumbnail" alt="Assign Task" title="Assign Task" /></a>
<a href='http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/1a/' title='Task Notification'><img width="150" height="150" src="http://www.netwhisperer.com/wp-content/uploads/2013/03/1a-150x150.png" class="attachment-thumbnail" alt="Task Notification" title="Task Notification" /></a>
<a href='http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/1-4/' title='CME Interface Showing the Personal Information Center'><img width="150" height="150" src="http://www.netwhisperer.com/wp-content/uploads/2013/03/1-150x150.png" class="attachment-thumbnail" alt="CME Interface Showing the Personal Information Center" title="CME Interface Showing the Personal Information Center" /></a>

<h3><strong>Bundles</strong></h3>
<p>This is a new concept altogether and a new Schema type. The CMS  is basically allowing you to group a bunch of related components, pages and such to create a bundle. An example/use case would be the grouping of all the related items for a release (e.g., you can use this for workflow or publishing). In addition, this new functionality allows you to place a bundle inside bundle.</p>
<div id="attachment_2006" class="wp-caption alignnone" style="width: 310px"><a href="http://www.netwhisperer.com/wp-content/uploads/2013/03/5.png"><img class="size-medium wp-image-2006" src="http://www.netwhisperer.com/wp-content/uploads/2013/03/5-300x226.png" alt="Bundle in a workflow" width="300" height="226" /></a><p class="wp-caption-text">Bundle in a Workflow</p></div>
<div id="attachment_2007" class="wp-caption alignnone" style="width: 310px"><a href="http://www.netwhisperer.com/wp-content/uploads/2013/03/5a.png"><img class="size-medium wp-image-2007" src="http://www.netwhisperer.com/wp-content/uploads/2013/03/5a-300x242.png" alt="Add item to a Bundle" width="300" height="242" /></a><p class="wp-caption-text">Add Item to a Bundle</p></div>
<h3>Other Improvements</h3>
<p>Other improved functional areas include:</p>
<ul>
<li>Experience Manager UI, Ambient Visitor Intelligence and Footprint Preview</li>
<li>Built-in Device Preview Capability</li>
<li>Multi-item Workflow and the Task Workflow</li>
<li>Translation for Metadata of Multimedia Assets</li>
</ul>
<h2><strong>Architecture Changes</strong></h2>
<p>The 2013 version now boasts a fully consolidated .NET architecture on the CME side. All the legacy items that uses VB6, COM+ have been removed from the default installation. If there is a specific need for these they are made available as a &#8216;Legacy apps Install&#8217;.</p>
<p>The Power Shell support on the CME has been improved, as now all Tridion databases can be installed by running scripts thru the Power Shell. In addition, XSLT Mediator is now part of the core product.</p>
<h3><strong>External Content Libraries</strong> (ECL)</h3>
<div>The External Content Library is a module for exposing multimedia contained in an external system in SDL Tridion. You can use the media—such as YouTube and Flickr—in SDL Tridion-driven web sites. This now is fully integrated to the CME, and so its API gives additional capabilities of  development for TBBs, Event Handling, etc.</div>
<p>The Undo Publishing feature provide the ability to undo an item based on its publish transaction ID. The Content Manager API now enables you to undo a publish transaction. Its main purpose is for use in the Automatic Activities in Workflow Process. This will require a little bit of configuration on the CD side, but otherwise it&#8217;s quite nice.</p>
<h3>Other Improvements</h3>
<p>Other improved technical areas include:</p>
<ul>
<li>Session preview</li>
<li>Core Services API 2013</li>
<li>Read and Write public .NET API</li>
</ul>
<p>All these upgrades makes the Tridion CMS super fun to work with (both functional and technical alike). A big congratulations to the SDL team for all the new goodies! Exciting stuff.</p>
<p>Instagram: <a href="http://instagram.com/p/Xc76x9kjpk/">Mihai &amp; Alvin @ SDL Bootcamp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2013/03/29/sdl-tridion-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile App Development &#8211; Native vs. Cross-Platform</title>
		<link>http://www.netwhisperer.com/2013/03/27/mobile-app-development-native-vs-cross-platform/</link>
		<comments>http://www.netwhisperer.com/2013/03/27/mobile-app-development-native-vs-cross-platform/#comments</comments>
		<pubDate>Wed, 27 Mar 2013 16:09:22 +0000</pubDate>
		<dc:creator>Dave Schuman</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Appcelerator Titanium]]></category>
		<category><![CDATA[Corona]]></category>
		<category><![CDATA[CPT]]></category>
		<category><![CDATA[cross-platform tools]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[mobile app development]]></category>
		<category><![CDATA[native apps]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=1930</guid>
		<description><![CDATA[Given the current proliferation of mobile touchpoints, we are often tasked with helping clients create mobile roadmaps and strategies. Inevitably, we are asked if there is a way to build content or functionality once and deploy it on a variety of different mobile platforms. The answer, of course, is yes. In fact, there are several ways, and the...]]></description>
			<content:encoded><![CDATA[<p>Given the current proliferation of mobile touchpoints, we are often tasked with helping clients create mobile roadmaps and strategies. Inevitably, we are asked if there is a way to build content or functionality once and deploy it on a variety of different mobile platforms. The answer, of course, is yes. In fact, there are several ways, and the benefits of doing so vary from a more streamlined development process to higher adoption rates to lower costs. However, when is the right time to use cross-platform solution? What kind of requirements lend themselves to this simpler approach? When is the cross-platform approach actually simpler than developing for native applications?</p>
<p><span id="more-1930"></span>In this post, I&#8217;m going to examine some of the existing technologies for cross-platform development of mobile apps, with an emphasis on determining when they might be appropriate for an app or business and when they might not.</p>
<h2>What&#8217;s out there&#8230;</h2>
<p>What are the available cross-platform tools (CPTs)?</p>
<h3><span style="font-size: 13px; font-weight: normal;">There are many—at least 100+—of these CPTs in today&#8217;s market, though we only typically hear of a few. Those with the most usage include:</span></h3>
<ul>
<li><a title="Adobe PhoneGap" href="http://www.phonegap.com" target="_blank">Adobe PhoneGap</a></li>
<li><a title="Sencha Touch" href="http://www.sencha.com/products/touch" target="_blank">Sencha Touch</a></li>
<li><a title="Mono" href="http://www.mono-project.com/Main_Page" target="_blank">Mono</a></li>
<li><a title="Appcelerator Titanium" href="http://www.appcelerator.com/" target="_blank">Appcelerator Titanium</a></li>
<li><a title="Unity" href="http://unity3d.com/" target="_blank">Unity</a></li>
<li><a title="Coronoa" href="http://www.coronalabs.com/products/corona-sdk/" target="_blank">Corona</a></li>
<li><a title="AppMobi" href="http://www.appmobi.com/" target="_blank">AppMobi</a></li>
<li><a title="RunRev" href="http://www.runrev.com/" target="_blank">RunRev</a></li>
<li><a title="MoSync" href="http://www.mosync.com/" target="_blank">MoSync</a></li>
</ul>
<p>The most prominent of the bunch and the ones I&#8217;m most familiar with are:</p>
<h3><span style="font-weight: bold;">PhoneGap</span></h3>
<p>PhoneGap uses HTML5 inside of a WebView on your device. It essentially creates a mobile &#8220;web app&#8221; that sits inside a native application wrapper. The web code is packaged with a library that bridges web code to native functionality. PhoneGap is open source (free) and supports iOS, Android, BlackBerry (not yet 10), WebOS, Windows Phone 7, Symbian and Bada.</p>
<p>PhoneGap developers report advantages—such as low barrier to entry (HTML/JavaScript/CSS is the only skill needed to get started), a single code base for all platforms and rapid testing and deployment. Reported disadvantages include poor performance—there&#8217;s only so much you can get out of a WebView on any platform—and lack of support for native UI elements and widgets. Reports indicate graphically-intensive applications are not a good fit for PhoneGap.</p>
<h3><strong>Appcelerator Titanium</strong></h3>
<p>Titanium is similar to PhoneGap (it&#8217;s free), but not exactly the same. The main difference lies in device support—it&#8217;s built to produce iOS, Android and web apps only. It actually compiles the JavaScript code into a native binary—converting the JavaScript into native class and object files—whereas PhoneGap simply renders a WebView with the code being interpreted inside.</p>
<p>&#8220;So, a simple way to think about it is that your JS code is compiled almost one-to-one into the representative symbols in nativeland. There&#8217;s still an interpreter running in interpreted mode, otherwise things like dynamic code wouldn&#8217;t work. However, it&#8217;s much faster, much more compact and it&#8217;s about as close to pure native mapping as you can get,&#8221; states Jeff Haynie, CEO of Appcelerator.</p>
<p>Proponents of Titanium argue performance is not an issue because the app is compiled as a native app. They say using native UI elements—as opposed to PhoneGap, which creates its own—allows apps to more closely resemble the look and feel of a native app. This is probably as close as you can get to having a CPT app resemble an actual native app.</p>
<h3><strong>Unity</strong></h3>
<p>Unity focuses on gaming on other graphically-intensive applications. It currently supports Windows, Mac, Unity Web Player, iOS, Android, Nintendo, Wii, PlayStation 3 and Xbox 360, with upcoming support for Adobe Flash Player, Linux, Windows 8, Windows Phone 8 and Nintendo Wii U. It is essentially the industry standard for game development.</p>
<p>Unity provides a development environment with which graphics, physics and sound can be programmed. According to its <a title="Unity (game engine) Wikipedia" href="http://en.wikipedia.org/wiki/Unity_%28game_engine%29" target="_blank">Wikipedia article</a>, &#8220;Game scripting comes via Mono. Scripting is built on Mono, the open source implementation of the .NET framework. Programmers can use UnityScript (a custom language with ECMAScript-inspired syntax), C# or Boo (which has a Python-inspired syntax).&#8221;</p>
<p>The downside of Unity is that it tends to be expensive by comparison particularly when you add in the cost of plug ins used to build on multiple platforms. However, Unity is as close as you will see to an industry standard, so clearly someone feels the cost is worth it.</p>
<h2>When Considering a Cross-Platform Tool</h2>
<p>Here are a few things to take into account when considering whether to use a CPT:</p>
<h3>Design</h3>
<p>There are design differences among mobile platforms—iPhone: the tabs go on the bottom, Android: the tabs are on top, Windows 8: everything scrolls horizontally. Custom icons are made at different sizes, and there are multiple screen resolutions and aspect ratios to consider as well as multiple screen densities and image sizes to account for. What if an app&#8217;s requirements include the need to perfectly fit an iPad screen right up to the edges, support the iPhone—including retina and non-retina graphics—and must also fit perfectly on a Samsung Galaxy smartphone and tablet of varying sizes and ratios? The designer for that app needs to be skilled in both iPhone and Android design, and the designs could conceivably be different enough to warrant two completely separate code streams.</p>
<h3>Technical Limitations—Playing &#8220;Catch Up&#8221;</h3>
<p>Each cross-platform solution can logically only ever support a subset of the functionality included in each native platform. When new features come out, developers must wait until the CPT developers have a chance to incorporate them into the API. Without the control of being able to incorporate new capabilities as soon as they&#8217;re introduced into each native platform, you run the risk of major lost opportunity (e.g., being first to use a new feature is far more compelling than becoming a &#8220;me too&#8221; app). In addition, there&#8217;s a decent chance certain required functionality will require the development of &#8220;plug-ins&#8221; for each platform, which can become an unanticipated, costly and time-consuming part of the project. The only surefire way to ensure an apps is built within the appropriate, and most efficient, technological parameters is to build it natively.</p>
<h3>Risk</h3>
<p>What if Apple stops accepting PhoneGap apps? What if an app&#8217;s requirements change, and now PhoneGap or Titanium won&#8217;t work? How hard will it be to &#8220;port&#8221; the CPT code into a native app? These are all questions you need to ask to assess the risk associated with using any CPT before embarking any project.</p>
<p>Further, you might hire a team of developers to create an app using a CPT; halfway through the project timeline, you may realize there&#8217;s a significant piece of functionality that requires native code or plug-ins—which you thought, due to the marketing materials, was supported by the tool you&#8217;re using. Now, you need to hire an iOS or Android expert in order to keep the project moving forward. The time spent hiring, designing and coding around the issue could turn out to be very costly.</p>
<p>These are very real considerations. At the same time, the advantages of cost savings and time to market when using CPTs can also be very real. That&#8217;s why these decisions should not be made lightly.</p>
<h2>Scenarios to Consider</h2>
<p>What are some real world examples of times when it might be appropriate to use CPT&#8217;s and which ones might be appropriate?</p>
<h3>Online Store</h3>
<p>A retailer of online widgets wishes to create a mobile app. They want to have a presence on as many platforms as possible—including iOS, Android, Windows Phone and BlackBerry. The app is not deemed to be graphically-intensive, and the initial design wireframes require a conventional mobile app layout. The design is similar—though responsive—whether viewed on a phone or a tablet.</p>
<p>This is the sort of app for which I would consider a platform such as PhoneGap or Titanium. The decision between the two would likely be based on the question, &#8220;Just how much do you want to support devices other than iOS and Android?&#8221; If the answer is &#8220;we really want to support other device types,&#8221; then PhoneGap wins. Otherwise, the improved performance and &#8220;native&#8221; compiling of Titanium would win out.</p>
<h3>Social Networking App with Lots of Cool Features</h3>
<p>A fresh new startup wants to create a social networking app that incorporates location-based functionality, camera usage, some cool graphical animations and sound interactions. The app should also be optimized for tablets where appropriate.</p>
<p>For this app, a careful approach must be taken. Location-based functionality is available in most CPTs, yet each OS truly has different ways of handling location accuracy and performance. Camera usage is included as a service in each CPT, yet if you want to bring advanced functionality—such as augmented reality or even take advantage of built-in editing features—the cross-platform approach might yield even more work than building separate versions.</p>
<h3>Video Game—Two Scenarios</h3>
<p>A mobile gaming company wants to make a video game for multiple mobile platforms. In one scenario, the company is small and doesn&#8217;t have a big budget for tools and software. It might be okay to use an open source, free framework—like cocos-2d or cocos-3d—to build the app on one platform and then port it to the other. I have personally ported a game created with cocos-2d for iPhone in only three days. Since the code is so similar, a straight port isn&#8217;t that hard. The downside, of course, is multiple code streams in multiple languages, which essentially makes for multiple products.</p>
<p>In a second scenario, the company is large enough to spend on equipment. In this case, I&#8217;d recommend they invest in Unity, which I mentioned earlier is the industry standard for game creation on multiple platforms and seems to be the perfect tool for the task.</p>
<h2>Conclusions and Recommendations</h2>
<p>In conclusion, when considering whether to use a CPT instead of native mobile development, some important deciding factors include:</p>
<ul>
<li>Platform requirements—which platforms must the app support and which platforms are considered &#8220;nice to haves&#8221;</li>
<li>Technology requirements—which mobile device features must the app support and which are &#8220;nice to haves&#8221;</li>
<li>Performance requirements—are there aspects of the conceptual apps where performance, especially graphical or computational, a consideration</li>
<li>Design constraints—how disparate are the designs for different device types</li>
</ul>
<p>If these parameters fall squarely within the capabilities of a particular CPT, then consider yourself one of the lucky ones and use that CPT. Otherwise, in my opinion, making the case for being risk-averse and using proven technologies with which each platform natively ships seems the least scary solution for those about to invest time and money on creating a mobile experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2013/03/27/mobile-app-development-native-vs-cross-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patagonia&#8217;s Long View of Content Marketing</title>
		<link>http://www.netwhisperer.com/2013/02/05/patagonias-long-view-of-content-marketing/</link>
		<comments>http://www.netwhisperer.com/2013/02/05/patagonias-long-view-of-content-marketing/#comments</comments>
		<pubDate>Tue, 05 Feb 2013 17:01:52 +0000</pubDate>
		<dc:creator>James Goldman</dc:creator>
				<category><![CDATA[Content Marketing]]></category>
		<category><![CDATA[Content Strategy]]></category>
		<category><![CDATA[Marketing Strategy]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=1897</guid>
		<description><![CDATA[In the content biz, Patagonia’s content marketing strategy is the kind of thing we are always gabbing about at our industry events and the like. It’s easy to reference and they’ve been doing a great job for a long time, particularly in the digital space.]]></description>
			<content:encoded><![CDATA[<p>Patagonia’s content marketing strategy is the kind of thing we are always gabbing about at our industry events and the like. It’s easy to reference and they’ve been doing a great job for a long time, particularly in the digital space.  <a title="Posts by Giselle Abramovich" href="http://www.digiday.com/author/giselle-abramovich/"><em>Giselle Abramovich</em></a>, from Digiday put out a great piece on them last week that made me think about how we can learn from Patagonia’s insights. It’s a <a href="http://www.digiday.com/brands/inside-patagonias-content-machine/">great article</a>, not very long and worth a read if you have the time. To me, the quotes from Bill Boland, Patagonia’s Digital Creative Director are the most interesting part of the article because they are so clear and insightful.</p>
<blockquote>
<p style="text-align: left;">“Our content stays away from the hard sell,” said Bill Boland, Patagonia’s digital creative director. “But we are finding that our customers are interested in talking about our products.</p></blockquote>
<p><span id="more-1897"></span></p>
<p style="text-align: left;">
<p style="text-align: left;">In the content marketing biz remember that value is king. If your brand message is too overt it can easily siphon the value from content. Without value, a message is only as good as the first round of eyeballs it attracts. Your tentacles are short and enthusiasm is muted. Remember, if your content creates enthusiasm, your brand will benefit. I’ve never had a client come to me and say that they are producing great content and the readers are passionate and enthusiastic about the content but brand awareness is down. I’m sure the above happens, but it’s definitely the exception and is comparatively easy problem to solve. Stay in the right voice and talk about subjects that speak to brand values and your customers will get the association. You don’t have to beat them over the head with it.</p>
<div id="attachment_1903" class="wp-caption alignnone" style="width: 506px"><a href="www.patagonia.com"><img class="size-full wp-image-1903   " title="Patagonia.com Content Marketing" src="http://www.netwhisperer.com/wp-content/uploads/2013/02/Screen-Shot-2013-02-04-at-3.55.33-PM1.jpg" alt="Climbers at the top of Patagonia " width="496" height="294" /></a><p class="wp-caption-text">Where&#39;s the sale? Where&#39;s the contest? Where&#39;s the special offer?</p></div>
<blockquote><p>“We’re just trying to figure out operationally how we should be going about planning our content strategy. Currently, it’s very organic, and I’d like for it to get to a point where it’s more formalized, much like a newsroom is run. This way we know what’s coming, and we could even put together an editorial calendar. We need more structure.”</p></blockquote>
<p>Make an investment in structure and resourcing. There is no simpler way to put it. The tools and methods are out there. The benefits are clear.</p>
<blockquote><p>Patagonia also thumbs its nose at the current obsession with analytics. Boland thinks that if you allow the metrics to be your only guide, you’re setting yourself up for disaster. Instead, he preaches the long view.</p></blockquote>
<p>At ThoughtMatrix, we love analytics. We love Key Performance Indicators. We love technology that draws relationships between different metrics and gives us new ways to visual data. Statistical analysis is a key component to the paradigm shift that digital media has produced. But, metrics are a guild to help you navigate. They have no intrinsic value. Great statistics don’t equal great value. Statistics help you quickly spot trends that you couldn’t see qualitatively. They don’t diminish or eliminate the value of qualitative analysis; they support the value of qualitative analysis. Pardon my sports metaphor, but there is nothing a coach in any sport hates more than a stat stuffer, someone who measures their achievement using statistics rather than victories.</p>
<p>Finally, if you want to see Patagonia’s web marketing strategy in its simplest form, visit their website <a href="http://www.patagonia.com">www.patagonia.com</a>. The front page consists of five hero images. They tell stories, they invoke emotion, they don’t sell. There is no mention of Patagonia’s spring line, no sales or contests. If the Patagonia lifestyle and story is engaging, the product will sell itself. Virtually every client I have could benefit from that philosophy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2013/02/05/patagonias-long-view-of-content-marketing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aggregate This! Feedly and Flipboard Concisely Consolidate Content</title>
		<link>http://www.netwhisperer.com/2012/12/26/aggregate-this/</link>
		<comments>http://www.netwhisperer.com/2012/12/26/aggregate-this/#comments</comments>
		<pubDate>Wed, 26 Dec 2012 17:02:34 +0000</pubDate>
		<dc:creator>Jason Bedient</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Social Media]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=1753</guid>
		<description><![CDATA[I may be a bit of a creature of habit; I tend to do about three things when I use my smartphone—email, then over to Facebook and then maybe check stocks or an ESPN app to check scores, but that sadly feels like the extent of it. Oh, I&#8217;m sure I do other things here...]]></description>
			<content:encoded><![CDATA[<p>I may be a bit of a creature of habit; I tend to do about three things when I use my smartphone—email, then over to Facebook and then maybe check stocks or an ESPN app to check scores, but that sadly feels like the extent of it. Oh, I&#8217;m sure I do other things here and there that make smartphone ownership great; I use maps when I&#8217;m lost, Yelp when I&#8217;m hungry, Google Voice for texting and Evernote. Yet, rarely do I go out of the way to read news and fun content on my phone because it usually requires a lot of slow loading, phone turning, pinching and zooming.<span id="more-1753"></span></p>
<h2>Enter my two new favorite apps.</h2>
<h3>Feedly</h3>
<p><a href="http://www.netwhisperer.com/wp-content/uploads/2012/10/feedly1.jpg" target="_blank"><img class="alignleft size-medium wp-image-1756" title="feedly category screen" src="http://www.netwhisperer.com/wp-content/uploads/2012/10/feedly1-200x300.jpg" alt="" width="153" height="236" /></a><a href="http://www.feedly.com" target="_blank"><img class="alignleft size-medium wp-image-1761" title="feedly2" src="http://www.netwhisperer.com/wp-content/uploads/2012/10/feedly2-200x300.jpg" alt="" width="154" height="236" /></a><a href="http://www.feedly.com" target="_blank"><img class="alignleft size-medium wp-image-1759" title="feedly3" src="http://www.netwhisperer.com/wp-content/uploads/2012/10/feedly3-200x300.png" alt="" width="155" height="236" /></a>I happened upon Feedly about a month ago—a beautifully designed, easy-to-use Google Reader app. The cool part is, since I already use Google Reader, the app pulled in all my content feeds. Even for those that aren&#8217;t Google Reader users, with a few clicks, you can have gorgeously displayed content that is visually represented with a photo or thumbnail, no ads and tons of content to flick through. Some articles are truncated so you have to finish them on the originating site, but that is to be expected and altogether reasonable.</p>
<p>Another nice thing about Feedly is that if you use Google Reader on your computer, <a href="http://feedly.com" target="_blank">feedly.com</a> is a great way to use your Google Reader account.</p>
<h3>Flipboard</h3>
<p><a href="http://www.netwhisperer.com/wp-content/uploads/2012/10/flipboard1.jpg" target="_blank"><img class="alignleft size-medium wp-image-1773" title="flipboard1" src="http://www.netwhisperer.com/wp-content/uploads/2012/10/flipboard1-200x300.jpg" alt="" width="153" height="236" /></a><a href="http://www.netwhisperer.com/wp-content/uploads/2012/10/flipboard3.jpg" target="_blank"><img class="alignleft size-medium wp-image-1774" title="flipboard3" src="http://www.netwhisperer.com/wp-content/uploads/2012/10/flipboard3-200x300.jpg" alt="" width="154" height="236" /></a><a href="http://www.netwhisperer.com/wp-content/uploads/2012/10/flipboard4.jpg"><img class="alignleft size-medium wp-image-1775" title="flipboard4" src="http://www.netwhisperer.com/wp-content/uploads/2012/10/flipboard4-200x300.jpg" alt="" width="155" height="236" /></a>The second app—which is very similar—is Flipboard. This works on mainly the same premise— you pick a few things to get served to you, but the ultimate win of this app is that it pulls your Facebook and Twitter accounts into an integrated place where you can visually skim through posts, news and more in a beautifully designed user interface. CEO Mike McCue says, &#8220;Flipboard is on a quest to transform how people discover, view and share content by combining the beauty of and ease of print with the power of social media.&#8221;</p>
<h3>Give em&#8217; a shot!</h3>
<p>Both offer suggested content, which is great for discovering new content that may not be on your radar. So if you&#8217;re not reading the news and other great content because it seems like more work on your smartphone than it should be, give one—or both of these apps—a try and let us know which you like more and why!</p>
<p><a href="http://www.feedly.com/"><img class="alignleft size-thumbnail wp-image-1754" title="feedly-logo" src="http://www.netwhisperer.com/wp-content/uploads/2012/10/feedly-logo-150x150.png" alt="Feedly app icon" width="32" height="32" /></a><a href="http://www.feedly.com/" target="_blank"></a></p>
<p><a href="http://www.feedly.com/" target="_blank"><br />
Feedly</a> is available for: iOS and Android.</p>
<p><a href="http://flipboard.com/"><img class="alignleft size-full wp-image-1755" title="flipboard-logo-fullcolor-tiny" src="http://www.netwhisperer.com/wp-content/uploads/2012/10/flipboard-logo-fullcolor-tiny.png" alt="" width="29" height="29" /></a><a href="http://flipboard.com/" target="_blank"><br />
Flipboard</a> is available for: iOS, Android, Kindle Fire and NOOK.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2012/12/26/aggregate-this/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Always Test! Have You Considered Remote Testing?</title>
		<link>http://www.netwhisperer.com/2012/12/03/have-you-considered-remote-testing/</link>
		<comments>http://www.netwhisperer.com/2012/12/03/have-you-considered-remote-testing/#comments</comments>
		<pubDate>Mon, 03 Dec 2012 18:11:42 +0000</pubDate>
		<dc:creator>ThoughtMatrix</dc:creator>
				<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Remote Testing]]></category>
		<category><![CDATA[Usability Testing]]></category>

		<guid isPermaLink="false">http://www.netwhisperer.com/?p=1835</guid>
		<description><![CDATA[At ThoughtMatrix, we believe usability testing should be done early and often. Not only are well-tested sites and applications better from a user-experience standpoint, they save on support, re-design and re-development costs.  One drawback however is the considerable time, effort and dollars often associated with testing. A great way to alleviate this resource burden is...]]></description>
			<content:encoded><![CDATA[<p>At ThoughtMatrix, we believe usability testing should be done early and often. Not only are well-tested sites and applications better from a user-experience standpoint, they save on support, re-design and re-development costs.  One drawback however is the considerable time, effort and dollars often associated with testing. A great way to alleviate this resource burden is by utilizing remote testing. Remote testing uses many of the same methods of data collection and reporting you would use in a lab setting but does so more efficiently and often more effectively.<span id="more-1835"></span></p>
<h2><strong>Time Savings</strong></h2>
<ul>
<li><strong>Preparation</strong> — Because location isn’t an issue, the pool of potential test subjects is exponentially larger and the burden of participation generally much lower. We also find prep times can be cut by as much as 80%.</li>
<li><strong>Testing</strong> — Lab testing facilities can be very expensive to rent, or maintain, and generally aren’t designed to do simultaneous testing. Because remote testing is virtual and simultaneous it can shorten testing time from days to hours.</li>
<li><strong>Results</strong> — It stands to reason the faster you can test, the faster you can get results; most of the data points are reported in near real-time.</li>
</ul>
<p><img class="aligncenter size-full wp-image-1837" src="http://www.netwhisperer.com/wp-content/uploads/2012/11/chart1.jpg" alt="Calendar display showing that 6 days are needed for remote testing and 21 days needed for lab testing" width="520" height="302" /></p>
<h2><strong><br />
Money Savings</strong></h2>
<p><strong> </strong></p>
<p>The adage “time is money” certainly holds true when it comes to usability testing. In our experience, remote testing costs about 10% of what lab testing costs.</p>
<ul>
<li><strong>Remote Testing:</strong> $35–$50 per test</li>
<li><strong>Lab Testing:</strong> $500–$1,500 per test (does not include travel expenses)</li>
</ul>
<h2><strong>When to Lab Test?</strong></h2>
<p>Based on the numbers alone, remote testing appears to be the way to go, particularly since the short timeline is appealing for agile development environments. However, there are situations where lab testing is still needed.</p>
<p><strong> </strong></p>
<p>At ThoughtMatrix, we use a cause-and-effect diagram to help us decide which testing method to use. In the example below if we need to work with any of the parameters in blue, we generally recommend in-person testing.</p>
<h3><strong>Elements of Usability Testing<br />
</strong></h3>
<p><strong><a href="http://www.netwhisperer.com/wp-content/uploads/2012/11/diagram_lg.jpg" target="_blank"><img class="aligncenter size-full wp-image-1839" src="http://www.netwhisperer.com/wp-content/uploads/2012/11/diagram1.jpg" alt="Diagram showing the elements that go into usability testing" width="520" height="673" /></a></strong></p>
<h2><strong><br />
Causes that Require Lab Testing</strong></h2>
<h3><strong>User (People)</strong></h3>
<p style="padding-left: 30px;"><strong>No Web Access<br />
</strong>A good example of this is kiosk testing, which often allows for little or no Internet access. Remote testing is by definition web-based.</p>
<h3><strong>Interaction Type (Method)</strong></h3>
<p><strong> </strong></p>
<p style="padding-left: 30px;"><strong>Sensitive Information<br />
</strong>Private information — such as medical or financial history — may require a controlled testing environment.</p>
<p style="padding-left: 30px;"><ins datetime="2012-11-06T09:27" cite="mailto:norville%20parchment"></ins></p>
<p style="padding-left: 30px;"><strong>Intellectual Property<br />
</strong>In some cases, the site may contain top secret content, where sharing information that could be screen captured may be an unacceptable risk.</p>
<p style="padding-left: 30px;"><ins datetime="2012-11-06T09:27" cite="mailto:norville%20parchment"></ins></p>
<p style="padding-left: 30px;"><strong>Eye-tracking<br />
</strong>Eye-tracking requires special equipment that is generally not available with remote testing sites.</p>
<p style="padding-left: 30px;"><ins datetime="2012-11-06T09:27" cite="mailto:norville%20parchment"></ins></p>
<p style="padding-left: 30px;"><strong>Physical Movements<br />
</strong>Testing that involves physical movements on a grander scale than swiping a touch screen, or tilting a tablet, are unlikely to be caught by remote cameras.</p>
<p style="padding-left: 30px;"><ins datetime="2012-11-06T09:27" cite="mailto:norville%20parchment"></ins></p>
<p style="padding-left: 30px;"><strong>Specialized Application<br />
</strong>Some applications need additional software, or specialized hardware, in order to work and are usually better suited to the lab.</p>
<h2><strong>Availability</strong></h2>
<p><strong> </strong>Although just three or four years ago remote testing applications were few and far between, today there are testing apps for a variety of scenarios, needs and budgets. Below are some of the more popular options, but many more exist depending on what kind of testing you want to do.</p>
<ul>
<li><a href="http://www.usertesting.com/" target="_blank">UserTesting</a></li>
<li><a href="http://whatusersdo.com/" target="_blank">Whatusersdo </a></li>
<li><a href="http://www.intuitionhq.com/" target="_blank">IntuitionHQ</a></li>
<li><a href="http://usabilla.com/" target="_blank">Usabilla</a></li>
<li><a href="http://www.trymyui.com/" target="_blank">TryMyUI</a></li>
<li><a href="http://www.userlytics.com/sitepublic/" target="_blank">Userlytics</a></li>
</ul>
<p>With so many clear benefits and options in the marketplace, remote usability testing has become our preferred choice in most cases.</p>
<p>So remember, test early, test often and consider testing remotely.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netwhisperer.com/2012/12/03/have-you-considered-remote-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
