<?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></title>
	<atom:link href="http://www.priyaontech.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.priyaontech.com</link>
	<description></description>
	<lastBuildDate>Sun, 02 Dec 2012 06:16:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>SOAP based WebServices integration in an iOS app</title>
		<link>http://www.priyaontech.com/2012/10/soap-based-webservices-integration-in-an-ios-app/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=soap-based-webservices-integration-in-an-ios-app</link>
		<comments>http://www.priyaontech.com/2012/10/soap-based-webservices-integration-in-an-ios-app/#comments</comments>
		<pubDate>Wed, 10 Oct 2012 03:24:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iOS apps]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Webservices]]></category>
		<category><![CDATA[wsdl2objc]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=755</guid>
		<description><![CDATA[This post describes how to invoke a SOAP based web service from your iOS app. The post is not going to dwell into the discussion of SOAP based versus a RESTful service and neither is it intended to be a tutorial on SOAP. For more information on the latter,there are plenty of online resources including [...]]]></description>
			<content:encoded><![CDATA[<p>
	This post describes how to invoke a SOAP based web service from your iOS app. The post is not going to dwell into the discussion of SOAP based versus a RESTful service and neither is it intended to be a tutorial on SOAP. For more information on the latter,there are plenty of online resources including the W3C (<a href="http://www.w3.org/TR/soap/">http://www.w3.org/TR/soap/</a>). This post assumes that your needs require invocation of SOAP based web services from your iOS app.</p>
<p>
	We will use a free online web service h<a href="http://ttp://www.webservicex.net/CurrencyConvertor.asmx?WSDL">ttp://www.webservicex.net/CurrencyConvertor.asmx?WSDL</a>&nbsp;for our example. This is a very simple web service handles currency conversions (surprise!).</p>
<p>
	I recommend a free utility called &quot;<strong>wsdl2objc</strong>&quot; which generates client-side Objective-C code from a SOAP Web Services Definition File (WSDL) file. You can always construct the SOAP request messages and parse the SOAP responses on your own without the tool, however, the tool does a lot of the heavy lifting and is convenient.</p>
<p>
	1. Download the wsdl2objc tool from&nbsp;<a href="http://code.google.com/p/wsdl2objc/">http://code.google.com/p/wsdl2objc/</a></p>
<p>
	2. Run the wsdl2objc tool . Enter the source URL for the WSDL and the destination folder for the generated ObjC files and select &quot;Parse WSDL&quot; button. A screenshot of the same is shown below</p>
<p>
	<img alt="" src="http://www.priyaontech.com/wp-content/uploads/ckfinder/images/screenshot-wsdl2objc.png" style="width: 547px; height: 205px;" /></p>
<p>
	3. Once the &quot;Parse WSDL&quot; process completes, you should see a number of ObjC files in the destination folder.</p>
<p>
	<img alt="" src="http://www.priyaontech.com/wp-content/uploads/ckfinder/images/screenshot-generatedfiles.png" style="width: 621px; height: 285px;" /></p>
<p>
	4. Follow the following steps to integrate the ObjC files into your app.<br />
	4a) Copy the ObjC files that were generated in the previous step to your app project. Make sure you select the &quot;Copy Files Into Destination Folder&quot; option.<br />
	<img alt="Description: Macintosh HD 2 Mountain Lion:Users:mactester:Downloads:post:screenshot-copyfiles.png" src="http://www.priyaontech.com/wp-content/uploads/ckfinder/images/screenshot-copyfiles.png" style="width: 433px; height: 291px;" /></p>
<p>
	4b) If you are using ARC in your project, you will have to disable ARC for the generated ObjC files. To do this, go to the &quot;Compile Sources&quot; section of &quot;Build Phases&quot; of your project and specify the &quot;-fno-objc-arc&quot; compiler flag for all the generated files.<br />
	<img alt="Description: Macintosh HD 2 Mountain Lion:Users:mactester:Downloads:post:screenshot-disableARC.png" src="http://www.priyaontech.com/wp-content/uploads/ckfinder/images/screenshot-disableARC.png" style="width: 433px; height: 160px;" /></p>
<p>
	4c) If you already have libxml2 installed on your system (look for libxml2.dylib in /usr/lib folder), then skip this step. Otherwise, follow the steps in (4c) to install libxml2 library<br />
	4c-1)&nbsp; Install the macports package installer from<a href="http:// http://www.macports.org/install.php ">&nbsp;http://www.macports.org/install.php&nbsp;</a>(if you don&#39;t have it already)<br />
	4c-2) Install libxml2 library by executing the following command in a terminal window<br />
	<code> &nbsp; &nbsp; &nbsp; &nbsp; sudo port install libxml2</code></p>
<p>
	(*Tip* For the build to work for libxml2, make sure you have the command line tools installed for Xcode )</p>
<p>
	4d) In the target &quot;Build settings&quot;, include &quot;-lxml2&quot; in the &quot;Other Linker Flags&quot;&nbsp; property<br />
	<img alt="Description: Macintosh HD 2 Mountain Lion:Users:mactester:Downloads:post:screenshot-linkerflags.png" src="http://www.priyaontech.com/wp-content/uploads/ckfinder/images/screenshot-linkerflags.png" style="width: 422px; height: 111px;" /></p>
<p>
	4e) In the target &quot;Build settings&quot;, include &quot;/usr/include/libxml2&quot; in the &quot;Header Search Paths&quot;&nbsp; property</p>
<p>
	<img alt="Description: Macintosh HD 2 Mountain Lion:Users:mactester:Downloads:post:screenshot-headerfiles.png" src="http://www.priyaontech.com/wp-content/uploads/ckfinder/images/screenshot-headerfiles.png" style="width: 433px; height: 63px;" /></p>
<p>
	4f) Import &quot;CurrencyConvertorSvc.h&quot; file into your implementation file and use the methods provided by this interface to make the appropriate web services calls.</p>
<p>
	The following code snippet demonstrate its usage</p>
<pre style="width: 760px;">
</pre>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	-(<span style="color: #bb2ca2;">void</span>)processRequest</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	{</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #4f8187;">
	<span style="color: #000000;">&nbsp; &nbsp; </span>CurrencyConvertorSoapBinding<span style="color: #000000;">* binding = [</span>CurrencyConvertorSvc<span style="color: #31595d;">CurrencyConvertorSoapBinding</span><span style="color: #000000;">];</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; CurrencyConvertorSoapBindingResponse* response;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #4f8187;">
	<span style="color: #000000;">&nbsp; &nbsp; </span>CurrencyConvertorSvc_ConversionRate<span style="color: #000000;">* request = [[</span>CurrencyConvertorSvc_ConversionRate<span style="color: #3d1d81;">alloc</span><span style="color: #000000;">]</span><span style="color: #3d1d81;">init</span><span style="color: #000000;">];</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #31595d;">
	<span style="color: #000000;">&nbsp; &nbsp; request.</span><span style="color: #4f8187;">FromCurrency</span><span style="color: #000000;"> =&nbsp; </span>CurrencyConvertorSvc_Currency_enumFromString<span style="color: #000000;">(</span><span style="color: #bb2ca2;">self</span><span style="color: #000000;">.</span><span style="color: #4f8187;">fromCurrencyTextField</span><span style="color: #000000;">.</span><span style="color: #703daa;">text</span><span style="color: #000000;">);</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #31595d;">
	<span style="color: #000000;">&nbsp; &nbsp; request.</span><span style="color: #4f8187;">ToCurrency</span><span style="color: #000000;"> = </span>CurrencyConvertorSvc_Currency_enumFromString<span style="color: #000000;">(</span><span style="color: #bb2ca2;">self</span><span style="color: #000000;">.</span><span style="color: #4f8187;">toCurrencyTextField</span><span style="color: #000000;">.</span><span style="color: #703daa;">text</span><span style="color: #000000;"> );</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; response = [binding <span style="color: #31595d;">ConversionRateUsingParameters</span>:request];</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #78492a;">
	<span style="color: #000000;">&nbsp; &nbsp; </span><span style="color: #3d1d81;">dispatch_async</span><span style="color: #000000;">(</span>dispatch_get_main_queue<span style="color: #000000;">(), ^{</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; &nbsp; &nbsp; [<span style="color: #bb2ca2;">self</span> <span style="color: #31595d;">processResponse</span>:response];</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; });</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	}</p>
<div>
	&nbsp;</div>
<p>
	&nbsp;</p>
