<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Cascade Software Corporation</title>
	<atom:link href="https://blog.cascadesoft.net/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.cascadesoft.net</link>
	<description>Simple solutions for complex problems</description>
	<lastBuildDate>Thu, 01 Sep 2016 05:13:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.cascadesoft.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s0.wp.com/i/buttonw-com.png</url>
		<title>Cascade Software Corporation</title>
		<link>https://blog.cascadesoft.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://blog.cascadesoft.net/osd.xml" title="Cascade Software Corporation" />
	<atom:link rel='hub' href='https://blog.cascadesoft.net/?pushpress=hub'/>
	<item>
		<title>Exercise helps the brain by releasing a brain-healthy protein</title>
		<link>https://blog.cascadesoft.net/2016/08/31/exercise-helps-the-brain-by-releasing-a-brain-healthy-protein/</link>
					<comments>https://blog.cascadesoft.net/2016/08/31/exercise-helps-the-brain-by-releasing-a-brain-healthy-protein/#respond</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Thu, 01 Sep 2016 05:13:32 +0000</pubDate>
				<category><![CDATA[Brain]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Health]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Cathepsin B]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=469</guid>

					<description><![CDATA[We know that exercise is tied to a lot of health benefits and that besides helping the rest of the body, exercise also improves the brain&#8217;s health and strength in many different ways ranging from learning skills and focus to memory and combating stress. A new study from the US Government&#8217;s National Institutes of Health [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>We know that exercise is tied to a lot of health benefits and that besides helping the rest of the body, exercise also improves the brain&#8217;s health and strength in many different ways ranging from learning skills and focus to memory and combating stress.</p>
<p>A <a href="https://directorsblog.nih.gov/2016/06/28/exercise-releases-brain-healthy-protein/" target="_blank">new study</a> from the US Government&#8217;s National Institutes of Health helps explain one aspect of the benefits that exercise provides to the brain. The study reported that skeletal muscle cells secrete a protein, Cathepsin B, in higher quantities for people who exercised regularly on a treadmill.</p>
<p>Researchers reported that an increase in blood Cathepsin B levels corresponded to an improved performance in visual memory tests for humans and that it also resulted in improved performance for mice in spatial memory and maze navigational skills.</p>
<p>Exercise resulted in increased muscle production of Cathepsin B and increased secretion of this protein into the bloodstream and researchers also used mice to verifiy that this protein was able to cross the blood-brain barrier and thereby influence the brain. In other studies, elevated levels of Cathepsin B have been observed in some ailing people (e.g. cancel patients), however, it is unclear whether the elevated levels were due to the body&#8217;s attempt to combat the ailment or whether it was due to other reasons.</p>
<p>The recent studies demonstrate that exercise leads to increased levels of Cathepsin B and that this is directly linked to improved brain performance for healthy people. It isn&#8217;t easy to figure out every detail about the brain, but this study on exercise, Cathepsin B and the brain helps improve our understanding on how the brain benefits from exercise.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2016/08/31/exercise-helps-the-brain-by-releasing-a-brain-healthy-protein/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
		<item>
		<title>Exercise Versus Dieting: Preventing weight gain</title>
		<link>https://blog.cascadesoft.net/2016/07/04/exercise-versus-dieting-preventing-weight-gain/</link>
					<comments>https://blog.cascadesoft.net/2016/07/04/exercise-versus-dieting-preventing-weight-gain/#respond</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Mon, 04 Jul 2016 10:45:52 +0000</pubDate>
				<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Health]]></category>
		<category><![CDATA[Probiotics]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Weight Loss and Weight Gain]]></category>
		<category><![CDATA[Gut microbes]]></category>
		<category><![CDATA[obesity]]></category>
		<category><![CDATA[rats]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=467</guid>

					<description><![CDATA[Conventional wisdom says that dieting is essential to weight loss and that exercise alone is generally insufficient for weight loss. However, a new study looked at a related topic &#8211; preventing weight gain. This study compared three groups of obesity-prone rats. The control group was sedentary. The second group of rats exercised regularly in running wheels. The third [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Conventional wisdom says that dieting is essential to weight loss and that exercise alone is generally insufficient for weight loss.</p>
<p>However, <a href="http://well.blogs.nytimes.com/2016/05/04/to-keep-obesity-at-bay-exercise-may-trump-diet/" target="_blank"><span style="color:#0066cc;">a new study </span></a>looked at a related topic &#8211; preventing weight gain. This study compared three groups of obesity-prone rats. The control group was sedentary. The second group of rats exercised regularly in running wheels. The third group of rats was sedentary and on a calorie-restricted diet. All three groups ate the same kibbles though daily servings for the calorie-restricted group were 20% less than that for the group of runners.</p>
<p>Unsurprisingly, the control group turned out to be obese at the end of the study. The other two groups staved off obesity. However, the runners were metabolically healthier in terms of insulin sensitivity, cholesterol, burning more fat and they also seemed to have more metabolic activity within their brown fat. Interestingly, gut microbes in the runners were different from gut microbes in the calorie-restricted group, so exercise had a probiotic effect even though all groups had been fed the same kibbles.</p>
<p>This study suggests that exercise alone can deliver results that are far superior to dieting alone &#8211; at least for rats trying to avoid obesity. It seems reasonable to assume that this would be true for humans too, though it is obviously important to focus on both exercise and calorie intake while eating healthy food.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2016/07/04/exercise-versus-dieting-preventing-weight-gain/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
		<item>
		<title>Dark Chocolate can improve Cognitive function and help the brain</title>
		<link>https://blog.cascadesoft.net/2016/06/28/dark-chocolate-can-improve-cognitive-function-and-help-the-brain/</link>
					<comments>https://blog.cascadesoft.net/2016/06/28/dark-chocolate-can-improve-cognitive-function-and-help-the-brain/#respond</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Tue, 28 Jun 2016 20:25:30 +0000</pubDate>
				<category><![CDATA[Brain]]></category>
		<category><![CDATA[Dark Chocolate]]></category>
		<category><![CDATA[Food]]></category>
		<category><![CDATA[Health]]></category>
		<category><![CDATA[Mental Health]]></category>
		<category><![CDATA[Cocoa flavanol]]></category>
		<category><![CDATA[Cognitive function]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=463</guid>

					<description><![CDATA[There are a number of good reasons to eat dark chocolate. I myself try to eat dark chocolate every day. So it was interesting to read a recent study which suggests that &#8220;people who eat chocolate at least once a week tend to perform better cognitively&#8220;. The researchers say that eating chocolate helps the brain with regular tasks like &#8220;remembering [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>There are a number of good reasons to eat dark chocolate. I myself try to eat dark chocolate every day. So it was interesting to read a recent <a href="http://www.sciencedirect.com/science/article/pii/S0195666316300459" target="_blank"><span style="color:#0066cc;">study</span></a> which <a href="https://www.washingtonpost.com/news/wonk/wp/2016/03/04/the-magical-thing-eating-chocolate-does-to-your-brain/" target="_blank"><span style="color:#0066cc;">suggests</span></a> that &#8220;<em>people who eat chocolate at least once a week tend to perform better cognitively</em>&#8220;. The researchers say that eating chocolate helps the brain with regular tasks like &#8220;<em>remembering a phone number, or your shopping list, or being able to do two things at once, like talking and driving at the same time</em>&#8221;</p>
<p>Interestingly, the study doesn&#8217;t limit benefits to dark chocolate and that suggests that eating regular chocolate  (e.g. milk chocolate which accounts for around 85% chocolate sales in the US) might also help the brain. However, I&#8217;ve headlined this post with &#8220;dark&#8221; chocolate because it seems more likely (from a lot of other <a href="https://www.sciencedaily.com/releases/2014/10/141026195046.htm" target="_blank"><span style="color:#0066cc;">research</span></a>) that cocoa flavanols found in dark chocolate are responsible for improved brain function.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2016/06/28/dark-chocolate-can-improve-cognitive-function-and-help-the-brain/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
		<item>
		<title>Left Side of the Brain stays alert when Sleeping in a new place</title>
		<link>https://blog.cascadesoft.net/2016/06/22/left-side-of-the-brain-stays-alert-when-sleeping-in-a-new-place/</link>
					<comments>https://blog.cascadesoft.net/2016/06/22/left-side-of-the-brain-stays-alert-when-sleeping-in-a-new-place/#respond</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Wed, 22 Jun 2016 07:46:58 +0000</pubDate>
				<category><![CDATA[Brain]]></category>
		<category><![CDATA[Evolutionary Adaptation]]></category>
		<category><![CDATA[Health]]></category>
		<category><![CDATA[Sleep]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=443</guid>

					<description><![CDATA[An interesting report notes that when you sleep in a new place, only half your brain gets a good night&#8217;s rest. The left side of the brain stays alert when sleeping in an unfamiliar place for the first night. Researchers found that playing irregular beeping sounds into the right ear (thereby stimulating the left hemisphere) is [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>An interesting <a href="http://www.npr.org/sections/health-shots/2016/04/21/474691141/half-your-brain-stands-guard-when-sleeping-in-a-new-place" target="_blank"><span style="color:#0066cc;">report</span></a> notes that when you sleep in a new place, only half your brain gets a good night&#8217;s rest.</p>
<p>The left side of the brain stays alert when sleeping in an unfamiliar place for the first night. <a href="https://news.brown.edu/articles/2016/04/sleep" target="_blank"><span style="color:#0066cc;">Researchers</span></a> found that playing irregular beeping sounds into the right ear (thereby stimulating the left hemisphere) is much more likely to wake up a person than playing the same sounds into the left ear (and stimulating the right hemisphere).</p>
<p>This has been described as a first-night-only phenomenon because it only happens when a person is sleeping in a new place for the first time. Presumably, this behavior of the brain is an evolutionary adaptation that happened in an ancient time when humans sleeping in a new place were at risk of being attacked by predators and needed to be on alert.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2016/06/22/left-side-of-the-brain-stays-alert-when-sleeping-in-a-new-place/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
		<item>
		<title>How Walking in Nature Helps the Brain and Combats Stress</title>
		<link>https://blog.cascadesoft.net/2016/06/21/how-walking-in-nature-helps-the-brain-and-combats-stress/</link>
					<comments>https://blog.cascadesoft.net/2016/06/21/how-walking-in-nature-helps-the-brain-and-combats-stress/#respond</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Wed, 22 Jun 2016 06:57:56 +0000</pubDate>
				<category><![CDATA[Brain]]></category>
		<category><![CDATA[Health]]></category>
		<category><![CDATA[Mental Health]]></category>
		<category><![CDATA[Nature]]></category>
		<category><![CDATA[Stress]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Walking]]></category>
		<category><![CDATA[BA25]]></category>
		<category><![CDATA[Brodmann Area 25]]></category>
		<category><![CDATA[Depression]]></category>
		<category><![CDATA[Henry David Thoreau]]></category>
		<category><![CDATA[subgenual prefrontal cortex]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=433</guid>

					<description><![CDATA[&#160; Walking is tied to a number of  health benefits and should (almost) always be encouraged. That is why we created a pedometer app to track steps. However, anecdotally, many of us would agree that walking in a natural environment is generally a more pleasant experience than other walking. From my own experience in walking in cities and towns across [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Walking is tied to a number of  health benefits and should (almost) always be encouraged. That is why we created a <a href="http://AppStore.com/CascadeSoftwareCorporation/stepsThePedometerApp" target="_blank">pedometer app</a> to track steps. However, anecdotally, many of us would agree that walking in a natural environment is generally a more pleasant experience than other walking. From my own experience in walking in cities and towns across four continents and natural environments across five continents, I can relate to Henry David Thoreau who said &#8220;<em>I think that I cannot preserve my health and spirits, unless I spend four hours a day at least – and it is commonly more than that – sauntering through the woods and over the hills and fields,  absolutely free from all worldly engagements.</em>&#8221; even though I myself don&#8217;t walk four hours a day in any environment, let alone walk in nature for four hours.</p>
<p>Given anecdotal experience with walking in nature, it is interesting to see that medical science can now use data to explain the neurological mechanisms of how walking in nature helps the brain. A <a href="http://www.pnas.org/content/112/28/8567.full" target="_blank">Stanford study</a> establishes that cerebral blood flow and neural activity in the subgenual prefrontal cortex (sgPFC) is decreased for nature walkers and not for urban walkers. Self-reporting from the walkers also showed that nature walkers ruminated less. I first heard about this study from a <a href="http://well.blogs.nytimes.com/2015/07/22/how-nature-changes-the-brain/" target="_blank">column</a> that explains the Stanford study for a wider audience</p>
<p>The sgPFC (or Brodmann Area 25, BA25) plays a major role in depression and decreased neural activity in this area can help prevent depression and combat stress. Since walking in nature helps the brain (specifically the BA25 region) and decreased rumination/brooding helps reduce stress, the results of the Stanford study strongly suggest that walking in nature can change the brain in ways that help mental health, improve mood and reduce the chances of depression.</p>
<p>Clearly, walking in nature is not a viable option for all people in all circumstances. Health conditions, weather conditions or concerns about some wild animals, criminal humans etc. may dissuade some people from walking in nature. However, for those who enjoy walking in nature and for those who&#8217;d like to consider it, studies seem to establish that walking in nature can impact the subgenual prefrontal cortex in ways that are good for the brain.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2016/06/21/how-walking-in-nature-helps-the-brain-and-combats-stress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
		<item>
		<title>Apple’s WatchKit Performance Tip Versus An Admonition From Mister Spock</title>
		<link>https://blog.cascadesoft.net/2015/05/28/apples-watchkit-performance-tip-versus-an-admonition-from-mister-spock/</link>
					<comments>https://blog.cascadesoft.net/2015/05/28/apples-watchkit-performance-tip-versus-an-admonition-from-mister-spock/#respond</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Thu, 28 May 2015 21:11:18 +0000</pubDate>
				<category><![CDATA[Apple Watch]]></category>
		<category><![CDATA[CompanyBlog]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[WatchKit]]></category>
		<category><![CDATA[Wearable]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Update only what has changed]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=392</guid>

					<description><![CDATA[Donald Knuth once said “Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time”. With that in [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Donald Knuth once said “<em>Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered.</em> <em>We should</em> <em>forget about small efficiencies, say about 97% of the time</em>”.</p>
<p><span id="more-392"></span></p>
<p>With that in mind, let us consider two of the five WatchKit <a href="https://developer.apple.com/watchkit/tips/">performance tips</a> recommended by Apple.&nbsp;The last part of Knuth’s quote is also relevant to both of these tips, but I’ll defer that discussion to the end of this post.</p>
<p><strong>Update only what has changed:</strong> Apple’s first performance tip stipulates that “<em>A well-performing WatchKit app requires minimal traffic between iPhone and Apple Watch</em>.” Apple continues with a second tip that says “<em>Update only what has changed</em>”. This essentially means that values on user interface objects (such as the text shown on an Apple Watch app screen through a WKInterfaceLabel object) must only be updated if the value changes. For example, if a hypothetical <a href="http://www.nytimes.com/2015/05/21/upshot/the-dad-bod-quantified.html">DadBod </a>watch app set the text of a label called LabelCaloriesConsumed to “Calories: 2100/2400”, the app shouldn’t attempt to set the label value again until the user consumed more calories and increased their consumption count to something more than 2100.</p>
<p><strong>Dangers of worrying about performance:</strong> For many programmers, “Update only what has changed” might seem like common-sense and Apple’s stipulation is likely to nudge more developers to implement the “update only what has changed” guideline. This will minimize traffic between the iPhone and Apple Watch. However, many developers reading Apple’s performance tips may not be aware of other WatchKit technical facts and that can make Apple’s performance tip a risky proposition. To <a href="https://en.wikipedia.org/wiki/Space_Seed">quote</a> Spock, “<em>Insufficient facts always invite danger</em>”</p>
<p><strong>Naïve Programmer-X ignores performance tip:</strong> One archetypal naïve developer might ignore this performance tip and repeatedly set the label value to “Calories: 2100/2400” repeatedly. This would result in a slightly adverse performance impact, but on the plus side, the app will function correctly from a user perspective.</p>
<p><strong>Well-intentioned Naïve Programmer-Y implements performance tip:</strong> An archetypal well-intentioned, but naïve developer might implement the “Update only what has changed” performance tip without caution. One popular blog post suggests a “View Model” approach and replacing traditional calls like label.setText(“newValue”) with calls to label.updateFrom(“oldValue”, “newValue”). They also provided an implementation of the updateFrom method&nbsp;with the code shown below. However, their code may not work correctly on all occasions and so I&#8217;ve listed it in strikethrough style.</p>
<p><em><del>extension WKInterfaceLabel : Updatable { </del><del>func updateFrom(oldValue : String?, to newValue : String?) {</del><del>&nbsp;&nbsp; if newValue != oldValue {</del><del>self.setText(newValue)</del><del>&nbsp;}</del><del>}&nbsp;&nbsp;</del><del>}</del></em></p>
<p><strong>The risks of minimizing traffic:</strong> Well-intentioned programmer-Y might see some performance gains, but they run the risk of having the app function incorrectly. Apple’s documentation <a href="https://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/DesigningaWatchKitApp.html">says</a> that “attempts to set values for interface objects are ignored” after the didDeactivate method is called. In other words, setting WKInterfaceLabel text will be useless if the controller is inactive. In walking through code, I’ve verified that setText code in controller methods may not always set the text value of labels. If the Apple Watch screen times out (as it does very often for almost every watch user), the app might execute setText code, but the setText call is ignored by the watch.</p>
<p>This means that the developer’s controller class might think that the WKInterfaceLabel’s value was updated to the latest value, but the watch might have ignored the new value. If the user pressed the crown to activate the screen again, Programmer-Y’s app will show the old value (e.g. Calories: 2100/2400) but refuse to update the label text value because it thinks that it showing the new value (e.g. Calories: 2500/2400).</p>
<p>The WatchKit API doesn’t provide any way for the app to know what exactly the watch is displaying. Apple’s documentation <a href="https://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/InterfaceObjects.html">says</a> “Communication between an interface object and the corresponding view on Apple Watch is one way, with information flowing from your WatchKit extension to Apple Watch. In other words, you set values on an interface object but you cannot get the current values of its attributes.” The end-result is that Programmer-Y might “Minimize Traffic” and get some performance gains with a naïve implementation of the “<em>Update only what has changed</em>” performance tip. However, the user of this app might see stale and incorrect data/text in the app and the app would have no way of knowing what was being shown to the user. This would be a worse user experience than the one provided by naïve programmer-X’s app and is a good illustration of Donald Knuth’s point that a focus on efficiency&nbsp;could potentially&nbsp;have a “<em>strong negative impact</em>”.</p>
<p><strong>The critical 3%:</strong> Knuth’s essay says that “<em>We <em>should</em></em> <em>forget about small efficiencies, say about 97% of the time</em>” and then starts his next paragraph by saying “<em>Yet we should not pass up our opportunities in that critical 3%.</em>”. The two statements complement each other just like Spock’s admonition complements Apple’s performance tip. The iPhone communicates with the Apple Watch using Bluetooth or WiFi and traffic between the two devices can be slow and also result in greater battery usage. So I would assert that minimizing traffic would&nbsp;generally fall in the “critical 3%” and that programmers should neither follow the Programmer-X model nor the Programmer-Y model.</p>
<p><strong>Optimize with caution:</strong> One starting point to minimize traffic between the iPhone and Apple Watch is to maintain information about interface objects (e.g. calorie values pertinent to a label on the watch screen) in the WatchKit extension of the watch app and only set watch interface objects to new values if the new value is different from the old value known by the watchKit extension. In addition, WatchKit extension code should only update interface object state if it believes that the interface controller is active at the time.</p>
<p>The WatchKit extension code could do this by maintaining an isActive flag that is turned on in the WKInterfaceController’s willActivate method and turned off in its didDeactivate method. This will help in making sure that the extension code doesn’t hold on a new value even though the watch is actually showing an old value. This eliminates almost all risks, but it is possible that some version of the Watch OS might ignore setText calls after the screen times-out and before the didDeactivate method is called.</p>
<p>A conservative approach to this potential problem might be to turn off the optimization when the interface controller&nbsp;is re-activated, but keep optimization turned on during the rest of the session.</p>
<p><strong>The Bottom-line:</strong> Minimize traffic between the iPhone and Apple Watch, but understand your WatchKit extension code and make sure that you’re not sacrificing correctness for efficiency. Users appreciate performance gain even more&nbsp;if the app works correctly and if it doesn’t display stale, wrong data.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2015/05/28/apples-watchkit-performance-tip-versus-an-admonition-from-mister-spock/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
		<item>
		<title>My work with Satya Nadella, my thoughts on Microsoft&#8217;s new CEO and his Oscar Wilde quote</title>
		<link>https://blog.cascadesoft.net/2014/02/28/my-work-with-satya-nadella-my-thoughts-on-microsofts-new-ceo-and-his-oscar-wilde-quote/</link>
					<comments>https://blog.cascadesoft.net/2014/02/28/my-work-with-satya-nadella-my-thoughts-on-microsofts-new-ceo-and-his-oscar-wilde-quote/#respond</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Sat, 01 Mar 2014 06:04:06 +0000</pubDate>
				<category><![CDATA[CompanyBlog]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Nadella]]></category>
		<category><![CDATA[Oscar]]></category>
		<category><![CDATA[Satya]]></category>
		<category><![CDATA[Vivian]]></category>
		<category><![CDATA[Wilde]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=385</guid>

					<description><![CDATA[I&#8217;ve spoken with Bill Gates in person and I&#8217;ve spoken with Steve Jobs on the phone. Both were relatively brief conversations. However, among major US company CEOs, Satya Nadella is the only guy who has come to my office to speak with me. An ill-fated project: This was a long time ago (1994/1995). I was [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;ve spoken with Bill Gates in person and I&#8217;ve spoken with Steve Jobs on the phone. Both were relatively brief conversations. However, among major US company CEOs, Satya Nadella is the only guy who has come to my office to speak with me.</p>
<p><span id="more-385"></span></p>
<p><strong>An ill-fated project:</strong> This was a long time ago (1994/1995). I was a recent campus hire at Microsoft and Satya was an (individual contributor) Product Manager at the time (At Microsoft, product managers are people who work on marketing the product. They are typically not in the product development team organization).</p>
<p>We were both among hundreds of people working on the ill-fated &#8220;Interactive Television&#8221; (ITV) project. Satya had described the video-on-demand app that I developed (in C++) as the &#8220;flagship&#8221; of our pre-alpha ADK release.</p>
<p><strong>Thoughts on Satya:</strong> I didn&#8217;t know Satya very well and haven&#8217;t met him in recent years. However, I remember him well from the ITV project in 94/95. At that time, he struck me as a good fair-minded person. He also came across as someone who looked out for others.</p>
<p><strong>Thoughts on Microsoft:</strong> Microsoft was most successful when it had a programmer at the helm. That programmer &#8211; Bill Gates &#8211; will now spend one-third of his time at Microsoft. Satya has been very successful in leading the cloud and enterprise group at Microsoft. I wish them both the best in their new roles.</p>
<p><strong>Satya&#8217;s letter and Oscar Wilde</strong>:  On his first day as CEO , Satya wrote an <a href="http://www.microsoft.com/en-us/news/press/2014/feb14/02-04mail2.aspx" target="_blank">email</a> to employees and it had a good mix of humility and inspiration. Interestingly, he paraphrased a quote from Oscar Wilde &#8220;we need to believe in the impossible and remove the improbable&#8221;. That quote is paraphrased from &#8216;<a href="http://www.sscnet.ucla.edu/comm/steen/cogweb/Abstracts/Wilde_1889.html" target="_blank">The Decay of Lying</a>&#8216; and is spoken by a character named Vivian who says &#8220;Man can believe the impossible, but man can never believe the improbable&#8221;.</p>
<p><strong>What the Oscar Wilde quote meant</strong>: Vivian deplores a &#8220;degrading concession&#8221; to realism and says that &#8221; The growth of common sense in the English Church is a thing very much to be regretted.&#8221;. He goes on to say that they must &#8220;revive this old art of lying&#8221;. In context, Vivian was clearly asserting that the church must lie to its members because the absence of lies may lead to the church losing its credibility.</p>
<p>Satya altered the quote a bit, but it is intriguing that Satya chose this particular Oscar Wilde ( Vivian) quote. Presumably, he wasn&#8217;t suggesting that Microsoft should act as per Vivian&#8217;s exhortation. I&#8217;m guessing he included the quote because it sounded interesting and inspirational. It also seems like he correctly guessed that the tech media and most Microsoft employees would miss the essence of Vivian&#8217;s quote.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2014/02/28/my-work-with-satya-nadella-my-thoughts-on-microsofts-new-ceo-and-his-oscar-wilde-quote/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<georss:point>47.606209 -122.332071</georss:point>
		<geo:lat>47.606209</geo:lat>
		<geo:long>-122.332071</geo:long>
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
		<item>
		<title>The bigger problem with Android: Bugs and Quality, not Fragmentation per-se</title>
		<link>https://blog.cascadesoft.net/2013/12/31/the-bigger-problem-with-android-bugs-and-quality-not-fragmentation-per-se/</link>
					<comments>https://blog.cascadesoft.net/2013/12/31/the-bigger-problem-with-android-bugs-and-quality-not-fragmentation-per-se/#comments</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Wed, 01 Jan 2014 04:57:38 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[CompanyBlog]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Developer and Programming]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[Economy]]></category>
		<category><![CDATA[Fragmentation]]></category>
		<category><![CDATA[Google Play Store]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=372</guid>

					<description><![CDATA[Fragmentation is often described as the biggest problem for Android app developers and it has been a problem for both developers and users. The fragmentation problem was best illustrated by the fact that the first version of the Twitter Android app was limited to just 27% of active Android devices. Some other Android apps were [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Fragmentation is often described as the biggest problem for Android app developers and it has been a problem for both developers and users. The fragmentation problem was best illustrated by the fact that the first version of the Twitter Android app was limited to just 27% of active Android devices. Some other Android apps were installable on more devices, but crashed on many of them. However, fragmentation problems (as generally discussed) are just the tip of the iceberg.<span id="more-372"></span></p>
<p><b>Fragments to fix Fragmentation</b>: I first downloaded the (preview/beta) Android SDK in 2007 and wrote a prototype location-based app at a time when there were no Android devices in the market. However, it wasn’t until last year that we decided to develop and release an app for the Google Play Store.</p>
<p>By this time, fragmentation had become a problem, but over the years, Google had done a fair amount of work (Fragment API, Android Support Library etc.) to alleviate fragmentation. Based on the research I did last year, it seemed like supporting multiple device sizes, screen densities, device capabilities, Android versions etc. was a manageable problem.</p>
<p>We decided that our Economy app (<a href="http://www.cascadesoft.net/EconomyAndroid.aspx">snapshot of the US economy</a>) would use new UI paradigms from Android versions 4.x&nbsp; (Ice Cream Sandwich and Jelly Bean) and yet support phones and tablets (of varying sizes) running any Android version with Gingerbread version 2.3.3 or higher. It is worth noting that the V1 version of our paid app was exclusive to Samsung devices (even though the latest versions – paid and free – can now run on thousands of devices from almost all manufacturers).</p>
<p><b>Implementing fragmentation fixes: </b>Google’s documentation for solving fragmentation is reasonably good and in theory, you don’t need to have the navigational skills of a Medusan ambassador to track your course for solving fragmentation.</p>
<p>It took some work, but in practice, it was reasonably straightforward to overcome <i>known problems</i> related to fragmentation. For instance, we implemented Action Bar support for older devices running Android 2.3 (even though the action bar was introduced with Android 4.x and wasn’t natively supported in Android 2.3). The app uses hardware acceleration on newer Android versions, but doesn’t depend on any graphics processing unit for older devices.</p>
<p><b>Fragmentation and Unknown Unknowns</b>: The biggest problem we encountered was related to fragmentation, but wasn’t fragmentation per-se. It was the numerous Android bugs that were specific to one or more specific versions of Android. This wasn’t something I anticipated. I don’t have a list of all the bugs I dealt with, but I’ll list some of the Android quality issues from comments I had written last year.</p>
<ol>
<li><i><span style="text-decoration:underline;">Android Section Indexer on 2.x</span></i>: Our iOS app uses section indices for easy navigation through economic indicators (e.g. tapping “E” would take you to the ‘Employment’ section, ‘H’ to the Housing sector). I considered replicating the iOS section index for our Android app, but decided that it might be better to do section indexing the ‘Android way’. That involved using Android’s fast scroller. Unfortunately, Android’s fast scroller wasn’t ready for prime-time and it had huge display problems with getting refreshed in the 2.x versions of Android. Related problems are documented <a href="https://groups.google.com/forum/#!topic/android-developers/pSk71R3k3zw">here</a> and <a href="http://code.google.com/p/android/issues/detail?id=6542">here</a>. The bug didn’t reproduce with Android 4.x. However, for simplicity reasons, I chose to use the same (somewhat) inefficient workaround for the app on all Android versions.</li>
<li><i><span style="text-decoration:underline;">Dashed lines on 4.x:</span></i> Canvas.drawLine could draw perfect dashed lines on Android 2.x, but it didn’t work on Android 4.x with hardwareAccelerated turned on. A related problem is documented <a href="http://code.google.com/p/android/issues/detail?id=29944">here</a>. Luckily, the drawPath API worked correctly on all tested Android versions.</li>
<li><i><span style="text-decoration:underline;">Fill Paint on 3.x:</span></i> I’m assuming that the Android Honeycomb version family (3.x) set a record for being the least-ever used version of Android. I’d be surprised if it had ever exceeded a 1% share among Android versions, but we supported it because of our need to support older (2.x) and newer (4.x) versions of Android. One of the Honeycomb-only bugs we ran into related to fill-paint not rendering. I worked-around this problem by turning off hardware acceleration for Honeycomb.</li>
<li><i><span style="text-decoration:underline;">Ellipsize and maxLines for Text:</span></i> On some versions of Android, Android failed to ellipsize long text if the control had the ‘maxLines’ property set. I didn’t<br />
check to see if the bug was fixed in other versions.</li>
<li><i><span style="text-decoration:underline;">Webviews and Transparent backgrounds:</span></i> Transparent backgrounds don’t work with webViews on some versions of Android. One reference to the problem is available <a href="http://code.google.com/p/android/issues/detail?id=14749">here</a>.</li>
<li><i><span style="text-decoration:underline;">HttpUrlConnection bugs:</span></i> While writing the app, I tried to keep open the option of supporting Android version 1.6 (or perhaps 2.1). However, Google’s own documentation describes “<a href="http://developer.android.com/reference/java/net/HttpURLConnection.html">frustrating bugs</a>” with the usage of HttpUrlConnection in older versions of Android. I would think of these bugs as inexcusable on a 1.0 platform, so it is a bit disappointing to see that they continued on to 2.x versions of the platform.</li>
</ol>
<p><b>Eclipse:</b> I haven’t tried the new Android Studio, but no description of Android development problems can be complete without a mention of Eclipse (which is not from Google, but is the most commonly used Android IDE). Crashes and memory problems were annoying, but an even more annoying problem with Eclipse was its occasional sullen refusal to startup. Some of these problems could be worked-around with the –clean flag and luckily, I discovered a blog post with a <a href="http://www.metod.si/job-found-still-running-after-platform-shutdown-eclipse/">workaround</a> for the nastiest Eclipse startup problem.</p>
<p><b>Java:</b> Another source of schedule unpredictability came from bugs introduced by obfuscation and optimization tools I used for Java code. I wish Google added more support for developing Android apps with C++. That would run the gamut from providing prebuilt HTTP libraries (like libCurl – which I built for Android after a lot of effort) to making it possible to create UI controls directly from C++ code (i.e. without being subjected to all the hassles of JNI). It is unlikely that C++ will ever be a fully supported language for Android and most Android-app-developers aren’t going to care about this topic, but I still hope that Google adds some incremental support for C++ developers.</p>
<p><b>Quality and Development Speed:</b> Facebook is credited with the new-age “move fast and break things” philosophy. I haven’t worked with the Facebook development platform, but I think that Google has been going a bit overboard with the second part of the phrase. Apple and Microsoft seem to provide far more reliable platforms for development. While it may not be entirely reasonable to expect most developers to code with the speed and ease of a Horta tunneling through solid rock, Android’s quality issues make it unnecessarily difficult to write and test code quickly.</p>
<p><b>Fragmentation Statistics:</b> At the time we launched the V1 version of our paid app, <i>most</i> Android devices were on Gingerbread (v2.3.3 to v2.3.7) even though it had been more than a year since the 4.x versions were launched. However, a very small fraction of Economy app users have been on Gingerbread and I think the percentage of Economy app users on Gingerbread never exceeded around 6%.</p>
<p>Today, Google’s dashboard says that around 24.1% of Android users are on Gingerbread (i.e. Android 2.3.x), but the Gingerbread percentage for our (paid) Economy app is less than 4%. Honeycomb registers at 0% for the Economy app now. So more than 96% of Economy app users are on the 4.x versions of Android. 12% of our users are on KitKat (Android 4.4) even though KitKat only has a 1.1% share of the overall Android market.</p>
<p>As per the latest stats, the free version of our app (Economy USA) has 92% on Android versions 4.x (including 7% on KitKat). 3% of “Economy USA” users are on Honeycomb (Android version 3.x) and 5% on Gingerbread (Android version 2.3.x).</p>
<p>Based on the data we had when development work started (and based on the fact that somewhere around 54% of Android devices were on Gingerbread when we first released the Economy app), I’d say we made the right decision to support Android devices from Gingerbread onwards. However, it was an interesting learning experience to find out that app usage/downloads were <i>very disproportionately </i>skewed towards the latest Android versions (i.e. new devices which ran Android 4.x)</p>
<p><b>Fragmentation – A strength and weakness:</b> Android’s biggest strength is its ubiquity and the large market-share it has acquired due to the diverse range of devices it supports. So it isn’t unreasonable to have some problems relating to fragmentation. As mentioned earlier, Google has done a good job with providing frameworks to help developers navigate fragmentation issues. Developers interested in reaching large markets shouldn’t mind the overhead of dealing with fragmentation. We spent a lot of time and effort on ensuring that the <a href="http://www.cascadesoft.net/EconomyAndroid.aspx">Economy app</a> (<a href="http://play.google.com/store/apps/details?id=net.CascadeSoft.Economy&amp;referrer=Blogpost1">paid</a> and <a href="http://play.google.com/store/apps/details?id=net.CascadeSoft.EconomyLite&amp;referrer=Blogpost1b">free</a>) were of a high quality on all supported versions of Android.</p>
<p>However, besides being one of the first developers to write Android code (with the preview/beta version of Android six years ago), I’m also an (admittedly infrequent) Android app user who purchased the first Android phone (G1) soon after it launched. So as a developer (who likes development speed/predictability) and as an app user (who is interested in seeing better apps in the play store), I hope that Google plays greater attention to quality issues with future versions of the Android SDK. That will help improve the quality of the average Android app in Google’s play store and it will also make it easier for good developers to ship good quality apps with slightly more predictable development schedules.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2013/12/31/the-bigger-problem-with-android-bugs-and-quality-not-fragmentation-per-se/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			<georss:point>47.606209 -122.332071</georss:point>
		<geo:lat>47.606209</geo:lat>
		<geo:long>-122.332071</geo:long>
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
		<item>
		<title>Twitter breaks third-party apps</title>
		<link>https://blog.cascadesoft.net/2013/04/30/twitter-breaks-third-party-apps/</link>
					<comments>https://blog.cascadesoft.net/2013/04/30/twitter-breaks-third-party-apps/#comments</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Tue, 30 Apr 2013 19:42:12 +0000</pubDate>
				<category><![CDATA[CompanyBlog]]></category>
		<category><![CDATA[Developer and Programming]]></category>
		<category><![CDATA[Economy]]></category>
		<category><![CDATA[iPad Apps]]></category>
		<category><![CDATA[iPhone Apps]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[access_token]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[break]]></category>
		<category><![CDATA[economic tweet]]></category>
		<category><![CDATA[request_token]]></category>
		<category><![CDATA[tweet source]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=364</guid>

					<description><![CDATA[Yesterday morning, I got a brief email saying &#8220;Twitter integration does not work. Otherwise, it is a cool app&#8221;. The writer was referring to Economy for iPad This blog-post&#8217;s title is the short answer to the question on why Twitter integration isn&#8217;t working. See below for a more detailed (and somewhat technical) description of the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Yesterday morning, I got a brief email saying &#8220;Twitter integration does not work. Otherwise, it is a cool app&#8221;. The writer was referring to <a href="http://itunes.apple.com/us/app/economy-for-ipad/id396544244?mt=8&amp;partnerId=30&amp;siteID=05OGbpTLx7Q">Economy for iPad</a><br />
<span id="more-364"></span>This blog-post&#8217;s title is the short answer to the question on why Twitter integration isn&#8217;t working. See below for a more detailed (<strong><span style="text-decoration:underline;">and somewhat technical</span></strong>) description of the problems.</p>
<p><strong>The first app:</strong> Around four years ago, Twitter announced that they would cut off Basic Auth for Twitter and that all apps needed to use Twitter OAuth. The <a href="http://itunes.apple.com/us/app/economy/id321504242?mt=8&amp;partnerId=30&amp;siteID=05OGbpTLx7Q">iPhone Economy app</a> was probably the first iPhone app to use Twitter OAuth for login and posting tweets. I <a href="https://blog.cascadesoft.net/2009/12/04/ceconomy-a-new-iphone-twitter-app-for-economic-tweets-economy-news-with-the-ceconomy-hashtag-and-oauth/">wrote about it</a> in 2009. In terms of development time, implementing Twitter OAuth login turned out to be much more expensive than I anticipated. Twitter didn&#8217;t create a mobile-friendly login page until much later and that was a big problem for most users. However, in spite of all these problems, the basic functionality worked and folks were able to post economic tweets with the Economy app (and #cEconomy hashtag)</p>
<p><strong>Twitter breaks the access_token request:</strong> Earlier this month, I noticed that the Economy app could not post economic tweets anymore. New logins were also failing. It turned out that Twitter broke their OAuth 1.0 API. Debugging old code isn&#8217;t always easy and I had written this code in mid-2009, but fortunately, Twitter made trouble-shooting relatively easy by returning a helpful error message &#8220;Required oauth_verifier parameter not provided&#8221;. Fixing this problem meant two things (a) After the user types in their username and password, Twitter appends a query-string parameter (oauth_verifier) to the callback URL. This oauth-Verifier value needed to be retrieved from the URL. (b) The oauth_verifier needed to be included in the HTTP headers of the /oauth/access_token request.</p>
<p><strong>Why Twitter broke access_token:</strong> Requiring the new oauth_verifier token clearly broke the previous definition of the access_token API and it broke Twitter functionality in third-party apps that relied on the official Twitter definition. Interestingly, Twitter documentation continues to describe oauth_verifier as an optional parameter. Twitter can make the case that their previous implementation and current documentation are both wrong and that incremental security gains weremore important&nbsp;than not-breaking their old API. However, it would have been nice if Twitter had publicly acknowledged their past mistake and given developers sufficient time to migrate to the new requirement. Of course, the best option would have been to require oauth_verifier in the original 2009 API implementation.</p>
<p><strong>The broken request_token API:</strong> Current documentation of the <a href="https://dev.twitter.com/docs/api/1/post/oauth/request_token">request_token API</a> states that the oauth_callback is required. Presumably, this documentation was updated recently. However, interestingly, our old code (without) the oauth_callback parameter continue to work fine. The oauth_callback parameter wasn&#8217;t necessary because the callback value is already pre-registered for our app on dev.twitter.com. Nevertheless, I spent the extra effort on adding the new parameter, modifying signature etc. and we now pass the oauth_callback parameter for request_token API calls. Apps don&#8217;t get broken regardless of whether the oauth_callback parameter is passed. However, I&#8217;d still consider the API as broken because it doesn&#8217;t conform to Twitter&#8217;s official definition of the API and it could potentially break apps in the future.</p>
<p><strong>No more XML:</strong> Twitter seems to have joined the &#8216;XML is not cool&#8217; bandwagon and they&#8217;ve announced that they&#8217;ll cut all support for XML response formats in the Twitter 1.1 API. The Twitter 1.0 API will stop working on May 7, 2013. The Twitter 1.1 API also removes endpoints such as /statuses/update.xml (and calls to these APIs will need to be replaced with calls to json endpoints such as /statuses/update.json). It seems unnecessary to cut off XML support and I don&#8217;t see this decision generating any real value for Twitter.</p>
<p><strong>Hiding the tweet source:</strong> In 2009, Twitter promoted OAuth by announcing that the source (i.e. app) which created a tweet would only be shown if the app used OAuth. This helped users identify the source of a tweet (and perhaps download the app) and it also helped promote the app. Last year, in another flip-flop, Twitter decided that users didn&#8217;t need to know anything about the source of a tweet. So the source of tweets isn&#8217;t listed on Twitter&#8217;s official apps (or website) anymore and users won&#8217;t be able to identify apps that generated the tweets of people that they&#8217;re following.</p>
<p><strong>Breaking Twitter Search (by source):</strong> The Economy app appends the #CEconomy hashtag to all its tweets and this helps create a collection of economic tweets that users can browse through. To eliminate spam, the app only shows #CEconomy tweets created with the Economy app. IOW the search results are filtered by the &#8220;source&#8221; (i.e. app that generated the tweet) . In 2009, this could be done with a simple HTTP request like http: //search.twitter.com/search?q=%23cEconomy+source%3AAppName. However, a few months ago, Twitter broke this query and the Economy app could not show the list of economic tweets it created. It turned out that Twitter broke this browser query and replaced it with http: //twitter.com/search?q=%23cEconomy%20source%3AAppName. This was an easy problem to fix and less serious than the broken Twitter APIs, but it did inconvenience a lot of users.</p>
<p><strong>What next:</strong> The Twitter API has been unstable and besides wasting my time, this instability inconvenienced many users of the Economy app (though I should add that the percentage of users who post economic tweets with the app is fairly low).</p>
<p>I considered cutting the entire Twitter feature, but ultimately fixed the Twitter problems because (a) users who post (or want to post) economic tweets will appreciate keeping the Twitter integration feature (b) the fixes were&#8217;t too expensive, didn&#8217;t risk other parts of the app and&nbsp;hopefully the Twitter team wouldn&#8217;t break more things in the future (c) it is hard to make a totally objective/rational decision about cutting your losses (and killing Twitter functionality) when you remember how much time you had invested in implementing Twitter functionality. I&#8217;d like to think that the first two reasons played a bigger role in keeping Twitter integration in the app. In any case, last week, we tested the Twitter integration fixes I wrote and everything works fine.</p>
<p>Next month, we plan to release a major new update for &#8216;Economy for iPad&#8217; and the Twitter fixes will be included in that release.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2013/04/30/twitter-breaks-third-party-apps/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			<georss:point>47.606209 -122.332071</georss:point>
		<geo:lat>47.606209</geo:lat>
		<geo:long>-122.332071</geo:long>
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
		<item>
		<title>Was Apple right to purge AppGratis from the App Store ?</title>
		<link>https://blog.cascadesoft.net/2013/04/09/was-apple-right-to-purge-appgratis-from-the-app-store/</link>
					<comments>https://blog.cascadesoft.net/2013/04/09/was-apple-right-to-purge-appgratis-from-the-app-store/#respond</comments>
		
		<dc:creator><![CDATA[Ram]]></dc:creator>
		<pubDate>Tue, 09 Apr 2013 23:09:29 +0000</pubDate>
				<category><![CDATA[CompanyBlog]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone- App Store and other General stuff]]></category>
		<category><![CDATA[Marketing, Sales and Pricing]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[advertisement]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[AppGratis]]></category>
		<category><![CDATA[curation]]></category>
		<category><![CDATA[incentivized downloads]]></category>
		<category><![CDATA[pay for exposure]]></category>
		<category><![CDATA[review process]]></category>
		<guid isPermaLink="false">http://blog.cascadesoft.net/?p=341</guid>

					<description><![CDATA[The real question is whether Apple is justified in prohibiting the paid/artificial manipulation of app store rankings. AppGratis' formal response to the Wall Street Journal report doesn't address this topic.]]></description>
										<content:encoded><![CDATA[<p>The Wall Street Journal published a report on “<a href="http://allthingsd.com/20130408/confirmed-apple-kicks-appgratis-out-of-the-store-for-being-too-pushy">Apple Kicks AppGratis Out of the Store</a>” and AppGratis formally <a href="http://appgratis.com/blog/2013/04/09/appgratis-pulled-from-the-app-store-heres-the-full-story/">responded</a> to the WSJ story today. It is a detailed response that adds a lot to the conversation around app store curation, but it doesn’t address a couple of key points from the WSJ report.</p>
<p><span id="more-341"></span></p>
<p><strong>1. Pay for exposure:</strong> The WSJ report noted that Apple was concerned that &#8220;AppGratis was pushing a business model that appeared to favor developers with the financial means to pay for exposure.&#8221;</p>
<p>Does AppGratis make paid recommendations? The AppGratis response doesn’t respond to this charge. However, anecdotal evidence (as well as a <a href="http://www.forbes.com/sites/parmyolson/2013/02/18/5-minutes-with-the-founder-of-global-app-curation-hit-appgratis/">Forbes interview</a> with the CEO of AppGratis) suggests that AppGratis does have a pay-to-play model wherein they “recommend” apps to users if the app-developers pay them huge amounts of money</p>
<p>Honest, real recommendations provide great value to users. Our iPhone and Android apps have received a lot of great coverage in the media (for example, the iPhone <a href="http://www.cascadesoft.net/economy.aspx">Economy app</a> was featured in the cover page of <a href="https://blog.cascadesoft.net/2010/03/22/iphone-economy-app-featured-in-wiley-publishings-book-on-incredible-iphone-apps/">Wiley Publishing’s Book</a> on Incredible iPhone apps, got great reviews in <a href="http://www.macworld.com/article/142855/2009/09/economicnewsapps.html">MacWorld</a>, <a href="http://www.geekwire.com/2012/economy-app-android/">GeekWire</a> etc). So in addition to the value that users get, I recognize the value that developers get from good reviews/recommendations.</p>
<p>However, paid recommendations are bad for the whole app ecosystem. They are bad for users and they also hurt good developers who rely on organic user-base growth and real/honest reviews and recommendations. Large companies with free apps and huge marketing budgets clearly benefit from pay-for-exposure. That is why they pay huge amounts of money to AppGratis and other companies like TapJoy&nbsp;which offer incentivized downloads. These tactics result in artificially inflated download-counts. They manipulate app-store rankings and artificially push promoted-apps to the top of Apple’s top-apps charts.</p>
<p>So it is easy to understand why Apple would want to eliminate apps based on the pay-for-exposure model.</p>
<p><em>Rule 3.10 in Apple’s app-store guidelines explicitly states that “Developers who attempt to manipulate or cheat the user reviews or chart ranking in the App Store with fake or paid reviews, or any other inappropriate methods will be removed from the iOS Developer Program”.</em> One could make a weak argument that all advertisements (e.g. iAds or Google-ads) amount to something like pay-for-exposure, but I don’t think that regular banner ads are comparable with what Apple is trying to ban. I&nbsp;also think that full-disclosure is important and that AppGratis-users should be told that the recommendations were “paid for”. It is interesting to note that AppGratis’ response hasn’t attempted to address the charge that they’re based on a pay-for-exposure model.</p>
<p>2. <strong>Push Notifications for advertisements and promotions:</strong> <em>Rule 5.6 in Apple’s guidelines explicitly states that &#8220;Apps cannot use Push Notifications to send advertising, promotions, or direct marketing of any kind&#8221;.</em></p>
<p>One could make a weak argument that Rule 5.6 is bad for the user and that all push-notification-advertisements/promotions must be allowed. That may be a debatable point. One could also make the claim that Rule 5.6 isn’t being applied consistently. Again, it is arguable whether Apple is correct to permit advertisements in one class of apps (e.g. an airline advertising a sale) and prohibit it for another class of apps (e.g. AppGratis).</p>
<p>The WSJ report suggests that AppGratis violated rule 5.6 and the AppGratis blog attempts to counter this by saying that they only send one notification per day and that users opt-in. However, all iOS push-notifications are opt-in anyway. Apple’s rule doesn’t make exceptions for apps that only send one notification per day. So the AppGratis response does nothing to counter the fact that their app violates Rule 5.6 (as it is written).</p>
<p><strong>Prohibiting app store chart manipulation:</strong> I’ve myself dealt with an <a href="https://blog.cascadesoft.net/2010/10/31/a-zombie-keyboard-an-app-store-rejection-a-call-from-steve-jobs-and-the-economy-for-ipad-app/">app-store-rejection</a> (for using a private API) and I&nbsp;understand why developers may want to push some limits. However, when it comes to matters like&nbsp;incentivized downloads and pay-for-exposure, I think that Apple is right to prohibit the artificial manipulation of app store rankings.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cascadesoft.net/2013/04/09/was-apple-right-to-purge-appgratis-from-the-app-store/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<georss:point>47.606209 -122.332071</georss:point>
		<geo:lat>47.606209</geo:lat>
		<geo:long>-122.332071</geo:long>
		<media:content url="https://2.gravatar.com/avatar/263016c2d68e1780a09576a50d906a012ae2e92762ba8398e0068a89380bc39f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ram</media:title>
		</media:content>
	</item>
	</channel>
</rss>
