<?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>NOMTEK &#124; tailor made Apps for iPhone, Android, Blackberry and other platforms</title>
	<atom:link href="http://nomtek.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://nomtek.com</link>
	<description>Expert team delivering tailor-made Apps for iPhone, iPad, Android, Blackberry and other platforms</description>
	<lastBuildDate>Tue, 20 Mar 2012 13:06:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Flipcards – Flashcard app for training memory</title>
		<link>http://nomtek.com/our-projects/838/</link>
		<comments>http://nomtek.com/our-projects/838/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 11:42:04 +0000</pubDate>
		<dc:creator>Paweł</dc:creator>
				<category><![CDATA[Our Projects]]></category>
		<category><![CDATA[assosiate]]></category>
		<category><![CDATA[card]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flip]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[learn]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[picture]]></category>
		<category><![CDATA[quizlet]]></category>
		<category><![CDATA[remember]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[train]]></category>

		<guid isPermaLink="false">http://nomtek.com/?p=838</guid>
		<description><![CDATA[  
  
Flipcards – Flashcard app for training memory, is an educational application for everyone. The idea is based on flashcards &#8211; a set of pairs of words or pictures which are somehow related to each other. Each &#8230; <a href="http://nomtek.com/our-projects/838/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="text-align: left;"><a href="http://nomtek.com/wp-content/uploads/Flasc_icon_512x512.png"><img class="alignnone size-thumbnail wp-image-841" title="Flasc_icon_512x512" src="http://nomtek.com/wp-content/uploads/Flasc_icon_512x512-150x150.png" alt="" width="150" height="150" /></a> <a href="http://nomtek.com/wp-content/uploads/FlipCards-01.png"><img class="alignnone size-thumbnail wp-image-852" title="FlipCards 01" src="http://nomtek.com/wp-content/uploads/FlipCards-01-150x150.png" alt="" width="150" height="150" /></a> <a href="http://nomtek.com/wp-content/uploads/FlipCards-04.png"><img class="alignnone size-thumbnail wp-image-853" title="FlipCards 04" src="http://nomtek.com/wp-content/uploads/FlipCards-04-150x150.png" alt="" width="150" height="150" /></a></div>
<div style="text-align: left;"><a href="http://nomtek.com/wp-content/uploads/FlipCards-06.png"><img class="alignnone size-thumbnail wp-image-854" title="FlipCards 06" src="http://nomtek.com/wp-content/uploads/FlipCards-06-150x150.png" alt="" width="150" height="150" /></a> <a href="http://nomtek.com/wp-content/uploads/FlipCards-07.png"><img class="alignnone size-thumbnail wp-image-855" title="FlipCards 07" src="http://nomtek.com/wp-content/uploads/FlipCards-07-150x150.png" alt="" width="150" height="150" /></a> <a href="http://nomtek.com/wp-content/uploads/FlipCards-08.png"><img class="alignnone size-thumbnail wp-image-856" title="FlipCards 08" src="http://nomtek.com/wp-content/uploads/FlipCards-08-150x150.png" alt="" width="150" height="150" /></a></div>
<div style="text-align: left; margin-top: 20px;">Flipcards – Flashcard app for training memory, is an educational application for everyone. The idea is based on flashcards &#8211; a set of pairs of words or pictures which are somehow related to each other. Each pair is exposed on both sides of a card. User can flip cards by tapping the screen, and browse them by simple swipe gesture.</div>
<div style="text-align: left; margin-top: 10px;">While creating FlipCards we focused on simplicity and impressive graphics which make learning even more enjoyable.</div>
<div style="text-align: left; margin-top: 20px; margin-bottom: 10px;">FEATURES</div>
<ul>
<li>simple and user-friendly interface</li>
<li>marvellous artwork</li>
<li>create your own flash cards in embedded editor</li>
<li>search and download flash cards from <a title="Quizlet" href="http://quizlet.com" target="_blank">Quizlet.com</a> (over 7 million flashcard sets)</li>
<li>upload your flashcards to <a title="Quizlet" href="http://quizlet.com" target="_blank">Quizlet.com</a> and share with other users</li>
<li>post your newly created sets on Facebook&#8217;s Wall</li>
<li>support for text and images</li>
<li>share your sets with friends via email</li>
<li>shuffle cards by shaking device</li>
<li>tap and swipe to interact with cards</li>
</ul>
<div style="text-align: left; margin-top: 20px; margin-bottom: 10px;">SUPPORT</div>
<div style="text-align: left;">If you have any questions or issues with this app feel free to contact us at <a href="mailto://flipcards@nomtek.com">flipcards@nomtek.com</a></div>
<div style="text-align: left; margin-top: 10px;">For any news you can follow us on Twitter: <a title="@NomtekMobile" href="https://twitter.com/#!/NomtekMobile" target="_blank">@NomtekMobile</a></div>
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/our-projects/838/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AX4 Tracking application for AXIT AG released on AppStore!</title>
		<link>http://nomtek.com/our-projects/ax4-tracking-application-for-axit-ag-released-on-appstore/</link>
		<comments>http://nomtek.com/our-projects/ax4-tracking-application-for-axit-ag-released-on-appstore/#comments</comments>
		<pubDate>Fri, 06 May 2011 08:28:54 +0000</pubDate>
		<dc:creator>Kamil</dc:creator>
				<category><![CDATA[Mobile Business]]></category>
		<category><![CDATA[Our Projects]]></category>

		<guid isPermaLink="false">http://nomtek.com/?p=767</guid>
		<description><![CDATA[AX4 is a logistics IT-platform which improves, automates and controls the logistical chain across companies and simply and flexibly integrates all parties involved. It is used by over 52.000 users, available in 92 countries and 12 languages. Major customers are &#8230; <a href="http://nomtek.com/our-projects/ax4-tracking-application-for-axit-ag-released-on-appstore/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>AX4</strong> is a logistics IT-platform which improves, automates and controls the logistical chain across companies and simply and flexibly integrates all parties involved. It is used by over 52.000 users, available in 92 countries and 12 languages. Major customers are DHL, BMW, Ford, DB Schenker, BASF and alike.</p>
<p>We are very proud to announce that Nomtek has developed the mobile AX4 application for all iOS-based devices: iPhone, iPad and iPod. With our application it is possible to track statuses of AX4 shipments anywhere and anytime &#8211; just enter the shipment reference number and get detailed tracking information within seconds. Application automatically stores the list of recent shipments for future reference and provides useful bookmarking system called &#8220;Watchlist&#8221;. With push notifications user is instantly informed about tracking status updates for all shipments that he &#8220;watches&#8221;.</p>
<p>From the developer&#8217;s perspective, <strong>AX4 Tracking</strong> application introduces some advanced features. We have designed special table views that are made of native iOS UI components to achieve high performance (avoiding pitfalls of UIWebView), yet they are extremely flexible. Dedicated protocol that describes each table cell separately allows definition of font sizes, text and background colors, number of rows and columns, borders, images, buttons and much more!</p>
<p><a href="http://itunes.apple.com/ca/app/ax4-tracking/id401135187" target="_blank">Read about the application on iTunes, </a>or see <strong>AX4 Tracking</strong> in action!</p>
<p></br></br>
<p> (Video: Watch this video on the post page)
<div style="text-align: center;"><strong>AX4 Tracking</strong></div></p>
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/our-projects/ax4-tracking-application-for-axit-ag-released-on-appstore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding 3rd dimension to the Page Flip effect on iPhone OS</title>
		<link>http://nomtek.com/tips-for-developers/page-flip-3d/</link>
		<comments>http://nomtek.com/tips-for-developers/page-flip-3d/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 19:52:25 +0000</pubDate>
		<dc:creator>Paweł</dc:creator>
				<category><![CDATA[Tips for Developers]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[cocos2d]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[flip curl]]></category>
		<category><![CDATA[flip page]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://nomtek.com/?p=331</guid>
		<description><![CDATA[(Video: Watch this video on the post page)
3d page flip animation created using cocos2d framework.

My 3d concept of flipping a page is based on its 2d version. We will still reflect points that are in front of the symmetry axis &#8230; <a href="http://nomtek.com/tips-for-developers/page-flip-3d/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>(Video: Watch this video on the post page)</p>
<div style="text-align: center;">3d page flip animation created using <strong>cocos2d</strong> framework.</div>
<p></p>
<div>My <strong>3d</strong> concept of flipping a page is based on its 2d version. We will still reflect points that are in front of the symmetry axis but we will also modify the <strong>z coordinate</strong> of these points (see picture 5).</div>
<p></p>
<div style="text-align: center;"><a href="http://nomtek.com/wp-content/uploads/pageflip-3d-two-pages.png" target="_blank" title=""><img class="alignnone size-full wp-image-567" title="pageflip 3d two pages" src="http://nomtek.com/wp-content/uploads/pageflip-3d-two-pages.png" alt="" width="480" height="160" /></a></div>
<div style="text-align: center;">Pic.5. 3d version of page flip effect.</div>
<p></p>
<div>To understand the concept, imagine a <strong>cylinder</strong> with a large radius which is running on the same path as the symmetry axis. When the cylinder touches the paper, it begins to wrap around the cylinder until it reaches the cylinder&#8217;s top edge. After that, the piece of paper which has passed the cylinder&#8217;s top edge (actually the grid&#8217;s vertices that represent that piece of paper) should behave as if they were reflected across the symmetry axis. So the z value of the moveable points should be between 0 and 2*R (R is a <strong>radius</strong> of the cylinder).</div>
<p></p>
<div style="text-align: center;"><a href="http://nomtek.com/wp-content/uploads/pageflip-cylinders.png"><img class="alignnone size-full wp-image-569" title="pageflip cylinders" src="http://nomtek.com/wp-content/uploads/pageflip-cylinders.png" alt="" width="338" height="64" /></a></div>
<div style="text-align: center;">Pic. 6. Cross section of the page wrapped around the cylinder.<br />
The radius of the cylinder decreases in time.</div>
<p></p>
<div>To make the whole effect even more realistic the radius of the cylinder should decrease from its maximum value to zero in time. Below is a piece of code which does all mentioned stuff. In the code I use Vertex and Point data structures. I did an assumption that Vertex and Point represent points in 3d and 2d space respectively. But it&#8217;s fair to treat points as vertices with z = 0. So if you see p = 5 * v; it means that only x and y coordinates take part in calculation.</div>
<p></p>
<pre style="overflow: scroll;"><code>// time is a value from 0 to 1;
// 0 - begin of the effect,
// 1 - whole page has been flipped
void update(float time)
{
    const Point A, B', C, D;  // corners of the animated page (except B')
    const float t = sqrt(time);
    const Point P1 = lerp(B', A, t);
    const Point P2 = lerp(C, D, t);
    const Line line = CreateLineFromPoints(P1, P2);
    const Point N = GetNormalVectorFromLine(line);
    const float maxRadius = 0.5 * pageWidth * pi;
    float R;
    if (time &lt;= 0.5)
    {
        // for the first half of the effect keep a fixed value of radius
        R = maxRadius;
    }
    else
    {
        // in the second half decrease the radius from its max value to 0
        const float s = sqrt( 2 * (1 - time) );
        // note that "2 * (1 - time)" is between 0 and 1, so is "s"

        R = (0, maxRadius, s);      // &lt;=&gt;  R = maxRadius * s;
    }

    const float invR = 1 / R;
    const float halfCylinderCircumference = π * R;    // π ≈ 3.14159
    Vertex v;
    for v in grid.vertices
    {
        const float dist = distance(v, line);
         if (dist &gt; 0)
        {
               const Point p = v - N * dist;
              if (dist &lt;= halfCylinderCircumference)
              {
                     const float alpha = dist * invR;
                     const float sinAlpha = R * sin(alpha);
                     v.x = p.x + N.x * sinAlpha;
                     v.y = p.y + N.y * sinAlpha;
                     v.z = (1 - cos(alpha)) * R;
              }
             else
             {
                   v.x = p.x - N.x * (dist - halfCylinderCircumference);
                   v.y = p.y - N.y * (dist - halfCylinderCircumference);
                   v.z = 2 * R;
             }
        }
    }
}
</code></pre>
<p></p>
<div><span style="font-size: medium;"><strong>Summary</strong></span></div>
<p></p>
<div>This is the easiest 3d version of page flip algorithm I can imagine. It&#8217;s not perfect. It&#8217;s still have artefacts when viewing in slow motion but when animation is fast enough it looks realistic. The best approach to the page curl simulation is to use cone instead of cylinder (see <a href="http://wdnuon.blogspot.com/2010/05/implementing-ibooks-page-curling-using.html" target="_blank">W. Dana Nuon blog</a> for details). But no matter what solid you use, the idea is the same, only equations may vary.</div>
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/tips-for-developers/page-flip-3d/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>EduCards</title>
		<link>http://nomtek.com/our-projects/educards/</link>
		<comments>http://nomtek.com/our-projects/educards/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 08:14:15 +0000</pubDate>
		<dc:creator>Paweł</dc:creator>
				<category><![CDATA[Our Projects]]></category>
		<category><![CDATA[educard flashcard education card flipcard learn study iPhone ipod touch ipad]]></category>

		<guid isPermaLink="false">http://nomtek.com/?p=550</guid>
		<description><![CDATA[
  
  

EduCards is an educational application which can be used to study foreign languages, remember difficult words and meanings, etc. Educational cards (also known as flash cards) are pairs of words or pictures which are somehow related &#8230; <a href="http://nomtek.com/our-projects/educards/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;">
<p><a href="http://nomtek.com/wp-content/uploads/icon-512.png"><img class="alignnone size-thumbnail wp-image-553" title="icon-512" src="http://nomtek.com/wp-content/uploads/icon-512-150x150.png" alt="" width="150" height="150" /></a> <a href="http://nomtek.com/wp-content/uploads/screen1.png"><img class="alignnone size-thumbnail wp-image-554" title="screen1" src="http://nomtek.com/wp-content/uploads/screen1-150x150.png" alt="" width="150" height="150" /></a> <a href="http://nomtek.com/wp-content/uploads/screen2.png"><img class="alignnone size-thumbnail wp-image-555" title="screen2" src="http://nomtek.com/wp-content/uploads/screen2-150x150.png" alt="" width="150" height="150" /></a></p>
<p><a href="http://nomtek.com/wp-content/uploads/screen3.png"><img class="alignnone size-thumbnail wp-image-556" title="screen3" src="http://nomtek.com/wp-content/uploads/screen3-150x150.png" alt="" width="150" height="150" /></a> <a href="http://nomtek.com/wp-content/uploads/screen4.png"><img class="alignnone size-thumbnail wp-image-557" title="screen4" src="http://nomtek.com/wp-content/uploads/screen4-150x150.png" alt="" width="150" height="150" /></a> <a href="http://nomtek.com/wp-content/uploads/screen5.png"><img class="alignnone size-thumbnail wp-image-558" title="screen5" src="http://nomtek.com/wp-content/uploads/screen5-150x150.png" alt="" width="150" height="150" /></a>
</div>
<div style="text-align: left;">EduCards is an educational application which can be used to study foreign languages, remember difficult words and meanings, etc. Educational cards (also known as flash cards) are pairs of words or pictures which are somehow related to each other. Each pair is exposed on both sides of each card. By tapping the card user flips the card and see the other side. While creating EduCards we focused on simplicity and impressive graphics which make learning even more enjoyable.</div>
<div style="text-align: left;"></div>
<div style="text-align: left;"></div>
<div style="text-align: left;">Features:</div>
<div style="text-align: left;">
<ul>
<li>simple and learn-friendly interface</li>
<li>beautiful graphics</li>
<li>embedded editor for creating own EduCards packages</li>
<li>easy import and export via e-mail or iTunes</li>
<li>support for text and images</li>
<li>shaking device shuffles cards</li>
<li>tap and swipe to interact with cards</li>
<li>support for unicode characters</li>
</ul>
</div>
<div style="text-align: left;"><a href="http://itunes.apple.com/us/app/educards/id412034349?mt=8" target="_blank"><img class="alignnone size-medium wp-image-562" title="black-flashcard" src="http://nomtek.com/wp-content/uploads/black-flashcard-300x119.png" alt="" width="200" height="79" /></a>
<div/>
<div style="text-align: left;">
For any comments or questions regarding EduCards app please contact us at: <a href="mailto:educards@nomtek.com">educards@nomtek.com</a>.</p>
<div/>
<div style="text-align: left;">For any news you can follow us on Twitter:
<div/>
<div style="text-align: left;"><a href="http://twitter.com/#!/krout" target="_blank">@krout</a>
<div/>
<div style="text-align: left;"><a href="http://twitter.com/#!/pleszkie" target="_blank">@pleszkie</a>
<div/>
<p>(Video: Watch this video on the post page)</p>
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/our-projects/educards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing Mobile Web &#8211; phones and platforms to focus on</title>
		<link>http://nomtek.com/tips-for-developers/testing-mobile-web-phones-and-platforms-to-focus-on/</link>
		<comments>http://nomtek.com/tips-for-developers/testing-mobile-web-phones-and-platforms-to-focus-on/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 10:19:26 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Tips for Developers]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[mobile phone emulator]]></category>
		<category><![CDATA[mobile phone platform]]></category>
		<category><![CDATA[mobile phone simulator]]></category>
		<category><![CDATA[mobile web browsers]]></category>
		<category><![CDATA[mobile web test]]></category>
		<category><![CDATA[Opera Mobile]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Symbian]]></category>

		<guid isPermaLink="false">http://nomtek.com/?p=411</guid>
		<description><![CDATA[Decision on what mobile phones/browsers to support for mobile web page project is not a trivial task. There are quite a lot of mobile platforms, each one with its own default mobile web browser, additionally there exist also third party &#8230; <a href="http://nomtek.com/tips-for-developers/testing-mobile-web-phones-and-platforms-to-focus-on/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Decision on what mobile phones/browsers to support for mobile web page project is not a trivial task. There are quite a lot of mobile platforms, each one with its own default mobile web browser, additionally there exist also third party browsers. The first thing you need to do is to look at some statistics as you have to decide on what platforms to focus on. StatCounter at <a href="http://www.google.com/url?q=http%3A%2F%2Fgs.statcounter.com%2F&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzfD8gO8c0-nPOORuXJc0bhDGi3vmA">http://gs.statcounter.com/</a> gathers web page statistics &#8211; we recommend to look in there. It is worth not only to look at worldwide statistics, but also regional statistics where your mobile web page will be mainly targeted &#8211; there are huge differences between different parts of the world. We will focus on European region, the results for USA will be similar. We also recommend to use rather line type of stats then bar type, because it gives information about trends, not only about current usage statistics (and you have to remember that you develop for some time in future not for now). So let&#8217;s see how it looks in case of mobile web browsers in Europe for September 2010 :</p>
<p style="text-align: justify"><a href="http://nomtek.com/wp-content/uploads/StatCounterGlobal_mBrowsers_europe_sharpen1.jpg"><img class="alignnone size-full wp-image-428" src="http://nomtek.com/wp-content/uploads/StatCounterGlobal_mBrowsers_europe_sharpen1.jpg" alt="Stat Counter Global mobile browsers in Europe" width="100%" height="360" /></a></p>
<p style="text-align: justify">We can see two things: there are a few platforms that we should focus on and that generally web browsers usage is generated by platforms&#8217; default browsers, with exception of third party Opera web browser, which is quite popular. In case of Opera we have two browsers: Opera Mini and Opera Mobile. Opera Mini displays web pages first processed in data centers (to make web page more tolerable for mobile phones and to reduce net bandwidth) thus its support for JavaScript is limited, whereas Opera Mobile is standard web browser and supports JavaScript, Ajax and Html5. We recommend to focus on Opera Mobile in case of more powerful web projects that need good support for those technologies. Summing it up we can define following recommendations:</p>
<h3>Platforms that we recommend to focus on</h3>
<ul>
<li>iPhone/iPod (for Europe and North America)</li>
<li>Android (for Europe and North America)</li>
<li>Blackberry (for Europe and North America)</li>
<li>SymbianOS (for Europe only)</li>
<li>Opera Mobile web browser (for Europe only)</li>
</ul>
<h2>Test Phone Recommendations</h2>
<p>Here we restrict ourselves to platforms listed above. Selection of platforms/phones to support depends on web technologies and phone&#8217;s functionalities you need during development. Thus we propose test recommendations for three categories (each one more restrictive then previous):</p>
<ul>
<li>HTML 4.1, CSS and JavaScript support</li>
<li>HTML 4.1, CSS, JavaScript support with focus on phones with touchable screens</li>
<li>HTML 4.1, CSS, JavaScript support with reasonable support for HTML 5</li>
</ul>
<p>Our general test recommendation is to perform the daily development tests on oldest <em>acceptable</em> version of each platform.  Acceptable version means such version of given platform whose default browser supports all technologies required for your project. Also we recommend that for critical projects strong (deep) before release tests should be done not only on oldest acceptable version, but also on each available simulator/device.  If your project requires lots of phone&#8217;s resources, then you should also consider testing on oldest device running <span style="text-decoration: underline">newest</span> available version of the platform (for example iPhone 3G with iOS 4) &#8211; this is device/platform configuration with worst performance and it might be helpful to assure that your project runs fine on it. Now lets turn our attention to each of the categories.</p>
<h3>HTML 4.1, CSS and JavaScript support</h3>
<p>Finding and recognizing oldest acceptable version is quite hard and we recommend to use results gathered by John Resig <a href="http://www.google.com/url?q=http%3A%2F%2Fjquerymobile.com%2Fgbs%2F&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzfEMlTMIF7wzU62SIPcHDiVsg8WaA">http://jquerymobile.com/gbs/</a>, who needed to recognize supported platforms for JQuery Mobile project. We propose to focus on native column from his table, as its represents default web browser for each platform. Definitely you need to support A-grade platforms from this table: iOS v3.1.3, v3.2 and v4.0 (and newest v4.1); Symbian S60 v5.0; Blackberry OS v5.0, v6.0; Android v1.5, v1.6, v2.1, v2.2. In case of iOS and Android the situation is clear: all A-grade versions run on majority of those platforms devices. In case of Blackberry OS v6.0 runs only on few latest phones so we recommend to support also v5.0 that runs on lot of Blackberry devices that are currently in use. In case of Symbian S60 it is worth to support version 5.0 that runs on touchscreen devices and if you want to support also non touchable devices then you should suport Symbian S60 version 3.2 as well. Additionally you need of course to support latest Symbian^3 platform. As to Opera Mobile you can see from John&#8217;s table that latest version 10.0 of Opera Mobile should be supported, previous versions might gave you some trouble. Below is list of all recommended platforms and devices to consider:</p>
<ul>
<li><strong><span style="color: #333333">iOS</span></strong>
<ul>
<li>v3.1.3 :
<ul>
<li>iPhone 3G, iPod Touch 3rd generation</li>
</ul>
</li>
<li>v3.2 :
<ul>
<li> iPad</li>
</ul>
</li>
<li>v4.0, v4.1 :
<ul>
<li> iPhone 3GS, iPhone 4</li>
</ul>
</li>
<li><strong><span style="color: #333333">Recommended test device: </span></strong>
<ul>
<li><strong><span style="color: #333333">iPhone 3G</span></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Android</span></strong>
<ul>
<li>v1.5:
<ul>
<li>HTC: Dream (android dev phone 1 is htc dream also), Hero, Magic</li>
<li>Motorola: DEXT, ME600, MB300, i1, MB501</li>
<li>Huawei: U8230, U8220</li>
<li>Other: Acer beTouch E110, Sciphone N19, Dell Mini 3, Samsung M900 Moment, LG-GW620</li>
</ul>
</li>
<li>v1.6:
<ul>
<li>LG: GT540 Swift, LKH5200 Andro-1G, LU2300 Optimus Q;</li>
<li>Samsung: Behold II, i7500 Galaxy, i5700 Spica;</li>
<li>Sony Ericsson: XPERIA X10 Mini, Xperia X10;</li>
<li>Other: Acer: Liquid A1, SciPhone N21, CSL Spice, Garminfone, HTC Tattoo, ZTE Link</li>
</ul>
</li>
<li>v2.1:
<ul>
<li>Acer: Liquid E, Liquid Stream S110;</li>
<li>HTC: Aria, Desire, Droid Incredible, Legend, <a title="Google" href="http://www.google.com/url?q=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FGoogle&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzdojghw9l0C1Z4GTo23IJk-xSfpDg"></a>myTouch 3G Slide, Wildfire, Google Nexus One;</li>
<li>LG: VS740 Ally, KU9500,</li>
<li>Motorola: Charm, Droid X, Milestone XT701, XT720, Defy, Flipout;</li>
<li>Pantech: Sirius Sky, Sirius Izar, Sirius Vega;</li>
<li>Samsung: i5800 Teos, Galaxy A, i9000 Galaxy S, Acclaim, M910 Intercept</li>
</ul>
</li>
<li>v2.2:
<ul>
<li>HTC: Evo 4G, Desire HD;</li>
<li>Motorola Droid 2</li>
</ul>
</li>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><strong><span style="color: #333333">HTC: Dream (android dev phone 1 if available)</span></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Blackberry</span></strong>
<ul>
<li>v5.0
<ul>
<li>models: 8330, 8900, 9000, 9630, 9650, 9700, 9100, 9300, 8530, 9500, 9530, 9550</li>
</ul>
</li>
<li>v6.0
<ul>
<li>models: 9670, 9780, 9800</li>
</ul>
</li>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><strong><span style="color: #333333">8520 &#8211; (its not listed above but should have upgrade to v5.0 available)</span></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Symbian S60</span></strong>
<ul>
<li>v3.2
<ul>
<li>Nokia: 5320 XpressMusic, 5630 XpressMusic,  5730 XpressMusic,  6210 Navigator,  6220 Classic,  6650 fold, 6710 Navigator, 6720 Classic, 6730 Classic, 6760 Slide, 6790 Surge, C5, E5-00, E52, E55, E71x, E72, E75, N78, N79, N85, N86 8MP, N96</li>
<li>Samsung: GT-i8510 (INNOV8), GT-I7110, SGH-L870</li>
</ul>
</li>
<li>v5.0 (also known as Symbian^1)
<ul>
<li>Nokia: 5230, 5233, 5235, 5250, 5530 XpressMusic, 5800 XpressMusic, 5800 Navigation Edition, C6-00, N97, N97 mini, X6</li>
<li>Samsung: i8910 Omnia HD</li>
<li>Sony Ericsson: Satio, Viva, Vivaz Pro</li>
</ul>
</li>
<li>Symbian^3
<ul>
<li>Nokia: C6-01, C7-00, E7-00, N8</li>
</ul>
</li>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><strong><span style="color: #333333">Nokia C5</span></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Opera Mobile 10.0</span></strong>
<ul>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><strong><span style="color: #333333">test on some Symbian S60 device: so again &#8211; Nokia C5</span></strong></li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>HTML 4.1, CSS, JavaScript support with focus on phones with touchable screens</h3>
<p><span style="color: #444444">In that case we have to narrow selection of supported platforms/devices. All iOS and Android platforms/devices uses </span>touchscreen so for them the list is the same, in case of Blackberry the list of platforms doesn&#8217;t change but list of supported devices shrinks to 4 models. In case of Symbian S60 we have to remove v3.2 completely as it doesn&#8217;t run on any device with touchscreen. So below you can see list for supported devices with touchscreen:</p>
<ul>
<li><strong><span style="color: #333333">iOS</span></strong>
<ul>
<li>the same devices as in the previous section (&#8220;HTML 4.1, CSS and JavaScript support&#8221;)</li>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><strong><span style="color: #333333">the same device as in the previous section</span></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Android</span></strong>
<ul>
<li>the same devices as in the previous section (&#8220;HTML 4.1, CSS and JavaScript support&#8221;)</li>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><strong><span style="color: #333333">the same device as in the previous section</span></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Blackberry</span></strong>
<ul>
<li>v5.0
<ul>
<li>models: 9500, 9530, 9550</li>
</ul>
</li>
<li>v6.0
<ul>
<li>models: 9800</li>
</ul>
</li>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><strong><span style="color: #333333">one of 9500, 9530, 9550 models</span></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Symbian S60</span></strong>
<ul>
<li>v5.0 (also known as Symbian^1)
<ul>
<li>the same devices as in the previous section (&#8220;HTML 4.1, CSS and JavaScript support&#8221;)</li>
</ul>
</li>
<li>Symbian^3
<ul>
<li>the same devices as in the previous section (&#8220;HTML 4.1, CSS and JavaScript support&#8221;)</li>
</ul>
</li>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><strong><span style="color: #333333">Nokia 5230</span></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Opera Mobile 10.0</span></strong>
<ul>
<li><strong><span style="color: #333333">test on some Symbian S60 device: so again &#8211; Nokia 5230</span></strong></li>
</ul>
</li>
</ul>
<h3>HTML 4.1, CSS, JavaScript support with reasonable support for HTML 5</h3>
<p>HTML 5 is not yet fully defined, so there is no such thing as a browser that fully supports HTML 5. But there are already quite a few well defined functions in this standard and they are already implemented in some browsers. If you want to go into deeper details please use this excellent tool for testing html5 compatibility: <a href="http://www.google.com/url?q=http%3A%2F%2Fhtml5test.com%2F&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzc6IpJGfj9T1h255yoxduF-LkQbUw">http://html5test.com</a> or <a href="http://www.google.com/url?q=http%3A%2F%2Fbeta.html5test.com%2F&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzdjHma6d4HzVqGSvb1AZosjVqGdWw">http://beta.html5test.com</a>. In case of mobile web browsers we only have three platforms that support HTML 5: iOS from v3.1.3, Android from v2.1 and BlackBerry from v6.0. You might also consider to support Opera (please look at: <a href="http://www.google.com/url?q=http%3A%2F%2Fwww.opera.com%2Fdocs%2Fspecs%2Fproductspecs%2F&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzd_HIpD-4LPv3xtN1Cioy8_K8yrjA">http://www.opera.com/docs/specs/productspecs/</a>), but here we assume that its HTML5 capabilities are not yet acceptable. This limits our choice of platforms/devices to the list below:</p>
<ul>
<li><strong><span style="color: #333333">iOS</span></strong>
<ul>
<li>the same devices as in the previous section (&#8220;HTML 4.1, CSS and JavaScript support&#8221;)</li>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><strong><span style="color: #333333">the same device as in the previous section</span></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Android</span></strong>
<ul>
<li>v2.1
<ul>
<li>the same devices as in the previous section (&#8220;HTML 4.1, CSS and JavaScript support&#8221;)</li>
</ul>
</li>
<li>v2.2
<ul>
<li>the same devices as in the previous section (&#8220;HTML 4.1, CSS and JavaScript support&#8221;)</li>
</ul>
</li>
<li><span style="color: #333333"><strong><span style="color: #333333">Recommended test device:</span></strong></span>
<ul>
<li><span style="color: #333333"><strong><span style="color: #333333">HTC Desire</span></strong></span></li>
</ul>
</li>
</ul>
</li>
<li><strong><span style="color: #333333">Blackberry</span></strong>
<ul>
<li>v6.0
<ul>
<li>models: 9670, 9780, 9800</li>
</ul>
</li>
<li><strong><span style="color: #333333">Recommended test device:</span></strong>
<ul>
<li><span style="color: #333333"><strong><span style="color: #333333">one of models available for v6.0:  9670, 9780, 9800</span></strong></span></li>
</ul>
</li>
</ul>
</li>
</ul>
<p>In each case, we tried to choose the oldest model that supports the required platform and functions as a testing device. If you feel a little confused by all this platforms and devices now, please don&#8217;t worry <img src='http://nomtek.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Here is a table that summarizes all of this in reference to recommended devices:</p>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td></td>
<td>
<h4><a name="TOC-HTML-4.1-CSS-and-JavaScript-support1"></a>HTML 4.1, CSS, JavaScript</h4>
</td>
<td>
<h4><a name="TOC-HTML-4.1-CSS-JavaScript-support-wit2"></a>HTML 4.1, CSS, JavaScript, touchable screens</h4>
</td>
<td>
<h4><a name="TOC-HTML-4.1-CSS-JavaScript-support-wit3"></a>HTML 4.1, CSS, JavaScript, support for HTML 5</h4>
</td>
</tr>
<tr>
<td>iOS</td>
<td><strong><span style="color: #333333">iPhone 3G</span></strong></td>
<td><strong><span style="color: #333333">iPhone 3G</span></strong></td>
<td><strong><span style="color: #333333">iPhone 3G</span></strong></td>
</tr>
<tr>
<td>Android</td>
<td><strong><span style="color: #333333">HTC Dream</span></strong></td>
<td><strong><span style="color: #333333">HTC Dream</span></strong></td>
<td><strong><span style="color: #333333">HTC Desire</span></strong></td>
</tr>
<tr>
<td>Blackberry</td>
<td><strong><a name="TOC-8520"></a><span style="color: #333333">8520</span></p>
<p></strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong></td>
<td><strong><span style="color: #333333">9500 or 9530 or 9550</span></strong></td>
<td><strong><span style="color: #333333">9670 or </span></strong><strong><span style="color: #333333">9780 or </span></strong><strong><span style="color: #333333">9800</span></strong></td>
</tr>
<tr>
<td>Symbian S60</td>
<td><strong><span style="color: #333333">Nokia C5</span></strong></td>
<td><strong><span style="color: #333333">Nokia 5230</span></strong></td>
<td><span style="color: #333333">&#8212;</span></td>
</tr>
</tbody>
</table>
<h2>Information about available emulators</h2>
<p><a name="TOC-iPhone-iPodsdk-with-simulator-:-htt"></a></p>
<ul>
<li><strong><span style="color: #333333">iPhone/iPod </span></strong>
<ul>
<li><a href="http://developer.apple.com/devcenter/ios/index.action">sdk (with simulator)</a></li>
<li>the latest version of sdk has only the latest version of iOS simulator but <a href="http://chris-fletcher.com/2010/08/28/howto-install-iphone-sdk-2-0-3-1-for-xcode-3-2/">here</a> you can download older versions</li>
<li><a href="http://www.google.com/url?q=http%3A%2F%2Fdeveloper.apple.com%2Fdevcenter%2Fios%2Findex.action&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzfP8BZWU4Y2edFLXL6iyTqTapIHzg"></a>runs only on mac os</li>
<li>default web browser is available under simulator</li>
</ul>
</li>
<li><strong><span style="color: #333333">Android </span></strong>
<ul>
<li><a href="http://developer.android.com/sdk/index.html">sdk (with emulator) page</a>
<ul>
<li>jdk required &#8211; installed by default in snow leopard (try javac -version in cmd)</li>
<li>eclipse required &#8211; Caution: There are known issues with the ADT plugin running with Eclipse 3.6. Please stay on 3.5 until further notice. We recommend Eclipse Classic (versions 3.5.2)</li>
<li><a href="http://developer.android.com/sdk/eclipse-adt.html#installing">ADT plugin for eclipse</a></li>
</ul>
</li>
<li>fortunately sdk (with ADT plugin) allows for having different platform versions installed and switching between them</li>
<li>there is a default android web browser (called just &#8220;browser&#8221;) available under emulator</li>
<li>in android simulator you can configure several devices with different screen sizes, <a href="http://developer.android.com/guide/practices/screens_support.html">here</a> is an excellent introduction to developing/testing applications on screens with different sizes/densities</li>
</ul>
</li>
<li><strong>SymbianOS</strong>
<ul>
<li><a href="http://developer.symbian.org/wiki/index.php/Symbian_Emulator">emulator page</a></li>
<li><a href="http://developer.symbian.org/wiki/index.php/Symbian_Emulator"></a><a href="http://developer.symbian.org/wiki/index.php/How_to_Setup_Browsing_on_the_Emulator">setting up web browser on emulator</a></li>
<li><a href="http://developer.symbian.org/wiki/index.php/How_to_Setup_Browsing_on_the_Emulator"></a><a href="http://library.forum.nokia.com/index.jsp?topic=/S60_5th_Edition_Cpp_Developers_Library/GUID-35228542-8C95-4849-A73F-2B4F082F0C44/sdk/doc_source/ToolsAndUtilities94/Emulator/index.html">emulator on nokia pages</a></li>
<li><a href="http://library.forum.nokia.com/index.jsp?topic=/S60_5th_Edition_Cpp_Developers_Library/GUID-35228542-8C95-4849-A73F-2B4F082F0C44/sdk/doc_source/ToolsAndUtilities94/Emulator/index.html"></a><a href="http://www.youtube.com/watch?v=CkIcMbZLlI8&amp;feature=related">default web browser available</a></li>
</ul>
</li>
<li><strong>BlackBerry</strong>
<ul>
<li><a href="http://docs.blackberry.com/en/developers/deliverables/15476/Installing_the_BB_Email_MDS_Serv_Sim_Pkg_816653_11.jsp">in order to browse html pages via browser on the simulator you need to install BlackBerry Email and MDS Services Simulator Package</a></li>
<li><a href="http://docs.blackberry.com/en/developers/deliverables/15476/Installing_the_BB_Email_MDS_Serv_Sim_Pkg_816653_11.jsp"></a><a href="http://na.blackberry.com/eng/developers/resources/">separate simulators for each blackberry device (see Simulators section)</a></li>
<li><a href="http://na.blackberry.com/eng/developers/resources/"></a><a href="http://elearningweekly.wordpress.com/2009/01/10/basic-mlearning-with-blackberries/">simple post describing how to setup a simulator environment</a></li>
<li><a href="http://elearningweekly.wordpress.com/2009/01/10/basic-mlearning-with-blackberries/"></a>has default browser</li>
<li>connects with internet via blackberry gateway</li>
<li>BlackBerry simulator is only for Windows !</li>
</ul>
</li>
<li><strong>Opera Mobile</strong>
<ul>
<li><a href="http://www.opera.com/developer/tools/#operamobile">opera mobile emulator</a></li>
<li><a href="http://www.opera.com/developer/tools/#operamobile"></a><a href="http://www.opera.com/dragonfly">dragonfly &#8211; excellent tool for debugging</a></li>
</ul>
</li>
</ul>
<h2>Collection of useful links</h2>
<h3>Mobile web development and testing in general</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Mobile_browser#cite_note-0">Mobile browser &#8211; Wikipedia, the free encyclopedia</a></li>
<li><a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript &#8211; Wikipedia, the free encyclopedia</a></li>
<li><a href="http://insideria.com/2010/05/building-web-sites-optimized-f.html">Building Web sites optimized for the iPhone and Android OS 2 &#8211; InsideRIA</a></li>
<li><a href="http://www.forum.nokia.com/info/sw.nokia.com/id/6ecc53c6-9aa1-4ca9-b05c-c5d4ce7b447a/Cross-Browser_Guidelines.html">Cross-Browser Guidelines</a></li>
<li><a href="http://mobilephonedevelopment.com/archives/911">Mobile Phone Development &#8211; There is no WebKit on Mobile</a></li>
<li><a href="http://www.quirksmode.org/m/table.html">Mobile compatibility tables</a></li>
<li><a href="http://www.noupe.com/how-tos/mobile-web-design-tips-and-best-practices.html">Mobile Web Design: Tips and Best Practices &#8211; Noupe Design Blog</a></li>
<li><a href="http://en.wikipedia.org/wiki/Comparison_of_web_browsers">Comparison of web browsers &#8211; Wikipedia, the free encyclopedia</a></li>
<li><a href="http://webtrends.about.com/od/mobileweb20/tp/list_of_mobile_web_browsers.htm">A List of Mobile Web Browsers &#8211; Top Mobile Web Browser List</a></li>
<li><a href="http://www.klauskomenda.com/archives/2008/03/17/testing-on-mobile-devices-using-emulators/">Testing on Mobile Devices using Emulators « klauskomenda.com</a></li>
<li><a href="http://en.wikipedia.org/wiki/Ajax_(programming)">Ajax (programming) &#8211; Wikipedia, the free encyclopedia</a></li>
<li><a href="http://www.deviceanywhere.com/mobile-application-testing-web.html">Solutions for Mobile Website and Web Application Developers</a></li>
<li><a href="http://www.modernizr.com/">Modernizr &#8211; runtime test</a></li>
<li><a href="http://developer.apple.com/library/safari/#documentation/InternetWeb/Conceptual/iPhoneWebAppHIG/MetricsLayout/MetricsLayout.html">iPhone Human Interface Guidelines for Web Applications: Metrics, Layout Guidelines, and Tips</a></li>
<li><a href="http://www.w3.org/TR/mobile-bp/">Mobile Web Best Practices 1.0</a></li>
<li><a href="http://library.forum.nokia.com/index.jsp?topic=/Design_and_User_Experience_Library/GUID-E653B16D-5CF6-4BC5-A64F-910D22228DF9.html">Design and User Experience Library &#8211; Screen size</a></li>
<li><a href="http://en.wikipedia.org/wiki/List_of_iOS_devices">List of iOS devices &#8211; Wikipedia, the free encyclopedia</a></li>
<li>JQuery
<ul>
<li><a href="http://building-iphone-apps.labs.oreilly.com/ch04.html">Chapter 4. Animation &#8211; jQuery</a></li>
<li><a href="http://www.jqtouch.com/">jQTouch — jQuery plugin for mobile web development</a></li>
<li><a href="http://insideria.com/2010/09/mobile-tools-and-tricks-with-j.html">Mobile Tools and Tricks with jQuery &#8211; InsideRIA</a></li>
<li><a href="http://jquerymobile.com/gbs/">Mobile Graded Browser Support | jQuery Mobile</a></li>
<li><a href="http://forum.jquery.com/topic/developer-preview-alpha-release">Developer Preview? Alpha Release? &#8211; jQuery Forum</a></li>
</ul>
</li>
</ul>
<h3>Html5</h3>
<ul>
<li><a href="http://www.callingallgeeks.org/html5-test-for-mobile-browsers/">HTML5 Test for Mobile Browsers</a></li>
<li><a href="http://insideria.com/2010/08/html45-mobile-applications.html">HTML4/5 Mobile Applications &#8211; InsideRIA</a></li>
<li><a href="http://html5test.com/">The HTML5 test &#8211; How well does your browser support HTML5?</a></li>
<li><a href="http://html5boilerplate.com/">HTML5 Boilerplate &#8211; A rock-solid default for HTML5 awesome.</a></li>
<li><a href="http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009523">Safari HTML5 Audio and Video Guide: Introduction</a></li>
<li><a href="http://developer.symbian.org/forum/showthread.php?p=27896">HTML5 support &#8211; Symbian developer community forums</a></li>
<li><a href="http://html5demos.com/">HTML5 Demos and Examples</a></li>
<li><a href="http://slides.html5rocks.com/#slide1">HTML5 presentation</a></li>
</ul>
<h3>Symbian</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Web_Browser_for_S60">Web Browser for S60 &#8211; Wikipedia, the free encyclopedia</a></li>
<li><a href="http://en.wikipedia.org/wiki/S60_platform">S60 (software platform) &#8211; Wikipedia, the free encyclopedia</a></li>
<li><a href="http://developer.symbian.org/wiki/index.php/Symbian_Emulator">Symbian Emulator &#8211; Symbian Developer Community</a></li>
<li><a href="http://www.youtube.com/watch?v=aJmwQqW0_6k">YouTube &#8211; How to setup the Symbian Emulator</a></li>
<li><a href="http://www.mobile-review.com/review/nokia-webbrowser-en.shtml">Mobile-review.com Description Nokia Web Browser S60 (OSS Browser)</a></li>
<li><a href="https://www.deviceanywhere.com/nokia_vdl/Nokia_virtual_developer_lab.html">Nokia Virtual Developer Lab &#8211; The Source for Testing Mobile Applications on Nokia Mobile Devices</a></li>
<li><a href="http://library.forum.nokia.com/index.jsp?topic=/Web_Developers_Library/GUID-D5C6212A-5EF2-44BF-B1F0-650A5F57D501.html">Symbian Web Browser versions and device support</a></li>
<li><a href="http://wiki.forum.nokia.com/index.php/Porting_iPhone_web_applications_to_S60_5th_Edition">Porting iPhone web applications to S60 5th Edition &#8211; Forum Nokia Wiki</a></li>
</ul>
<h3>Android</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Comparison_of_Android_devices">Comparison of Android devices &#8211; Wikipedia, the free encyclopedia</a></li>
<li><a href="http://developer.android.com/guide/practices/screens_support.html">Supporting Multiple Screens | Android Developers</a></li>
</ul>
<h3>Blackberry</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/BlackBerry_OS">BlackBerry OS &#8211; Wikipedia, the free encyclopedia</a></li>
<li><a href="http://docs.blackberry.com/en/developers/deliverables/11844/BB_Browser_content_support_by_version_438586_11.jsp">JavaScript support</a></li>
<li><a href="http://docs.blackberry.com/en/developers/?userType=21">Main Page</a></li>
</ul>
<h3>Opera Mobile</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Opera_Mobile">wiki page</a></li>
<li><a href="http://www.opera.com/docs/specs/productspecs/">web browser compatibility</a></li>
<li><a href="http://en.wikipedia.org/wiki/Presto_layout_engine">opera mobile engine called presto</a></li>
<li><a href="http://www.opera.com/developer/tools/">Opera Developer Network | Opera Developer Tools</a></li>
</ul>
<h3>Other</h3>
<ul>
<li><a href="http://51degrees.mobi/Default.aspx?TabId=87&amp;AspxAutoDetectCookieSupport=1">Mobile Device Emulators</a></li>
</ul>
<p style="text-align: left">
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/tips-for-developers/testing-mobile-web-phones-and-platforms-to-focus-on/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google TV Application Development</title>
		<link>http://nomtek.com/uncategorized/google-tv-application-development/</link>
		<comments>http://nomtek.com/uncategorized/google-tv-application-development/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 18:03:24 +0000</pubDate>
		<dc:creator>Krzysztof</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[digital tv]]></category>
		<category><![CDATA[google tv]]></category>
		<category><![CDATA[interactive tv]]></category>
		<category><![CDATA[stb]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://nomtek.com/?p=418</guid>
		<description><![CDATA[
Current situation
Interactive TV is not a new technology. Software stacks for set top boxes and digital TV standards like MHP, OCAP, MHEG are being developed and used for many years now. These software stacks have well-defined APIs that allow writing &#8230; <a href="http://nomtek.com/uncategorized/google-tv-application-development/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste"><strong><img class="size-full wp-image-465 alignleft" title="pic.by Sony/Google" src="http://nomtek.com/wp-content/uploads/Google-TV-e1287599857624.jpg" alt="pic.by Sony/Google" width="148" height="104" /></p>
<p>Current situation<br /></strong></div>
<div id="_mcePaste">Interactive TV is not a new technology. Software stacks for set top boxes and digital TV standards like MHP, OCAP, MHEG are being developed and used for many years now. These software stacks have well-defined APIs that allow writing applications for TV screens. Example applications are EPGs (Electronic Program Guides) which are embedded into TV sets or STBs (Set Top Boxes). Most of the digital TV software stacks allow to broadcast applications together with video over the air/cable/satellite and bind them to the viewed TV channels/events/programs. For example football transmission event may be broadcast together with an app showing all results in the league &#8211; such app would be often accessible by pressing red/yellow/blue or green button on the TV remote controller. After the event is finished, the application would automatically close and would not be accessible any more, making place for apps specific for the next broadcast content. Browsing internet from TV set is also not a new idea &#8211; most of the stacks have embedded web browser and STBs can connect to the internet by various means.</div>
<div><strong><br />So what is new about Google TV<br /></strong></div>
<div id="_mcePaste">Although Android is not as open as it could be, Google TV will probably be more open than any other significant initiative that the TV world has seen:</div>
<div id="_mcePaste">
<ul>
<li><span style="font-size: 13px; line-height: 19px;">TV and STB manufacturers will have better access to the platform&#8217;s source code and will be able to contribute to it.</span></li>
<li><span style="font-size: 13px; line-height: 19px;">Google TV will support Android Market for downloading and installing applications selected / paid for by the user and created by any third party &#8211; in contrast to being limited to the apps provided by the broadcasters. For start, the users will be able to choose among hundreds of thousands of existing Android applications. For example, one thing I already know I&#8217;d like to do with my TV is to install existing<a href="http://www.androidzoom.com/android_applications/entertainment/ted-mobile_bbps.html"> Android TED application</a> on it and watch TED talks.</span></li>
</ul>
</div>
<div id="_mcePaste">This is a huge opportunity for existing mobile/internet businesses, new start-ups and application developers &#8211; this is first time app developers will have a mass scale way for their applications to get on people&#8217;s TV screens.</div>
<div><strong><br />Risks<br /></strong></div>
<div id="_mcePaste">Involvement from Sony gives a great promise, but nobody really knows yet how well Google TV will sell on the market. Google TV will also have to catch up with new TV developments like 3D channels.</div>
<div><strong><br />TV application development &#8211; what is specific?<br /></strong></div>
<div id="_mcePaste">TV screen is different to mobile and desktop computers, thus the TV applications need to be designed differently. I believe we still have to find the best design patterns for TV apps, but here are some things that already come to mind:</div>
<div id="_mcePaste">
<ul>
<li><span style="font-size: 13px; line-height: 19px;">Like in the mobile world, TV apps will probably be used mostly for consuming the content (watching videos, reading news, blogs etc). Content creation (like writing blogs) is not very convenient on TV even with full-keyboard remote controller, so such features should be simplified on TV and implemented in desktop versions of the services.</span></li>
<li><span style="font-size: 13px; line-height: 19px;">Interestingly, like on the mobile screen, the TV screen should not contain too much content on single view. This is because of the high distance from TV to the user. Also, the user may be distracted by other activities he/she is performing at the same time in the same room, so must be possible to easily focus on the actions in the app.</span></li>
<li><span style="font-size: 13px; line-height: 19px;">Unlike in mobile touch-screen world, on TV it will be difficult to scroll the content, so all important info/options should be available on one screen.</span></li>
<li><span style="font-size: 13px; line-height: 19px;">TV apps should provide less interactivity and be more automated. For example, after user finished watching the video, the next video should start automatically. TV app user expects it to be working &#8216;in the background&#8217;.</span></li>
<li><span style="font-size: 13px; line-height: 19px;">TV app designers should consider the possibility of watching current TV channel and using the app simultaneously &#8211; they should devote part of the screen to the video even if the app is performing completely different tasks like instant messaging.</span></li>
</ul>
</div>
<div id="_mcePaste"><strong><br />Consequences<br /></strong></div>
<div id="_mcePaste">Some people already say that <a href="http://www.wired.com/magazine/2010/08/ff_webrip/all/1">Web is Dead</a> &#8211; the world is going to use services not via Web but via applications that are better fit for purpose. TV applications have not been a huge success so far. TV screen is different than other platforms and we still have to discover how we want to use the applications on it. Google TV will unleash developer&#8217;s creativity and provide them with instant feedback from the users, who will be able to vote with their remote controllers by choosing apps to install.  Interesting possibilities and era of TV innovation is coming!</div>
<div><strong><br />Hint<br /></strong></div>
<div id="_mcePaste">If you need to hire a team of Google TV developers, graphics artists and usability experts? Please contact Nomtek with this <a href="http://nomtek.com/contact/">Contact Form</a>.</div>
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/uncategorized/google-tv-application-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementing 2D Page Flip effect on iPhone OS</title>
		<link>http://nomtek.com/tips-for-developers/page-flip-2d/</link>
		<comments>http://nomtek.com/tips-for-developers/page-flip-2d/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 12:51:43 +0000</pubDate>
		<dc:creator>Paweł</dc:creator>
				<category><![CDATA[Tips for Developers]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[cocos2d]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[flip curl]]></category>
		<category><![CDATA[flip page]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://nomtek.com/?p=316</guid>
		<description><![CDATA[(Video: Watch this video on the post page)
2d page flip animation created using cocos2d framework.

Page flip (or page curl) effect is very popular on the touch devices. It&#8217;s used as a transition effect  between two views, often found in &#8230; <a href="http://nomtek.com/tips-for-developers/page-flip-2d/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>(Video: Watch this video on the post page)</p>
<div style="text-align: center;">2d page flip animation created using <strong>cocos2d</strong> framework.</div>
<p></p>
<div><strong>Page flip</strong> (or <strong>page curl</strong>) effect is very popular on the touch devices. It&#8217;s used as a <strong>transition</strong> effect  between two views, often found in electronical books to move to the  next page. There are many techniques of doing page flip effect. I would  divide them into three groups:</div>
<div>
<ol>
<li>2d animation</li>
<li>3d animation</li>
<li>animation based on set of images</li>
</ol>
</div>
<div>In  this article we will focus only on the first technique. I will show you  how to make a simple page flip on a flat plane (2d) (see video above). A  3d version of that effect works similar but is more complicated and  will be soon explained in a <a href="http://nomtek.com/developers/page-flip-3d/" target="_self">separate article</a>. If you are interested in the approach based on the set of images you can visit <a href="http://www.google.com/url?q=http%3A%2F%2Fdarknoon.com%2Fblog%2F2008%2F12%2F08%2Fdeconstructing-classicsapp%2F&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzc_SVbGjLfKkN2i07Ml2dvWzOEMRQ" target="_blank">Darknoon blog</a> for more info.</div>
<div><span style="font-size: medium;"><strong><br />A flat plane</p>
<p></strong></span></div>
<div>The easiest algorithm that came to my mind is based on animating vertices of a <strong>grid</strong> spread across a page of a virtual book &#8211; see picture 1.</div>
<p></p>
<div><a href="http://nomtek.com/wp-content/uploads/pageflip-grid.png" title="" target="_blank"><img class="aligncenter size-full wp-image-321" src="http://nomtek.com/wp-content/uploads/pageflip-grid.png" alt="" width="100%" height="160" /></a></div>
<div style="text-align: center;">Pic.1. Two pages of a book. Right page is covered by a grid.</div>
<p></p>
<div>First  you need to draw a bottom page of your book and then the grid covered  with a texture of the top page (see picture 2). At this point I assume  you know the basics of any graphics framework (e.g. <strong>OpenGL</strong>)  and know how to draw a textured triangle. I&#8217;m not going to explain it  in this article. All codes shown in this article apply only to update  the effect and not to draw it.</div>
<p></p>
<div><a href="http://nomtek.com/wp-content/uploads/pageflip-two-pages1.png" title="" target="_blank"><img class="aligncenter size-full wp-image-324" src="http://nomtek.com/wp-content/uploads/pageflip-two-pages1.png" alt="" width="100%" height="160" /></a></div>
<div style="text-align: center;">Pic.2. Page flip in action.</div>
<p></p>
<div>All  the rest of the algorithm consists in moving vertices in a proper way.  So in every frame we will visit all vertices and update their position.  In a pseudo-code it will look like:</div>
<div>
<pre style="overflow: scroll;"><code>Vertex v;
for v in grid.vertices
{
    update v;
}</code></pre>
</div>
<div>To  find out how to move vertices to simulate folding paper have a look at  the image below (picture 3). As you can notice we will treat the edge of  the folding page as a <strong>symmetry axis</strong> around which we will <strong>reflect</strong> vertices. Which  vertices need to be reflected? All that are in front of the symmetry  axis (or behind &#8211; depends on your line equation). In the picture 3, N is  a normal vector of the symmetry axis which indicates the front of the  axis, C is a sample point on the front side and C&#8217; is a reflected point.</div>
<p></p>
<div><a href="http://nomtek.com/wp-content/uploads/flippage-symetry-axis.png"><img class="aligncenter size-full wp-image-320" src="http://nomtek.com/wp-content/uploads/flippage-symetry-axis.png" alt="" width="100%" height="200" /></a></div>
<div style="text-align: center;">Pic.3. The edge of the folding page with the symmetry axis.</div>
<p></p>
<div>Updating vertices with reflection included is shown in the following code:</div>
<div>
<pre style="overflow: scroll;"><code>Line line;
Vertex v;
for v in grid.vertices
{
   const float distance = PointToLineDistance(v, line);
   if (distance &gt; 0)
   {
      reflect(v, line);
   }
}
</code></pre>
</div>
<div><code>PointToLineDistance</code> is a function which returns a distance between the <code>line</code> and the vertex <code>v</code>. When <code>distance</code> is less than 0 it means the vertex is behind the <code>line</code>. <code>reflect</code> function does a reflection of the vertex <code>v</code> across the <code>line</code>.</div>
<div>The final effect can be achieved by moving and rotating the symmetry axis in time (see picture 4).</div>
<p></p>
<div style="text-align: center;"><a href="http://nomtek.com/wp-content/uploads/flippage-axis-animation.png"><img class="aligncenter size-full wp-image-319" src="http://nomtek.com/wp-content/uploads/flippage-axis-animation.png" alt="" width="100%" height="229" /></a></div>
<div style="text-align: center;">Pic.4. An algorithm of animate the symmetry axis.</div>
<p></p>
<div>To move and rotate the symmetry axis properly let&#8217;s mark two  points: P1 and P2. In every frame we will create the symmetry axis  based on these points. The position of the point P1 will be determined  by a <a href="http://www.google.com/url?q=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FLinear_interpolation&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzcms_Pchco5k9DQLSmMHGhruUElQQ" target="_blank">linear interpolation</a> between  points B&#8217; and A. Similar with the point P2. We will interpolate its  position between points C and D. So why did we get point B&#8217; instead of  B? It&#8217;s because if we got point B our symmetry axis would be always  vertical. Vertical symmetry axis is not bad but effect looks nicer if  the symmetry axis is oblique.</div>
<div>The whole update function of two-dimensional page flip effect can look like the code below. The <code>update</code> function should be called only for the duration of the effect with the argument <code>progressFactor</code> with values between 0 and 1 (0 means the begining of the effect, 1 means the whole page has been flipped). There is a <code>lerp(A, B, s)</code> function used  which interpolates A towards B by s. s is clamped between 0 and 1. When  s = 0 it returns A. When s = 1 the result is B. When s = 0.5 it returns  the average of A and B. <code>lerp(A, B, s)</code> can be evaluated to the following form: A*(1-s) + B*s.</div>
<div>A <code>sqrt(x)</code> is a square root of <code>x</code>. We use the <code>sqrt</code> function  to make the symmetry axis moving faster at the beginning of the effect  and slower at the end. Try to experiment with the <code>s</code> value, pass the result to the <code>lerp</code> function and see what you get. Note that both <code>s</code> and <code>progressFactor</code> values have the range from 0 to 1.</div>
<div>
<pre style="overflow: scroll;"><code>// progressFactor is a value from 0 to 1
void update(float progressFactor)
{
    // play with other values:
    // e.g.: s = progressFactor;  or  s = progressFactor * progressFactor;
    const float s = sqrt(progressFactor);
    Point P1 = lerp(B', A, s);
    Point P2 = lerp(C, D, s);
    Line line = CreateLineFromPoints(P1, P2);
    Vertex v;
    for v in grid.vertices
    {
        const float distance = PointToLineDistance(v, line);
        if (distance &gt; 0)
        {
            reflect(v, line);
        }
    }
}
</code></pre>
</div>
<div>This  is the whole magic of the 2d page flip effect. Note that only x and y  point&#8217;s coordinates are modified. The z coordinate (depth) stays  unchanged.</div>
<p></p>
<div><span style="font-size: medium;"><strong>Summary</strong></span></div>
<p></p>
<div>Algorithm  presented in this article is very easy to understand and implement. If  you still don&#8217;t understand how it works or have any doubts, it&#8217;s because  of my inability to share technical knowledge:) If in doubt, feel free to  leave a comment. The page flip effect presented in the video above is  not perfect and can be improved in many ways. Below you have some hints  on how to tweak the effect.</div>
<div>
<ul>
<li>You don&#8217;t need to update all vertices all the time (in the first stage of the animation most of them stay unchanged).</li>
<li>Play with grid&#8217;s dimensions and find values that best meet your needs</li>
<li>In 2d case you don&#8217;t need to use a grid at all, it will be much faster if you use just a few triangles (at least four I guess) but it&#8217;ll be much more difficult to draw them properly.</li>
<li>Take  into account a density of the grid, if you animate only right side of  your book then left side doesn&#8217;t need to be covered by grid (or grid can  be thinner on this side).</li>
<li>Think about adding some  shadows/lights to make the effect more realistic (I would try to write a  pixel shader or play with a shadow texture).</li>
<li>Note that the  effect may look different on different platforms as it depends on many  factors (e.g. camera settings, projection matrix, viewport resolution,  etc.).</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/tips-for-developers/page-flip-2d/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>NOMTEK delivers iPhone and iPad App for MyHammer.DE</title>
		<link>http://nomtek.com/our-projects/nomtek-helps-myhammer-de-to-deliver-iphone-app/</link>
		<comments>http://nomtek.com/our-projects/nomtek-helps-myhammer-de-to-deliver-iphone-app/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 10:38:31 +0000</pubDate>
		<dc:creator>Tomasz</dc:creator>
				<category><![CDATA[Our Projects]]></category>

		<guid isPermaLink="false">http://nomtek.com/?p=258</guid>
		<description><![CDATA[




&#160;






MyHammer.de is an online directory of small businesses and skilled individuals that can deliver services such as construction, plumbing, gastronomy, transport and many more. With over 6 million searches per month, MyHammer is the number 1 website for finding tradesmen &#8230; <a href="http://nomtek.com/our-projects/nomtek-helps-myhammer-de-to-deliver-iphone-app/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<table width="100%">
<tr>
<td width="208">
<a href="http://nomtek.com/wp-content/uploads/01_MyHammer_Main_DE_320x461-208x300.png" title="" target="_blank"><img src="http://nomtek.com/wp-content/uploads/01_MyHammer_Main_DE_320x461-208x300.png" width="208" height="300" /></a>
</td>
<td>&nbsp;</td>
<td width="208">
<a href="http://nomtek.com/wp-content/uploads/05_MyHammer_Profile_DE_320x4611-208x300.png" title="" target="_blank"><img src="http://nomtek.com/wp-content/uploads/05_MyHammer_Profile_DE_320x4611-208x300.png" width="208" height="300" /></a>
</td>
</tr>
</table>
<p></p>
<p><a href="http://myhammer.de">MyHammer.de</a> is an online directory of small businesses and skilled individuals that can deliver services such as construction, plumbing, gastronomy, transport and many more. With over 6 million searches per month, MyHammer is the number 1 website for finding tradesmen and service providers in Germany, Austria and the United Kingdom.</p>
<p>Now with the help of the application written by <a href="http://nomtek.com/">NOMTEK</a> it is possible to search the database using an iPhone or iPad in a convenient way.</p>
<p><a href="http://itunes.apple.com/us/app/myhammer/id388632579?mt=8">Click Here to See the App in the Apple App Store.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/our-projects/nomtek-helps-myhammer-de-to-deliver-iphone-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New version of RKFinder demoed on iPad</title>
		<link>http://nomtek.com/our-projects/new-version-of-rkfinder-demoed-on-ipad/</link>
		<comments>http://nomtek.com/our-projects/new-version-of-rkfinder-demoed-on-ipad/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 17:10:32 +0000</pubDate>
		<dc:creator>Tomasz</dc:creator>
				<category><![CDATA[Our Projects]]></category>

		<guid isPermaLink="false">http://nomtek.com/wordpress/?p=168</guid>
		<description><![CDATA[The IPhone App we wrote for Restaurant-Kritik.de now runs natively on IPad. Check out this YouTube video (in German language):

(Video: Watch this video on the post page)
]]></description>
			<content:encoded><![CDATA[<div><a href="http://nomtek.com/our-projects/iphone-app-for-restaurant-kritik-de/">The IPhone App we wrote for Restaurant-Kritik.de</a> now runs natively on IPad. Check out this YouTube video (in German language):</div>
<p></p>
<p>(Video: Watch this video on the post page)</p>
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/our-projects/new-version-of-rkfinder-demoed-on-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working with pickers</title>
		<link>http://nomtek.com/tips-for-developers/working-with-pickers/</link>
		<comments>http://nomtek.com/tips-for-developers/working-with-pickers/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 08:39:17 +0000</pubDate>
		<dc:creator>Paweł</dc:creator>
				<category><![CDATA[Tips for Developers]]></category>
		<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[inputaccessoryview]]></category>
		<category><![CDATA[inputview]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[uipickerview]]></category>

		<guid isPermaLink="false">http://nomtek.com/?p=239</guid>
		<description><![CDATA[
Recently we had to create a registration form which allows you to set some different data like country, language, first and last name, date of birth, etc. It&#8217;s not a problem to edit text-like properties. All you need is to &#8230; <a href="http://nomtek.com/tips-for-developers/working-with-pickers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="text-align: center"><a href="http://nomtek.com/wp-content/uploads/working_with_pickers.png"><img class="size-medium wp-image-243" src="http://nomtek.com/wp-content/uploads/working_with_pickers-161x300.png" alt="" width="161" height="300" /></a></div>
<p>Recently we had to create a registration form which allows you to set some different data like country, language, first and last name, date of birth, etc. It&#8217;s not a problem to edit text-like properties. All you need is to create a <strong>UITextField</strong>. Everything else is done automatically. When a text field gets a focus (or becomes a first responder &#8211; using <strong>iPhone</strong>&#8216;s language) a keyboard panel appears at the bottom and you can change the field&#8217;s content.</p>
<p>But for some other fields &#8211; I&#8217;d like them to behave like combo boxes. Instead of typing the whole name of a country I prefer to select it from the list. <strong>Cocoa Touch framework</strong> doesn&#8217;t have a combo box &#8211; known from desktop apps &#8211; but it has something called <strong>UIPickerView</strong>. A UIPickerView is in fact a kind of combo box adopted to a multitouch device. So is <strong>UIDatePicker</strong>. The problem I faced using iPhone&#8217;s pickers was how to link them to the text fields. I found a hacky solution which consists in using a UIButton instead of UITextField and showing up a picker manually when the button is tapped. But there is much better and proper solution &#8211; <strong>inputView</strong>.</p>
<p>InputView is a property of <strong>UIResponder</strong> class &#8211; so also of UITextFiled class. When you set it to any custom view that view will appear any time your control becomes a first responder. Cool and smooth solution, isn&#8217;t it?</p>
<p>Below is a a piece of code of hooking up a UIPickerView to the UITextField.</p>
<pre style="overflow: scroll"><code>UIPickerView *countryPicker = [[UIPickerView alloc] initWithFrame:CGRectZero];
countryPicker.delegate = self;
countryPicker.dataSource = self;
[countryPicker setShowsSelectionIndicator:YES];
countryTextField.inputView = countryPicker;
[countryPicker release];
</code></pre>
<p>It&#8217;s all you need to show up a UIPickerView when you tap on a text field. Handling picker&#8217;s delegates is very easy.</p>
<p>For the <strong>UIPickerViewDataSource</strong> you just need to give a number of rows and columns of the picker view.</p>
<pre style="overflow: scroll"><code>- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return countries.count;
}
</code></pre>
<p><strong>UIPickerViewDelegate</strong> is used to:<br />
- tell the control what values should be displyed at each row/column<br />
- update the text field with already selected value</p>
<pre style="overflow: scroll"><code>- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [countries objectAtIndex:row];
}

- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    countryTextField.text = (NSString *)[countries objectAtIndex:row];
}
</code></pre>
<p>Of course you can assign your custom view not only to UITextField objects but also to other UIControl-derived objects (UIControl inherits from UIView and UIView from UIResponder).<br />
If you want to use the inputView property with buttons you have to create a new class that derives from UIButton, make inputView property writable and override canBecomeFirstResponder method (see the code below).</p>
<p>Header file</p>
<pre style="overflow: scroll"><code>@interface CustomButton : UIButton
{
    UIView *_inputView;
}

@property (nonatomic, retain) UIView *inputView;

@end
</code></pre>
<p>Source file</p>
<pre style="overflow: scroll"><code>#import "CustomButton.h"

@implementation CustomButton

@synthesize inputView = _inputView;

- (BOOL) canBecomeFirstResponder
{
    return YES;
}

@end
</code></pre>
<p>Tip:</p>
<div style="text-align: center"><a href="http://nomtek.com/wp-content/uploads/working_with_pickers_safari.png"><img class="size-full wp-image-245" src="http://nomtek.com/wp-content/uploads/working_with_pickers_safari.png" alt="" width="172" height="320" /></a></div>
<p>If you wonder how to display a toolbar or any other view above your keyboard or picker (see picture above) then have a look at <strong>inputAccessoryView</strong> &#8211; another property of UIResponder class. It works exactly the same as the inputView.</p>
<p>The sample code for this article can be found <a href="http://nomtek.com/wp-content/uploads/InputView.zip">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nomtek.com/tips-for-developers/working-with-pickers/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