<pre style="width: 760px;">
</pre>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	-(<span style="color: #bb2ca2;">void</span>) processResponse: (<span style="color: #4f8187;">CurrencyConvertorSoapBindingResponse</span>*)soapResponse</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	{</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; <span style="color: #703daa;">NSArray</span> *responseBodyParts = soapResponse.<span style="color: #4f8187;">bodyParts</span>;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; <span style="color: #bb2ca2;">id</span> bodyPart;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #3d1d81;">
	<span style="color: #000000;">&nbsp; &nbsp; [</span><span style="color: #bb2ca2;">self</span><span style="color: #000000;">.</span><span style="color: #4f8187;">activity</span>stopAnimating<span style="color: #000000;">];</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #3d1d81;">
	<span style="color: #000000;">&nbsp; &nbsp; [</span><span style="color: #bb2ca2;">self</span><span style="color: #000000;">.</span><span style="color: #4f8187;">activity</span>removeFromSuperview<span style="color: #000000;">];</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; <span style="color: #bb2ca2;">@try</span>{</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #008400;">
	<span style="color: #000000;">&nbsp; &nbsp; &nbsp; &nbsp; bodyPart = [responseBodyParts </span><span style="color: #3d1d81;">objectAtIndex</span><span style="color: #000000;">:</span><span style="color: #272ad8;">0</span><span style="color: #000000;">]; </span>// Assuming just 1 part in response which is fine</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; }</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; <span style="color: #bb2ca2;">@catch</span> (NSException* exception)</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; {</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #3d1d81;">
	<span style="color: #000000;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #703daa;">UIAlertView</span><span style="color: #000000;">* alert = [[</span><span style="color: #703daa;">UIAlertView</span>alloc<span style="color: #000000;">]</span>initWithTitle<span style="color: #000000;">:</span><span style="color: #d12f1b;">@&quot;Server Error&quot;</span>message<span style="color: #000000;">:</span><span style="color: #d12f1b;">@&quot;Error while trying to process request&quot;</span>delegate<span style="color: #000000;">:</span><span style="color: #bb2ca2;">self</span>cancelButtonTitle<span style="color: #000000;">:</span><span style="color: #d12f1b;">@&quot;OK&quot;</span>otherButtonTitles<span style="color: #000000;">: </span><span style="color: #bb2ca2;">nil</span><span style="color: #000000;">];</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; &nbsp; &nbsp; [alert <span style="color: #3d1d81;">show</span>];</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #bb2ca2;">return</span>;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; }</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; <span style="color: #bb2ca2;">if</span> ([bodyPart <span style="color: #3d1d81;">isKindOfClass</span>:[<span style="color: #4f8187;">SOAPFault</span> <span style="color: #3d1d81;">class</span>]]) {</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #703daa;">NSString</span>* errorMesg = ((<span style="color: #4f8187;">SOAPFault</span> *)bodyPart).<span style="color: #4f8187;">simpleFaultString</span>;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #3d1d81;">
	<span style="color: #000000;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #703daa;">UIAlertView</span><span style="color: #000000;">* alert = [[</span><span style="color: #703daa;">UIAlertView</span>alloc<span style="color: #000000;">]</span>initWithTitle<span style="color: #000000;">:</span><span style="color: #d12f1b;">@&quot;Server Error&quot;</span>message<span style="color: #000000;">:errorMesg </span>delegate<span style="color: #000000;">:</span><span style="color: #bb2ca2;">self</span>cancelButtonTitle<span style="color: #000000;">:</span><span style="color: #d12f1b;">@&quot;OK&quot;</span>otherButtonTitles<span style="color: #000000;">: </span><span style="color: #bb2ca2;">nil</span><span style="color: #000000;">];</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; &nbsp; &nbsp; [alert <span style="color: #3d1d81;">show</span>];</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; }</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #4f8187;">
	<span style="color: #000000;">&nbsp; &nbsp; </span><span style="color: #bb2ca2;">else</span><span style="color: #bb2ca2;">if</span><span style="color: #000000;">([bodyPart </span><span style="color: #3d1d81;">isKindOfClass</span><span style="color: #000000;">:[</span>CurrencyConvertorSvc_ConversionRateResponse<span style="color: #3d1d81;">class</span><span style="color: #000000;">]]) {</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #4f8187;">
	<span style="color: #000000;">&nbsp; &nbsp; &nbsp; &nbsp; </span>CurrencyConvertorSvc_ConversionRateResponse<span style="color: #000000;">* rateResponse = bodyPart;</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #3d1d81;">
	<span style="color: #000000;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #703daa;">UIAlertView</span><span style="color: #000000;">* alert = [[</span><span style="color: #703daa;">UIAlertView</span>alloc<span style="color: #000000;">]</span>initWithTitle<span style="color: #000000;">:</span><span style="color: #d12f1b;">@&quot;Success!&quot;</span>message<span style="color: #000000;">:[</span><span style="color: #703daa;">NSString</span>stringWithFormat<span style="color: #000000;">:</span><span style="color: #d12f1b;">@&quot;Currency Conversion Rate is %@&quot;</span><span style="color: #000000;">,rateResponse.</span><span style="color: #4f8187;">ConversionRateResult</span><span style="color: #000000;">] </span>delegate<span style="color: #000000;">:</span><span style="color: #bb2ca2;">self</span>cancelButtonTitle<span style="color: #000000;">:</span><span style="color: #d12f1b;">@&quot;OK&quot;</span>otherButtonTitles<span style="color: #000000;">: </span><span style="color: #bb2ca2;">nil</span><span style="color: #000000;">];</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; &nbsp; &nbsp; [alert <span style="color: #3d1d81;">show</span>];</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	&nbsp; &nbsp; }</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">
	}</p>
<div>
	&nbsp;</div>
