<?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>txeet</title>
	<atom:link href="http://txeet.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://txeet.com</link>
	<description>have fun texting</description>
	<lastBuildDate>Sat, 18 May 2013 17:11:44 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Real Time iOS Interface Inspection ∞</title>
		<link>http://txeet.com/2013/05/real-time-ios-interface-inspection-%e2%88%9e/</link>
		<comments>http://txeet.com/2013/05/real-time-ios-interface-inspection-%e2%88%9e/#comments</comments>
		<pubDate>Sat, 18 May 2013 17:11:44 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/real-time-ios-interface-inspection-%e2%88%9e/</guid>
		<description><![CDATA[TUAW covers SparkInspector, a tool for refining iOS app user interface elements. Targeting devs looking to refine their user interfaces, it enables you to interactively tweak view properties like frames and layers. &#8230;it provides a custom layer inspector &#8212; one (&#8230;) Read the rest of this entry &#187;]]></description>
				<content:encoded><![CDATA[<p>TUAW covers SparkInspector, a tool for refining iOS app user interface elements. Targeting devs looking to refine their user interfaces, it enables you to interactively tweak view properties like frames and layers. &#8230;it provides a custom layer inspector &#8212; one (&#8230;)</p>
<p><a href="http://iosdevelopertips.com/tools/real-time-ios-interface-inspection.html">Read the rest of this entry &#187;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/real-time-ios-interface-inspection-%e2%88%9e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Everything Apple Needs to Introduce at WWDC ∞</title>
		<link>http://txeet.com/2013/05/everything-apple-needs-to-introduce-at-wwdc-%e2%88%9e/</link>
		<comments>http://txeet.com/2013/05/everything-apple-needs-to-introduce-at-wwdc-%e2%88%9e/#comments</comments>
		<pubDate>Sat, 18 May 2013 15:30:33 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/everything-apple-needs-to-introduce-at-wwdc-%e2%88%9e/</guid>
		<description><![CDATA[Failure to introduce each and every one of these features and updates will result in another stock price plummet, calls for Tim Cook’s ouster and an infinite amount of comments on tech blogs decrying that Android is superior to Apple’s (&#8230;) Read the rest of this entry &#187;]]></description>
				<content:encoded><![CDATA[<p>Failure to introduce each and every one of these features and updates will result in another stock price plummet, calls for Tim Cook’s ouster and an infinite amount of comments on tech blogs decrying that Android is superior to Apple’s (&#8230;)</p>
<p><a href="http://iosdevelopertips.com/wwdc/everything-apple-needs-to-introduce-at-wwdc.html">Read the rest of this entry &#187;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/everything-apple-needs-to-introduce-at-wwdc-%e2%88%9e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Create A Game Like Tiny Wings with Cocos2D 2.X Part 1</title>
		<link>http://txeet.com/2013/05/how-to-create-a-game-like-tiny-wings-with-cocos2d-2-x-part-1/</link>
		<comments>http://txeet.com/2013/05/how-to-create-a-game-like-tiny-wings-with-cocos2d-2-x-part-1/#comments</comments>
		<pubDate>Sat, 18 May 2013 15:00:23 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/how-to-create-a-game-like-tiny-wings-with-cocos2d-2-x-part-1/</guid>
		<description><![CDATA[TweetUpdate 5/18/2013 Fully updated for Cocos2D 2.X. (original post by Ray Wenderlich, update by Ali Hafizji). Tiny Wings is an [...] How To Create A Game Like Tiny Wings with Cocos2D 2.X Part 1 is a post from: Ray Wenderlich]]></description>
				<content:encoded><![CDATA[<p>TweetUpdate 5/18/2013 Fully updated for Cocos2D 2.X. (original post by Ray Wenderlich, update by Ali Hafizji). Tiny Wings is an [...]
<p><a href="http://www.raywenderlich.com/32954/how-to-create-a-game-like-tiny-wings-with-cocos2d-2-x-part-1">How To Create A Game Like Tiny Wings with Cocos2D 2.X Part 1</a> is a post from: <a href="http://www.raywenderlich.com">Ray Wenderlich</a></p>
<p><img src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/dcafcda3c1_Zxv7o9qLHIg." height="1" width="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/how-to-create-a-game-like-tiny-wings-with-cocos2d-2-x-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Highlight: Pocket Informant Pro</title>
		<link>http://txeet.com/2013/05/highlight-pocket-informant-pro/</link>
		<comments>http://txeet.com/2013/05/highlight-pocket-informant-pro/#comments</comments>
		<pubDate>Sat, 18 May 2013 06:17:18 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/highlight-pocket-informant-pro/</guid>
		<description><![CDATA[Alex Kac, CEO/Founder of WebIS yesterday announced that Apple had approved their major new version 3 of Pocket Informant. We like to highlight satisfied clients who put our components to good use, Pocket Informant 3 uses DTRichTextEditor. WebIS highlights &#8220;Rich Notes&#8221; as major new feature of the new version. Rich Notes - we now have a [...]]]></description>
				<content:encoded><![CDATA[<p>Alex Kac, CEO/Founder of <a href="http://webis.net/wp/">WebIS</a> <a href="http://www.pocketinformant.com/Forums/index.php?s=ae222725f9d27a77613142d9d0e9042c&amp;app=blog&amp;module=display&amp;section=blog&amp;blogid=1&amp;showentry=303">yesterday announced</a> that Apple had approved their major new version 3 of <a href="http://webis.net/wp/pocket-informant-pro/">Pocket Informant</a>. We like to highlight satisfied clients who put <a href="http://www.cocoanetics.com/parts-store/">our components</a> to good use, Pocket Informant 3 uses <a href="https://www.cocoanetics.com/parts/dtrichtexteditor/">DTRichTextEditor</a>.</p>
<p><span></span></p>
<div></div>
<div>
<div>
<h3></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div></div>
<p><!-- End BuySellAds.com Zone Code --></div>
</div>
<p>WebIS highlights &#8220;Rich Notes&#8221; as major new feature of the new version.</p>
<blockquote><p><strong>Rich Notes</strong> - we now have a full featured Rich Text editor for notes. We’ve got a lot more coming here, but today you can set styles, fonts, typefaces, lists, and more.</p>
</blockquote>
<p>WebIS has been a key sponsor of the component helping us to enhance the feature set and <a href="https://docs.cocoanetics.com/DTRichTextEditor/Classes/DTRichTextEditorView.html">API</a> of the component with support for <strong>lists</strong>. This had long been on our roadmap, but without WebIS&#8217; sponsorship we could not have brought it to fruition.</p>
<p><a href="http://i0.wp.com/www.cocoanetics.com/files/iPhone-4-Inch-Screenshot-29.png"><img class="alignnone size-full wp-image-8209" alt="Pocket Informant Pro 3" src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/01b572e9f9_iPhone-4-Inch-Screenshot-29.png" /></a></p>
<p><strong></strong>WebIS integrated the cutting edge <a title="Rich Text Update 1.5" href="http://www.cocoanetics.com/2013/05/rich-text-update-1-5/">version 1.5</a> of DTRichTextEditor to enable this feature. Kac had this to say when asked for a testimonial:</p>
<blockquote><p>&#8220;Working with Oliver has been a tremendous joy. We simply could not have shipped on-time and with the quality of rich text support as we did without him. The DTRichTextEditor is a fabulous control with lots of great tools, utilities that we were able to use such as DTHTMLWriter and other classes. I heartily recommend both the control and Oliver.&#8221;</p>
</blockquote>
<p>The Pro Version of Pocket Informant will be released on Tuesday May 21st as a <a href="https://itunes.apple.com/at/app/pocket-informant-pro/id380732176?mt=8">free update</a> to existing 2.x customers. WebIS also offers a free Go! version which will be receiving the 3.0 treatment in the near future.</p>
<p>If you buy a license to DTRichTextEditor you receive full access to all source code residing on our private git server. To celebrate the launch of Pocket Informant please mention keyword <strong>PI10</strong> for 10% discount when you buy a license until May 31st.</p>
<p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=8208&amp;md5=817ecf284d398a8fe8d3603ca4b03e90" title="Flattr" target="_blank"><img src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/01b572e9f9_flattr-badge-large.png" alt="flattr this!" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/highlight-pocket-informant-pro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AutoIngest for Mac 0.5.0</title>
		<link>http://txeet.com/2013/05/autoingest-for-mac-0-5-0/</link>
		<comments>http://txeet.com/2013/05/autoingest-for-mac-0-5-0/#comments</comments>
		<pubDate>Fri, 17 May 2013 15:15:18 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/autoingest-for-mac-0-5-0/</guid>
		<description><![CDATA[This weeks update to AutoIngest for Mac (a comunity-driven Mac status bar app for downloading sales reports) brings support for downloading from multiple vendor identifiers. Your vendor identifier is an 8-digit number beginning with an 8. Usually you have only one, but if you &#8211; for example &#8211; move from an Individual to a Company [...]]]></description>
				<content:encoded><![CDATA[<p>This weeks update to AutoIngest for Mac (a comunity-driven Mac status bar app for downloading sales reports) brings support for downloading from multiple vendor identifiers.</p>
<p>Your vendor identifier is an 8-digit number beginning with an 8. Usually you have only one, but if you &#8211; for example &#8211; move from an Individual to a Company Apple developer account, then your old ID is retired and you get a new one. There might be also other scenarios for people having multiple, now AutoIngest for Mac supports that.</p>
<p><span></span></p>
<div></div>
<div>
<div>
<h3></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div></div>
<p><!-- End BuySellAds.com Zone Code --></div>
</div>
<h3>Changes</h3>
<ul>
<li>ADDED: Support for multiple vendor identifiers</li>
</ul>
<p>For the validation I implemented an <a title="Tokenize This!" href="http://www.cocoanetics.com/2013/05/tokenize-this/">NSTokenField</a>, the learnings from that I summarized in a separate article.</p>
<p><a href="http://i1.wp.com/www.cocoanetics.com/files/Screen-Shot-2013-05-17-at-2.41.53-PM.png"><img class="alignnone size-full wp-image-8200" alt="AutoIngest token field" src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/e9b5c1b86a_Screen-Shot-2013-05-17-at-2-41-53-PM.png" /></a></p>
<p>I hope you are enjoying this new version AutoIngest for Mac! It is available via auto-update, <a href="http://beta.cocoanetics.com/Cocoanetics/com.cocoanetics.AutoIngest/63/AutoIngest.zip">direct download</a> as well as full source <a href="https://github.com/Cocoanetics/AutoIngest">on GitHub</a>. The binary builds have Sparkle for OTA updating and are signed with Developer ID.</p>
<p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=8198&amp;md5=95f3396a6399402ba7c6ba06d206db30" title="Flattr" target="_blank"><img src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/e9b5c1b86a_flattr-badge-large.png" alt="flattr this!" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/autoingest-for-mac-0-5-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X</title>
		<link>http://txeet.com/2013/05/how-to-create-dynamic-textures-with-ccrendertexture-in-cocos2d-2-x/</link>
		<comments>http://txeet.com/2013/05/how-to-create-dynamic-textures-with-ccrendertexture-in-cocos2d-2-x/#comments</comments>
		<pubDate>Fri, 17 May 2013 15:00:37 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/how-to-create-dynamic-textures-with-ccrendertexture-in-cocos2d-2-x/</guid>
		<description><![CDATA[TweetUpdate 5/17/2013 Fully updated for Cocos2D 2.X. (original post by Ray Wenderlich, update by Ali Hafizji). You&#8217;re probably familiar with [...] How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X is a post from: Ray Wenderlich]]></description>
				<content:encoded><![CDATA[<p>TweetUpdate 5/17/2013 Fully updated for Cocos2D 2.X. (original post by Ray Wenderlich, update by Ali Hafizji). You&#8217;re probably familiar with [...]
<p><a href="http://www.raywenderlich.com/33266/how-to-create-dynamic-textures-with-ccrendertexture-in-cocos2d-2-x">How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X</a> is a post from: <a href="http://www.raywenderlich.com">Ray Wenderlich</a></p>
<p><img src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/dcafcda3c1_WQ2PlG5k--I." height="1" width="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/how-to-create-dynamic-textures-with-ccrendertexture-in-cocos2d-2-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tokenize This!</title>
		<link>http://txeet.com/2013/05/tokenize-this/</link>
		<comments>http://txeet.com/2013/05/tokenize-this/#comments</comments>
		<pubDate>Fri, 17 May 2013 12:05:21 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/tokenize-this/</guid>
		<description><![CDATA[I have two vendor IDs, one from my time as Individual and the newer one since I changed to a Company developer account. There might be other other reasons for having multiple vendor IDs, if you know of any, please let me know. I&#8217;m curious. Now for this week&#8217;s update to AutoIngest for Mac I [...]]]></description>
				<content:encoded><![CDATA[<p>I have two vendor IDs, one from my time as Individual and the newer one since I <a title="Moving from Individual to Company" href="http://www.cocoanetics.com/2011/10/moving-from-individual-to-company/">changed to a Company developer account</a>. There might be other other reasons for having multiple vendor IDs, if you know of any, please let me know. I&#8217;m curious.</p>
<p>Now for this week&#8217;s update to <strong>AutoIngest for Mac</strong> I wanted to turn the plain text Vendor ID field into a token field like the Mac mail app has. Fortunately <strong>NSTokenField</strong> exists on Mac since 10.4 and today we shall explore its use.</p>
<p><span></span></p>
<div></div>
<div>
<div>
<h3></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div></div>
<p><!-- End BuySellAds.com Zone Code --></div>
</div>
<p>Googling for a tutorial did not yield any immediate result, but I found a <a href="http://developer.apple.com/library/mac/#samplecode/Tokens/Introduction/Intro.html">sample from Apple</a> themselves which I am using for pointers.</p>
<p>First step is to go into the preferences controller&#8217;s XIB and replace the NSTextField with an NSTokenField.</p>
<p><a href="http://i0.wp.com/www.cocoanetics.com/files/Screen-Shot-2013-05-17-at-8.25.58-AM.png"><img class="alignnone  wp-image-8191" alt="Adding the NSTokenField" src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/e2e9f44c0b_Screen-Shot-2013-05-17-at-8-25-58-AM.png" /></a></p>
<p>Connect the token field&#8217;s delegate, also we add an outlet to our file&#8217;s owner so that we interact with it. I set the Layout to &#8220;Scrolls&#8221; and checked &#8220;Uses Single Line Mode&#8221; to have the token field a single line and scrolling horizontally if there are more than two tokens.</p>
<p>Even without any additional delegate methods implemented we already get some basic behavior. You can enter text and as soon as you type a comma, the text turns into a token. Now you know why they call it the &#8220;blue pill&#8221;.</p>
<p><a href="http://i1.wp.com/www.cocoanetics.com/files/Screen-Shot-2013-05-17-at-8.55.13-AM.png"><img class="alignnone size-full wp-image-8192" alt="NSTokenField working" src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/e2e9f44c0b_Screen-Shot-2013-05-17-at-8-55-13-AM.png" /></a></p>
<p>The token field continuously check its contents and separates tokens by the set <strong>tokenizingCharacterSet</strong>. The best place for additional setup is the -awakeFromNib.</p>
<div>
<table>
<tr>
<td>
<pre><span>// any non-number is a seperator</span>
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableCharacterSet_Class/"><span>NSMutableCharacterSet</span></a> <span>*</span>characterSet <span>=</span> <span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableCharacterSet_Class/"><span>NSMutableCharacterSet</span></a> alphanumericCharacterSet<span>&#093;</span>;
<span>&#091;</span>characterSet formUnionWithCharacterSet<span>:</span><span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/"><span>NSCharacterSet</span></a> whitespaceAndNewlineCharacterSet<span>&#093;</span><span>&#093;</span>;
<span>&#091;</span>characterSet formUnionWithCharacterSet<span>:</span><span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/"><span>NSCharacterSet</span></a> punctuationCharacterSet<span>&#093;</span><span>&#093;</span>;
<span>&#091;</span>characterSet removeCharactersInString<span>:</span><span>@</span><span>&quot;1234567890&quot;</span><span>&#093;</span>;
&nbsp;
self.vendorTokenField.tokenizingCharacterSet <span>=</span> characterSet;</pre>
</td>
</tr>
</table>
</div>
<p>NSTokenField has a class method <strong>defaultTokenizingCharacterSet</strong>, which you can overwrite in a subclass if you want to keep your token code in a reusable sub-class of NSTokenField.</p>
<p>There are several methods in the NSTokenFieldDelegate protocol which allows us to a few customizations.</p>
<h3>Token Styles</h3>
<p>You can think of a token field as an array where <em>all elements</em> are tokens. A token can either be a text string or the above mentioned &#8220;blue pill&#8221;. So if you want to have tokens inside some normal plain text, then the normal text would be represented by <strong>NSPlainTextTokenStyle</strong> whereas the actual tokens would be using the <strong>NSRoundedTokenStyle</strong>.</p>
<p>In its simplest form you would be using NSString instances for the individual tokens. To achieve the differentiation between plain text and rounded token styles you would employ a delegate method:</p>
<div>
<table>
<tr>
<td>
<pre><span>-</span> <span>&#040;</span>NSTokenStyle<span>&#041;</span>tokenField<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTokenField_Class/"><span>NSTokenField</span></a> <span>*</span><span>&#041;</span>tokenField styleForRepresentedObject<span>:</span><span>&#040;</span><span>id</span><span>&#041;</span>representedObject
<span>&#123;</span>
	<span>// make valid vendor ids &quot;blue pill&quot;, everything else plain text</span>
	<span>if</span> <span>&#040;</span><span>&#091;</span>representedObject isValidVendorIdentifier<span>&#093;</span><span>&#041;</span>
	<span>&#123;</span>
		<span>return</span> NSRoundedTokenStyle;
	<span>&#125;</span>
&nbsp;
	<span>return</span> NSPlainTextTokenStyle;
<span>&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>The representedObject &#8211; as often used on AppKit &#8211; can be any object that should represent the tokens. The default implementation is to use the NSString values you enter, but you can easily provide your own backing objects.</p>
<h3>Represented Objects</h3>
<p>If you use represented objects instead of the default strings, then you have to implement several delegate methods because the token field needs to convert between the object and what it should write on the token and what the editing value should be. From the NSTokenField.h header:</p>
<div>
<table>
<tr>
<td>
<pre><span>// If you return nil or don't implement these delegate methods, we will assume</span>
<span>// editing string = display string = represented object</span>
<span>-</span> <span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span>NSString</span></a> <span>*</span><span>&#041;</span>tokenField<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTokenField_Class/"><span>NSTokenField</span></a> <span>*</span><span>&#041;</span>tokenField displayStringForRepresentedObject<span>:</span><span>&#040;</span><span>id</span><span>&#041;</span>representedObject;
<span>-</span> <span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span>NSString</span></a> <span>*</span><span>&#041;</span>tokenField<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTokenField_Class/"><span>NSTokenField</span></a> <span>*</span><span>&#041;</span>tokenField editingStringForRepresentedObject<span>:</span><span>&#040;</span><span>id</span><span>&#041;</span>representedObject;
<span>-</span> <span>&#040;</span><span>id</span><span>&#041;</span>tokenField<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTokenField_Class/"><span>NSTokenField</span></a> <span>*</span><span>&#041;</span>tokenField representedObjectForEditingString<span>:</span> <span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span>NSString</span></a> <span>*</span><span>&#041;</span>editingString;</pre>
</td>
</tr>
</table>
</div>
<p>You provide backing object for a given editing string. Conversely if the user double-clicks on a token this turns into editable text. Finally the display string is the inscription on the blue pills.</p>
<p>For example if you have the token represent an email address, then the editing string could be &#8220;Oliver Drobnik &lt;oliver@cocoanetics.com&gt;&#8221; and the display string be just &#8220;Oliver Drobnik&#8221;. In that case you could have a token object class with a displayName and an email string.</p>
<h3>Autocompletion</h3>
<p>NSTokenField also supports showing suggestions to the user depending on some initially typed characters. Those are shown after the <strong>completionDelay</strong> which you can customize. In the case of e-mail addresses you could show the most likely completions entered so far and set the index of the most likely candidate. The <strong>defaultCompletionDelay</strong> &#8211; also a class method you can override via sub-class &#8211; is 0. When trying out different values I couldn&#8217;t notice any difference however.</p>
<p>Autocompletion values are provided with this delegate method.</p>
<div>
<table>
<tr>
<td>
<pre><span>-</span> <span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span>NSArray</span></a> <span>*</span><span>&#041;</span>tokenField<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTokenField_Class/"><span>NSTokenField</span></a> <span>*</span><span>&#041;</span>tokenField completionsForSubstring<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span>NSString</span></a> <span>*</span><span>&#041;</span>substring indexOfToken<span>:</span><span>&#040;</span>NSInteger<span>&#041;</span>tokenIndex indexOfSelectedItem<span>:</span><span>&#040;</span>NSInteger <span>*</span><span>&#041;</span>selectedIndex
<span>&#123;</span>
	<span>*</span>selectedIndex <span>=</span> <span>1</span>;
	<span>return</span> @<span>&#091;</span><span>@</span><span>&quot;8xxxxxxxx&quot;</span>, <span>@</span><span>&quot;81234567&quot;</span><span>&#093;</span>;
<span>&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>If you also change the by-ref selectedIndex then the selection at this index will already be put into the text field. To avoid this you have to return -1. Then you only see the suggestions dangling below the field waiting for the user to pick one. Not setting the value is the same as returning 0.</p>
<p>I very briefly considered storing valid vendor IDs in the user defaults and then presenting these to the user for auto-completion, but decided against that.</p>
<h3>Pasteboard</h3>
<p>You might remember from the mail.app that you can drag around the e-mail tokens or even drag them into other apps. To support interaction with the Mac pasteboard you have to implement two methods.</p>
<p>The first method gets an array of represented token objects and lets you add some useful representation(s) to the dragging pasteboard. The objects you set there need to be able to implement the NSPasteboardWriting protocol. Alternatively you can create a property list representation for them  and set this instead of an array of objects.</p>
<div>
<table>
<tr>
<td>
<pre><span>-</span> <span>&#040;</span><span>BOOL</span><span>&#041;</span>tokenField<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTokenField_Class/"><span>NSTokenField</span></a> <span>*</span><span>&#041;</span>tokenField writeRepresentedObjects<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span>NSArray</span></a> <span>*</span><span>&#041;</span>objects toPasteboard<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSPasteboard_Class/"><span>NSPasteboard</span></a> <span>*</span><span>&#041;</span>pboard
<span>&#123;</span>
	<span>&#091;</span>pboard writeObjects<span>:</span>objects<span>&#093;</span>;
	<span>return</span> <span>YES</span>;
<span>&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>If you don&#8217;t implement this method then it still works, the default representation is to concatenate all tokens into a single comma-separated string. Since we are only using NSStrings as token objects we don&#8217;t have to do anything special since NSStrings know how to represent themselves on the pasteboard. This implementation causes the tokens to be staying individual values. If you drag&amp;drop them for example into Notepad they come out as one per line.</p>
<h3>Context Menu</h3>
<p>Apple&#8217;s sample also shows how to add individual context menus to the tokens. This is achieved via the following two delegate methods.</p>
<div>
<table>
<tr>
<td>
<pre><span>// By default the tokens have no menu.</span>
<span>-</span> <span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSMenu_Class/"><span>NSMenu</span></a> <span>*</span><span>&#041;</span>tokenField<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTokenField_Class/"><span>NSTokenField</span></a> <span>*</span><span>&#041;</span>tokenField menuForRepresentedObject<span>:</span><span>&#040;</span><span>id</span><span>&#041;</span>representedObject;
<span>-</span> <span>&#040;</span><span>BOOL</span><span>&#041;</span>tokenField<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTokenField_Class/"><span>NSTokenField</span></a> <span>*</span><span>&#041;</span>tokenField hasMenuForRepresentedObject<span>:</span><span>&#040;</span><span>id</span><span>&#041;</span>representedObject;</pre>
</td>
</tr>
</table>
</div>
<p>This context menu is possible in addition to auto-completion and is available in the tokenized form. It&#8217;s basically a drop down menu with a down arrow to open it. The sample shows a nice trick how to force a token back into editing mode. This action is tied to an Edit&#8230; menu option.</p>
<div>
<table>
<tr>
<td>
<pre><span>-</span> <span>&#040;</span>IBAction<span>&#041;</span>editCellAction<span>:</span><span>&#040;</span><span>id</span><span>&#041;</span>sender
<span>&#123;</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSText_Class/"><span>NSText</span></a> <span>*</span>fieldEditor <span>=</span> <span>&#091;</span>self.tokensField currentEditor<span>&#093;</span>;
	<span>NSRange</span> textRange <span>=</span> <span>&#091;</span>fieldEditor selectedRange<span>&#093;</span>;
&nbsp;
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span>NSString</span></a> <span>*</span>replacedString <span>=</span> <span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span>NSString</span></a> stringWithString<span>:</span>menuToken.name<span>&#093;</span>;
	<span>&#091;</span>fieldEditor replaceCharactersInRange<span>:</span>textRange withString<span>:</span>replacedString<span>&#093;</span>;
	<span>&#091;</span>fieldEditor setSelectedRange<span>:</span>NSMakeRange<span>&#040;</span>textRange.location, <span>&#091;</span>replacedString length<span>&#093;</span><span>&#041;</span><span>&#093;</span>;
<span>&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>Though I fail to see the practical use of this trick, since you can always go into edit mode by double-clicking on a blue pill token.</p>
<h3>Validation</h3>
<p>We already have a bit of validation going by only turning valid vendor IDs into pills. But there is yet another delegate method which would also allow us to completely reject invalid tokens.</p>
<p>The following only accepts valid tokens. This also removes invalid tokens if you enter a separator or tab out of the field.</p>
<div>
<table>
<tr>
<td>
<pre><span>-</span> <span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span>NSArray</span></a> <span>*</span><span>&#041;</span>tokenField<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTokenField_Class/"><span>NSTokenField</span></a> <span>*</span><span>&#041;</span>tokenField shouldAddObjects<span>:</span><span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span>NSArray</span></a> <span>*</span><span>&#041;</span>tokens atIndex<span>:</span><span>&#040;</span>NSUInteger<span>&#041;</span>index
<span>&#123;</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/"><span>NSMutableArray</span></a> <span>*</span>validTokens <span>=</span> <span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/"><span>NSMutableArray</span></a> array<span>&#093;</span>;
&nbsp;
	<span>for</span> <span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span>NSString</span></a> <span>*</span>oneToken <span>in</span> tokens<span>&#041;</span>
	<span>&#123;</span>
		<span>if</span> <span>&#040;</span><span>&#091;</span>oneToken isValidVendorIdentifier<span>&#093;</span><span>&#041;</span>
		<span>&#123;</span>
			<span>&#091;</span>validTokens addObject<span>:</span>oneToken<span>&#093;</span>;
		<span>&#125;</span>
	<span>&#125;</span>
&nbsp;
	<span>return</span> validTokens;
<span>&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>Depending on your use case you might not want to have invalid tokens simply disappear. If you want to keep them, but just have them be text, then you just forego implementing this delegate method.</p>
<p>A second method to only get validated values into the array of vendor IDs is to have an NSValueTransformer which gets the array of tokens, filters for valid and sorts uniquely.</p>
<div>
<table>
<tr>
<td>
<pre><span>@implementation</span> ValidVendorValueTransformer
&nbsp;
<span>+</span> <span>&#040;</span><span>Class</span><span>&#041;</span>transformedValueClass
<span>&#123;</span>
	<span>return</span> <span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span>NSArray</span></a> class<span>&#093;</span>;
<span>&#125;</span>
&nbsp;
<span>-</span> <span>&#040;</span><span>id</span><span>&#041;</span>transformedValue<span>:</span><span>&#040;</span><span>id</span><span>&#041;</span>value
<span>&#123;</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span>NSArray</span></a> <span>*</span>array <span>=</span> <span>nil</span>;
&nbsp;
	<span>if</span> <span>&#040;</span><span>&#091;</span>value isKindOfClass<span>:</span><span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span>NSArray</span></a> class<span>&#093;</span><span>&#093;</span><span>&#041;</span>
	<span>&#123;</span>
		array <span>=</span> value;
	<span>&#125;</span>
	<span>else</span> <span>if</span> <span>&#040;</span><span>&#091;</span>value isKindOfClass<span>:</span><span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span>NSString</span></a> class<span>&#093;</span><span>&#093;</span><span>&#041;</span>
	<span>&#123;</span>
		array <span>=</span> @<span>&#091;</span>value<span>&#093;</span>;
	<span>&#125;</span>
&nbsp;
	NSAssert<span>&#040;</span>array, <span>@</span><span>&quot;Invalid class for transformer&quot;</span><span>&#041;</span>;
&nbsp;
	<span>// make unique in set</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableSet_Class/"><span>NSMutableSet</span></a> <span>*</span>validTokens <span>=</span> <span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableSet_Class/"><span>NSMutableSet</span></a> set<span>&#093;</span>;
&nbsp;
	<span>for</span> <span>&#040;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span>NSString</span></a> <span>*</span>oneToken <span>in</span> array<span>&#041;</span>
	<span>&#123;</span>
		<span>if</span> <span>&#040;</span><span>&#091;</span>oneToken isValidVendorIdentifier<span>&#093;</span><span>&#041;</span>
		<span>&#123;</span>
			<span>&#091;</span>validTokens addObject<span>:</span>oneToken<span>&#093;</span>;
		<span>&#125;</span>
	<span>&#125;</span>
&nbsp;
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSSortDescriptor_Class/"><span>NSSortDescriptor</span></a> <span>*</span>sort <span>=</span> <span>&#091;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSSortDescriptor_Class/"><span>NSSortDescriptor</span></a> sortDescriptorWithKey<span>:</span><span>nil</span>
                                  ascending<span>:</span><span>YES</span>
                                  selector<span>:</span><span>@selector</span><span>&#040;</span>compare<span>:</span><span>&#041;</span><span>&#093;</span>;
	<span>return</span> <span>&#091;</span>validTokens sortedArrayUsingDescriptors<span>:</span>@<span>&#091;</span>sort<span>&#093;</span><span>&#093;</span>;
<span>&#125;</span>
&nbsp;
<span>@end</span></pre>
</td>
</tr>
</table>
</div>
<p>This also has a provision for the vendor ID value previously being a string. With this it automatically migrates the value next time you enter the preferences. You install the value transformer in the data bindings inspector for the token field.</p>
<p><a href="http://i0.wp.com/www.cocoanetics.com/files/Screen-Shot-2013-05-17-at-2.00.52-PM.png"><img class="alignnone size-full wp-image-8195" alt="Installing value transformer" src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/e2e9f44c0b_Screen-Shot-2013-05-17-at-2-00-52-PM.png" /></a></p>
<p>Also note the &#8220;Continuosly Updates Value&#8221; which I set so that whenever the contents changes the user default gets updated.</p>
<h3>Conclusion</h3>
<p>I wanted to achieve the effect of a valid vendor identifier automatically turning into a rounded token, but failed. I was able to see that the token field would turn valid IDs into my own VendorIdentifier represented objects, but it didn&#8217;t update the display. Only when I entered a separator character or tabbed out of the token field would I see the refresh occur.</p>
<p>There are no other visual customization options &#8211; that I could find &#8211; on NSTokenField so you have to be content with the &#8220;blue pill&#8221; style. But once you wrapped your head around the basic concepts and accepted the limitations of the API you can quickly use token fields to add them to your apps.</p>
<p>They work nicely intermixed with normal text or as &#8220;token only&#8221; fields which you can data-bind to an NSArray.</p>
<p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=8190&amp;md5=f7707284fbc25369b6f4d928b965c2a1" title="Flattr" target="_blank"><img src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/3987f7dda4_flattr-badge-large.png" alt="flattr this!" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/tokenize-this/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Author Marks</title>
		<link>http://txeet.com/2013/05/author-marks/</link>
		<comments>http://txeet.com/2013/05/author-marks/#comments</comments>
		<pubDate>Thu, 16 May 2013 16:40:00 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/author-marks/</guid>
		<description><![CDATA[Four days ago, I published an article entitled Tail wagging, about the backlash against skeuomorphic design. It was well received, gaining about 30,000 reads here and links from The Loop, Marco Arment and Khoi Vinh, amongst others. I get a great deal of pleasure from reading responses to my articles, most of which are via [...]]]></description>
				<content:encoded><![CDATA[<p>Four days ago, I published an article entitled <a href="http://mattgemmell.com/2013/05/12/tail-wagging/">Tail wagging</a>, about the backlash against skeuomorphic design. It was well received, gaining about 30,000 reads here and links from <a href="http://www.loopinsight.com/2013/05/14/truth-in-design/">The Loop</a>, <a href="http://www.marco.org/2013/05/12/tail-wagging">Marco Arment</a> and <a href="http://www.subtraction.com/2013/05/14/tail-wagging-in-interface-design">Khoi Vinh</a>, amongst others.</p>
<p>I get a great deal of pleasure from reading responses to my articles, most of which are via <a href="http://twitter.com/mattgemmell">my Twitter account</a>. I was reading <a href="http://topsy.com/mattgemmell.com/2013/05/12/tail-wagging/">the stream of tweets referencing the article</a> via Topsy recently, as I do for all my pieces, and I was once again fascinated by the extracts and quotes people choose to use.</p>
<p><span id="more-829"></span></p>
<p>In the majority of cases, the sections people quote from my articles agree with my own impression of what the important points were. I&rsquo;d love to attribute this to careful writing and well-formed arguments, but of course it&rsquo;s more due to the reader paying attention.</p>
<p>In some cases, though, people choose to refer to articles (and thus, in a sense, summarise them) using what I feel are either secondary points, or even actual mischaracterisations of misinterpretations of what I&rsquo;ve said. The fault for that will be mine in some cases, and in others it&rsquo;ll be the reader&rsquo;s.</p>
<p>I had <a href="https://twitter.com/mattgemmell/status/335013322309107714">a spirited discussion on Twitter</a> earlier today about a vague idea for offering some extra insight regarding my <em>own</em> view of an article&rsquo;s salient points.</p>
<p>There were a few standard suggestions, which I&rsquo;d already dismissed as not quite appropriate. <em>Emphasis</em>, for example, is more of a linguistic tool (to indicate or be analogous to verbal emphasis) than something to be used at the logical level. I also think that emphasis is ugly and diluted when used for more than a single clause or so.</p>
<p><span><br />
The next suggestion (and probably most popular overall) was pull-quotes. I&rsquo;ve used those perhaps twice in total on this blog before, and each time I felt self-conscious about it. Pull-quotes can make you seem arrogant, in my opinion. There&rsquo;s something crass about them.<br />
</span></p>
<p>Since this discussion took place on the internet, a few people even deigned to give me a high school writing lesson, saying that no additional means of highlighting passages should be needed if I just <em>make my point properly</em>. Thanks for that.</p>
<p>Abstracts were mentioned (I think that arguments should be allowed to build; I&rsquo;m not writing academic papers), as were sub-headings (similar objection to abstracts), and unacceptably ugly inline styling like boldface or underlining.</p>
<p>Things got a bit more interesting when Branch was mentioned, which has the sort of neon-highlighter-pen concept I&rsquo;d been thinking of &ndash; you can <a href="http://branch.com/b/apple-to-begin-iphone-production-this-quarter">see examples here</a>, though again I don&rsquo;t like the underline; only the hover appearance. That implementation is reasonably close to what I&rsquo;m after.</p>
<p>No matter how carefully written a piece may be, the reader is an unknown factor. Different people will interpret your words differently, and it&rsquo;s not possible to completely eliminate that. Perhaps that&rsquo;s even a positive state of affairs.</p>
<p>In any case, everyone will have different &ldquo;take-home points&rdquo; from a piece of writing. As I see after publishing each piece, everyone&rsquo;s highlights (or summaries, or key points) are unique. The author of a piece has of course conveyed their position in the piece itself, but (except for perhaps an initial tweet, or the meta description contents of the page) we&rsquo;re not often in the position of listing our <em>own</em> highlights.</p>
<p>I think that&rsquo;s a shame, because there can be value in getting a sense of what the <em>author</em> of a piece feels is the main thrust of their own argument, or a sense of what they feel might be notable or quotable.</p>
<p>Accordingly, I&rsquo;ve implemented a system to do that on this blog, which I hope to use in future. I&rsquo;m also providing the relevant code so you reuse it yourself if you wish. I call these annotations <em>Author Marks</em>.</p>
<p>My design criteria were contradictory:</p>
<ol>
<li>Don&rsquo;t be visually intrusive, or imply arrogance.</li>
<li>Replicate highlighter-pens on paper.</li>
</ol>
<p>As I thought about it a little more, I realised that Author Marks are somewhat like extras on a DVD; a little bit of additional content, which you must choose to view, giving some insight into the piece from the author&rsquo;s perspective.</p>
<p>For simplicity, I decided to make use of the <a href="http://www.w3.org/html/wg/drafts/html/master/text-level-semantics.html#the-mark-element">HTML5 <code>mark</code> tag</a> to indicate those segments. This has the advantages of being semantically valid, portable, and readily accessible to user-specified stylesheets.</p>
<p>Highlighting of marks is off by default, but I&rsquo;ve made a simple JavaScript which you, dear reader, can use to enable highlighting if you want to. The appropriate links are at the bottom of each article after my byline, but for the sake of demonstration I&rsquo;ve also added one here:</p>
<p><a href="http://mattgemmell.com/" title="Author Marks are the author's suggested important or quotable points.">Show Author Marks</a>.</p>
<p>I&rsquo;ve added some gratuitous marks in this article&rsquo;s text so you can readily test the functionality. For example, this phrase has been marked. In actual usage, I&rsquo;d try to limit the number of marks to a handful per article.</p>
<p>For those reading this in a feed reader, or with JavaScript disabled, here&rsquo;s a screenshot of how it looks.</p>
<div>
<a href="http://www.flickr.com/photos/mattgemmell/8745247030/" title="Author Marks by Matt Gemmell, on Flickr"><img src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/d699250dae_8745247030-f10f9127dd-o.png" width="646" height="171" alt="Author Marks" /></a>
</div>
<p>You can find the JavaScript in <a href="https://github.com/mattgemmell/author-marks">this github repository</a>, complete with instructions for use.</p>
<p>I&rsquo;ve gone back and added some marks to <a href="http://mattgemmell.com/2013/05/12/tail-wagging/">my Tail wagging piece</a> as a sort of test run.</p>
<p>It&rsquo;s my hope that this can serve as a way for me to provide a hint about my own sense of a piece&rsquo;s key points, and highlight anything I think is particularly pithy. You&rsquo;ll be free to either be complicit, or just amused at my own vanity or (in <em>your</em> opinion) misguidedness.</p>
<p>I&rsquo;m very interested in further discussion on this topic &ndash; but do feel free to wilfully mischaracterise this article <a href="http://twitter.com/mattgemmell">on Twitter</a> instead.</p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/author-marks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Popularity</title>
		<link>http://txeet.com/2013/05/android-popularity/</link>
		<comments>http://txeet.com/2013/05/android-popularity/#comments</comments>
		<pubDate>Thu, 16 May 2013 16:25:13 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/android-popularity/</guid>
		<description><![CDATA[IDC has new Worldwide statistics that show for Q1 2013 Android and iOS represented 92.3% of all smartphone OS Shipments. Android had a 75% market share, iOS 17.3%, Windows Phone 3.2% and BlackBerry 2.9%. &#160; From my perspective, as predominantly an Android developer, I can see Android has &#8216;grown up&#8217;. Companies are no longer going [...]]]></description>
				<content:encoded><![CDATA[<div>
<p><img src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/07b7b6a781_idc.gif" alt="idc.gif" title="idc.gif" align="left" border="0" hspace="5" vspace="0" width="106" height="48" style="width: 106px;height: 48px" />IDC has <a href="http://www.idc.com/getdoc.jsp?containerId=prUS24108913" target="_blank">new Worldwide statistics</a> that show for Q1 2013 Android and iOS represented 92.3% of all smartphone OS Shipments. Android had a 75% market share, iOS 17.3%, Windows Phone 3.2% and BlackBerry 2.9%.</p>
<p>&nbsp;</p>
</div>
<div><img src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/f398228cdc_idcq12013.png" alt="idcq12013.png" title="idcq12013.png" border="0" hspace="5" vspace="0" width="551" height="358" style="width: 551px;height: 358px" /></div>
<div>
<p>From my perspective, as predominantly an Android developer, I can see Android has &#8216;grown up&#8217;. Companies are no longer going iOS first usually because their clients are insisting on both iOS and Android versions of apps. The amount of Android development has increased and diversified. My next project is indicative of this being based on the Google Android TV platform.</p>
<p>Android development has matured. I am using more and more Apache licenced libraries where, only a few years ago, I had to write my own code. Almost any Android complex development problem I have can be answered using StackOverflow. Clients are better understanding the need to use Android UI idioms and dissuading them from iOS idioms is less of a hard sell.</p>
<p>However, the popularity attracts malware that feeds on Android&#8217;s slow and, for some companies, non-existent OS update processes (<a href="https://traxarmstrong.com/meet-x-ray-a-unique-app-that-assess-your-android-device-vulnerability/" target="_blank">meet X-ray</a>). Google is tightening up the OS but only for new versions. For example, on later versions of Android third party apps can&#8217;t read the developer output (logcat) and only trusted desktop machines can connect via Android Debug Bridge (ADB). This is also making things slightly more difficult for developers. In these examples, I am finding it harder to do automated testing (<a href="https://code.google.com/p/robotium/" target="_blank">robotium</a> + <a href="http://square.github.io/spoon/" target="_blank">spoon</a>) via ADB from arbitrary desktop machines and I can no longer ask clients to send me ADB output captured from 3rd party apps such as catlog.</p>
<p>I also find it difficult to understand why so many people root their phones &#8211; so much so there&#8217;s a large market for some apps that only work on rooted phones. The built in Android security is the first line of defence and people rooting their phones really should think more about what they are doing.</p>
<p>This has some interesting implications for BYOD. An employee with a rooted device can have all the information on their device shadow copied off just by someone having contact with the phone for a very short time. I will be speaking about this and other issues at <a href="http://mobilephonedevelopment.com/archives/1604" target="_self">Make IT Mobile</a> at the end of the month.</p>
</div>
<p><strong>Related Articles:</strong></p>
<ul>
<li><a href="http://mobilephonedevelopment.com/archives/1622" rel="bookmark">Android Anti-Virus Software Prone to Transformation Attacks</a></li>
<li><a href="http://mobilephonedevelopment.com/archives/1614" rel="bookmark">App Vulnerabilities</a></li>
<li><a href="http://mobilephonedevelopment.com/archives/1611" rel="bookmark">App Data Protection and Security</a></li>
<li><a href="http://mobilephonedevelopment.com/archives/1604" rel="bookmark">I&#8217;ll be Speaking at the Free Make IT Mobile Event</a></li>
<li><a href="http://mobilephonedevelopment.com/archives/1572" rel="bookmark">Accenture&#8217;s Predictions and Developer Opportunities</a></li>
<li><a href="http://mobilephonedevelopment.com/archives/1560" rel="bookmark">Make IT Mobile</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/android-popularity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DTCoreText 1.5.2</title>
		<link>http://txeet.com/2013/05/dtcoretext-1-5-2/</link>
		<comments>http://txeet.com/2013/05/dtcoretext-1-5-2/#comments</comments>
		<pubDate>Thu, 16 May 2013 13:48:01 +0000</pubDate>
		<dc:creator>samwize</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://txeet.com/2013/05/dtcoretext-1-5-2/</guid>
		<description><![CDATA[I&#8217;ve got a bunch of fixes and enhancements released in DTCoreText 1.5.2 today. Special thanks to Antiloop who sponsored the improvements for handling of padding inside lists. Changes in 1.5.1 FIXED: Attributes &#8220;bleeding&#8221; into next paragraph Changes in 1.5.2 FIXED: Crash on parsing HTML with additional tags following HTML end tag FIXED: DTAttributedLabel problems being instantiated [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve got a bunch of fixes and enhancements released in <a href="http://www.cocoanetics.com/parts/dtcoretext/">DTCoreText</a> 1.5.2 today. Special thanks to <a href="http://www.antiloop.at">Antiloop</a> who sponsored the improvements for handling of padding inside lists.</p>
<p><span></span></p>
<div></div>
<div>
<div>
<h3></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div></div>
<p><!-- End BuySellAds.com Zone Code --></div>
</div>
<h3>Changes in 1.5.1</h3>
<ul>
<li>FIXED: Attributes &#8220;bleeding&#8221; into next paragraph</li>
</ul>
<h3>Changes in 1.5.2</h3>
<ul>
<li><span>FIXED: Crash on parsing HTML with additional tags following HTML end tag</span></li>
<li>FIXED: DTAttributedLabel problems being instantiated from NIB, ignoring edge insets</li>
<li>FIXED: Crash on using font-family &#8220;inherit&#8221; together with font-variant &#8220;small-caps&#8221;.</li>
<li>FIXED: Endless loop when using a text block that would not fully fit in a height-constrained layout frame</li>
<li>FIXED: Image Attachment ignoring maximum display size if width/height are set via tag attributes</li>
<li>FIXED: Invalid font-size would cause Core Text font size of 12px to be used.</li>
<li>[Sponsored] CHANGED: Lists now correctly use padding and margin. If you specify too small a margin for the list prefix to fit, then the list prefix is omitted.</li>
</ul>
<p>Contrary to how HTML browsers are displaying list prefixes (e.g. bullets) Core Text cannot draw outside of the laid out lines. This limitation became apparent if you specified a too large list indent margin to fit the prefix. Then the text would spill over the too closely set tab stops and be indented to the next standard tab stop. To prevent this from happening I implemented a check that tests to see if the margin is sufficiently wide to fit the prefix excluding white space.</p>
<p>The new version is tagged and available on the GitHub master branch. A new spec has been added to the CocoaPods public repository.</p>
<p><a href="http://i0.wp.com/www.cocoanetics.com/files/mzl.njurxfww.480x480-75.jpg"><img class="alignnone size-full wp-image-8186" alt="Ecoline Screenshot" src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/4fd1900acc_mzl-njurxfww-480x480-75.jpg" /></a></p>
<p>This release has one <strong>sponsor</strong>, as highlighted. Austrian company <a href="http://www.antiloop.at/">Antiloop</a> is doing Ruby on Rails, iPhone and iPad development. They are big fans of DTCoreText and are using it in several apps, including:</p>
<ul>
<li><span><a href="https://itunes.apple.com/at/app/ecoline/id560497054?mt=8">Ecoline for iPad</a></span></li>
<li><a href="https://itunes.apple.com/at/app/journal/id538764071?mt=8">Journal</a></li>
</ul>
<p>Both apps make great use of rich text and are free downloads on the Apple App Store.</p>
<h3></h3>
<p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=8185&amp;md5=f406d6a40fc2f77372cc065ec9418d93" title="Flattr" target="_blank"><img src="http://txeet.com/wp-content/plugins/wp-o-matic/cache/4fd1900acc_flattr-badge-large.png" alt="flattr this!" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://txeet.com/2013/05/dtcoretext-1-5-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