<p>
	An example project can be downloaded from the following link- <u><strong>&nbsp;<a href="http://www.priyaontech.com/download/14/">SOAP Test</a>.</strong></u>&nbsp;The project has been built using Xcode 4.5.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2012/10/soap-based-webservices-integration-in-an-ios-app/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Supporting Tall Retina Images in iPhone apps</title>
		<link>http://www.priyaontech.com/2012/09/supporting-tall-retina-images-in-iphone-apps/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=supporting-tall-retina-images-in-iphone-apps</link>
		<comments>http://www.priyaontech.com/2012/09/supporting-tall-retina-images-in-iphone-apps/#comments</comments>
		<pubDate>Sat, 22 Sep 2012 19:20:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[568h]]></category>
		<category><![CDATA[640X1136]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[category]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iOS example]]></category>
		<category><![CDATA[iPhone5]]></category>
		<category><![CDATA[UIImage]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=738</guid>
		<description><![CDATA[If you have an iPhone app or are developing one, with the launch of iPhone5 , you&#160; need to ensure that your images scale to support the new taller retina display (640X1136). In case of the launch image, naming the new launch with the suffix &#34;-568h@2x&#34; (e.g.. Default-568h@2x) will ensure that the system picks up [...]]]></description>
			<content:encoded><![CDATA[<p>
	<span style="font-family: Helvetica; font-size: 12px;">If you have an iPhone app or are developing one, with the launch of iPhone5 , you&nbsp; need to ensure that your images scale to support the new taller retina display (640X1136).</span></p>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica;">
	In case of the launch image, naming the new launch with the suffix <em>&quot;-568h@2x&quot;</em> (e.g.. Default-568h@2x) will ensure that the system picks up the right launch image for the iPhone5.</p>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica;">
	However, just adding the &quot;-568h@2x&quot; to the new images is not sufficient to have the system pick the right images for the tall retina display. Here is a very simple category on UIImage that can be used to return the right image. Note that in the category implementation, I assume that all the iPhone5 specific images are named with a suffix of &quot;-568h@2x&quot;.</p>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica; min-height: 14px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica;">
	The &quot;UIImage+iPhone5extension.h&quot; Interface definition</p>
<pre style="margin: 0px; font-size: 11px; font-family: Menlo; color: #bb2ca2;">
<code><span style="color: #78492a;">#import </span>&lt;UIKit/UIKit.h&gt;</code>

<code><span style="color: #bb2ca2;">@interface</span> UIImage (iPhone5extension)</code>

<code>+ (<span style="color: #703daa;">UIImage</span>*)imageNamedForDevice:(<span style="color: #703daa;">NSString</span>*)name;</code>

<code>@end</code></pre>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica; min-height: 14px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica; min-height: 14px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica; min-height: 14px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica;">
	The &quot;UIImage+iPhone5extension.m&quot; file implementation</p>
<pre style="margin: 0px; font-size: 11px; font-family: Menlo; color: #bb2ca2;">
<code><span style="color: #78492a;">#import </span>&quot;UIImage+iPhone5extension.h&quot;</code>

<code><span style="color: #bb2ca2;">@implementation</span> UIImage (iPhone5extension)</code>

<code>+ (<span style="color: #703daa;">UIImage</span>*)imageNamedForDevice:(<span style="color: #703daa;">NSString</span>*)name {</code>

<code> <span style="color: #703daa;">UIImage</span> *returnImage = [<span style="color: #703daa;">UIImage</span> <span style="color: #3d1d81;">imageNamed</span>:[<span style="color: #703daa;">NSString</span> <span style="color: #3d1d81;">stringWithFormat</span>:<span style="color: #d12f1b;">@&quot;%@&quot;</span>, name]];</code>
<code><span style="color: #bb2ca2;">if</span><span style="color: #000000;"> (</span><span style="color: #78492a;">UI_USER_INTERFACE_IDIOM</span><span style="color: #000000;">() == </span>UIUserInterfaceIdiomPhone<span style="color: #000000;">)</span></code>
<code> {</code>
<code><span style="color: #bb2ca2;">if</span><span style="color: #000000;"> (([</span>UIScreen<span style="color: #3d1d81;">mainScreen</span><span style="color: #000000;">].</span>bounds<span style="color: #000000;">.</span>size<span style="color: #000000;">.</span>height<span style="color: #000000;"> * [</span>UIScreen<span style="color: #3d1d81;">mainScreen</span><span style="color: #000000;">].</span>scale<span style="color: #000000;">) &gt;=</span><span style="color: #272ad8;">1136</span><span style="color: #000000;">)</span></code>
<code> {</code>
<code> <span style="color: #bb2ca2;">return</span> [<span style="color: #703daa;">UIImage</span> <span style="color: #3d1d81;">imageNamed</span>:[<span style="color: #703daa;">NSString</span> <span style="color: #3d1d81;">stringWithFormat</span>:<span style="color: #d12f1b;">@&quot;%@-568h@2x&quot;</span>, name]];</code>
<code> }</code>
<code> }</code>

<code> <span style="color: #bb2ca2;">return</span> returnImage;</code>
<code>}</code>

<code>@end</code></pre>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #bb2ca2; min-height: 13px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo; color: #bb2ca2; min-height: 13px;">
	&nbsp;</p>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica;">
	Just include the above files in your project and replace relevant occurrences of [UIImage imageNamed:] call with [UIImage imageNamedForDevice:]. This would ensure that right image is picked up for non-retina,retina and tall retina versions of the resolution.</p>
<p style="margin: 0px; font-size: 12px; font-family: Helvetica; min-height: 14px;">
	&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2012/09/supporting-tall-retina-images-in-iphone-apps/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mobile Video Streaming</title>
		<link>http://www.priyaontech.com/2012/02/mobile-video-streaming/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mobile-video-streaming</link>
		<comments>http://www.priyaontech.com/2012/02/mobile-video-streaming/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 15:50:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[codecs]]></category>
		<category><![CDATA[HLS]]></category>
		<category><![CDATA[HTTP live streaming]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mobile apps]]></category>
		<category><![CDATA[Mobile Monday Ann Arbor]]></category>
		<category><![CDATA[mobile streaming]]></category>
		<category><![CDATA[Progressive Download]]></category>
		<category><![CDATA[RTSP]]></category>
		<category><![CDATA[True Streaming]]></category>
		<category><![CDATA[video streaming]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=635</guid>
		<description><![CDATA[Consumption of mobile streaming video is on an upward trend. Supporting video streaming on mobile platforms presents a lot of challenges, primarily due to the diversity of devices. The decisions include encodings , file formats, streaming protocol etc. Content Distribution Networks (CDNs) and video delivery platforms exist today to alleviate the process so you don&#39;t [...]]]></description>
			<content:encoded><![CDATA[<p>
	Consumption of mobile streaming video is on an upward trend. Supporting video streaming on mobile platforms presents a lot of challenges, primarily due to the diversity of devices. The decisions include encodings , file formats, streaming protocol etc. Content Distribution Networks (CDNs) and video delivery platforms exist today to alleviate the process so you don&#39;t have to worry about the video delivery aspect and can focus on the mobile app that consumes the video.<br />
	However, in order to make an informed choice about the CDNs and their offerings and the video delivery platforms, a background on mobile streaming technologies is imperative.<br />
	I recently gave a presentation at the local Mobile Monday meeting that provides an overview of mobile streaming technologies, mobile platform specific requirements and the challenges. <a href="http://www.priyaontech.com/download/13/">C</a><a href="http://priyaontech.com/ndownloads/13">lick Here </a>to download&nbsp;the presentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2012/02/mobile-video-streaming/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>A Beginners Guide to Developing for a Jailbroken iOS platform</title>
		<link>http://www.priyaontech.com/2012/01/a-beginners-guide-to-developing-for-a-jailbroken-ios-platform/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=a-beginners-guide-to-developing-for-a-jailbroken-ios-platform</link>
		<comments>http://www.priyaontech.com/2012/01/a-beginners-guide-to-developing-for-a-jailbroken-ios-platform/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 04:01:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[class-dump]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Jailbreak]]></category>
		<category><![CDATA[Mobile Substrate]]></category>
		<category><![CDATA[SHSH blobs]]></category>
		<category><![CDATA[Theos]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=619</guid>
		<description><![CDATA[If you are interested in developing software (apps, tweaks) for a jailbroken iOS device, then check out my presentation on&#160;Developing For Jailbroken iOS platform&#160;that I gave at a recent CocoaHeads meeting. This should be a good starting point. The presentation discusses the pros and cons of developing for a jailbroken phone, the various development tools [...]]]></description>
			<content:encoded><![CDATA[<p>
	If you are interested in developing software (apps, tweaks) for a jailbroken iOS device, then check out my presentation on&nbsp;<a href="http://www.priyaontech.com/download/12/"><span style="color:#0000cd;">Developing For Jailbroken iOS platform</span></a>&nbsp;that I gave at a recent CocoaHeads meeting. This should be a good starting point. The presentation discusses the pros and cons of developing for a jailbroken phone, the various development tools (XCode, Theos) and frameworks (Mobile Substrate) that are available for building applications / run-time patches as well as other relevant information on jailbroken phones (SHSH blobs, jailbreak software etc).</p>
<p>
	I own an Apple Developer&#39;s License and build Apple certified apps for the App Store. I pursue this as a hobby. So hopefully the presentation will get you started.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2012/01/a-beginners-guide-to-developing-for-a-jailbroken-ios-platform/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SSH into your jailbroken iDevice without a password</title>
		<link>http://www.priyaontech.com/2012/01/ssh-into-your-jailbroken-idevice-without-a-password/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ssh-into-your-jailbroken-idevice-without-a-password</link>
		<comments>http://www.priyaontech.com/2012/01/ssh-into-your-jailbroken-idevice-without-a-password/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 03:47:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[jailbroken]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[password-less]]></category>
		<category><![CDATA[public key]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[ssh-keygen]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=612</guid>
		<description><![CDATA[If you are developing for/on a jailbroken iPhone or iPad you are more than likely going to have to SSH&#160;into your iDevice a number of times. This includes transferring files to/from the device via SCP. Entering a password every time you have to SSH into the device is very tedious.&#160; Moreover, this becomes imperative if [...]]]></description>
			<content:encoded><![CDATA[<p>
	If you are developing for/on a jailbroken iPhone or iPad you are more than likely going to have to <a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&amp;sektion=1">SSH</a>&nbsp;into your iDevice a number of times. This includes transferring files to/from the device via <a href="http://www.openbsd.org/cgi-bin/man.cgi?query=scp&amp;sektion=1">SCP</a>. Entering a password every time you have to SSH into the device is very tedious.&nbsp; Moreover, this becomes imperative if you need automation scripts to SSH/SCP into the device<br />
	&nbsp;<br />
	This post explains how you can enable public-key authentication with SSH in order to bypass the password entry process. Note that enabling password-less entry into your iDevice is a potential security risk because anyone with access to your system can now access/control your device without any authentication. So if you enable this, be sure to secure access to your systems!</p>
<p>
	The steps to enable public-key authentication with the iPhone/iPad are no different than with any UNIX system.<br />
	&nbsp;<br />
	<u><strong>The following commands need to be executed on the system from which you would be SSHing into your iPhone/iPad. </strong></u><br />
	If you are using a Mac or a Linux system, the commands are executed from the terminal window. &nbsp;If you are using a Windows PC, you would have to run these commands within <a href="http://www.cygwin.com/">Cygwin</a>.&nbsp;</p>
<ul>
<li>
		Go to the .ssh folder</li>
</ul>
<p>
	<kbd>MyMacBook-Pro-2:~.mactester$ cd ~/.ssh</kbd></p>
<ul>
<li>
		Generate public/private key-pair by running the ssh-keygen command. You will be prompted for some information. You can leave the file to save the key as default. Enter a passphrase . You will be prompted for the passphrase when you try to access your key.</li>
</ul>
<p>
	<kbd>MyMacBook-Pro-2:.ssh mactester$ ssh-keygen -t dsa<br />
	Generating public/private dsa key pair.<br />
	Enter file in which to save the key (/Users/mactester/.ssh/id_dsa):<br />
	Enter passphrase (empty for no passphrase):<br />
	Enter same passphrase again:<br />
	Your identification has been saved in /Users/mactester/.ssh/id_dsa.<br />
	Your public key has been saved in /Users/mactester/.ssh/id_dsa.pub.</kbd></p>
<ul>
<li>
		A public/private key pair would have been generated in the .ssh folder. The .pub file corresponds to the public key.</li>
</ul>
<p>
	<kbd>MyMacBook-Pro-2:.ssh mactester$ ls<br />
	id_dsa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id_dsa.pub</kbd></p>
<ul>
<li>
<p>
			Copy the PUBLIC KEY over to the ~/.ssh folder of your iPhone/iPad (in this example, the IPAddress of my device is 192.168.1.10)</p>
</li>
</ul>
<p>
	<kbd>MyMacBook-Pro-2:.ssh mactester$ scp id_dsa.pub </kbd><a href="mailto:root@192.168.1.113:~/.ssh"><kbd>root@192.168.1.10:~/.ssh</kbd></a></p>
<p>
	<u><strong>The following commands need to be executed on your iPhone/iPad.</strong></u><br />
	For this, you can SSH into the iDevice&nbsp; (You would still be prompted for a password at this stage) or &nbsp;you can type in the following commands directly in the terminal application window of your jailbroken iDevice</p>
<ul>
<li>
		Save the public key as &ldquo;authorized_keys&rdquo;. If you already have public keys associated with other systems stored on your device, be sure to append the public key to &ldquo;authorized_keys2&rdquo; as shown in the example below. Make sure you set the right access permissions on the key.</li>
</ul>
<p>
	<kbd>MyiPhone:~root# cd ~/.ssh<br />
	MyiPhone:~/.ssh root# cat id_dsa.pub &gt;&gt; authorized_keys2<br />
	MyiPhone:~/.ssh root#chmod 0600 authorized_keys2</kbd></p>
<p>
	<font class="Apple-style-span" face="monospace"><span style="font-family:times new roman,times,serif;"><span style="font-size:16px;">That&rsquo;s it. The next time you SSH into your iDevice, you will not be prompted for a password.</span></span></font><br />
	&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2012/01/ssh-into-your-jailbroken-idevice-without-a-password/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Generating HTTP Live Streaming Content for iOS Devices</title>
		<link>http://www.priyaontech.com/2011/11/generating-http-live-streaming-content-for-ios-devices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=generating-http-live-streaming-content-for-ios-devices</link>
		<comments>http://www.priyaontech.com/2011/11/generating-http-live-streaming-content-for-ios-devices/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 03:45:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[adaptive streaming]]></category>
		<category><![CDATA[DASH]]></category>
		<category><![CDATA[Dynamic Streaming]]></category>
		<category><![CDATA[free tools]]></category>
		<category><![CDATA[handbrake]]></category>
		<category><![CDATA[HTTP live streaming]]></category>
		<category><![CDATA[HTTP progressive download]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac tools]]></category>
		<category><![CDATA[mediafilesegmenter]]></category>
		<category><![CDATA[mobile streaming]]></category>
		<category><![CDATA[Smooth Streaming]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[variantplaylistcreator]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=576</guid>
		<description><![CDATA[iOS devices support the delivery of multimedia content via HTTP progressive download or HTTP Live streaming&#160;. As per Apple&#39;s guidelines to App developers, &#34;If your app delivers video over cellular networks, and the video exceeds either 10 minutes duration or 5 MB of data in a five minute period, you are required to use HTTP [...]]]></description>
			<content:encoded><![CDATA[<p>
	iOS devices support the delivery of multimedia content via HTTP progressive download or HTTP Live streaming&nbsp;. As per Apple&#39;s guidelines to App developers, &quot;<em>If your app delivers video over cellular networks, and the video exceeds either 10 minutes duration or 5 MB of data in a five minute period, you are required to use HTTP Live Streaming. (Progressive download may be used for smaller clips.)</em>&quot;.&nbsp;</p>
<p>
	This article discusses a method for generating HTTP live streaming content using <strong>freely available tools.</strong> If your needs are large scale, then you may need to explore commercial encoders such as the Sorenson Squeeze 7 or other commercial video platforms. This article does not describe commercial video platforms.&nbsp;</p>
<h2>
	<strong>HTTP Live Streaming &#8211; A (Very) Brief Overview:</strong></h2>
<p>
	&nbsp;In HTTP Live streaming, the multimedia stream is segmented into continuous media segments wherein each media chunk/segment holds enough information that would enable decoding of the segment. A playlist file is a list of media URIs, with each URI pointing to a media segment. The media URI&rsquo;s are specified in the order of playback and the duration of the playlist file is the sum of the durations of the segments. Media playlist files have an &ldquo;.m3u8&rdquo; extension. The servers host the media segments and the playlist file. In order to playback content, the media streaming app on the device fetches the playlist file and the media segments based on the media URIs specified in the playlist . The transport protocol is HTTP.<br />
	Now, you can have multiple encodings/renditions of the same multimedia content. In this case, you can specify a variant playlist file that will contain URIs to the playlist files corresponding to each rendition of content. In this case, the iDevice can switch between the various encodings thereby adapting to changing network bandwidth conditions. HTTP Live Streaming is essentially a form of adaptive streaming. You can get more details from the IETF I-D available <a href="http://tools.ietf.org/html/pantos-http-live-streaming-07)">here</a>.&nbsp;Other well-known adaptive streaming protocols include that of <a href="http://learn.iis.net/page.aspx/684/smooth-streaming-transport-protocol">Microsoft&rsquo;s Smooth Streaming</a>&nbsp;, <a href="http://www.adobe.com/products/httpdynamicstreaming/">Adobe&rsquo;s Dynamic Streaming</a>&nbsp;&nbsp;and the&nbsp;<a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57623">DASH</a>&nbsp;standards specification .</p>
<h2>
	<strong>Encoding the content using Handbrake:</strong></h2>
<ol>
<li>
<p cclass="Code">
			Among the free tools, I&rsquo;ve found <a href="http://handbrake.fr/">Handbrake</a> to be the best in terms of performance and supported formats. Versions are available for Windows and the Mac. In my experience, the Mac version stalled a few times during encoding and at times hogging all the CPU cores on my Macbook Pro. The Windows version worked flawlessly.</p>
</li>
<li>
<p cclass="Code">
			&nbsp;Use the following encoding guidelines provided by Apple to encode your content. If you expect your app users to be able to access the content under a variety of network conditions (wifi, cellular etc), you would want to support multiple encodings of the content .</p>
</li>
</ol>
<p>
	&nbsp;<br />
	&nbsp;<img alt="" src="http://www.priyaontech.com/wp-content/uploads/ckfinder/images/encodings-livestreaming.png" style="width: 600px; height: 579px; " /><br />
	&nbsp;</p>
<h2>
	<strong>The Tools for generating content for HTTP Live Streaming :</strong></h2>
<p>
	Once you have encoded your content, you would have to prepare it for delivery via HTTP live streaming. There are a command line utilities available for the Mac that can be downloaded for free from&nbsp; <a href="http://connect.apple.com/">http://connect.apple.com/</a> (You would need an Apple developer Id for installing the tools, which again is free). You would need the following tools &ndash;</p>
<ul>
<li>
<p>
			<strong>mediafilesegmenter</strong></p>
</li>
<li>
<p>
			<strong>variantplaylistcreator</strong></p>
</li>
</ul>
<p>
	Once installed, they would be available in<em>/usr/bin</em> directory of your Mac.</p>
<h2>
	&nbsp;<strong>Segmenting your encoded content:</strong></h2>
<p>
	Use the <em>mediafilesegmenter tool</em> to segment the encoded media files. <u>&nbsp;You would need to be &ldquo;root&rdquo; user in order to run the tool.</u><br />
	&nbsp;<br />
	<code><em>/usr/bin/mediafilesegmenter [-b | -base-url &lt;url&gt;]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-t | -target-duration duration]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-f | -file-base path] [-i | -index-file fileName]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-I | -generate-variant-plist]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-B | -base-media-file-name name] [-v | -version]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-k | -encrypt-key file-or-path]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-K | -encrypt-key-url &lt;url&gt;]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-J | -encrypt-iv [random | sequence]]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-key-rotation-period period]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-n | -base-encrypt-key-name name]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-encrypt-rotate-iv-mbytes numberMBytes]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[-l | -log-file file] [-F | -meta-file file]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-y | -meta-type [picture | text | id3]]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-M | -meta-macro-file file]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-x | -floating-point-duration] [-q | -quiet]</em><br />
	<em>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[-a | -audio-only] [-V | -validate-files] [file]</em><br />
	&nbsp;</code><br />
	&nbsp;</p>
<ul>
<li>
		Open a terminal window on your Mac.</li>
<li>
		Type &ldquo;<em>man mediafilesegmenter&rdquo;</em>at the command link prompt to get a full description of the usage of the tool.</li>
</ul>
<p>
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>&lt;command prompt&gt;$ man mediafilesegmenter</code></em><br />
	&nbsp;</p>
<ul>
<li>
		An example of using the tool to segment a media file named &ldquo;<em>mymedia_hi.mp4</em>&rdquo; &nbsp;is as follows-</li>
</ul>
<p>
	<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>&nbsp;&lt;command prompt&gt;$ </code></em><code>sudo /usr/bin/mediafilesegmenter -I -f <em>mymedia_hi -f mymedia_hi.mp4 </em></code><br />
	You will be prompted for the root password (which you must provide)<br />
	&nbsp;<br />
	In the example, the media file &ldquo;<em>mymedia_hi.mp4</em>&rdquo; is assumed to be present in the current directory from which the command is executed. Otherwise, be sure to specify the path to the media file. The segments will be generated in a subfolder named &ldquo;<em>mymedia_hi</em>&rdquo; within the current directory.<br />
	&nbsp;<br />
	<code><em>&lt;command prompt&gt;$ cd mymedia_hi</em><br />
	<em>&lt;command prompt&gt;$ ls</em><br />
	<em>&lt;command prompt&gt;$</em><br />
	<em>fileSequence0.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence14.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence6.ts</em><br />
	<em>fileSequence1.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence15.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence7.ts</em><br />
	<em>fileSequence10.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence2.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence8.ts</em><br />
	<em>fileSequence11.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence3.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence9.ts</em><br />
	<em>fileSequence12.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence4.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prog_index.m3u8</em><br />
	<em>fileSequence13.ts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileSequence5.ts</em></code><br />
	&nbsp;<br />
	The <strong>fileSequence*.ts</strong> files correspond to the media segments which are MEPG2 transport streams. T<strong>he prog_index.m3u8</strong> is the playlist file corresponding to the segmented media file and specifies the media URIs to the segments.<br />
	&nbsp;</p>
<ul>
<li>
		The &ldquo;-I&rdquo; option that I specified in the example command will generate a <strong>variant plist file.</strong> &nbsp;The variant plist file would be subsequently required to generate the variant play list file &nbsp;as described in the next step. You don&rsquo;t need this option if you don&rsquo;t plan on streaming multiple encodings of your content.</li>
</ul>
<p>
	&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Assuming you are in the &ldquo;<em>mymedia_h</em>i&rdquo; folder, type the following to get the list of generated variant plist files.<br />
	&nbsp;<br />
	<code><em>&lt;command prompt&gt;$ cd ..</em><br />
	<em>&lt;command prompt&gt;$ ls *.plist</em><br />
	<em>&lt;command prompt&gt;$</em><br />
	<em>mymedia_hi.plist</em></code><br />
	&nbsp;</p>
<h2>
	<strong>Generating variant playlist file : </strong></h2>
<p>
	<strong>If you do not intend to stream multiple renditions of the content , you can skip this step and proceed to the &ldquo;Streaming the Content&rdquo; section.</strong></p>
<ul>
<li>
<p>
			Follow the procedures specified in &ldquo;<em>Segmenting your encoded content</em>&rdquo; section&nbsp;to segment every encoding of the media content that you wish to stream.&nbsp; For example, if you plan on supporting three renditions of your media content for high, medium and low network bandwidth conditions respectively, you will have to use the &ldquo;<em>mediafilesegmenter</em>&rdquo; tool to segment each of those renditions.</p>
</li>
<li>
<p>
			Use the tool <em>variantplaylistcreator</em> for generating the variant playlist file.</p>
</li>
</ul>
<p>
	<code><em>&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/ variantplaylistcreator [-c | -codecs-tags] [-o | -output-file fileName]</em><br />
	<em>&nbsp;&nbsp; &nbsp;[-v | -version] [&lt;url&gt; &lt;variant.plist&gt; ...</em><em>]</em></code><br />
	&nbsp;</p>
<ul>
<li>
<p>
			Type &ldquo;<em>man variantplaylistcreator</em>&rdquo; at the command link prompt to get a full description of the usage of the tool.</p>
</li>
</ul>
<p>
	<code><em>&nbsp;&nbsp; &nbsp;&lt;command prompt&gt;$ man variantplaylistcreator</em></code><br />
	&nbsp;</p>
<ul>
<li>
<p>
			An example of using the tool to generate a variant playlist file named &ldquo;<em>mymedia_all.m3u8</em>&rdquo;&nbsp; is as follows-</p>
</li>
</ul>
<p>
	<code><em>&lt;command prompt&gt;$ sudo /usr/bin/variantplaylistcreator -o mymedia_all.m3u8 http://mywebserver/mymedia_lo/prog_index.m3u8 mymedia_lo.plist http://mywebserver/mymedia_med/prog_index.m3u8 mymedia_med.plist http://mywebserver/mymedia_hi/prog_index.m3u8 mymedia_hi.plist </em><br />
	&nbsp;</code><br />
	You will be prompted for the root password (which you must provide)<br />
	&nbsp;<br />
	The URL that is associated with the <em>prog_index.m3u8</em> files for each encoding corresponds to the URL of the webserver that will be used for hosting/streaming the media content.<br />
	&nbsp;</p>
<ul>
<li>
<p>
			The generated variant play list file &ldquo;<em>mymedia_all.m3u8</em>&rdquo; will specify the URIs to playlist files (<em>prog_index.m3u8</em>) corresponding to each encoding of the media file. The contents of the file (viewable using your favorite text editor) should be something like this&nbsp;</p>
</li>
</ul>
<p>
	<code>#EXTM3U<br />
	#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=87872<br />
	<em>http://mywebserver/mymedia_lo/prog_index.m3u8 </em><br />
	#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=100330<br />
	<a href="http://mywebserver/mymedia_med/prog_index.m3u8"><em>http://mywebserver/mymedia_med/prog_index.m3u8</em></a><br />
	#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1033895<br />
	<em>http://mywebserver/mymedia_hi/prog_index.m3u8</em></code><br />
	&nbsp;</p>
<h2>
	<strong>Streaming the Content:</strong></h2>
<ol>
<li>
<p>
			Upload the variant playlist file (<em>mymedia_all.m3u8 in our example)</em> and ALL the sub-folders that contain the generated segments for every rendition of the media file to the web server that will stream the content. You do not have to copy the media files (eg .mp4 files) from which the segments were generated. You could host it on any regular web server such as the Apache Webserver or Microsoft&#39;s IIS. For instance, on an Apache server on Windows, you would copy all this to the &ldquo;<em>htdocs</em>&rdquo; folder. This would be something like this-&nbsp; <em>c:\Program Files(x86)\Apache Software Foundation\Apache2.2\htdocs</em>.</p>
</li>
<li>
<p>
			<u>Typically you would need to make no changes to the web server in order to stream the content</u>. In some cases, you may need to update the &nbsp;webserver configuration file to add support for the <em>.m3u8</em> MIME type . I had to do this for my IIS web server where I associated the&nbsp;<em>.m3u8</em> extension with &ldquo;<em>application/octet-stream</em>&rdquo; MIME type.&nbsp;</p>
</li>
</ol>
<p>
	<strong>Note</strong>: If your needs are large scale, you would employ the services of a Content Distribution Network (CDN) such as Akamai to publish and distribute your content.</p>
<h2>
	<strong>Accessing the Content from your iDevice:</strong></h2>
<ol>
<li>
<p>
			In order to access the streaming content on your iDevice, the media URL must point to the appropriate playlist (<em>.m3u8</em>) file. This would correspond to either the Variant playlist file if you support multiple encodings of the content (<em>mymedia_all.m3u8</em> in our example) or the <em>prog_index.m3u8</em> playlist file for the specific encoding of the content.</p>
</li>
</ol>
<p>
	<em>Example: http://&lt;webserver&gt;/&lt;path to the .m3u8 playlist file&gt;</em><br />
	&nbsp;<br />
	If you do not have a streaming app, you can open the URL in the Safari browser on your device. If everything goes well, the stream should start playing on your device.<br />
	&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2011/11/generating-http-live-streaming-content-for-ios-devices/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>“Yes Siree!” – My experience with Siri on the iPhone 4S</title>
		<link>http://www.priyaontech.com/2011/10/%e2%80%9cyes-siree%e2%80%9d-%e2%80%93-my-experience-with-siri-on-the-iphone-4s/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e2%2580%259cyes-siree%25e2%2580%259d-%25e2%2580%2593-my-experience-with-siri-on-the-iphone-4s</link>
		<comments>http://www.priyaontech.com/2011/10/%e2%80%9cyes-siree%e2%80%9d-%e2%80%93-my-experience-with-siri-on-the-iphone-4s/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 15:14:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone 4S]]></category>
		<category><![CDATA[Siri]]></category>
		<category><![CDATA[voice activation]]></category>
		<category><![CDATA[voice recognition]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=563</guid>
		<description><![CDATA[Like the million plus who pre-ordered their iPhone4S, I anxiously waited for my shiny new phone.&#160; And like most of them, I was most curious about&#160; Siri- The smart new voice recognition system unique to the iPhone4S. I&#8217;ve not had much luck with voice recognition/voice activation systems in the past- Even the rudimentary voice-control systems [...]]]></description>
			<content:encoded><![CDATA[<p>
	Like the million plus who pre-ordered their iPhone4S, I anxiously waited for my shiny new phone.&nbsp; And like most of them, I was most curious about&nbsp; Siri- The smart new voice recognition system unique to the iPhone4S. I&rsquo;ve not had much luck with voice recognition/voice activation systems in the past- Even the rudimentary voice-control systems like a voice-activated dialer have been quite frustrating to say the least. I was interested in how well Siri would fare with my accent (quite frankly, I don&rsquo;t know what accent I have- It&rsquo;s a blend) and how fast Siri would respond to my commands. &nbsp;&nbsp;Also, if Siri cares about bad (English) grammar (not that I have it!).<br />
	Voice and Natural Language processing is highly resource-intensive and the voice recognition features found on resource constrained devices rely on servers in the cloud to do the processing. This means that there is network latency to be factored into the response times. So I was curious to see if Siri works in offline mode for if it did, that would be stupendous!!<br />
	&nbsp;<br />
	So when my phone arrived today, the Siri was pretty much the first feature I checked out.<br />
	OK- So not surprisingly,&nbsp;<strong>Siri requires an Internet connection</strong>. It sends your commands to servers in the cloud (iCloud?) to do the processing. That said, depending on the speed of the connection, the response times can vary.<br />
	&nbsp;<br />
	And it responds in a woman&#39;s voice. I&#39;m not sure why thats the case, but most voice command systems , including my GPS do. (Update: I recently found this article that might have some answers on this topic-&nbsp;http://edition.cnn.com/2011/10/21/tech/innovation/female-computer-voices/)</p>
<p>	&nbsp;<br />
	First, I started off with the &ldquo;typical&rdquo; questions. Here are a few of them&nbsp; -<br />
	&nbsp;<br />
	<strong><em>Me</em></strong><em>: &ldquo;I am thinking of lunch at 12:00 today</em><br />
	<strong><em>Siri</em></strong><em>: I found 16 restaurants whose reviews mention lunch. &hellip;14 of them are fairly close to you.</em><br />
	&nbsp;<br />
	<strong><em>Me</em></strong><em>: &ldquo;I have to remember to pick up my daughter at 5:30PM today&rdquo;</em><br />
	<strong><em>Siri</em></strong><em>: What time shall I remind you?</em><br />
	<strong><em>Me</em></strong><em>: 5:30 PM</em><br />
	<strong><em>Siri</em></strong><em>: Shall I set the reminder for 5:30 today?</em></p>
<p>
	<strong><em>Me</em></strong><em>: What are new movie releases in the US?</em><br />
	<strong><em>Siri</em></strong><em>:&nbsp; I found a number of movie theaters in Washington</em><br />
	&nbsp;<br />
	And it provided me with a list of movie theaters. But why Washington??That&rsquo;s no where&nbsp; close to where I live!<br />
	&nbsp;<br />
	Overall, it did a decent job of understanding my accent. In fact, it did something which most of my American friends never do- pronounce my husband&#39;s last name (17 letters long) correctly!! It won brownie points right there!<br />
	&nbsp;<br />
	It was not perfect- it didn&rsquo;t accurately recognize words a couple of times but still understood the intent which is probably the more important part.<br />
	The Artificial Intelligence system relies on certain keywords to accomplish its tasks- For instance, &ldquo;Remind&rdquo; or &ldquo;Remember&rdquo; for setting up reminders . So a command like &ldquo;I<em>have to pick up my daughter at 5:30 today</em>&rdquo; does not evoke a response to set up the reminder. Instead, it responds &ldquo;<em>I don&rsquo;t know want you mean by &ldquo;pick up my daughter at 5:30 today&rsquo;</em>&rdquo;. &nbsp;Since it leverages the information about your contacts, location , address books etc to do the processing and customize the results, the accuracy of responses may vary.<br />
	&nbsp;<br />
	Then as any normal person would do, for the fun of it, I decided test a slew of ambiguous or weird questions &ndash;<br />
	<strong><em>Me</em></strong><em>: Are you my friend?</em><br />
	<strong><em>Siri</em></strong><em>: No comment!</em><br />
	&nbsp;<br />
	<strong><em>Me</em></strong><em>: I am bored. What should I do?</em><br />
	<strong><em>Siri</em></strong><em>: I&rsquo;ll see what I can do to entertain you.</em><br />
	&nbsp;<br />
	I then eagerly waited expecting it to for instance, provide me a list of movies or something- It didn&rsquo;t do anything.<br />
	&nbsp;<br />
	<strong><em>Me</em></strong><em>: I am sleepy</em><br />
	<strong><em>Siri</em></strong><em>:&nbsp; I hope you are not driving!</em><br />
	&nbsp;<br />
	Siri is funny too!<br />
	&nbsp;<br />
	My initial reaction is that I am quite impressed with Siri. It handles the routine commands very well. Unlike previous voice command systems, I will be using it often. Over time, I&rsquo;ll find out if it learns and responds better. Not sure if it&rsquo;s a good thing, but long term, I can see this becoming a companion to a loner or a sounding board of sorts. When the APIs to Siri go public, this can open up a whole range of new possibilities to the developer community. For example, an app that takes images of you in your new dress and responds to the question- &ldquo;<em>Does this dress make me look fat?</em>&rdquo; and pat response is &nbsp;<em>&ldquo;Yes Siree!!</em>&rdquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2011/10/%e2%80%9cyes-siree%e2%80%9d-%e2%80%93-my-experience-with-siri-on-the-iphone-4s/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>On Jailbreaking my iOS4.3.5 iPhone4..</title>
		<link>http://www.priyaontech.com/2011/09/on-jailbreaking-my-ios4-3-5-iphone4/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=on-jailbreaking-my-ios4-3-5-iphone4</link>
		<comments>http://www.priyaontech.com/2011/09/on-jailbreaking-my-ios4-3-5-iphone4/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 03:49:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[apt-get]]></category>
		<category><![CDATA[cydia]]></category>
		<category><![CDATA[cydia crash]]></category>
		<category><![CDATA[install third party apps]]></category>
		<category><![CDATA[installing third party apps]]></category>
		<category><![CDATA[iOS4.3.5]]></category>
		<category><![CDATA[iPhone4]]></category>
		<category><![CDATA[Jailbreak]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[redsn0w]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tethered]]></category>
		<category><![CDATA[tethered jailbreak]]></category>
		<category><![CDATA[untethered jailbreak]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=512</guid>
		<description><![CDATA[Earlier this week, I jailbroke my iPhone4 iOS4.3.5 device. The jailbreak solution that is currently available for iOS4.3.5 is tethered jailbreak. If you are not familiar with &#8220;Tethered Jailbreak&#8221;, it essentially means that rebooting the jailbroken device would require it to be connected /tethered to the PC/MAC. This is of course not ideal but under [...]]]></description>
			<content:encoded><![CDATA[<p>
	Earlier this week, I jailbroke my iPhone4 iOS4.3.5 device. The jailbreak solution that is currently available for iOS4.3.5 is tethered jailbreak. If you are not familiar with &ldquo;<em>Tethered Jailbreak</em>&rdquo;, it essentially means that rebooting the jailbroken device would require it to be connected /tethered to the PC/MAC. This is of course not ideal but under the circumstances, this was my only option (And no-I couldn&rsquo;t downgrade to iOS 4.3.3 for various reasons which are not directly relevant to this post).<br />
	&nbsp;</p>
<h2>
	Installing the jailbreak Software</h2>
<p>
	I used <a href="http://www.redsn0w.us/">Redsn0w V0.9.8b3</a> jailbreak tool. Follow the instructions provided <a href="http://www.redsn0w.us/2011/07/jailbreak-435-iphone-4-3gs-ipod-touch.html">here</a>.&nbsp;The process is very straightforward.<br />
	&nbsp;</p>
<h3>
	Cydia Crashing Issue</h3>
<p>
	Although the jailbreak completed successfully, the Cydia icon was white and it crashed as soon as I clicked on it. To get around it, I rebooted the device by running Redsn0w in tethered mode. Be sure to check the &ldquo;Just boot tethered right now&rdquo; option on Redsn0w .&nbsp;Once the device rebooted, the Cydia app started working. No more crashes. I was able to download and install apps. &nbsp;Unfortunately, some of them required a reboot and I had to go through the tethered reboot process again<br />
	The &nbsp;<a href="http://code.google.com/p/mobileterminal/downloads/detail?name=MobileTerminal_520-1_iphoneos-arm.deb">MobileTerminal</a>, <a href="http://cydia.saurik.com/openssh.html">OpenSSH</a> and Aptupdate for SBSettings were among the packages that I installed. These packages will come in handy as you will see below.<br />
	&nbsp;</p>
<h2>
	Installing third party apps directly</h2>
<p>
	Next, I wanted to install a third party app directly to the phone. The third party app was not available through Cydia sources or the AppStore.<br />
	For this,&nbsp;I copied the .app file corresponding to my app into the <em>/Applications</em> folder on the iPhone , created the <em>/var/mobile/Documents</em> folder and updated the file permissions by running the commands listed below from a terminal window on my MAC. Ofcourse, &nbsp;I substituted &quot;IPhoneIPAddress&quot; with the IPAddress of my jailbroken phone while executing the commands</p>
<pre>
scp -r MyApp.app root@&lt;iPhoneIPAddress&gt;:/Applications/
ssh root@&lt;iPhoneIPAddress&gt;:/&#39;chmod -R 755 /Applications/MyApp.app&#39;
ssh root@&lt;iPhoneIPAddress&gt;:/ &#39;mkdir /var/mobile/Documents;chmod -R 777 /var/mobile/Documents&#39;</pre>
<p>
	<strong>Note</strong>: Creation of the Documents folder is required only the first time (unless you delete it between installations)<br />
	I rebooted the device in tethered mode. When the device rebooted, the app was ready. I could launch it and run it.<br />
	So far, so good until..</p>
<p>
	I tried to launch Cydia app, it crashed. All the other apps on the phone worked as normal.<br />
	&nbsp;</p>
<h3>
	Cydia Crashing Issue..Again.</h3>
<p>
	So I rebooted the phone again in tethered mode. &nbsp;This time the reboot had no effect. The other option was to re-jailbreak but I did not want to do that just yet.<br />
	Instead, I uninstalled and re-install the Cydia app by running the following commands from the terminal window of my MAC. &nbsp;I substituted &quot;IPhoneIPAddress&quot; with the IPAddress of my jailbroken phone while executing the commands<br />
	&nbsp;</p>
<pre>
ssh root@&lt;IPhoneIPAddress&gt;
apt-get remove Cydia
killall &ndash;HUP SpringBoard
apt-get install Cydia
killall &ndash;HUP SpringBoard</pre>
<p>
	&nbsp;<br />
	<strong>Note</strong>: The AptUpdate for SBSettings that I installed earlier automatically installed the apt tools .<br />
	Once I did that, cydia was back up and running again. I currently have version 1.1.1 of Cydia on the phone. Everything else continues to work as expected.<br />
	Now, its appears that installing the third party app caused Cydia to crash but it is unclear to me why that was the case because Cydia started working again after re-installation and the third party app continues to work as well. In any case, now I know what I should do to resolve the problem should it resurface but its less than ideal.<br />
	&nbsp;</p>
<h2>
	In Conclusion..</h2>
<p>
	With the number of reboots that I had to do, the tethering is especially tedious. If you are considering jailbreaking your iOS device, I would recommend that you refrain from updating it to 3.4.5. for now and wait for an untethered release of jailbreaking software if possible.<br />
	&nbsp;<br />
	&nbsp;<br />
	&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2011/09/on-jailbreaking-my-ios4-3-5-iphone4/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Intro to SQLite for iOS developers</title>
		<link>http://www.priyaontech.com/2011/09/intro-to-sqlite-for-ios-developers/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=intro-to-sqlite-for-ios-developers</link>
		<comments>http://www.priyaontech.com/2011/09/intro-to-sqlite-for-ios-developers/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 06:31:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[iOS apps]]></category>
		<category><![CDATA[SQLite Database]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=499</guid>
		<description><![CDATA[The SQLite engine is a lightweight library optimized for managing relational databases in embedded environments. It is supported on the iOS platform. Described below is a set of basic SQLite queries that will come in handy if you need /choose to use the C-style SQLite APIs to directly manipulate your database tables. It is intended [...]]]></description>
			<content:encoded><![CDATA[<p>
	The SQLite engine is a lightweight library optimized for managing relational databases in embedded environments. It is supported on the iOS platform. Described below is a set of basic SQLite queries that will come in handy if you need /choose to use the C-style SQLite APIs to directly manipulate your database tables. It is intended for folks who are noobs to the database world. Direct manipulation using SQLite APIs is an alternative to using the high-level Object Oriented Core Data wrapper framework.</p>
<p>
	Note: The sample code snippets are intended for reference purposes. You should include appropriate error handling and any relevant synchronization support depending on the needs of your application. If you are interested in the details of the routines, please refer to the sqlite3.h header file.</p>
<h2>
	<strong><span style="color:#00f;">Adding SQLite Support<br />
	</span></strong></h2>
<p>
	SQLite libraries is available as part of the iOS SDK. &nbsp;Include the libsqlite3.0.dylib to your project using the usual procedure, and add<br />
	<strong>#import &lt;sqlite3.h&gt;</strong>&nbsp;<sqlite3.h> to the relevant header files.<br />
	<strong>Note</strong>: The following code snippets assume an ivar named &ldquo;dbHandle&rdquo; corresponding to the database Handle defined in your header file as follows-<br />
	<span style="color:#4b0082;">sqlite3</span>* dbHandle; </sqlite3.h></p>
<h2>
	<sqlite3.h><strong><span style="color:#0000cd;">Opening the connection to the database</span></strong></sqlite3.h><br />
	<strong><span style="color:#0000cd;"> </span></strong></h2>
<p>
	<sqlite3.h> The following code snippet creates a database file named &ldquo;AddressBook.sqlite&rdquo; within the Documents folder of the application. If the database exists, it opens a connection to the database.</sqlite3.h></p>
<pre class="brush:java;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
    NSString* const  dbFileName = @&quot;AddressBook.sqlite&quot;;
    NSArray *paths =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString* dbFile = [documentsDirectory stringByAppendingPathComponent:dbFileName];

    sqlite3_config(SQLITE_CONFIG_SERIALIZED);

    int result = sqlite3_open([dbFile UTF8String], &amp;dbHandle);
    if (result != SQLITE_OK) {
	NSLog(@&quot;Failure in connecting to the database with result %d&quot;,result);
&nbsp;&nbsp;&nbsp;&nbsp;}
    else {
        NSLog(@ &quot;Succesfully opened connection to DB&quot;) ;
    }
</pre>
<h2>
	<strong><span style="color:#0000cd;">Creating a table</span></strong></h2>
<p>
	The following code snippet creates a table named &ldquo;Contacts&rdquo; in the &ldquo;AddressBook.sqlite&rdquo; database. Every row in the table corresponds to a &ldquo;Contact&rdquo; and has the following columns-</p>
<table border="1" cellpadding="7" cellspacing="0" width="575">
<colgroup>
<col style="text-align: center; " width="272" />
<col style="text-align: center; " width="273" />
	</colgroup>
<tbody>
<tr valign="TOP">
<td width="272">
<p style="text-align: center; ">
					FirstName</p>
</td>
<td width="273">
<p style="text-align: center; ">
					VARCHAR (non-null)</p>
</td>
</tr>
<tr valign="TOP">
<td width="272">
<p style="text-align: center; ">
					LastName</p>
</td>
<td width="273">
<p style="text-align: center; ">
					VARCHAR (null)</p>
</td>
</tr>
<tr valign="TOP">
<td width="272">
<p style="text-align: center; ">
					Email</p>
</td>
<td width="273">
<p style="text-align: center; ">
					VARCHAR (null)</p>
</td>
</tr>
<tr valign="TOP">
<td width="272">
<p style="text-align: center; ">
					Telephone</p>
</td>
<td width="273">
<p style="text-align: center; ">
					VARCHAR (null)</p>
</td>
</tr>
</tbody>
</table>
<p>
	&nbsp;</p>
<pre class="brush:java;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
    char* error;
    const char *sqlQuery = &quot;CREATE TABLE Contacts (FirstName TEXT NOT NULL, LastName TEXT, Email TEXT, Telephone TEXT,PRIMARY KEY (FirstName))&quot;;
    int result = sqlite3_exec(dbHandle, sqlQuery, NULL, NULL, &amp;error);
    if (result != SQLITE_OK) {
        NSLog(@ &quot;Failure in creating the table with result %d&quot;,result) ;
    }
    else {
        NSLog(@ &quot;Succesfully created table &quot;) ;
    }
</pre>
<h2>
	<strong><span style="color:#0000cd;">Common queries on a table<br />
	</span></strong></h2>
<p>
	Query execution follows the following basic sequence &ndash;</p>
<ul>
<li>
		&ldquo;<strong>Prepare</strong>&rdquo; the SQL query for executing using the sqlite3_prepare_v2() call. A SQL query can be comprised of multiple SQL statements, That said, the &ldquo;preparation&rdquo; routines only compile the first SQL statement in the query so I typically specify only one statement within a query.</li>
<li>
		Optionally,&ldquo;<strong>Bind</strong>&rdquo; SQL query arguments with values using the sqlite3_bind_*() commands. Binding would be required only if there are arguments specified in the SQL query statement.</li>
<li>
		&ldquo;<strong>Evaluate</strong>&rdquo; the compiled SQL query (that was output from the sqlite3_prepare_v2() command ) using the sqlite3_step() command.</li>
<li>
		Optionally, &ldquo;<strong>Retrieve</strong>&rdquo; the results of the SQL query evaluation using the sqlite3_column_*() commands.You can access the value of every column of the resulting row using these routines. The leftmost column begins at index 0.</li>
<li>
		&ldquo;<strong>Reset</strong>&rdquo; the compiled SQL query so it can be evaluated again. You can execute the query again using the sqlite3_bind() and sqlite3_step() commands</li>
<li>
		&ldquo;<strong>Destroy</strong>&rdquo; the query object once you are done with the query using the sqlite3_finalize() command</li>
</ul>
<h3>
	<strong><span style="color:#0000cd;">Fetch total number of entries in the table<br />
	</span></strong></h3>
<p>
	The code snippet returns the number of rows in the Contacts table</p>
<pre class="brush:java;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
    int count = 0;
    int retVal;
    const char *sqlQuery = &quot;SELECT COUNT(*) FROM Contacts&quot;;
    sqlite3_stmt *query = nil;

    if ((retVal =sqlite3_prepare_v2(dbHandle, sqlQuery, -1, &amp;query, NULL)) == SQLITE_OK) {
	int queryResult = sqlite3_step(query);
	if (queryResult == SQLITE_ROW) {
	    count = sqlite3_column_int(query, 0);
            NSLog(@&quot;Succesfully selected row count %d  &quot;,count) ;
        }
        else {
            NSLog(@&quot;Failed to selected row count &quot;) ;
        }
        sqlite3_reset(query);
        sqlite3_finalize(query);

    }
    else {
        NSLog(@&quot;Failure in preparing SELECT statement with result %d&quot;,retVal) ;
    }
</pre>
<h3>
	<strong><span style="color:#0000cd;">Add a row entry to the table<br />
	</span></strong></h3>
<p>
	The code snippet adds a new Contact entry to the Contacts table</p>
<pre class="brush:java;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
    NSString* contactFirstName = @&quot;Foo&quot;;
    NSString* contactLastName = @&quot;Bar&quot;;
    NSString* contactEmail = @&quot;foo@bar.com&quot;;
    NSString* contactTel = @&quot;555-1234&quot;;
    const char *sqlQuery = &quot;INSERT into Contacts (FirstName, LastName, Email, Telephone) Values(?, ?, ?, ?)&quot;;
    sqlite3_stmt *query = nil;
    int retVal;
    if ((retVal = sqlite3_prepare_v2(dbHandle, sqlQuery, -1, &amp;query, NULL)) == SQLITE_OK) {

        // The contactFirstName is a primary key. So cannot be NULL. Do the relevant checks for null values before you get here
        sqlite3_bind_text(query, 1, [contactFirstName UTF8String], -1, SQLITE_TRANSIENT);
        if (contactLastName) {
            sqlite3_bind_text(query, 2, [contactLastName UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_null(query, 2);
        }
        if (contactEmail != nil) {
            sqlite3_bind_text(query, 3, [contactEmail UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_null(query, 3);
        }
        if (contactTel != nil) {
            sqlite3_bind_text(query, 4, [contactTel UTF8String], -1, SQLITE_TRANSIENT);
        }
        else {
            sqlite3_bind_null(query, 4);
        }

        int result = sqlite3_step(query);

        if (result != SQLITE_DONE) {
            NSLog(@ &quot;Failure in adding row to table. Result is %d&quot;,result) ;
        }
        else {
            NSLog(@ &quot;Succesfully added row  &quot;) ;
        }

        sqlite3_reset(query);
        sqlite3_finalize(query);
    }
    else {
        NSLog(@ &quot;Error in preparing INSERT statement %d&quot;,retVal);
    }
</pre>
<h3>
	<span style="color:#0000cd;"><strong>Select a row entry from the table<br />
	</strong></span></h3>
<p>
	The code snippet selects an entry in the Contacts table with FirstName = &ldquo;Foo&rdquo; . It also retrieves the rowId corresponding to the entry.</p>
<pre class="brush:java;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
    NSString* searchName = @&quot;Foo&quot;;
    NSInteger rowId;
    NSString* lastName;
    NSString* email;
    NSString* tel;
    const char *sqlQuery = &quot;SELECT rowid, FirstName, LastName, Email, Telephone FROM Contacts WHERE FirstName == ?&quot;;
    sqlite3_stmt *query = nil;
    int retVal;
    if ((retVal = sqlite3_prepare_v2(dbHandle, sqlQuery, -1, &amp;query, NULL)) == SQLITE_OK) {
        sqlite3_bind_text(query, 1, [searchName UTF8String], -1, SQLITE_TRANSIENT );
        int result;
        if( (result = sqlite3_step(query)) == SQLITE_ROW) {
            rowId = sqlite3_column_int(query, 0);
            lastName = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(query, 2)];
            email = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(query, 3)];
            tel = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(query, 4)];

            NSLog(@&quot;Retrieved the row with Id %d for FirstName %@ :LastName :%@, Email:%@, Telephone:%@&quot;, rowId,searchName,lastName,email,tel);

        }
        else {
            NSLog(@ &quot;Failure in select row from table. Result is %d&quot;,result) ;
        }

        sqlite3_reset(query);
        sqlite3_finalize(query);
    }
    else {
        NSLog(@ &quot;Failure in preparing SELECT statement with result %d&quot;,retVal)
    }
</pre>
<h3>
	&nbsp;</h3>
<h3>
	<span style="color: rgb(0, 0, 205); "><strong>Update a row entry in the table</strong></span></h3>
<p>
	The code snippet updates the Telephone number associated with an entry in the Contacts table with FirstName = &ldquo;Foo&rdquo; to &ldquo;555-7777&rdquo;</p>
<pre class="brush:java;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
    NSString* searchStr = @&quot;Foo&quot;;
    NSString* updateStr = @&quot;555-7777&quot;;
    const char *sqlQuery = &quot;UPDATE Contacts SET Telephone = ? WHERE FirstName == ?&quot;;
    sqlite3_stmt *query = nil;

    int retVal;
    if ((retVal = sqlite3_prepare_v2(dbHandle, sqlQuery, -1, &amp;query, NULL)) == SQLITE_OK) {
         sqlite3_bind_text(query, 1, [updateStr UTF8String], -1, SQLITE_TRANSIENT );
         sqlite3_bind_text(query, 2, [searchStr UTF8String], -1, SQLITE_TRANSIENT );

        int result;
        if ((result =sqlite3_step(query)) != SQLITE_DONE) {
            NSLog(@&quot;Failed to execute the query %d&quot;,result);
        }
        else {
            NSLog(@&quot;Succesfully updated row !&quot;);
        }
        sqlite3_reset(query);
        sqlite3_finalize(query);
    }
    else {
        NSLog(@ &quot;Error in preparing UPDATE statement %d&quot;,retVal);
    }
</pre>
<h3>
	<span style="color:#0000cd;"><strong>Delete a row entry from the table<br />
	</strong></span></h3>
<p>
	The code snippet deletes an entry in the Contacts table with FirstName = &ldquo;Foo&rdquo; .</p>
<pre class="brush:java;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
    NSString* searchStr = @&quot;Foo&quot;;
    const char *sqlQuery = &quot;DELETE FROM Contacts WHERE FirstName == ?&quot;;
    sqlite3_stmt *query = nil;

    int retVal;
    if ((retVal = sqlite3_prepare_v2(dbHandle, sqlQuery, -1, &amp;query, NULL)) == SQLITE_OK) {
        sqlite3_bind_text(query, 1, [searchStr UTF8String], -1, SQLITE_TRANSIENT );

        int result;
        if ((result = sqlite3_step(query)) != SQLITE_DONE) {
            NSLog(@ &quot;Failure in delete row from table. Result is %d&quot;,result) ;
        }
        else {
            NSLog(@ &quot;Succesfully deleted row &quot;) ;
        }
        sqlite3_reset(query);
        sqlite3_finalize(query);
    }
    else {
        NSLog(@ &quot;Failure in preparing DELETE statement with result %d&quot;,retVal) ;
    }
</pre>
<h3>
	<strong><span style="color:#0000cd;">Closing connection to the database<br />
	</span></strong></h3>
<p>
	The following code snippet closes the connection to the database. All resources must have been &ldquo;finalized&rdquo; before you invoke this routine.</p>
<pre class="brush:java;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
    int result = sqlite3_close(dbHandle);
    if (result != SQLITE_OK){
        NSLog(@&quot;Failure in closing connection to database. Result %d&quot;,result);
    }
    else {
        NSLog(@ &quot;Successfully closed DB connection &quot;) ;
    }
</pre>
<h2>
	<strong><span style="color:#0000cd;">Testing<br />
	</span></strong></h2>
<p>
	You can use the freely available plugin &ldquo;SQLite Manager&rdquo; (https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/) for Mozilla Firefox to examine/verify the contents of your sqlite database.</p>

			<!--[syntaxhighlighter]-->
			<!--代码高亮，请勿编辑-->
			<script type="text/javascript" src="http://www.priyaontech.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shCore.js"></script><script type="text/javascript" src="http://www.priyaontech.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shBrushJava.js"></script>

			<link type="text/css" rel="stylesheet" href="http://www.priyaontech.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/styles/shCoreRDark.css" />
			<link type="text/css" rel="stylesheet" href="http://www.priyaontech.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/styles/shThemeRDark.css" />
			<script type="text/javascript">
			SyntaxHighlighter.defaults['class-name']	= '';
			SyntaxHighlighter.defaults['smart-tabs']	= true;
			SyntaxHighlighter.defaults['tab-size']		= 4;
			SyntaxHighlighter.defaults['gutter']		= true;
			SyntaxHighlighter.defaults['quick-code']	= true;
			SyntaxHighlighter.defaults['collapse'] 		= false;
			SyntaxHighlighter.defaults['auto-links']	= true;
			SyntaxHighlighter.defaults['toolbar']		= true;
			SyntaxHighlighter.all();
			</script>
			<!--[/syntaxhighlighter]-->]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2011/09/intro-to-sqlite-for-ios-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>And then there were four at Cocoaconf&#8230;.</title>
		<link>http://www.priyaontech.com/2011/08/and-then-there-were-four-at-cocoaconf/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=and-then-there-were-four-at-cocoaconf</link>
		<comments>http://www.priyaontech.com/2011/08/and-then-there-were-four-at-cocoaconf/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 13:16:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cocoaconf]]></category>
		<category><![CDATA[WOmen in computing]]></category>
		<category><![CDATA[Women in technology]]></category>

		<guid isPermaLink="false">http://www.priyaontech.com/?p=483</guid>
		<description><![CDATA[Let me start out by saying that the weekend at the first Cocoaconf &#160;was thoroughly inspiring and very well worth my time. It lived up to its reputation as a technical conference &#8211; hands-on tutorials, code walkthrough of various concepts and even the keynote address by Daniel Steinberg &#160;&#160;was a very entertaining spin on Objective-C.&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>
<!--StartFragment--></p>
<p class="MsoNormal">
	Let me start out by saying that the weekend at the first <a href="http://www.cocoaconf.com">Cocoaconf</a> &nbsp;was thoroughly inspiring and very well worth my time. It lived up to its reputation as a technical conference &ndash; hands-on tutorials, code walkthrough of various concepts and even the keynote address by <span style="mso-bidi-font-family:&lt;br /&gt;<br />
Helvetica"><a href="http://dimsumthinking.com/ ">Daniel Steinberg </a><span style="mso-spacerun:yes">&nbsp;</span>&nbsp;was a very entertaining spin on Objective-C.<span style="mso-spacerun:yes">&nbsp; </span>It was a community where people were eager to share their knowledge and to learn from each other.<span style="mso-spacerun:yes">&nbsp; </span><a href="http://bill.dudney.net/roller/objc/">Bill Dudney</a>&nbsp;spent time reviewing a pesky bug that I was facing and gave me some useful pointers &#8211; how great is that!</span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica">And now to the curious subject of this blog:-<o:p></o:p></span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica">In this congregation of approximately 80 techies, I noticed that there were only four women (including myself) attending the conference. <span style="mso-spacerun:yes">&nbsp;</span>Of course this wouldn&rsquo;t be the first time that there was a stark disparity in the number of women and men at a technical conference. <span style="mso-spacerun:yes">&nbsp;</span>Attendees of the recent <a href="http://developer.apple.com/wwdc/">Apple WWDC 2011</a></span><span style="mso-bidi-font-family:&lt;br /&gt;<br />
Helvetica">&nbsp;mentioned to me that there were probably a dozen or so women among several thousand attendees! <span style="mso-spacerun:yes">&nbsp;</span>Conferences aside, the number of men in development related roles have significantly outnumbered women in all the companies that I&rsquo;ve worked for.<span style="mso-spacerun:yes">&nbsp; </span>I&rsquo;m generally the lone woman in a technical meeting. To be clear, I&rsquo;m talking specifically about roles that involve programing and building software. I&rsquo;m not talking about management related roles in technology organizations where there are many women making significant inroads. I&rsquo;m not including the designers (web, graphics etc) , technical writers either. I&rsquo;m talking about folks who develop. So why is there a significant shortage of women in this area? It definitely isn&rsquo;t true that women can&rsquo;t program, and I don&rsquo;t believe that it something to do with our genetic makeup, so what is the reason.<o:p></o:p></span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica">I&rsquo;ve pondered over this topic many times in the past but it was rekindled over the weekend at Cocoaconf when I noticed that nothing much has changed over the years in this regard. <span style="mso-spacerun:yes">&nbsp;</span>I chatted about this with some of the men who attended the conference and it was interesting to get their perspective on this as well.<span style="mso-spacerun:yes">&nbsp; </span>This is a summary of<span style="mso-spacerun:yes">&nbsp; </span>my thoughts- <o:p></o:p></span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica">It is no secret that the number of women pursuing a Computer Science /Engineering degree is still very small (and some reports indicate that its dwindling).<span style="mso-spacerun:yes">&nbsp;&nbsp; </span>So why aren&rsquo;t women inclined to pursue this degree in the first place? Is it because (judging by the fact that there aren&rsquo;t many women in this area), they perceive this as a &ldquo;guy thing&rdquo; and automatically assume that this would be something they wouldn&rsquo;t enjoy?&nbsp;</span>Or does this start much earlier during elementary and middle school, where summer camps related to topics like &ldquo; Building Robots&rdquo; and &ldquo;programing&rdquo; are mostly attended by boys which dissuades even the girls who are interested in such topics (or over-protective parents of girls) from participating in<span style="mso-spacerun:yes">&nbsp; </span>such camps?</p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica">Even the women who enter the industry as a developer tend to switch to non-development or non-technical roles/jobs within a few years. Is it because women inherently prefer to work in roles which involve more &ldquo;socializing&rdquo; such as management, marketing, <span style="mso-spacerun:yes">&nbsp;</span>sales? As a developer, one does not have to interact a whole lot with others- you are pretty much in your office/cube for most part (well- there is &ldquo;pair programing&rdquo; but that&rsquo;s not for everyone). <span style="mso-spacerun:yes">&nbsp;</span>Some women have indicated that they switched careers because &ldquo;it was hard to keep up&rdquo;. <span style="mso-spacerun:yes">&nbsp;</span>Like many other jobs these days, programing is not a traditional &ldquo;9 to 5 job&rdquo;. Technology changes at a rapid phase and in order to do well, one needs to constantly upgrade their skills.<span style="mso-spacerun:yes">&nbsp; </span>There is continuous learning required. This may require spending evenings and weekends learning the new skill. Depending on the demands of the family, that is not always feasible, especially for women. <span style="mso-spacerun:yes">&nbsp;</span>Some women have indicated that switching to management related roles was essential to climb up the corporate ladder within their company. I disagree with that.<span style="mso-spacerun:yes">&nbsp; </span>Most companies offer separate management and technical tracks. One can be in a position of significant influence even while serving a purely technical role. <span style="mso-spacerun:yes">&nbsp;</span><o:p></o:p></span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica">A very interesting point that was raised by some one and with which I agree, is the men in development roles tend to possess traits which may not appeal to many women.<span style="mso-spacerun:yes">&nbsp; </span>They are generally &ldquo;arrogant&rdquo; ,&rdquo;brash&rdquo; or &ldquo;over confident&rdquo; . Hold on- let me explain this a bit.<span style="mso-spacerun:yes">&nbsp; </span>As developers, we can&rsquo;t just &ldquo;give up&rdquo; on bugs. We are adamant about fighting them and proving that our code works. <span style="mso-spacerun:yes">&nbsp;</span>Developers are not necessarily the most social people and many tend to lack &ldquo;people skills&rdquo;- we are not shy about &quot;calling a spade a spade&quot;. Very often, developers tend to trivialize a complex task. <span style="mso-spacerun:yes">&nbsp;</span>For instance, even if fixing a problem took a lot of time /effort, men tend to downplay the effort and claim that &ldquo;Oh that was so easy. Figured it out in no time &rdquo;.<span style="mso-spacerun:yes">&nbsp; </span>This may be intimidating to women who may have lower self-confidence in their programing abilities to begin with.<o:p></o:p></span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica"><o:p>&nbsp;</o:p></span>Being in a development job may need women to be willing to primarily interact with men. <span style="mso-spacerun:yes">&nbsp;</span>For many women, this would mean stepping out of ones comfort zone . While this is not a requirement to do well as a developer, it certainly helps to be able to network with fellow developers at the workplace and at conferences- one learns a lot in the process. <span style="mso-spacerun:yes">&nbsp;</span>On the flip side, many male developers do not openly welcome women into their discussions for fear of being misunderstood. Of course if there were sufficient women in these roles to begin with, there wouldn&rsquo;t be this issue!</p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica">Women tend to discuss family matters more often than for instance, the latest gadget or the cool stuff that they discovered while hacking into their new gadget.<span style="mso-spacerun:yes">&nbsp; </span>Sure- men probably discuss sports a lot as well but they also talk a lot more about technology, even if they are not directly working in that space. There is nothing wrong in discussing family, but my point here being that we are influenced a lot by our company.<o:p></o:p></span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica"><o:p>&nbsp;</o:p></span>I&rsquo;ve not covered all the factors in this blog and that was not my intent. I&rsquo;m sure that there are many more reasons and it is probably a complex combination of all of the above factors.</p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica">One of the pioneering programmers was Lady Ada Lovelace. It is sad not to see more women following her legacy.<o:p></o:p></span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal">
	<span style="mso-bidi-font-family:Helvetica"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal">
	<span style="font-size:10.0pt"><o:p>&nbsp;</o:p></span></p>
<p>
<!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.priyaontech.com/2011/08/and-then-there-were-four-at-cocoaconf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
