<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7442968962734439468</atom:id><lastBuildDate>Sun, 05 Apr 2026 23:07:21 +0000</lastBuildDate><category>Sencha Touch</category><category>JavaScript</category><category>PhoneGap</category><category>Cordova</category><category>Mac</category><category>OS X</category><category>Android</category><category>iOS</category><category>Sencha</category><category>Windows Phone</category><category>Chrome</category><category>Apache</category><category>Eclipse</category><category>ExtJS</category><category>Featured</category><category>Xcode</category><category>HTML5</category><category>Microsoft Visual Studio</category><category>css</category><category>icefaces</category><category>icon fonts</category><category>jQuery</category><category>Debugging</category><category>JSF</category><category>Java</category><category>Sencha Architect</category><category>Simulator</category><category>Spket</category><category>Ubuntu</category><category>Web SQL</category><category>Windows</category><category>Windows 8</category><category>XAMPP</category><category>iPad</category><category>iPhone</category><category>media</category><category>Adobe</category><category>Aptana</category><category>Backup</category><category>CLI</category><category>CS6</category><category>Datetime</category><category>Disk Image</category><category>Emulator</category><category>Encryption</category><category>Ext.Logger</category><category>Firefox</category><category>GPS</category><category>Game</category><category>Geolocation</category><category>HTML</category><category>JSONP</category><category>Language Pack</category><category>List</category><category>LocalStorage</category><category>Logging</category><category>Mobile</category><category>MySQL</category><category>MySQL Workbench</category><category>Netatalk</category><category>Node.js</category><category>PHP</category><category>Performance</category><category>Photoshop</category><category>Proxies</category><category>Proxy</category><category>Remote</category><category>SQLite</category><category>Safari</category><category>Screenshot</category><category>Script Manager</category><category>Shell</category><category>Shortcut</category><category>Store</category><category>Terminal</category><category>Testing</category><category>TimeMachine</category><category>WP</category><category>XHR</category><category>XMLHttpRequest</category><category>bean</category><category>cmdhere</category><category>coding</category><category>explorer</category><category>facesconfig</category><category>iPod</category><category>ice</category><category>jQuery Mobile</category><category>jmeter</category><category>load testing</category><category>localStore</category><category>outputstyle</category><category>picto</category><category>prototype</category><category>registry</category><category>renderer</category><category>ria</category><category>sass</category><category>scope</category><category>servlet</category><category>stress testing</category><category>theming</category><title>tech amigos</title><description>All about the technical stuff.</description><link>http://tol8.blogspot.com/</link><managingEditor>noreply@blogger.com (JH)</managingEditor><generator>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-5194813402113970044</guid><pubDate>Wed, 24 Feb 2016 11:07:00 +0000</pubDate><atom:updated>2016-02-24T12:07:32.139+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Apache</category><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">Featured</category><title>Migrate your Cordova app(s) to Apache Cordova v.4.1.1 or higher</title><description>&lt;div class=&quot;tr_bq&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixD4EP7MmDWPWwpR1WhfHLwQ_VymBnSDUECsWKLZ_uKoTNHxwtOWn5oV9yqFis7-kSKqP31kUZHuEzyX14L6WeAaN6u7g-8IvtZrvnvvsA2JhBC3Wi7VNSxHSb7c22y8L6E3hfVm5PaDA/s1600/tablet-777652_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixD4EP7MmDWPWwpR1WhfHLwQ_VymBnSDUECsWKLZ_uKoTNHxwtOWn5oV9yqFis7-kSKqP31kUZHuEzyX14L6WeAaN6u7g-8IvtZrvnvvsA2JhBC3Wi7VNSxHSb7c22y8L6E3hfVm5PaDA/s640/tablet-777652_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Recently Cordova developers were informed by Google over security vulnerabilities:&lt;/div&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Google Play warning: You are using a vulnerable version of Apache Cordova&lt;br /&gt;
&lt;br /&gt;
Hello Google Play Developer,&lt;br /&gt;
Your app(s) listed at the end of this email utilize a version of Apache Cordova, an open-source mobile development framework, that contains one or more security vulnerabilities. If you have more than 20 affected apps in your account, please check the Developer Console for a full list.&lt;br /&gt;
Please migrate your app(s) to Apache Cordova v.4.1.1 or higher as soon as possible and increment the version number of the upgraded APK. Beginning May 9, 2016, Google Play will block publishing of any new apps or updates that use pre-4.1.1 versions of Apache Cordova.&lt;br /&gt;
The vulnerabilities were addressed in Apache Cordova 4.1.1. If you’re using a 3rd party library that bundles Apache Cordova, you’ll need to upgrade it to a version that bundles Apache Cordova 4.1.1 or later.&lt;br /&gt;
To confirm you’ve upgraded correctly, submit the updated version to the Developer Console and check back after five hours. If the app hasn’t been correctly upgraded, we will display a warning.&lt;br /&gt;
For information about the vulnerabilities, please see this Google Help Center article. For other technical questions, you can post to Stack Overflow and use the tag “android-security.”&lt;br /&gt;
While these specific issues may not affect every app that uses Apache Cordova, it’s best to stay up to date on all security patches. Apps with vulnerabilities that expose users to risk of compromise may be considered Dangerous Products in violation of the Content Policy and section 4.4 of the Developer Distribution Agreement.&lt;br /&gt;
Apps must also comply with the Developer Distribution Agreement and Content Policy. If you feel we have sent this warning in error, contact our policy support team through the Google Play Developer Help Center.&lt;br /&gt;
Regards,&lt;br /&gt;
The Google Play Team&lt;br /&gt;
©2016 Google Inc. 1600 Amphitheatre Parkway, Mountain View, CA 94043&lt;br /&gt;
Email preferences: You have received this mandatory email service announcement to update you about important changes to your Google Play Developer account.&lt;br /&gt;
&lt;br /&gt;
Affected App(s) and Version(s): ...&lt;/blockquote&gt;
Lets face it, Google is forcing Cordova developers to update their Cordova apps, otherwise it is impossible to release any updates after May 9, 2016 in the Google Play store.&lt;br /&gt;
&lt;br /&gt;
To check the current Android platform version:&lt;br /&gt;
$ cordova platform version android&lt;br /&gt;
&lt;br /&gt;
One of the biggest changes while upgrading the Android platform is probably that the minSdkVersion has been switched from 7 to 14.&lt;br /&gt;
&lt;br /&gt;
For more details, check this &lt;a href=&quot;https://cordova.apache.org/announcements/2015/07/21/cordova-android-4.1.0.html&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt; too.&lt;br /&gt;
&lt;br /&gt;
To upgrade, enter:&lt;br /&gt;
$ cordova platform update android@4.1.1&lt;br /&gt;
&lt;br /&gt;
From my personal experience with Cordova, I recommend you to check the whole app carefully after every update. Make sure everything work like expected.</description><link>http://tol8.blogspot.com/2016/02/migrate-your-cordova-apps-to-apache.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixD4EP7MmDWPWwpR1WhfHLwQ_VymBnSDUECsWKLZ_uKoTNHxwtOWn5oV9yqFis7-kSKqP31kUZHuEzyX14L6WeAaN6u7g-8IvtZrvnvvsA2JhBC3Wi7VNSxHSb7c22y8L6E3hfVm5PaDA/s72-c/tablet-777652_1920.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-3846855826243398884</guid><pubDate>Tue, 19 Jan 2016 10:50:00 +0000</pubDate><atom:updated>2016-01-19T12:08:11.854+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Chrome</category><category domain="http://www.blogger.com/atom/ns#">Debugging</category><title>Chrome - Custom console output with CSS</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgctt1kQpqarhEjWOb7ttkzoG16g8S7c9N37bsaZ2FYRlyjZ902lGBAN5MK8cxjXtaSunwxbxU_LJtCufEENDfw3WJAfEaEkWC6Ag6UYki5w0_nF6worXAJicqEOHT0aQlkZdb7Yzt1KK4/s1600/colored-pencils-686679_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgctt1kQpqarhEjWOb7ttkzoG16g8S7c9N37bsaZ2FYRlyjZ902lGBAN5MK8cxjXtaSunwxbxU_LJtCufEENDfw3WJAfEaEkWC6Ag6UYki5w0_nF6worXAJicqEOHT0aQlkZdb7Yzt1KK4/s640/colored-pencils-686679_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Another handy feature of the Chrome console is that you can influence the console output with CSS.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD1RbCzSmihyphenhyphen0gA_tF3zzb_U8_rjHtiUHHs0LpQWe0zgrUAxpYRA5Mu7Cfz787lPvVLVX4ibh4JFtHhS3LN_IFE6RshEv-1pBFGb165kXZHDifg6lN1U2hmYKlcw2ccu3j88jatvbw5-U/s1600/cool_line.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD1RbCzSmihyphenhyphen0gA_tF3zzb_U8_rjHtiUHHs0LpQWe0zgrUAxpYRA5Mu7Cfz787lPvVLVX4ibh4JFtHhS3LN_IFE6RshEv-1pBFGb165kXZHDifg6lN1U2hmYKlcw2ccu3j88jatvbw5-U/s640/cool_line.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
This feature is extremely useful in avoiding the overlooking of the important parts when you have a lot of text to display.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;console.log(&quot;%cA cool line&quot;, &quot;color: red; font-size: x-large&quot;);&lt;/pre&gt;
</description><link>http://tol8.blogspot.com/2016/01/chrome-custom-console-output-with-css.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgctt1kQpqarhEjWOb7ttkzoG16g8S7c9N37bsaZ2FYRlyjZ902lGBAN5MK8cxjXtaSunwxbxU_LJtCufEENDfw3WJAfEaEkWC6Ag6UYki5w0_nF6worXAJicqEOHT0aQlkZdb7Yzt1KK4/s72-c/colored-pencils-686679_1920.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-7532291694483746504</guid><pubDate>Sun, 27 Dec 2015 10:21:00 +0000</pubDate><atom:updated>2016-01-19T05:39:16.462+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Featured</category><category domain="http://www.blogger.com/atom/ns#">Mac</category><category domain="http://www.blogger.com/atom/ns#">OS X</category><category domain="http://www.blogger.com/atom/ns#">Screenshot</category><category domain="http://www.blogger.com/atom/ns#">Simulator</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>How to take simulator screenshots for Android</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhierb_jcIcTQAydT5shdun9pyWE_kYGWUbJwxa5OhDEc_IsOmWjHpxJ_wnzJjMZLEUvlg_RWfb65BFpxY4Rxh-lCXNyUMV__p74E6_l_d7yGu8HY8GqCQf44x7t13GBkTSLC92hVrDO4g/s1600/technology-792175_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;425&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhierb_jcIcTQAydT5shdun9pyWE_kYGWUbJwxa5OhDEc_IsOmWjHpxJ_wnzJjMZLEUvlg_RWfb65BFpxY4Rxh-lCXNyUMV__p74E6_l_d7yGu8HY8GqCQf44x7t13GBkTSLC92hVrDO4g/s640/technology-792175_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
How to take simulator screenshots for Android is a frequently asked question. There are many ways to do it, but I&#39;d like to show you the easiest and quickest way for Windows and OS X.&lt;br /&gt;
&lt;br /&gt;
I assume here, that you have already installed the Android SDK. If not, you can install it from&amp;nbsp;https://developer.android.com/sdk/index.html&lt;br /&gt;
&lt;br /&gt;
Ok, now just start your simulator as usual. After your simulator is already up and running, go to the Android SDK folder/tools and start the monitor tool (or just search for monitor in the SDK folder).&lt;br /&gt;
&lt;br /&gt;
In the Monitor tool, when you look at the toolbar you have a screenshot icon there. Click and voila, there you are!</description><link>http://tol8.blogspot.com/2015/12/how-to-take-simulator-screenshots-for.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhierb_jcIcTQAydT5shdun9pyWE_kYGWUbJwxa5OhDEc_IsOmWjHpxJ_wnzJjMZLEUvlg_RWfb65BFpxY4Rxh-lCXNyUMV__p74E6_l_d7yGu8HY8GqCQf44x7t13GBkTSLC92hVrDO4g/s72-c/technology-792175_1920.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-6828502992826310788</guid><pubDate>Thu, 24 Dec 2015 09:43:00 +0000</pubDate><atom:updated>2015-12-30T08:02:53.134+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">Featured</category><category domain="http://www.blogger.com/atom/ns#">Game</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><title>Count with MooMoo - Free of charge</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeVrjQhSNrGfRVSDuGR5Fsqyitft8iF_klX9f4HXZB8KotXIytae2D6Ndb6nv1Mq_NbWyU4Wndzi43Xeb5Zs0CPurRekhVt9zIqp_kw93e1SQ5CAokv4q3QUFCDg_Aa8S9a_6sl27K-0s/s1600/android-994910_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeVrjQhSNrGfRVSDuGR5Fsqyitft8iF_klX9f4HXZB8KotXIytae2D6Ndb6nv1Mq_NbWyU4Wndzi43Xeb5Zs0CPurRekhVt9zIqp_kw93e1SQ5CAokv4q3QUFCDg_Aa8S9a_6sl27K-0s/s640/android-994910_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5jwjS35ryy0SS8P83XkKZFhurAWXasbek63Dwl6M3Z2sOMD7Je4vQ8pv6dI0pqbpm-VQdMPEZwsoACs19e3RY-k3D-G6jE4Ya88w6rTY_18nlAVhfW-Rr4f30pvs27wQD-dgXbF_J-FU/s1600/Screenshot_2015-10-11-12-05-18.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5jwjS35ryy0SS8P83XkKZFhurAWXasbek63Dwl6M3Z2sOMD7Je4vQ8pv6dI0pqbpm-VQdMPEZwsoACs19e3RY-k3D-G6jE4Ya88w6rTY_18nlAVhfW-Rr4f30pvs27wQD-dgXbF_J-FU/s640/Screenshot_2015-10-11-12-05-18.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.jappster.countmoomoo&quot; style=&quot;background-color: white; font-family: Roboto, UILanguageFont, Arial, sans-serif; font-size: 14px; line-height: 24px; text-align: start;&quot; target=&quot;_blank&quot;&gt;https://play.google.com/store/apps/details?id=com.jappster.countmoomoo&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif; font-size: 14px; line-height: 24px;&quot;&gt;MooMoo counting is a fun counting app for family. Wanna teach your kids how to count while playing with them? Then this is just the right app for you. We have counting modes that can make it challenging enough for the whole family.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif; font-size: 14px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif; font-size: 14px; line-height: 24px; margin-bottom: 16px; padding: 0px;&quot;&gt;
&lt;b&gt;Device privileges&lt;/b&gt;&lt;br /&gt;
Count with MooMoo app runs with a minimum of privileges. No data will be transferred from Count with MooMoo to any server or any third party. The app only require an Internet connection to display advertising.&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; margin-bottom: 16px; padding: 0px;&quot;&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.jappster.countmoomoo&quot; style=&quot;font-family: Roboto, UILanguageFont, Arial, sans-serif; font-size: 14px; line-height: 24px;&quot; target=&quot;_blank&quot;&gt;https://play.google.com/store/apps/details?id=com.jappster.countmoomoo&lt;/a&gt;&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2015/12/count-with-moomoo-free-of-charge.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeVrjQhSNrGfRVSDuGR5Fsqyitft8iF_klX9f4HXZB8KotXIytae2D6Ndb6nv1Mq_NbWyU4Wndzi43Xeb5Zs0CPurRekhVt9zIqp_kw93e1SQ5CAokv4q3QUFCDg_Aa8S9a_6sl27K-0s/s72-c/android-994910_1920.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-8545579463789147690</guid><pubDate>Thu, 24 Dec 2015 09:38:00 +0000</pubDate><atom:updated>2015-12-30T08:02:53.145+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">Featured</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><title>Count with Tally Marker - Free of charge</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeVrjQhSNrGfRVSDuGR5Fsqyitft8iF_klX9f4HXZB8KotXIytae2D6Ndb6nv1Mq_NbWyU4Wndzi43Xeb5Zs0CPurRekhVt9zIqp_kw93e1SQ5CAokv4q3QUFCDg_Aa8S9a_6sl27K-0s/s1600/android-994910_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeVrjQhSNrGfRVSDuGR5Fsqyitft8iF_klX9f4HXZB8KotXIytae2D6Ndb6nv1Mq_NbWyU4Wndzi43Xeb5Zs0CPurRekhVt9zIqp_kw93e1SQ5CAokv4q3QUFCDg_Aa8S9a_6sl27K-0s/s640/android-994910_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiq4kmL2g9xP1QOkxsj8tmkzhGOKir57FwY7fJl8W3ppsVqIb5iwtIH6mKDhBdD4Lb9-siSKVvtslkPTk9WYuu2WodEgmaaAekQNDnrEaAwsqenw4Uf90C4mire_QGpMxraBQAxafMRNs/s1600/TallyMarker.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Tally Marker&quot; border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiq4kmL2g9xP1QOkxsj8tmkzhGOKir57FwY7fJl8W3ppsVqIb5iwtIH6mKDhBdD4Lb9-siSKVvtslkPTk9WYuu2WodEgmaaAekQNDnrEaAwsqenw4Uf90C4mire_QGpMxraBQAxafMRNs/s400/TallyMarker.png&quot; title=&quot;Tally Marker&quot; width=&quot;223&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.jappster.TallyMarker&quot; target=&quot;_blank&quot;&gt;https://play.google.com/store/apps/details?id=com.jappster.TallyMarker&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif; font-size: 14px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;Count with Tally Marker is a counter app, that allows you to count everything with tallies.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;Imagine you went to a bar one day, order beers after beers until the end you lost track of the number of beers you have ordered and the total price for the bill.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;This is when Count with Tally comes to the rescue. Download the app, make a stroke every time you ordered a beer (or anything you can think of) and preset the price per beer in the settings. Now you can track how many you beers have ordered as well as their total prices. You can even track when you have ordered that beer.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;&lt;b&gt;Use this counter to&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Count cups of beer you drank in the bar&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Count the mistakes that you significant others have made&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Count the cigarette you have smoke in a day/week/month&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Count the money you have to pay for the items you count&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Count any other things you might think of&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;&lt;b&gt;Tally Marker Features:&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Add new counter tallies by name&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Get an actual count overview&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Display additional price information in your preferred currency&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Edit your counter tallies&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Remove and reset counter tallies&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Count up and down just by swiping&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Automatic offline saving. Means all your count data is &quot;always&quot; saved offline&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Initial filling of the newly created tallies(counts)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Personalise your tallies! Change them to your favourite color (Requires Android 4.4+)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Vibrate on count/swipe (optional)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ Set default currency for your counter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;★ History tracking of your counts&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;&lt;b&gt;Device privileges&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;Count with Tally Marker runs with a minimum set of privileges, because Tally Markers mission is to count, nothing else. Tally Marker only require an Internet connection to display an interstitial ad on startup. That&#39;s it. Have fun counting!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #333333; font-family: Roboto, UILanguageFont, Arial, sans-serif; font-size: 14px; line-height: 24px; margin-bottom: 16px; padding: 0px;&quot;&gt;
&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.jappster.TallyMarker&quot; target=&quot;_blank&quot;&gt;https://play.google.com/store/apps/details?id=com.jappster.TallyMarker&lt;/a&gt;&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2015/12/count-with-tally-marker-free-of-charge.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeVrjQhSNrGfRVSDuGR5Fsqyitft8iF_klX9f4HXZB8KotXIytae2D6Ndb6nv1Mq_NbWyU4Wndzi43Xeb5Zs0CPurRekhVt9zIqp_kw93e1SQ5CAokv4q3QUFCDg_Aa8S9a_6sl27K-0s/s72-c/android-994910_1920.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-2224272786612065095</guid><pubDate>Tue, 18 Nov 2014 08:25:00 +0000</pubDate><atom:updated>2016-01-19T05:47:33.063+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Apache</category><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><title>Fixed: Apps (Cordova/PhoneGap) targeting LOLLIPOP or later default to disallowing third party cookies</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkFsG1FYHZpdOcZddHa-H-gFhBFl9OOkWrR4hjBULEy5MR7hMpLp1LPVUEq64BuWEvR7fUl15akNCthf95l8RBVyvKSRYJp_a2ErZWKsuJINMhyv_vpj-cI7DicKLYcIL7maql78-gH94/s1600/gourmet-cookies-1041327_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;304&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkFsG1FYHZpdOcZddHa-H-gFhBFl9OOkWrR4hjBULEy5MR7hMpLp1LPVUEq64BuWEvR7fUl15akNCthf95l8RBVyvKSRYJp_a2ErZWKsuJINMhyv_vpj-cI7DicKLYcIL7maql78-gH94/s640/gourmet-cookies-1041327_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
When I ported a Cordova app to Android 5 (Lollipop), I noticed, that the login does not work anymore. In prior versions of Android it works like a charm (app login is based on session cookies).&lt;br /&gt;
&lt;br /&gt;
Part of the Android Lollipop changes:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Apps that target KITKAT or below default to allowing third party cookies. Apps targeting LOLLIPOP or later default to disallowing third party cookies.&lt;br /&gt;
&lt;a href=&quot;https://developer.android.com/reference/android/webkit/CookieManager.html&quot; target=&quot;_blank&quot;&gt;https://developer.android.com/reference/android/webkit/CookieManager.html&lt;/a&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Android 5.0 changes the default behaviour for your app.&lt;br /&gt;
If your app targets API level 21 or higher:&lt;br /&gt;
The system blocks mixed content and third party cookies by default. To allow mixed content and third party cookies, use the setMixedContentMode() and setAcceptThirdPartyCookies() methods respectively.&lt;br /&gt;
The system now intelligently chooses portions of the HTML document to draw. This new default behaviour helps to reduce memory footprint and increase performance. If you want to render the whole document at once, disable this optimization by calling enableSlowWholeDocumentDraw().&lt;br /&gt;
If your app targets API levels lower than 21: The system allows mixed content and third party cookies, and always renders the whole document at once.&lt;br /&gt;
&lt;a href=&quot;https://developer.android.com/about/versions/android-5.0-changes.html#BehaviorWebView&quot; target=&quot;_blank&quot;&gt;https://developer.android.com/about/versions/android-5.0-changes.html#BehaviorWebView&lt;/a&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Indeed, if the app rely on session cookies it will stop working as expected.&lt;br /&gt;
&lt;br /&gt;
However. Here is a fix to make session cookies work again on Android Lollipop and above:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;/*
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Licensed to the Apache Software Foundation (ASF) under one
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;or more contributor license agreements. &amp;nbsp;See the NOTICE file
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;distributed with this work for additional information
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;regarding copyright ownership. &amp;nbsp;The ASF licenses this file
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;to you under the Apache License, Version 2.0 (the
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;License&quot;); you may not use this file except in compliance
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;with the License. &amp;nbsp;You may obtain a copy of the License at

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;http://www.apache.org/licenses/LICENSE-2.0

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Unless required by applicable law or agreed to in writing,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;software distributed under the License is distributed on an
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;KIND, either express or implied. &amp;nbsp;See the License for the
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;specific language governing permissions and limitations
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;under the License.
&amp;nbsp;*/

package com.blogspot.tol8;

import android.os.Bundle;
import org.apache.cordova.*;
import android.os.Build;
import android.webkit.CookieManager;
import android.webkit.WebView;

public class MyApp extends CordovaActivity
{
&amp;nbsp; &amp;nbsp; @Override
&amp;nbsp; &amp;nbsp; public void onCreate(Bundle savedInstanceState)
&amp;nbsp; &amp;nbsp; {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onCreate(savedInstanceState);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.init();

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Allow third party cookies for Android Lollipop
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(Build.VERSION.SDK_INT &amp;gt;= Build.VERSION_CODES.LOLLIPOP)
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
                WebView webView = (WebView)super.appView;
                CookieManager cookieManager = CookieManager.getInstance();
                cookieManager.setAcceptThirdPartyCookies(webView,true);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.loadUrl(Config.getStartUrl());
&amp;nbsp; &amp;nbsp; }
}&lt;/pre&gt;
&lt;br /&gt;
BTW: Make sure that you use the latest Android SDK to compile the source code. I have also created an issue at the Cordova bug tracker (&lt;a href=&quot;https://issues.apache.org/jira/browse/CB-8026&quot; target=&quot;_blank&quot;&gt;https://issues.apache.org/jira/browse/CB-8026&lt;/a&gt;).</description><link>http://tol8.blogspot.com/2014/11/fixed-apps-cordovaphonegap-targeting.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkFsG1FYHZpdOcZddHa-H-gFhBFl9OOkWrR4hjBULEy5MR7hMpLp1LPVUEq64BuWEvR7fUl15akNCthf95l8RBVyvKSRYJp_a2ErZWKsuJINMhyv_vpj-cI7DicKLYcIL7maql78-gH94/s72-c/gourmet-cookies-1041327_1920.jpg" height="72" width="72"/><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-61286832079210272</guid><pubDate>Sat, 29 Mar 2014 14:00:00 +0000</pubDate><atom:updated>2015-12-29T17:14:18.364+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Datetime</category><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">MySQL Workbench</category><title>Enter now() for datetime in MySQL Workbench</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUcfGSPajX5aWvYh9kiR_yQX0wilAvX20rLWVp70kLF2HgKIZQ7dytJJ3M5hyekDgMnND18ytQswHH3FKmaRJpFI_Kxn0WIHWgoC2BgcH3k_SaEOCNM0c4Ksi0MFfF2OobkLCvl4XZ3Ek/s1600/laptop-1031224_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUcfGSPajX5aWvYh9kiR_yQX0wilAvX20rLWVp70kLF2HgKIZQ7dytJJ3M5hyekDgMnND18ytQswHH3FKmaRJpFI_Kxn0WIHWgoC2BgcH3k_SaEOCNM0c4Ksi0MFfF2OobkLCvl4XZ3Ek/s640/laptop-1031224_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Some years ago, I faced this bug in MySQL Workbench:&lt;br /&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Create a table&lt;/li&gt;
&lt;li&gt;Add a column with type datetime&lt;/li&gt;
&lt;li&gt;Go to the query editor&lt;/li&gt;
&lt;li&gt;Try to insert now() into the datetime field&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Result: It will not work.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Reason, if you take a look at the query you will see the following:&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
`test_date`=&#39;now()&#39;&lt;/blockquote&gt;
&lt;div&gt;
Ok, the solution is easy, &quot;now()&quot; must be written without the single quotes. To do this type:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
\func now()&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
instead of&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
now()&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2014/03/enter-now-for-datetime-in-mysql.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUcfGSPajX5aWvYh9kiR_yQX0wilAvX20rLWVp70kLF2HgKIZQ7dytJJ3M5hyekDgMnND18ytQswHH3FKmaRJpFI_Kxn0WIHWgoC2BgcH3k_SaEOCNM0c4Ksi0MFfF2OobkLCvl4XZ3Ek/s72-c/laptop-1031224_1920.jpg" height="72" width="72"/><thr:total>21</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-7239335304916653900</guid><pubDate>Mon, 24 Mar 2014 11:39:00 +0000</pubDate><atom:updated>2015-12-29T17:08:12.532+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">CLI</category><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">Geolocation</category><category domain="http://www.blogger.com/atom/ns#">GPS</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><title>How to get reliable geolocation data on Phonegap or Cordova CLI (Best practice / Tutorial / GPS)</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXmxrFRD0J1qxV8NdvpeanjpmwTjni9hI6CJ5M0FQivUnKQv3U1KnmNBzi_5YqXcJl9l-CRzbMRMWMx-hNiAWj6-_gW_C33PrIvUO_M_ODpPA_7owl01JX4GX3mSUdEvAyclm2A7PEOlg/s1600/navigation-1048294_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXmxrFRD0J1qxV8NdvpeanjpmwTjni9hI6CJ5M0FQivUnKQv3U1KnmNBzi_5YqXcJl9l-CRzbMRMWMx-hNiAWj6-_gW_C33PrIvUO_M_ODpPA_7owl01JX4GX3mSUdEvAyclm2A7PEOlg/s640/navigation-1048294_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Today I will tell you how to get reliable geolocation data on Cordova or Phonegap. It took me a lot of time to figure all this out, so I hope that I can save you some precious time with my article.&lt;br /&gt;
&lt;br /&gt;
Note: I tested on Cordova 3.4.x and Android/WindowsPhone.&lt;br /&gt;
&lt;br /&gt;
Before we start, make sure that you have&amp;nbsp;&lt;b&gt;&lt;u&gt;not&lt;/u&gt;&lt;/b&gt; installed the Cordova or Phonegap geolocation plugin! In case you already have, remove it with the following command &quot;&lt;i&gt;cordova plugin remove org.apache.cordova.geolocation&lt;/i&gt;&quot;. We do not need this plugin since the native HTML5 support is much better! Further information can be found &lt;a href=&quot;http://markmail.org/message/ketdgrzm2dcpxfo2#query:+page:1+mid:ketdgrzm2dcpxfo2+state:results&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. I don&#39;t know why this plugin is still available in the official documentation... But don&#39;t worry if you come from Cordova or Phonegap, you don&#39;t have to change a lot in your existing code (maybe you have to eliminate the frequency attribute).&lt;br /&gt;
&lt;br /&gt;
Please pay attention that, also when you are not using the geolocation plugin, you have to set the following privileges in your:&lt;br /&gt;
&lt;br /&gt;
AndroidManifest.xml&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_COARSE_LOCATION&quot; /&amp;gt;

&amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&amp;gt;

&amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_LOCATION_EXTRA_COMMANDS&quot; /&amp;gt;&lt;/pre&gt;
WPAppManifest.xml&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;Capabilities&amp;gt;
               &amp;lt;Capability Name=&quot;ID_CAP_LOCATION&quot; /&amp;gt;
&amp;lt;/Capabilities&amp;gt;&lt;/pre&gt;
The code for the implementation itself is relative trivial. I would suggest you to implement it after the following action plan:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Before you do anything, check if geolocation is available (navigator.geolocation)&lt;/li&gt;
&lt;li&gt;Try to get the current position with high accuracy, if the request timed out or an error occur &amp;gt; fallback to lower accuracy.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Important parameter:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;enableHighAccuracy: true/false for high or low accuracy&lt;/li&gt;
&lt;li&gt;maximumAge: Accept a cached position whose age is no greater than the specified time in milliseconds. (Number)&lt;/li&gt;
&lt;li&gt;timeout: Maximum time of lenght in ms to get the position.&lt;/li&gt;
&lt;li&gt;frequency: Stop using this attribute. It is not W3C compliant. Use maximumAge instead!&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Suggested values:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;enableHighAccuracy: true, maximumAge:3000, timeout: 5000&lt;/li&gt;
&lt;li&gt;enableHighAccuracy: false, maximumAge:3000, timeout: 30000&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
Tips:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;If you want to update your geolocation data continuously, use watchPosition(...) instead of getCurrentPosition(...). Also use the pause/resume functions of Cordova/Phonegap to start/stop the watch while the application is or return from background. The users battery will thank you.&lt;/li&gt;
&lt;li&gt;Keep in mind that the logic behind getCurrentPosition(...) and watchPosition(...) is differently on different devices. So test your implementation as much as you can!&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
Please let me know if this article helped you to improve your geolocation results. If you tested successfully with iOS drop a comment (ideal with required privileges) as well. Thanks!</description><link>http://tol8.blogspot.com/2014/03/how-to-get-reliable-geolocation-data-on.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXmxrFRD0J1qxV8NdvpeanjpmwTjni9hI6CJ5M0FQivUnKQv3U1KnmNBzi_5YqXcJl9l-CRzbMRMWMx-hNiAWj6-_gW_C33PrIvUO_M_ODpPA_7owl01JX4GX3mSUdEvAyclm2A7PEOlg/s72-c/navigation-1048294_1920.jpg" height="72" width="72"/><thr:total>9</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-8245200672220270751</guid><pubDate>Tue, 25 Feb 2014 11:58:00 +0000</pubDate><atom:updated>2015-12-29T16:47:55.440+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">Microsoft Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><title>Add an app with multiple languages to the Windows App Store</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCckHx0FNyyu1nGo0r8pXKT22A_Q1A9kcFfZQbnIsGbNc2gHYyKomsuRHQ29PvOpEx0Qqcxq7abDCixXBW0wEhUSyj3EHbSjM__JavdqJF_s4U5-GeAt3B9CODwDPdZNEEQ1znOa6qMkE/s1600/lumia-889924_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCckHx0FNyyu1nGo0r8pXKT22A_Q1A9kcFfZQbnIsGbNc2gHYyKomsuRHQ29PvOpEx0Qqcxq7abDCixXBW0wEhUSyj3EHbSjM__JavdqJF_s4U5-GeAt3B9CODwDPdZNEEQ1znOa6qMkE/s640/lumia-889924_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
In this article I would like to show you how an app is published with multiple languages ​​to the Windows App Store.&lt;br /&gt;
&lt;br /&gt;
As default, you can only select one default language on the Windows App Store. In order to add more languages, the language information must be added before uploading the XAP file.&lt;br /&gt;
&lt;br /&gt;
In Visual Studio, go to Project Explorer &amp;gt; Solution &amp;gt; Project &amp;gt; Properties and open the WMAppManifest.xml file.&lt;br /&gt;
&lt;br /&gt;
Switch to the tab &quot;Packaging&quot; and add the specific languages. Save the changes, rebuild the XAP file and upload it again. After uploading the XAP file, now you can select multiple languages.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2fbilaEVwp782KzobpUdechlB-unSvPbzg-zWaWMdYdIxIk6pFwUG1ma9DLIT3LCs72m7z0zCjnMSv5xIhuS7Zpc0OjIUsrHgfkMyeUgNz00mDBucgehvdRXhpVFgHaJt1-9_Oz0B4rc/s1600/language.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2fbilaEVwp782KzobpUdechlB-unSvPbzg-zWaWMdYdIxIk6pFwUG1ma9DLIT3LCs72m7z0zCjnMSv5xIhuS7Zpc0OjIUsrHgfkMyeUgNz00mDBucgehvdRXhpVFgHaJt1-9_Oz0B4rc/s1600/language.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2fbilaEVwp782KzobpUdechlB-unSvPbzg-zWaWMdYdIxIk6pFwUG1ma9DLIT3LCs72m7z0zCjnMSv5xIhuS7Zpc0OjIUsrHgfkMyeUgNz00mDBucgehvdRXhpVFgHaJt1-9_Oz0B4rc/s1600/language.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2fbilaEVwp782KzobpUdechlB-unSvPbzg-zWaWMdYdIxIk6pFwUG1ma9DLIT3LCs72m7z0zCjnMSv5xIhuS7Zpc0OjIUsrHgfkMyeUgNz00mDBucgehvdRXhpVFgHaJt1-9_Oz0B4rc/s1600/language.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span id=&quot;goog_1161700042&quot;&gt;&lt;/span&gt;
</description><link>http://tol8.blogspot.com/2014/02/add-app-with-multiple-languages-to.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCckHx0FNyyu1nGo0r8pXKT22A_Q1A9kcFfZQbnIsGbNc2gHYyKomsuRHQ29PvOpEx0Qqcxq7abDCixXBW0wEhUSyj3EHbSjM__JavdqJF_s4U5-GeAt3B9CODwDPdZNEEQ1znOa6qMkE/s72-c/lumia-889924_1920.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-5522956107119669222</guid><pubDate>Tue, 25 Feb 2014 11:54:00 +0000</pubDate><atom:updated>2016-01-19T05:42:46.411+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">Microsoft Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><category domain="http://www.blogger.com/atom/ns#">Windows 8</category><title>How to create an XAP file for Windows App Store</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2jLj5IEZ2R5Jm0tscXHjU9JFSfL-YZaza4lbibrzhmKZJE9Ukp5z-oakUXfkdBFNBXBnJq3KaiIJV1xTHCbfXHZorDa2I2pEqxy78wohT3ie8jA99PCPoeveyt-Yi-nbfiFCrrkFzyAk/s1600/nokia-926756.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2jLj5IEZ2R5Jm0tscXHjU9JFSfL-YZaza4lbibrzhmKZJE9Ukp5z-oakUXfkdBFNBXBnJq3KaiIJV1xTHCbfXHZorDa2I2pEqxy78wohT3ie8jA99PCPoeveyt-Yi-nbfiFCrrkFzyAk/s640/nokia-926756.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
In this article I would like to show you how to create a XAP file for the Windows App Store.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Open MS Visual Studio&lt;/li&gt;
&lt;li&gt;Open your project&lt;/li&gt;
&lt;li&gt;Go to the &quot;Project Explorer&quot;&lt;/li&gt;
&lt;li&gt;Right click on the Solution &amp;gt; Properties&lt;/li&gt;
&lt;li&gt;Change the build properties as illustrated in the screen below&lt;/li&gt;
&lt;li&gt;Apply the changes&lt;/li&gt;
&lt;li&gt;Build your project (&quot;F7&quot;)&lt;/li&gt;
&lt;li&gt;Make sure that the build was successful (console output)&lt;/li&gt;
&lt;li&gt;Open your project in the Windows Explorer and search for &quot;*.xap&quot;. Choose the release version. Done.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2zbus0jS5DARteN23Jw6Gqm-RkeLMCrM9b8AOmAWDzhRRh94pP6R-msOtaW9WdOfXi8QS_88FpoO5kvkYbiRsZmuaHIWsne_vOduW0ZFo9amNpS6IYIO83nMK3-96DEvh2lhprZQjNzI/s1600/properties.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2zbus0jS5DARteN23Jw6Gqm-RkeLMCrM9b8AOmAWDzhRRh94pP6R-msOtaW9WdOfXi8QS_88FpoO5kvkYbiRsZmuaHIWsne_vOduW0ZFo9amNpS6IYIO83nMK3-96DEvh2lhprZQjNzI/s1600/properties.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2014/02/how-to-create-xap-file-for-windows-app.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2jLj5IEZ2R5Jm0tscXHjU9JFSfL-YZaza4lbibrzhmKZJE9Ukp5z-oakUXfkdBFNBXBnJq3KaiIJV1xTHCbfXHZorDa2I2pEqxy78wohT3ie8jA99PCPoeveyt-Yi-nbfiFCrrkFzyAk/s72-c/nokia-926756.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-4746168274417367232</guid><pubDate>Thu, 13 Feb 2014 11:15:00 +0000</pubDate><atom:updated>2016-01-19T05:50:46.345+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">LocalStorage</category><category domain="http://www.blogger.com/atom/ns#">Performance</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><category domain="http://www.blogger.com/atom/ns#">Store</category><title>How to solve store performance issues in Sencha Touch</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2FtQmGOS2VNtepxMcdB73Hr3_c96gCzO9DE0Pd8J9QWd_Loqa-QPCY7NQvDo1AbXja3mXdcRdpJaRD4dPn7Sv5hR2yKVwJ5LMwIrWc3GWXA_hxoS25ki_sioFhrYyANDgcr_qQzJxdGs/s1600/fish-582695_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;422&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2FtQmGOS2VNtepxMcdB73Hr3_c96gCzO9DE0Pd8J9QWd_Loqa-QPCY7NQvDo1AbXja3mXdcRdpJaRD4dPn7Sv5hR2yKVwJ5LMwIrWc3GWXA_hxoS25ki_sioFhrYyANDgcr_qQzJxdGs/s640/fish-582695_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Most of the lists in Sencha Touch are connected to a store. When the store only contains a small amount of records, performance is not a problem. However, when the store is filled with a big amount of records, it is very important that the data is added in an optimum manner.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s have a look at the following code:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;copyObjects : function(objects) {
   var taskModel = null, 
       taskStore = Ext.getStore(&#39;Tasks&#39;);

   taskStore.removeAll(true);

   Ext.Array.each(objects, function (data) {
      taskModel = Ext.create(&#39;MyApp.model.Task&#39;, data);
      taskModel.setDirty(true);
      taskStore.add(taskModel);
   });
   taskStore.sync();
}
&lt;/pre&gt;
In the above example, 100 objects are added. Tested on a Samsung Galaxy II, the execution takes 12 to 14 seconds. It simply takes too long!&lt;br /&gt;
&lt;br /&gt;
After further testing, I found out that the add function takes so much time (&lt;a href=&quot;http://docs.sencha.com/touch/2.3.1/source/Store.html%20# Ext-data-store-insert method&quot; target=&quot;_blank&quot;&gt;http://docs.sencha.com/touch/2.3.1/source/Store.html # Ext-data-store-insert method&lt;/a&gt;). Therefore, the solution is to call this function as less as possible. This can be done with a temporary array:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;copyObjects : function(objects) {
   var taskModel = null, 
       taskStore = Ext.getStore(&#39;Tasks&#39;),
       tmp = new Array();

    taskStore.removeAll(true);

    Ext.Array.each(objects, function (data) {
       taskModel = Ext.create(&#39;MyApp.model.Task&#39;, data);
       taskModel.setDirty(true);
       tmp.push(taskModel)
    });
    taskStore.add(tmp);
    taskStore.sync();
}
&lt;/pre&gt;
The execution time takes only one second now.&lt;br /&gt;
&lt;br /&gt;
Advice: Pay attention that your list is not too long, because the scrolling performance will go down as well.</description><link>http://tol8.blogspot.com/2014/02/how-to-solve-store-performance-issues.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2FtQmGOS2VNtepxMcdB73Hr3_c96gCzO9DE0Pd8J9QWd_Loqa-QPCY7NQvDo1AbXja3mXdcRdpJaRD4dPn7Sv5hR2yKVwJ5LMwIrWc3GWXA_hxoS25ki_sioFhrYyANDgcr_qQzJxdGs/s72-c/fish-582695_1920.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-3328902164437766571</guid><pubDate>Thu, 16 Jan 2014 06:33:00 +0000</pubDate><atom:updated>2015-12-29T17:20:06.978+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">icon fonts</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><title>Icon Fonts on Windows Phone (Sencha Touch)</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMSh4kbvpjpWZtufKHGtlsJwfSZ9NJlNbNfTSRNxO9sf8yxxM5cx0C_sDVe_XmPy6GtyGS6vXYL_bsbAbP8KZX9zj2ZBvocwGWdH0_MwBC5kX2A9u-h5_4w_z1k_ISugeAePImx8K7iGg/s1600/mobile-phone-426559_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;452&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMSh4kbvpjpWZtufKHGtlsJwfSZ9NJlNbNfTSRNxO9sf8yxxM5cx0C_sDVe_XmPy6GtyGS6vXYL_bsbAbP8KZX9zj2ZBvocwGWdH0_MwBC5kX2A9u-h5_4w_z1k_ISugeAePImx8K7iGg/s640/mobile-phone-426559_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I think everyone who deploy a first app on Windows Phone is facing the same problem: The app is running fine, but where the heck are my icons?&lt;br /&gt;
&lt;br /&gt;
Apparently there is an issue present in Windows Phone 8 that prevents custom font-faces from working when HTML and CSS are hosted locally.&lt;br /&gt;
&lt;br /&gt;
So we came up with the first solution: Hosting everything remote. But really, this is not a solution, right?&lt;br /&gt;
&lt;br /&gt;
After spending some more time on google, I found another solution: Including the font-file instead of the base 64 encoded font.&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;@font-face {
 font-family: &#39;Pictos&#39;;
 src:url(&#39;fonts/pictos-web.woff&#39;) format(&#39;woff&#39;);
 font-weight: normal;
 font-style: normal;
}
&lt;/pre&gt;
However, this code never worked for me. Some user reported that it works, but the rest said that it doesn&#39;t work for them too or only for some and not all of their font files.&lt;br /&gt;
&lt;br /&gt;
Finally I came up with another idea: When I cannot rely on the CSS font-face, then I&#39;ll go back to the roots and display pictures instead. Of course this costs more effort and is not as elegant as using icon fonts, but so far this seems to be the only safe solution to get it done.&lt;br /&gt;
&lt;br /&gt;
Before we start, let me tell you that we don&#39;t have to modify any of the Java Script Code and it will not affect other platforms like Android or iOS.&lt;br /&gt;
&lt;br /&gt;
If you are already working with Themes (what I would suggest you) then you can just place the new CSS code to your WP.scss
&lt;br /&gt;
&lt;br /&gt;
To reduce the CSS markup, I created a small mixin. In this mixin we set a new background image with height and width, also we replace the characters in content with an empty string:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;@mixin wpIcon($name,$dim) {
  $url:&quot;../images/wp/#{$name}.png&quot;;
  background: transparent url($url) 0 0 no-repeat;
  content: &#39;&#39;;
  height: $dim;
  width: $dim;
  display: inline-block;
}
&lt;/pre&gt;
&lt;br /&gt;
The sample code above requires that your images are located in &quot;/resources/images/wp&quot;.&lt;br /&gt;
&lt;br /&gt;
Replacing images is very straight forward, lets take a look at another sample which shows how to use this mixin:
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;/* Replace the checkbox checked icon */
.x-input-checkbox:checked ~ .x-field-mask:after {
  @include wpIcon(checkmark, 20px);
}

/* Replace the back button icon and add a second rule for back button pressed */
.x-button-back:before {
  @include wpIcon(arrow-left, 32px);
}

.x-button-back.x-button-pressing:before {
  @include wpIcon(arrow-left-pressed, 32px);
}
&lt;/pre&gt;
As you can see we just pass the image name (without the file extension) + a size to the mixin.&lt;br /&gt;
&lt;br /&gt;
If you don&#39;t use the WP.scss yet you can add &quot;.x-windowsphone&quot; as an additional class to your CSS rule. This makes sure that the rule will only apply on Windows Phone.&lt;br /&gt;
&lt;br /&gt;
I hope this trick help you to get your icons back on Windows Phone. Please let me know when you have even a better idea/solution for this problem.</description><link>http://tol8.blogspot.com/2014/01/sencha-touch-and-icon-fonts-on.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMSh4kbvpjpWZtufKHGtlsJwfSZ9NJlNbNfTSRNxO9sf8yxxM5cx0C_sDVe_XmPy6GtyGS6vXYL_bsbAbP8KZX9zj2ZBvocwGWdH0_MwBC5kX2A9u-h5_4w_z1k_ISugeAePImx8K7iGg/s72-c/mobile-phone-426559_1920.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-4287566622833630689</guid><pubDate>Thu, 28 Nov 2013 11:52:00 +0000</pubDate><atom:updated>2015-12-29T17:06:19.774+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><category domain="http://www.blogger.com/atom/ns#">SQLite</category><category domain="http://www.blogger.com/atom/ns#">Web SQL</category><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><title>Support SQLite on Cordova 3.2.0 (Android, iOS and Windows Phone)</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRPIe_lr_UkXryqHFvR72N7AWKLWIFhchTqrVSLonSQprc_Ml3UPO8BSUG96WotCa9MDX-w-1rhUBQg3rmppLMX5y1jt5EAlLWIMb7j4nKTHfENSLJPxDW_8HfNajdJfeOK7b4OzrScCw/s1600/eraser-507018_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRPIe_lr_UkXryqHFvR72N7AWKLWIFhchTqrVSLonSQprc_Ml3UPO8BSUG96WotCa9MDX-w-1rhUBQg3rmppLMX5y1jt5EAlLWIMb7j4nKTHfENSLJPxDW_8HfNajdJfeOK7b4OzrScCw/s640/eraser-507018_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
This article focuses on how to support SQLite (Web SQL) on the following platforms:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Android&lt;/li&gt;
&lt;li&gt;iOS&lt;/li&gt;
&lt;li&gt;Windows Phone&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Why should a SQLite Plugin used in Cordova?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;To follow the HTML5 Web SQL API as close as possible.&lt;/li&gt;
&lt;li&gt;To support Web SQL on Windows Phone.&lt;/li&gt;
&lt;li&gt;To deal with the same javascript functions on every platform.&lt;/li&gt;
&lt;li&gt;Fail-safe nested transactions with batch processing optimisations.&lt;/li&gt;
&lt;li&gt;Keeps sqlite database in a user data location that is known, can be reconfigured, and iOS will be backed up by iCloud.&lt;/li&gt;
&lt;li&gt;Works with SQLCipher for encryption.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
&amp;nbsp; Limitations of SQLite on Windows Phone&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Drop table is not working, seems like a bug in the .NET or C# SQLite library. To work around this, empty the table instead of dropping it.&lt;/li&gt;
&lt;li&gt;A high number of features in&amp;nbsp;C# SQLite&amp;nbsp;are disabled.&lt;/li&gt;
&lt;li&gt;Missing failure-safe transaction mechanism.&lt;/li&gt;
&lt;li&gt;Not (yet) working with SQLCipher for encryption.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
What do I have to change in my existing applications?&lt;/h2&gt;
Not much.&lt;br /&gt;
&lt;br /&gt;
Just replace &quot;window.openDatabase&quot; with &quot;window.sqlitePlugin.openDatabase&quot;.&lt;br /&gt;
&lt;br /&gt;
Don&#39;t forget to take a look at the limitations of Windows Phone Plugin.&lt;br /&gt;
&lt;h2&gt;
How to install the SQLite Plugin&lt;/h2&gt;
There are so many SQL Plugins available. I choose &quot;lite4cordova&quot;, because it supports Cordova 3.x, it is easy to install and it is still in development.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/lite4cordova/Cordova-SQLitePlugin&lt;/li&gt;
&lt;li&gt;https://github.com/lite4cordova/Cordova-SQLitePlugin-WP-2013.12&lt;/li&gt;
&lt;/ul&gt;
The second project is an extension of &quot;Cordova-SQLitePlugin&quot;, because Windows Phone is not working on &quot;Cordova-SQLitePlugin&quot; yet.&lt;br /&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h3&gt;
Windows Phone 8&lt;/h3&gt;
If you are starting to develop for Windows Phone, have a look at this &lt;a href=&quot;http://tol8.blogspot.com/2013/11/how-to-install-and-run-cordova-310.html&quot; target=&quot;_blank&quot;&gt;article&lt;/a&gt; first.&lt;br /&gt;
&lt;br /&gt;
To setup the project, type the following commands in the command line:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;$ cordova create hello com.example.hello Hello
$ cd hello
$ cordova platform add wp8
$ cordova plugin add https://github.com/lite4cordova/Cordova-SQLitePlugin-WP-2013.12.git&lt;/pre&gt;
&lt;br /&gt;
Remove all files in &quot;hello/www&quot;, except &quot;config.xml&quot;.&lt;br /&gt;
Copy the &lt;a href=&quot;https://github.com/lite4cordova/Cordova-SQLitePlugin-WP-2013.12/blob/master/wp-test/index.html&quot; target=&quot;_blank&quot;&gt;testfile&lt;/a&gt; to &quot;hello/www&quot;.&lt;br /&gt;
&lt;br /&gt;
To build the project type the following commands in the command line:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;$ cd hello
$ cordova build&lt;/pre&gt;
&lt;br /&gt;
Finish! Open and run the project, execute the testfile to see if all works fine.&lt;br /&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h3&gt;
Android and iOS&lt;/h3&gt;
To setup the project, type the following commands in the command line:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;$ cordova create hello com.example.hello Hello
$ cd hello
$ cordova platform add android
$ cordova platform add ios
$ cordova plugin add https://github.com/lite4cordova/Cordova-SQLitePlugin.git&lt;/pre&gt;
&lt;br /&gt;
Remove all files in &quot;hello/www&quot;, except &quot;config.xml&quot;.&lt;br /&gt;
Copy the &lt;a href=&quot;https://github.com/lite4cordova/Cordova-SQLitePlugin/blob/master/test-www/index.html&quot; target=&quot;_blank&quot;&gt;testfile&lt;/a&gt; to &quot;hello/www&quot;.&lt;br /&gt;
&lt;br /&gt;
To build the project type the following commands in the command line:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;$ cd hello
$ cordova build&lt;/pre&gt;
&lt;br /&gt;
Finish! Open and run the project, execute the testfile to see if all works fine.</description><link>http://tol8.blogspot.com/2013/11/support-sqlite-on-cordova-320-android.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRPIe_lr_UkXryqHFvR72N7AWKLWIFhchTqrVSLonSQprc_Ml3UPO8BSUG96WotCa9MDX-w-1rhUBQg3rmppLMX5y1jt5EAlLWIMb7j4nKTHfENSLJPxDW_8HfNajdJfeOK7b4OzrScCw/s72-c/eraser-507018_1920.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-1432982589612350466</guid><pubDate>Mon, 25 Nov 2013 17:15:00 +0000</pubDate><atom:updated>2015-12-29T17:10:35.150+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Apache</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><category domain="http://www.blogger.com/atom/ns#">Sencha</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><category domain="http://www.blogger.com/atom/ns#">XAMPP</category><category domain="http://www.blogger.com/atom/ns#">XHR</category><category domain="http://www.blogger.com/atom/ns#">XMLHttpRequest</category><title>Make cross-origin HTTP requests with XMLHttpRequest</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij37s_1o5mU67nEqt49zm-HfgDfqEfDNpEoDOuoHnmvFYQ9CS8VgMyPwso0_fOXNuS3DLCjdy0jnAAaj_TjD7sam2zXvkx5g3RK64sZj7Kz_hgXCkDA6zPAE28orKpAZBbAaJceagKrQs/s1600/boardwalk-801723_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij37s_1o5mU67nEqt49zm-HfgDfqEfDNpEoDOuoHnmvFYQ9CS8VgMyPwso0_fOXNuS3DLCjdy0jnAAaj_TjD7sam2zXvkx5g3RK64sZj7Kz_hgXCkDA6zPAE28orKpAZBbAaJceagKrQs/s640/boardwalk-801723_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
In the early years of the Internet, it was possible to breach users security by using of JavaScript to exchange information from one website to another that has less reputation.&lt;br /&gt;
&lt;br /&gt;
Therefore, all modern browsers implement the same origin policy that prevents attacks like cross-site scripting.&lt;br /&gt;
&lt;br /&gt;
However, sometimes&amp;nbsp;cross-origin HTTP request is a must-have requirement for a web application. This article will discuss about methods of how to deal with cross-origin HTTP requests. Lets start with some background information.&lt;br /&gt;
&lt;h2&gt;
Origin policy&lt;/h2&gt;
&lt;div&gt;
The algorithm used to calculate the &quot;origin&quot; of a URI (Uniform Resource Identifier) is specified in &lt;a href=&quot;https://tools.ietf.org/html/rfc6454#section-4&quot; target=&quot;_blank&quot;&gt;RFC 6454&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are two different cases:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Absolute URIs,&amp;nbsp;the origin is the triple {protocol, host, port}&lt;/li&gt;
&lt;li&gt;If the URI does not use a hierarchical element as a naming authority (&lt;a href=&quot;https://tools.ietf.org/html/rfc3986#section-3.2&quot; target=&quot;_blank&quot;&gt;RFC 3986&lt;/a&gt;) or if the URI is not an absolute URI, then a globally unique identifier is used.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Two resources are considered to be of the same origin if and only if all these values are exactly the same.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The table below illustrates a check against the URL &quot;http://www.example.com/pages/index.html&quot;:&lt;/div&gt;
&lt;table border=&quot;1&quot;&gt;
  &lt;tbody&gt;
&lt;tr&gt;
    &lt;th&gt;URL to compare&lt;/th&gt;
    &lt;th&gt;Result&lt;/th&gt;
    &lt;th&gt;Why?&lt;/th&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;http://www.example.com/pages/index2.html&lt;/td&gt;
    &lt;td&gt;ok&lt;/td&gt;
    &lt;td&gt;Same host and protocol&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;http://www.example.com/pages2/index.html&lt;/td&gt;
    &lt;td&gt;ok&lt;/td&gt;
    &lt;td&gt;Same host and protocol&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;httpː//username:password@http://www.example.com/pages/index.html&lt;/td&gt;
    &lt;td&gt;ok&lt;/td&gt;
    &lt;td&gt;Same host and protocol&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;http://www.example.com:8080/pages2/index.html&lt;/td&gt;
    &lt;td&gt;fail&lt;/td&gt;
    &lt;td&gt;Same host and protocol, but different port&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;https://www.example.com/pages/index.html&lt;/td&gt;
    &lt;td&gt;fail&lt;/td&gt;
    &lt;td&gt;Different protocol&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;http://sub.example.com/pages/index.html&lt;/td&gt;
    &lt;td&gt;fail&lt;/td&gt;
    &lt;td&gt;Different host&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;http://example.com/pages/index.html&lt;/td&gt;
    &lt;td&gt;fail&lt;/td&gt;
    &lt;td&gt;Different host&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;http://www.example.com:80/pages/index.html&lt;/td&gt;
    &lt;td&gt;-&lt;/td&gt;
    &lt;td&gt;(Different port) Depends on the browser implementation&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
If the policy cannot be applied, the web browser will respond with an exception message, such as the following:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;XMLHttpRequest cannot load ...
Cross origin requests are only supported for HTTP.
Uncaught NetworkError: A network error occurred.&lt;/pre&gt;
&lt;br /&gt;
&lt;h2&gt;
Relaxing the same origin policy&lt;/h2&gt;
&lt;div&gt;
Here are some techniques to relax with origin policy:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;JSONP. If the requirement was to get&amp;nbsp;&lt;u&gt;only&lt;/u&gt; the data from a different domain, then a JSONP request is the best choice. JSONP includes external data via the &amp;lt;script&amp;gt; tag.&lt;/li&gt;
&lt;li&gt;Cross origin resource sharing. This&amp;nbsp;extends HTTP with a new origin request header and a new Access-Control-Allow-Origin response header. This &lt;a href=&quot;http://enable-cors.org/&quot; target=&quot;_blank&quot;&gt;article&lt;/a&gt; describes how to enable CORS.&lt;/li&gt;
&lt;li&gt;Disable web security (for development mode only).&amp;nbsp;If an application is under development, the web security can temporarily disabled for the web browser. While the web browser is in an unsecured mode, it is highly recommended not to surf on public Internet pages (since the browser is vulnerable for all cross site scripting attacks). See &quot;Disable web security for a web browser&quot;.&lt;/li&gt;
&lt;li&gt;Reverse Proxy.&amp;nbsp;A reverse proxy (or gateway), by contrast, appears to the client just like an ordinary web server. No special configuration on the client is necessary. The client makes ordinary requests for content in the name-space of the reverse proxy. The reverse proxy then decides where to send those requests, and returns the content as if it was itself the origin. See &quot;Setup a reverse proxy&quot;.&lt;/li&gt;
&lt;li&gt;Whitelist (PhoneGap). If a web application is deployed to a mobile device with PhoneGap the domain can whitelisted (&lt;a href=&quot;http://docs.phonegap.com/en/edge/guide_appdev_whitelist_index.md.html#Whitelist%20Guide&quot; target=&quot;_blank&quot;&gt;Whitelist Guide&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;h2&gt;
Disable web security for a web browser&lt;/h2&gt;
&lt;div&gt;
For Google Chrome, the following command must executed in Terminal (browser must be closed):&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-web-security&lt;/pre&gt;
&lt;h2&gt;
Setup a reverse proxy&lt;/h2&gt;
&lt;div&gt;
Nowadays there are many http servers on the market, however this article focuses on how to configure a reverse proxy with XAMPP.&lt;/div&gt;
&lt;h3&gt;
Install XAMPP&lt;/h3&gt;
&lt;div&gt;
XAMPP is a free and open source cross-platform web server solution stack package, consisting mainly of the Apache HTTP Server, MySQL database, and interpreters for scripts written in the PHP and Perl programming languages.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You can download XAMPP here&amp;nbsp;&lt;a href=&quot;http://www.apachefriends.org/en/xampp.html&quot; target=&quot;_blank&quot;&gt;http://www.apachefriends.org/en/xampp.html&lt;/a&gt;.&lt;/div&gt;
&lt;h3&gt;
Configure a virtual host&lt;/h3&gt;
&lt;div&gt;
A virtual host gives you the possibility to run several name-based web applications on a single IP address.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Configuring the virtual host on your web server does not automatically cause DNS entries to be created for those host names. You can put entries in your hosts file for local testing.&lt;/div&gt;
&lt;h4&gt;
Make a local host file entry&lt;/h4&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Open your Terminal.&lt;/li&gt;
&lt;li&gt;Type: &quot;sudo vi /private/etc/hosts&quot; to open the host file.&lt;/li&gt;
&lt;li&gt;Add the following entry &quot;127.0.0.1 local.app.com&quot; to the end of this file. You can modify this domain name to your needs.&lt;/li&gt;
&lt;li&gt;Save the file and close it.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;h4&gt;
Configure XAMPP&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Open your Terminal.&lt;/li&gt;
&lt;li&gt;Open the XAMPP virtual host file. &quot;sudo vi /Applications/XAMPP/etc/extra/httpd-vhosts.conf&quot;&lt;/li&gt;
&lt;li&gt;Add the following virtual host entry to the end of this file:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;VirtualHost *:80&amp;gt;
&amp;nbsp; DocumentRoot &quot;/Volumes/workspace/myHtml5App&quot;
&amp;nbsp; ServerName local.app.com
&amp;nbsp; ProxyPass &amp;nbsp; &amp;nbsp; &amp;nbsp; /service.php &amp;nbsp; &amp;nbsp; &amp;nbsp; http://yourExternalHost.com/communication/service.php
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Short explanation:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&quot;*:80&quot;&amp;nbsp;Listen for virtual host requests on all IP addresses.&lt;/li&gt;
&lt;li&gt;&quot;DocumentRoot&quot; Destination of the web application on the filesystem.&lt;/li&gt;
&lt;li&gt;&quot;local.app.com&quot; Server name, must be the same name as in the host file above.&lt;/li&gt;
&lt;li&gt;&quot;ProxyPass&quot; Proxy path holds the service address.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Before &lt;/b&gt;you restart the server, make a quick check to the httpd.conf file. (&quot;sudo vi /Applications/XAMPP/etc/httpd.conf&quot;).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Make sure that the following entries are not commented with a &quot;#&quot;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Include /Applications/XAMPP/etc/extra/httpd-vhosts.conf&quot;&lt;/li&gt;
&lt;li&gt;LoadModule proxy_module modules/mod_proxy.so&lt;/li&gt;
&lt;li&gt;LoadModule proxy_connect_module modules/mod_proxy_connect.so&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
If all is fine, &lt;b&gt;restart &lt;/b&gt;your server.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If you call &quot;local.app.com&quot; in your browser, the web application should open. But you will still receive a cross origin policy exception, because your web application still sends the requests to &quot;http://yourExternalHost.com/communication/service.php&quot;.&lt;br /&gt;
&lt;br /&gt;
To fix this, replace the URL &quot;http://yourExternalHost.com/communication/service.php&quot; with &quot;local.app.com/service.php&quot; in your web application.&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2013/11/make-cross-origin-http-requests-with.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij37s_1o5mU67nEqt49zm-HfgDfqEfDNpEoDOuoHnmvFYQ9CS8VgMyPwso0_fOXNuS3DLCjdy0jnAAaj_TjD7sam2zXvkx5g3RK64sZj7Kz_hgXCkDA6zPAE28orKpAZBbAaJceagKrQs/s72-c/boardwalk-801723_1920.jpg" height="72" width="72"/><thr:total>12</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-3660926560892009483</guid><pubDate>Tue, 12 Nov 2013 10:47:00 +0000</pubDate><atom:updated>2015-12-29T17:11:16.701+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">Microsoft Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Node.js</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><category domain="http://www.blogger.com/atom/ns#">Simulator</category><category domain="http://www.blogger.com/atom/ns#">Windows 8</category><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><title>How to install and run Cordova 3.1.0 / 3.2.0 (Phonegap) on Windows Phone 8 simulator (Windows 8 64 bit)</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzpvtVJcX4TFgzljU6urNIfAxTyFUEl_R3I0iShsrz8ZQiU3uQ2DPh_Nj51_hbRyFZiZazyavTo8p2uPBSLVY594S4cWpiIRTHlValLHGnyA59hQjryt-DDRKBGgQiNMClpFEap7KvEK4/s1600/lumia-889924_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzpvtVJcX4TFgzljU6urNIfAxTyFUEl_R3I0iShsrz8ZQiU3uQ2DPh_Nj51_hbRyFZiZazyavTo8p2uPBSLVY594S4cWpiIRTHlValLHGnyA59hQjryt-DDRKBGgQiNMClpFEap7KvEK4/s640/lumia-889924_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
You might want to try to run Cordova with Windows Phone. The first thing that came up when I started with this project was, that the Cordova (PhoneGap) documentation is really lack of information. So I wrote this article to make it easier for you to make a successful and even quicker installation.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoSs63aCBufSmRc_rlOEEv4rMKm_3YhoJx6IG5T_P_kcOBrLVLvM6OBTxnAZhDFvPhGTUC5wHxPo9LWaC2WbAWdPtqZQSZDiSmW-tzpuSO5gz8IIcb4SHya6wwCrqaA-xZT7UXYtCFyz8/s1600/wp.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoSs63aCBufSmRc_rlOEEv4rMKm_3YhoJx6IG5T_P_kcOBrLVLvM6OBTxnAZhDFvPhGTUC5wHxPo9LWaC2WbAWdPtqZQSZDiSmW-tzpuSO5gz8IIcb4SHya6wwCrqaA-xZT7UXYtCFyz8/s1600/wp.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span id=&quot;goog_520385205&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_520385206&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Note: This installation guide can be used for both, physical machine and Virtual Machine. There are a lot of Virtual Machine servers available on the market. I decided to focus on &lt;a href=&quot;http://www.vmware.com/de/products/fusion/&quot; target=&quot;_blank&quot;&gt;VMWare Fusion&lt;/a&gt; only, but it is also possible to use software like Parallels.&lt;br /&gt;
&lt;h2&gt;
Before you start&lt;/h2&gt;
It is &lt;b&gt;&lt;u&gt;very important&lt;/u&gt;&lt;/b&gt; that you have a&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;64 bit version of Windows 8&lt;/span&gt;&lt;/b&gt;&amp;nbsp;installed, otherwise &lt;u&gt;it will not work&lt;/u&gt;.&lt;br /&gt;
&lt;br /&gt;
The Windows Phone simulator relies on Hyper-V, which only comes with Windows 8 64 bit.&lt;br /&gt;
&lt;br /&gt;
In case you did not installed, a evaluation ISO (Windows 8 64 bit) can downloaded at the &lt;a href=&quot;http://technet.microsoft.com/en-us/evalcenter/hh699156.aspx&quot; target=&quot;_blank&quot;&gt;evaluation center&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;
Configure the Window 8 installation for WP 8 simulator&lt;/h2&gt;
The first thing you need to do is to prepare the Windows 8 installation for Windows Phone 8 simulator.&lt;br /&gt;
&lt;br /&gt;
Choose your target system (Virtual Machine or Physical System):&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Windows 8 installation on a VM&lt;/h3&gt;
&lt;div&gt;
To make the required Virtual Machine settings, use the VMWare Fusion settings below:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg40c18XtRMh1nEBE0jChmdYMap6dQ-jLRGL67Fi4P_hkG1cs6fOTtSq2wawhZd-LaEC9PDPK3o93kRqt__YQiEBiPssMg4FIjjsBsFhQv96NUyYZKHQ7Ht_4IBsx4Dj6k-6YzpDXakJbw/s1600/vmware1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;388&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg40c18XtRMh1nEBE0jChmdYMap6dQ-jLRGL67Fi4P_hkG1cs6fOTtSq2wawhZd-LaEC9PDPK3o93kRqt__YQiEBiPssMg4FIjjsBsFhQv96NUyYZKHQ7Ht_4IBsx4Dj6k-6YzpDXakJbw/s640/vmware1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZppMV5fa-yWItRSgajD3QyzfA3sAXaUfNIGMMkOKXVJFesAY2xU_zqdpKRS-M6KXTorS4g51gcaTNYsviWA8sxLFmzjPGtQT9fQRpIlgOpsTEgzAtSCok0TxC0-C3JVG7ujOZvYZrX34/s1600/vmware2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;538&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZppMV5fa-yWItRSgajD3QyzfA3sAXaUfNIGMMkOKXVJFesAY2xU_zqdpKRS-M6KXTorS4g51gcaTNYsviWA8sxLFmzjPGtQT9fQRpIlgOpsTEgzAtSCok0TxC0-C3JVG7ujOZvYZrX34/s640/vmware2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Important:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Hyper-V requires at least two cores. Of course, for a better performance you can also set more.&lt;/li&gt;
&lt;li&gt;You should use 2048mb RAM at the&amp;nbsp;minimum, because not only Windows will consume RAM, also the simulator will consume another 256-512mb of RAM.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
You also have to modify the &quot;*.vmx&quot; file. Add the lines below to the end of the vmx file:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;hypervisor.cpuid.v0 = &quot;FALSE&quot;&lt;/li&gt;
&lt;li&gt;mce.enable = &quot;TRUE&quot;&lt;/li&gt;
&lt;li&gt;vhv.enable = &quot;TRUE&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Make sure that you have no duplicate keys in this file.&lt;/div&gt;
&lt;h3&gt;
Windows 8 installation on a physical machine&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
To be able to run the Windows Phone simulator on a physical Windows 8 machine, you have to enable hardware-assisted virtualisation in the BIOS. For more information, take a look at this article:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj863509(v=vs.105).aspx&quot; target=&quot;_blank&quot;&gt;http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj863509(v=vs.105).aspx&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;
Install Microsoft Visual Studio&lt;/h2&gt;
&lt;div&gt;
After the initial Windows 8 configuration you are ready to install Microsoft Visual Studio. Here you have to options:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Using the Visual Studio Express 2012 for Windows Phone edition. This version is free of charge to you, but not recommended by PhoneGap (no templates can be used in the express edition). But since you are able to create PhoneGap projects via CLI, maybe this version is what you are looking for. &lt;a href=&quot;http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products&quot; target=&quot;_blank&quot;&gt;Go to the Visual Studio Express products&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Installing Visual Studio 2013 Pro / Premium / Ultimate (If you need templates)&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
In all cases the additional required Windows Phone 8 SDK is already included in the installation package.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Don&#39;t forget&lt;/b&gt; to enable the WP 8 SDK checkbox while you are installing Visual Studio.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Tip: If you are using VS 2013, Microsoft asks you to authenticate the product with a MS Account. But there is also a way to use the product key. Take a look at &lt;a href=&quot;http://sanderstechnology.com/2013/visual-studio-2013-using-a-product-key/12701/#.UoDtyJSSBbz&quot; target=&quot;_blank&quot;&gt;this article&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
When the installation process of Visual Studio is finished, your computer will be restarted by the installation routine. After the restart, login again, but wait some seconds, the installation process will go on. Wait until you see the &quot;Installation successful&quot; message.&lt;/div&gt;
&lt;h3&gt;
Add the .NET framework directory to the PATH system environment variable&lt;/h3&gt;
Later on you need the &quot;msbuild.exe&quot; executable your PATH variable. In my case I have to add the following path:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span id=&quot;docs-internal-guid-040b3908-47b0-ff03-59bc-1d07b29f7527&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span style=&quot;font-size: 15px; white-space: pre-wrap;&quot;&gt;C:\Windows\Microsoft.NET\Framework\v4.0.30319&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
The path may differ (different version of .NET), so make sure that it matches.&lt;br /&gt;
&lt;h2&gt;
Test the WP 8 simulator&lt;/h2&gt;
As soon as Visual Studio is completely installed you are able to test the simulator. Open Visual Studio and click on &quot;File&quot; &amp;gt; &quot;New Project&quot;.&lt;br /&gt;
&lt;br /&gt;
Go to your preferred language section and select a simple Windows Phone project.&lt;br /&gt;
&lt;br /&gt;
If the project is created, just start the project. The simulator should come up. If the simulator open successfully, you can close Visual Studio. Otherwise follow the further instruction which VS will show to you.&lt;br /&gt;
&lt;h2&gt;
Install Node.js&lt;/h2&gt;
&lt;div&gt;
Those of you who are not familiar with Node.js, Node.js is a platform that is used to build scalable network applications. For more information click &lt;a href=&quot;https://en.wikipedia.org/wiki/Node.js&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. In this case we use Node.js to install Cordova (PhoneGap).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Just go to &lt;a href=&quot;http://nodejs.org/&quot;&gt;http://nodejs.org&lt;/a&gt; and install Node.js. The installation process is pretty clear (no custom settings required).&lt;br /&gt;
After you installed Node.js, &lt;b&gt;RESTART&lt;/b&gt; your computer or Virtual Machine.&lt;/div&gt;
&lt;h2&gt;
Install Cordova&lt;/h2&gt;
To install Cordova, open &quot;node.js command prompt&quot; and type “npm install -g cordova”.&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span style=&quot;font-size: 15px; white-space: pre-wrap;&quot;&gt;Fix broken Cordova &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial; font-size: 15px; white-space: pre-wrap;&quot;&gt;3.1.0 version&lt;/span&gt;&lt;/h3&gt;
At the moment Cordova is really a mess. So if you installed the Cordova version above, you have two options: Installing a prior version of Cordova (3.0.x) or fixing the current one.&lt;br /&gt;
&lt;br /&gt;
If you want to fix your current installation, you have to replace the two files in the Cordova installation directory:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
~\AppData\Roaming\npm\node_modules\cordova\src\metadata\wp8_parser.js &lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/sgrebnov/cordova-cli/blob/181aa1b7e8f3c8b2f7c4db12e1f79d64c26e8b42/src/metadata/wp8_parser.js&quot;&gt;https://github.com/sgrebnov/cordova-cli/blob/181aa1b7e8f3c8b2f7c4db12e1f79d64c26e8b42/src/metadata/wp8_parser.js&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;and&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
~\AppData\Roaming\npm\node_modules\cordova\src\platform.js&lt;br /&gt;
&lt;br /&gt;
with&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/sgrebnov/cordova-cli/blob/181aa1b7e8f3c8b2f7c4db12e1f79d64c26e8b42/src/platform.js&quot;&gt;https://github.com/sgrebnov/cordova-cli/blob/181aa1b7e8f3c8b2f7c4db12e1f79d64c26e8b42/src/platform.js&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Otherwise you&#39;ll receive the following error message when you are creating a Cordova project:&lt;br /&gt;
&lt;br /&gt;
&quot;Error: An error occured during creation of wp8 sub-project. The system cannot find the path specified.&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span style=&quot;font-size: 15px; white-space: pre-wrap;&quot;&gt;Fix broken Cordova &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial; font-size: 15px; white-space: pre-wrap;&quot;&gt;3.2.0 version&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
Maybe this error message depends on your type of .NET installation, but with Cordova 3.2.0 I cannot add a WP8 project anymore. The following message is displayed:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;The command `msbuild` failed. Make sure you have the latest Windows Phone SDKs installed, AND have the latest .NET framework added to your path (i.e C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319).
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;
To fix this, open &quot;c:\Users\%user%\.cordova\lib\wp\cordova\3.2.0\wp8\bin\check_reqs.js&quot;:&lt;br /&gt;
Replace:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;var msversion = output.match(/Microsoft\s\(R\)\s+Build\sEngine\s[a-z]+\s4\.0\.30319/i);&lt;/pre&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;var msversion = output.match(/\.NET\sFramework\,\sversion\s4\.0/i);&lt;/pre&gt;
or simply set &quot;var msversion = true;&quot; if you have the right version of &quot;msbuild.exe&quot; in your path variable.  
&lt;/div&gt;
&lt;h2&gt;
Create the final Cordova project&lt;/h2&gt;
&lt;div&gt;
At this point you are able to build the final Cordova project. As mentioned earlier, I use the CLI of Cordova to create the project, not the Visual Studio templates.&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Open the command line and type: &quot;&lt;b&gt;cordova create hello com.example.hello HelloWorld&lt;/b&gt;&quot;.&amp;nbsp;The first argument specifies a hello directory to be generated for your project. The other two arguments are optional: the com.example.hello argument provides your project with a reverse domain-style identifier, and the HelloWorld provides the application&#39;s display text. You can edit both of these values later in the config.xml file.&lt;/li&gt;
&lt;li&gt;Open the &quot;hello&quot; folder (&quot;&lt;b&gt;cd hello&lt;/b&gt;&quot;) which you created above.&lt;/li&gt;
&lt;li&gt;Add a WP 8 platform to the current Cordova project. Type &quot;&lt;span id=&quot;docs-internal-guid-040b3908-47d0-c761-872b-fbbfa96a37c7&quot;&gt;&lt;span style=&quot;font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;cordova platform add wp8&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&quot;&lt;/li&gt;
&lt;li&gt;Open the Windows Explorer and go to hello/platforms/wp8 and double click on the solution file &quot;*.sln&quot;. Microsoft Visual Studio will open with your selected project. Just click the &quot;Run Button&quot; to show up the simulator.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It is a bit tricky to deploy a HTML5 application on a Windows Phone, but I hope this article helps...&lt;/div&gt;
&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2013/11/how-to-install-and-run-cordova-310.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzpvtVJcX4TFgzljU6urNIfAxTyFUEl_R3I0iShsrz8ZQiU3uQ2DPh_Nj51_hbRyFZiZazyavTo8p2uPBSLVY594S4cWpiIRTHlValLHGnyA59hQjryt-DDRKBGgQiNMClpFEap7KvEK4/s72-c/lumia-889924_1920.jpg" height="72" width="72"/><thr:total>16</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-4651071029694620141</guid><pubDate>Mon, 11 Nov 2013 09:02:00 +0000</pubDate><atom:updated>2015-12-29T17:12:20.781+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cordova</category><category domain="http://www.blogger.com/atom/ns#">HTML5</category><category domain="http://www.blogger.com/atom/ns#">PhoneGap</category><category domain="http://www.blogger.com/atom/ns#">Windows Phone</category><category domain="http://www.blogger.com/atom/ns#">WP</category><title>Enable all cookies on Windows Phone</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzpvtVJcX4TFgzljU6urNIfAxTyFUEl_R3I0iShsrz8ZQiU3uQ2DPh_Nj51_hbRyFZiZazyavTo8p2uPBSLVY594S4cWpiIRTHlValLHGnyA59hQjryt-DDRKBGgQiNMClpFEap7KvEK4/s1600/lumia-889924_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzpvtVJcX4TFgzljU6urNIfAxTyFUEl_R3I0iShsrz8ZQiU3uQ2DPh_Nj51_hbRyFZiZazyavTo8p2uPBSLVY594S4cWpiIRTHlValLHGnyA59hQjryt-DDRKBGgQiNMClpFEap7KvEK4/s640/lumia-889924_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Most cookies are disabled by default on Windows Phone. However, here is one workaround to allow cookies. Open Internet Explorer and follow the images below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiNRDguRJj60K15vE_fVZhEzEJDLLfo51vCcNiBLkp9fYEmPq4LOHhztmjIhAuILYZlF3JgkFdoQJJvTKerlEaVkzS8emu4-6V8mRI7NEJyduVfAQYg4Ghbp-jg9_52JY0sKipJdZYAZQ/s1600/wp8+cookies.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiNRDguRJj60K15vE_fVZhEzEJDLLfo51vCcNiBLkp9fYEmPq4LOHhztmjIhAuILYZlF3JgkFdoQJJvTKerlEaVkzS8emu4-6V8mRI7NEJyduVfAQYg4Ghbp-jg9_52JY0sKipJdZYAZQ/s320/wp8+cookies.png&quot; width=&quot;178&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcTb1OjuhmwHQBJRNvIufqLovgmbuWHJmxBiW_mmT-cSiIsmHiQuc62dG7vMRfxc3CsV9N15CQN7-rI-nQ8BcsLQHssnLNPFT_XlO4C9dS-ul8XgLcw_B8vT5a3IC2PnvQ_Crliac6Dhs/s1600/wp8_cookies2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcTb1OjuhmwHQBJRNvIufqLovgmbuWHJmxBiW_mmT-cSiIsmHiQuc62dG7vMRfxc3CsV9N15CQN7-rI-nQ8BcsLQHssnLNPFT_XlO4C9dS-ul8XgLcw_B8vT5a3IC2PnvQ_Crliac6Dhs/s320/wp8_cookies2.png&quot; width=&quot;177&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-HanP4lUgeR_Hw9xSJoHYAACgC2Hm6g__PfXNLZannliqj4NH7ZbLHNZeoW7N4iq3S1g4vVOIYIUErwWlHYKAhf3qgLfjeTv_2B-IbCt08BuhmdfVXAI_S40YLUi7iL22PUNKuQY5wsw/s1600/wp8_cookies3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-HanP4lUgeR_Hw9xSJoHYAACgC2Hm6g__PfXNLZannliqj4NH7ZbLHNZeoW7N4iq3S1g4vVOIYIUErwWlHYKAhf3qgLfjeTv_2B-IbCt08BuhmdfVXAI_S40YLUi7iL22PUNKuQY5wsw/s320/wp8_cookies3.png&quot; width=&quot;177&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://tol8.blogspot.com/2013/11/activate-support-cookies-on-windows.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzpvtVJcX4TFgzljU6urNIfAxTyFUEl_R3I0iShsrz8ZQiU3uQ2DPh_Nj51_hbRyFZiZazyavTo8p2uPBSLVY594S4cWpiIRTHlValLHGnyA59hQjryt-DDRKBGgQiNMClpFEap7KvEK4/s72-c/lumia-889924_1920.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-5058684885756130577</guid><pubDate>Wed, 06 Nov 2013 03:30:00 +0000</pubDate><atom:updated>2015-12-29T17:17:19.220+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ExtJS</category><category domain="http://www.blogger.com/atom/ns#">OS X</category><category domain="http://www.blogger.com/atom/ns#">Sencha</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><title>Sencha CMD stopped working in OS X 10.9 Mavericks</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMg8uIY-wgpN2h1Y0SiJMcj8UvEgzs_e8XRrHP7la1NVj2f7sSKWqg9kRf2HXNdS0SBks_SY7Gski1zUk071orldEcG4pfyeYyBt6OiqyisY1dVe2zzIQYQ8y5RCo1dTswct8X4zFEoyg/s1600/helicopter-615168_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;374&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMg8uIY-wgpN2h1Y0SiJMcj8UvEgzs_e8XRrHP7la1NVj2f7sSKWqg9kRf2HXNdS0SBks_SY7Gski1zUk071orldEcG4pfyeYyBt6OiqyisY1dVe2zzIQYQ8y5RCo1dTswct8X4zFEoyg/s640/helicopter-615168_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
After I came back from my last vacation, the first thing I did was updating my system to Mavericks. Of course, I read some recommendations before if it is worse to update or not, but after some researches I thought nothing can go wrong :)&lt;br /&gt;
&lt;br /&gt;
The OS X update itself worked for me like a charm without having any problems, but there was one thing I mentioned first: Java is no more included in OS X 10.9 Mavericks. Ok this was easy to fix. The real problem started after I wanted to build my Sencha Touch application via Sencha CMD.&lt;br /&gt;
&lt;br /&gt;
When I started the Sencha CMD build I received a message, that not the right Ruby version is installed on my system.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
[ERR] Detected ruby version 2.0.0 was not less than 2.0. Please install ruby 1.8 or 1.9&lt;/blockquote&gt;
After some researches on the web, I found the following information:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Ext JS themes use Sass variables whose value are set to &quot;null !default&quot;.&lt;/li&gt;
&lt;li&gt;Sass changed the behavior of such things and broke those themes.&lt;/li&gt;
&lt;li&gt;Sencha Cmd embeds a version of Sass that is known compatible with Ext JS themes.&lt;/li&gt;
&lt;li&gt;Ruby 2 changed some API and broke that version of Sass.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
So the only solution for my problem was going back to Ruby 1.9 to make my Sencha CMD build working again.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are a lot of ways to downgrade Ruby, but a very straight forward and easy way by using RVM is described in the following article:&amp;nbsp;&lt;a href=&quot;http://moduscreate.com/sencha-cmd-not-working-in-os-x-10-9-mavericks/&quot; target=&quot;_blank&quot;&gt;http://moduscreate.com/sencha-cmd-not-working-in-os-x-10-9-mavericks/&lt;/a&gt;&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2013/11/sencha-cmd-stopped-working-in-os-x-109.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMg8uIY-wgpN2h1Y0SiJMcj8UvEgzs_e8XRrHP7la1NVj2f7sSKWqg9kRf2HXNdS0SBks_SY7Gski1zUk071orldEcG4pfyeYyBt6OiqyisY1dVe2zzIQYQ8y5RCo1dTswct8X4zFEoyg/s72-c/helicopter-615168_1920.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-4996152276540550902</guid><pubDate>Wed, 28 Aug 2013 09:59:00 +0000</pubDate><atom:updated>2016-01-19T12:09:43.153+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Mac</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>Sharing Screen with Retina Display (Black screen)</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUcfGSPajX5aWvYh9kiR_yQX0wilAvX20rLWVp70kLF2HgKIZQ7dytJJ3M5hyekDgMnND18ytQswHH3FKmaRJpFI_Kxn0WIHWgoC2BgcH3k_SaEOCNM0c4Ksi0MFfF2OobkLCvl4XZ3Ek/s1600/laptop-1031224_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUcfGSPajX5aWvYh9kiR_yQX0wilAvX20rLWVp70kLF2HgKIZQ7dytJJ3M5hyekDgMnND18ytQswHH3FKmaRJpFI_Kxn0WIHWgoC2BgcH3k_SaEOCNM0c4Ksi0MFfF2OobkLCvl4XZ3Ek/s640/laptop-1031224_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
You&#39;ve experienced unusual problems trying to share your screen on a MacBook Pro with Retina display? A black screen with a moving mouse cursor is shared?&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In this case your current display resolution settings are too high for screen sharing.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To change the resolution of your display, you can use a tool like &quot;Display Menu&quot;.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
https://itunes.apple.com/gb/app/display-menu/id549083868?mt=12&amp;amp;ls=1&lt;br /&gt;
&lt;br /&gt;
After you changed the resolution, you may have to restart your screen sharing session.&lt;/div&gt;
&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2013/08/sharing-screen-with-retina-display.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUcfGSPajX5aWvYh9kiR_yQX0wilAvX20rLWVp70kLF2HgKIZQ7dytJJ3M5hyekDgMnND18ytQswHH3FKmaRJpFI_Kxn0WIHWgoC2BgcH3k_SaEOCNM0c4Ksi0MFfF2OobkLCvl4XZ3Ek/s72-c/laptop-1031224_1920.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-770041062673588264</guid><pubDate>Fri, 23 Aug 2013 03:48:00 +0000</pubDate><atom:updated>2015-12-29T17:17:49.302+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Chrome</category><category domain="http://www.blogger.com/atom/ns#">css</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><title>Hotfix - Sencha Touch (2.2.1) broken layout in Chrome 29</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPFPDC2z3_RUMxwgTnPCrRGbjz_5f6t1i9Wa1iP7BTsiJmo-ux5uFR7B9nKgtAebGP_U2crXeCaewDgmm9S4HUbrfM4OWpJO-ZgycgoRCsQGHEjtxLNOMoIrU8Zpxv8OjEkuiceBkfDkc/s1600/helicopter-615168_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;374&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPFPDC2z3_RUMxwgTnPCrRGbjz_5f6t1i9Wa1iP7BTsiJmo-ux5uFR7B9nKgtAebGP_U2crXeCaewDgmm9S4HUbrfM4OWpJO-ZgycgoRCsQGHEjtxLNOMoIrU8Zpxv8OjEkuiceBkfDkc/s640/helicopter-615168_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Chrome has a new flex layout support since version 29.0.1547.57, this cause a broken layout in Sencha Touch 2.2.1.&lt;br /&gt;
&lt;br /&gt;
Fix this issue by changing the rule order of the st-box mixin.&lt;br /&gt;
&lt;br /&gt;
Open resources/themes/stylesheets/sencha-touch/base/mixins/_Class.scss in a text editor and replace the mixin st-box with the following:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;@mixin st-box($important: no) {
    @if $important == important {
        display: flex !important;
        display: -webkit-box !important;
        display: -ms-flexbox !important;
    } @else {
        display: flex;
        display: -webkit-box;
        display: -ms-flexbox;
    }
}
&lt;/pre&gt;
After re-compiling your css, your application layout should look as nice as in prior Chrome versions.</description><link>http://tol8.blogspot.com/2013/08/hotfix-sencha-touch-221-broken-layout.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPFPDC2z3_RUMxwgTnPCrRGbjz_5f6t1i9Wa1iP7BTsiJmo-ux5uFR7B9nKgtAebGP_U2crXeCaewDgmm9S4HUbrfM4OWpJO-ZgycgoRCsQGHEjtxLNOMoIrU8Zpxv8OjEkuiceBkfDkc/s72-c/helicopter-615168_1920.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-3479026568484515595</guid><pubDate>Wed, 21 Aug 2013 17:15:00 +0000</pubDate><atom:updated>2013-08-21T19:19:56.139+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ExtJS</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">Sencha Architect</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><title>Sencha Architect - Add custom property in a Controller</title><description>During the last view days I was evaluating the Sencha Architect (Version 2.2.2). Most of the things that I wanted to implement were not a problem. But then I wanted to add a custom property in the controller section.
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;config: {
        /**
         * @private
         */
        viewCache: []
}&lt;span style=&quot;font-family: Times;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
At first I thought no problem, that is easy. But in the end it has taken some time to find this out. So here comes the trick:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Go to the &quot;Project Inspector&quot;. Type the name of your custom property in the search field of the config pane then click the &quot;add&quot; button or hit your enter key. After that you can change the type. See below:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKw6PER-PktZQFXH6PJwEUrAAVQ8r9c-ollgFEkot_AJN9-iAtDd80ic_BRt_4HScRNCk8BsdB9jviMz3WZv1dz7afRk4GXepIN6y6U8Jrw1N2xv5bVl0Cn4kLV4O72Tu6_AA8jK6CAH4/s1600/architect_trick.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKw6PER-PktZQFXH6PJwEUrAAVQ8r9c-ollgFEkot_AJN9-iAtDd80ic_BRt_4HScRNCk8BsdB9jviMz3WZv1dz7afRk4GXepIN6y6U8Jrw1N2xv5bVl0Cn4kLV4O72Tu6_AA8jK6CAH4/s1600/architect_trick.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2013/08/sencha-architect-add-custom-property-in.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKw6PER-PktZQFXH6PJwEUrAAVQ8r9c-ollgFEkot_AJN9-iAtDd80ic_BRt_4HScRNCk8BsdB9jviMz3WZv1dz7afRk4GXepIN6y6U8Jrw1N2xv5bVl0Cn4kLV4O72Tu6_AA8jK6CAH4/s72-c/architect_trick.png" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-3886731856698273023</guid><pubDate>Sat, 10 Aug 2013 10:17:00 +0000</pubDate><atom:updated>2013-08-10T12:17:25.371+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Eclipse</category><title>Optimising Eclipse Performance</title><description>Eclipse is one of the most popular development environment for developers all over the world. Me personally have been using Eclipse for nearly 10 years for many projects. Lately, while working with an intern, I noticed that the performance of his Eclipse is quite slow.&lt;br /&gt;
&lt;br /&gt;
Of course there are many factors that could influence the speed of Eclipse such as the use of poorly written plugins or the wrong user settings. Even the standard installation of Eclipse itself has performance issues.&lt;br /&gt;
&lt;br /&gt;
For years I have been trying to optimise Eclipse performance in many ways. I would like to share with you one trick that I&#39;ve always do when my Eclipse starts running like an 80 years old man.&lt;br /&gt;
&lt;br /&gt;
Eclipse stores all the changes in a local history. When this history gets bigger, it obviously has some effect on the performance.&lt;br /&gt;
&lt;br /&gt;
In this case, we should release some old entries from the history. The local history can be found at: &quot;.metadata/.plugins/org.eclipse.core.resources/.history&quot;.&lt;br /&gt;
&lt;br /&gt;
However, instead of deleting the history entries manually, there is an option to limit the size of the history file. In the &quot;Settings&quot; of &amp;nbsp;Eclipse, from &quot;Preferences &amp;gt; General &amp;gt; Workspace &amp;gt; Local history&quot; the number of items and days can be set.</description><link>http://tol8.blogspot.com/2013/08/optimising-eclipse-performance.html</link><author>noreply@blogger.com (JH)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-4240011702130545883</guid><pubDate>Tue, 06 Aug 2013 14:13:00 +0000</pubDate><atom:updated>2016-01-19T12:07:07.518+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">Sencha</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><title>Throttle function execution in Sencha Touch</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_tpQUcN6AKYt3Y7QU_5cIdFCfm-60FD9MnhBko7zIxILrNEg4SZ2zpOwtnFNNDURzLmb6ZNTV0_SZFZMg3-mg9EQ6weivJPHExg5vQ0JVz5Qr1LM2vTnxVS7qEWNnBmLvI4cYFMocKHc/s1600/throttle-332730_1280.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_tpQUcN6AKYt3Y7QU_5cIdFCfm-60FD9MnhBko7zIxILrNEg4SZ2zpOwtnFNNDURzLmb6ZNTV0_SZFZMg3-mg9EQ6weivJPHExg5vQ0JVz5Qr1LM2vTnxVS7qEWNnBmLvI4cYFMocKHc/s640/throttle-332730_1280.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Sencha Touch includes some notable features. The function&amp;nbsp;&lt;a href=&quot;http://docs-origin.sencha.com/touch/2.2.1/#!/api/Ext.Function-method-createThrottled&quot;&gt;Ext.Function.createThrottled&lt;/a&gt;&amp;nbsp;is one of them.&lt;br /&gt;
&lt;br /&gt;
This function prevents multiple function execution. The interval on which the passed function is executed can defined additionally.&lt;br /&gt;
&lt;br /&gt;
Ok, let&#39;s take a look into the code:&lt;br /&gt;
&lt;div class=&quot;page&quot; title=&quot;Page 69&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;// The function to execute at a regular time interval.
var fn = function () {

console.log(&#39;fired&#39;);
};

// The intervall in milliseconds on which&amp;nbsp;
// the passed function is executed.
var intervall = 5000; // 5 seconds

var myFunc = Ext.Function.createThrottled(fn, intervall, this);

// Excecuted immediately
myFunc();

// No matter how often myFunc() is called,
// it is only executed once and after 5 seconds
myFunc();
myFunc();
myFunc();
myFunc();
myFunc();
myFunc();&lt;/pre&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Tip: The function can be assigned to a class variable that is initialized via a constructor or init().&lt;/blockquote&gt;
</description><link>http://tol8.blogspot.com/2013/08/throttle-function-execution-in-sencha.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_tpQUcN6AKYt3Y7QU_5cIdFCfm-60FD9MnhBko7zIxILrNEg4SZ2zpOwtnFNNDURzLmb6ZNTV0_SZFZMg3-mg9EQ6weivJPHExg5vQ0JVz5Qr1LM2vTnxVS7qEWNnBmLvI4cYFMocKHc/s72-c/throttle-332730_1280.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-5065891308756265311</guid><pubDate>Thu, 11 Jul 2013 07:10:00 +0000</pubDate><atom:updated>2013-07-14T08:23:46.795+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Debugging</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">Mobile</category><category domain="http://www.blogger.com/atom/ns#">Remote</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><category domain="http://www.blogger.com/atom/ns#">Testing</category><title>Remote debugging a Sencha Touch application</title><description>Meanwhile, there are many tools on the market for remote debugging, but remote debugging is still damn tricky.&lt;br /&gt;
&lt;br /&gt;
In this post I&#39;d like to introduce &lt;a href=&quot;http://jsconsole.com./&quot;&gt;http://jsconsole.com&lt;/a&gt; in combination with a Sencha Touch application to you.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
jsconsole is a simple JavaScript command line tool. However, it also provides the ability to bridge across to other browser windows to remotely control and debug that window - be it in another browser or another device altogether.&lt;/blockquote&gt;
First we need to create a new ID for the device that we want to debug. Jump to &lt;a href=&quot;http://jsconsole.com/&quot;&gt;http://jsconsole.com&lt;/a&gt; and enter the following command in the console:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;:listen&lt;/pre&gt;
After the command &quot;:listen&quot; is entered, the following output appear:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU6UjEOY0Z3JYc53alBZI8OOlngmIa2N3T0nmMol-jgtqoUVaPa1QMevkgMsBcAZ3Tu89AfeWs8JLzMX6TnSgjjLq8nvFpqsMP72TmV9-Ujlu3-Pu0MhrHlD-IaB1JFGSG9SCz_E3uuDA/s1600/blog1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;278&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU6UjEOY0Z3JYc53alBZI8OOlngmIa2N3T0nmMol-jgtqoUVaPa1QMevkgMsBcAZ3Tu89AfeWs8JLzMX6TnSgjjLq8nvFpqsMP72TmV9-Ujlu3-Pu0MhrHlD-IaB1JFGSG9SCz_E3uuDA/s400/blog1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
As can be seen in the output, a new ID is generated.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Hint: It is also possible to listen to a predefined device. Just type: &quot;:listen &amp;lt;ID&amp;gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
The next thing we have to do is to include the script in our application. The script can be integrated as follows in the &quot;app.json&quot;:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;  &quot;js&quot;: [
    {
      &quot;path&quot;: &quot;http://jsconsole.com/remote.js?AE61E3FB-7B1B-4367-8DEC-AD476FC9CA5F&quot;,
      &quot;update&quot;: &quot;full&quot;,
      &quot;remote&quot;: true
    },
&lt;/pre&gt;
Now any calls to console.log from your application will display the result in the jsconsole session that is listening to your ID.&lt;br /&gt;
&lt;br /&gt;
It is also possible to inject code into the remote application. As a simple example, write &quot;alert (&#39;test&#39;);&quot; in jconsole. On the remote application, a message box with the text &quot;test&quot; should appear. Of course it can also be injected much more complex code.&lt;/div&gt;
&lt;div&gt;
For this reason, this script should never be used in a production environment!&lt;br /&gt;
&lt;br /&gt;
More information about jconsole is available &lt;a href=&quot;http://jsconsole.com/remote-debugging.html&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2013/07/remote-debugging-sencha-touch.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU6UjEOY0Z3JYc53alBZI8OOlngmIa2N3T0nmMol-jgtqoUVaPa1QMevkgMsBcAZ3Tu89AfeWs8JLzMX6TnSgjjLq8nvFpqsMP72TmV9-Ujlu3-Pu0MhrHlD-IaB1JFGSG9SCz_E3uuDA/s72-c/blog1.png" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-2667257722903677730</guid><pubDate>Wed, 03 Jul 2013 17:35:00 +0000</pubDate><atom:updated>2015-12-30T09:56:01.401+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ExtJS</category><category domain="http://www.blogger.com/atom/ns#">icon fonts</category><category domain="http://www.blogger.com/atom/ns#">Sencha</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><category domain="http://www.blogger.com/atom/ns#">Spket</category><title>Common Pitfalls and Suggestions (Sencha Touch / Ext JS)</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPFPDC2z3_RUMxwgTnPCrRGbjz_5f6t1i9Wa1iP7BTsiJmo-ux5uFR7B9nKgtAebGP_U2crXeCaewDgmm9S4HUbrfM4OWpJO-ZgycgoRCsQGHEjtxLNOMoIrU8Zpxv8OjEkuiceBkfDkc/s1600/helicopter-615168_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;374&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPFPDC2z3_RUMxwgTnPCrRGbjz_5f6t1i9Wa1iP7BTsiJmo-ux5uFR7B9nKgtAebGP_U2crXeCaewDgmm9S4HUbrfM4OWpJO-ZgycgoRCsQGHEjtxLNOMoIrU8Zpxv8OjEkuiceBkfDkc/s640/helicopter-615168_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I would like to take this opportunity to explain a few pitfalls that arise when in development with Sencha. This article is designed to help develop Sencha applications faster and more robust.&lt;br /&gt;
&lt;br /&gt;
If you should find that something important is missing or something is wrong, do not hesitate to contact me.&lt;br /&gt;
&lt;h2&gt;
 Loading Sencha Framework and external Resources&lt;/h2&gt;
It is recommended that the Sencha framework is loaded via the Microloader.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
The &quot;index.html&quot; should be kept as lightweight as possible to avoid negative side effects. It seems Sencha has problems, for example, when trying to place child elements within the body region.&lt;br /&gt;
&lt;br /&gt;
Below is an example of linking against the Sencha Touch framework:&lt;br /&gt;
&lt;div&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;!DOCTYPE HTML&amp;gt;
&amp;lt;html manifest=&quot;&quot; lang=&quot;en-US&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;Your Application&amp;lt;/title&amp;gt;
    &amp;lt;script id=&quot;microloader&quot; type=&quot;text/javascript&quot; src=&quot;touch/microloader/development.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
If additional JavaScript files required, these should not be included in the &quot;index.html&quot;. Additional JavaScript files and CSS should always defined in the file &quot;app.json&quot;.&lt;br /&gt;
&lt;br /&gt;
The defintion of the files in the &quot;app.json &#39; has the following advantages: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Included files are automatically compressed during the Sencha Build process.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Included files can be loaded depending on the target platform.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The application loads faster.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;index.html is lightweight.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2&gt;
Styling your Application&lt;/h2&gt;
&lt;div&gt;
When it comes to styling your application, Sencha has a few ways to do this directly in JavaScript. However, this should be avoided. All style information should be defined via CSS or better SASS.&lt;/div&gt;
&lt;div&gt;
This results in the following advantages: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The actual source code is lightweight.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;All style information are defined centrally.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The application can be easily edit at the same time by several developers.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The design can be flexibly adapted at any time.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2&gt;
The app.js File&lt;/h2&gt;
All changes to this file should be as minimal as possible. The reason for this, as soon as a Sencha update is performed, this file must be manually merged with the update.&lt;br /&gt;
&lt;h2&gt;
Using Ext.getCmp()&lt;/h2&gt;
The use of the function Ext.getCmp() should be largely avoided. The use of this function makes the source code hard to read and maintainable. By using the MVC principle, the function should no longer be needed.&lt;br /&gt;
See also &lt;a href=&quot;http://docs.sencha.com/touch/2.2.1/#!/video/mvc-part-1&quot;&gt;MVC in depth Part 1&lt;/a&gt; and &lt;a href=&quot;http://docs.sencha.com/touch/2.2.1/#!/video/mvc-part-2&quot;&gt;MVC in depth Part 2&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;In short, if Ext.getCmp() is used, the developer has missed the object-oriented approach.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In many applications, this function is still used to prototype faster or because the programmer does not know better.&lt;/div&gt;
&lt;div&gt;
When using Ext.getCmp() is essential to make sure that the object exists. I.e. the object must not be &#39;undefined&#39; when its function is called. Otherwise, the interpreter throws an exception.&lt;br /&gt;
&lt;h2&gt;
Using Ext.Viewport.removeAll() to destroy components&lt;/h2&gt;
&lt;div&gt;
In the life cycle of an application it often happens that components are no longer needed. A good example to log out in an application. It is tempting to destroy all components on the Viewport with the Ext.Viewport.removeAll (&lt;a href=&quot;http://docs.sencha.com/touch/2.2.1/#!/api/Ext.Container-method-removeAll&quot; target=&quot;_blank&quot;&gt;http://docs.sencha.com/touch/2.2.1/#!/api/Ext.Container-method-removeAll&lt;/a&gt;) command:&lt;/div&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Ext.Viewport.removeAll(true, true);&lt;/pre&gt;
&lt;div&gt;
At first glance, all components were destroyed which were located on the Viewport.&amp;nbsp;But what happens if the user now wants to re-login? Furthermore, we assume that the user enters his password incorrectly, and we show via Ext.Msg an error message.&lt;br /&gt;
Unfortunately, the following error message is displayed instead Ext.Msg:
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Uncaught TypeError: Cannot read property &#39;dom&#39; of null&lt;/pre&gt;
&lt;/div&gt;
Ext.Msg is a singleton instance of Ext.MessageBox. When you do the removeAll(true, true) the second argument is to destroy everything, inner items, docked items and floating items. Ext.Msg is a floating item so you have destroyed Ext.Msg, but you are then trying to use it.  Now, if the component is destroyed it ends with the error message above.&lt;/div&gt;
&lt;div&gt;
It is recommended to destroy all the components separately. Not with &quot;Ext.Viewport.remove&quot; but directly through &quot;myObj.destroy();&quot;&lt;br /&gt;
&lt;h2&gt;
Naming Model, Store and View&lt;/h2&gt;
In the naming of models, views, and stores should pay attention to the following:&lt;/div&gt;
&lt;div&gt;
Basically, the name always begins with a capital letter, all the following words also with a capital letter.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Model, in the singular. Example: &quot;TrainStation.js&quot;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Store in the plural. Example: &quot;TrainStations.js&quot;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;View, in the singular. Example: &quot;TrainStation.js&quot;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
Following this convention, the structure of the application is easier to read and quicker to learn.&lt;br /&gt;
&lt;h2&gt;
JavaScript === versus == (Comparison Operators)&lt;/h2&gt;
The identity &quot;===&quot; operator behaves identically to the equality &quot;==&quot; operator except no type conversion is done, and the types must be the same to be considered equal.&lt;br /&gt;
&lt;br /&gt;
If values ​​are compared with each other it is recommended to use &quot;===&quot; instead of &quot;==&quot;. This makes the program less error prone.&lt;br /&gt;
&lt;br /&gt;
This is also the case for &quot;!==&quot; and &quot;!=&quot;.&lt;br /&gt;
&lt;br /&gt;
See also &lt;a href=&quot;http://www.c-point.com/javascript_tutorial/jsgrpComparison.htm&quot;&gt;http://www.c-point.com/javascript_tutorial/jsgrpComparison.htm&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;
Stop over nesting the View&lt;/h2&gt;
When creating new views, make sure that they are as lightweight as possible. I.e. you should not go deeper than it is absolutely necessary in the structure. The use of unnecessary panels is a prime example of this. Is a view nested too deeply, it will have a negative impact on the performance of the application.&lt;br /&gt;
&lt;br /&gt;
Is a view defined with &quot;Ext.View&quot;, the view should not contain any action listener. These are defined in the relevant controller. This has the advantage that the view is more legible.&lt;br /&gt;
&lt;br /&gt;
In short, in the view there is no business logic! All business logic should always be to find in the respective controller.&lt;br /&gt;
&lt;h2&gt;
Code Completion&lt;/h2&gt;
If the application is developed in Eclipse there are two ways to obtain a code completion. The first way is to use Spket. How this works can be &lt;a href=&quot;http://tol8.blogspot.com/2013/02/sencha-ext-js-support-in-eclipse-tested.html&quot;&gt;found here&lt;/a&gt;. The second alternative is to purchase Sencha Complete. This version includes the necessary Eclipse plugins.&lt;br /&gt;
&lt;h2&gt;
 JSLINT for better source code&lt;/h2&gt;
For the development of JavaScript applications, it is recommended to use JSLint. Who JSLint does not know yet, thus it is possible to validate your code against best practices. How to configure Eclipse with JSLint is &lt;a href=&quot;http://www.andyjamesdavies.com/javascript/installing-jslint-on-eclipse-ide&quot;&gt;described here&lt;/a&gt;.&lt;/div&gt;
&lt;h2&gt;
Icon fonts instead of the classic icons&lt;/h2&gt;
One element of themes in Sencha Touch 2.2 is the new use of icons as fonts. This is an awesome feature, because this offers the following new features: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;size can be easily changed.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;color can be easily changed.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;shadow can be easily added to their shape.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;transparency nearly everywhere, unlike transparent png&#39;s in ie6.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;smaller in file size&amp;nbsp;&lt;/li&gt;
&lt;li&gt;infinitely scaleable (because vector)&lt;/li&gt;
&lt;/ul&gt;
The goal of using icon fonts is to replace the need to render icons on a web page using images.&lt;br /&gt;
&lt;br /&gt;
Click &lt;a href=&quot;http://tol8.blogspot.com/2013/06/using-sass-and-new-icon-fonts-in-sencha.html&quot;&gt;here to continue...&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;
Using ComponentQueries instead of Id Config&lt;/h2&gt;
Avoid using the id config, let ComponentQuery resolve the component using xtype with a property.&lt;br /&gt;
&lt;br /&gt;
For those who are not familiar with ComponentQueries yet, they are used to retrieve pointers to one or many components in the application using a syntax similar to that of CSS selectors.&lt;br /&gt;
&lt;br /&gt;
Let‘s compare the following cases. With Id Config, we define the following Sencha controller:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Ext.define(&#39;MyApp.controller.Main&#39;, {
    extend: &#39;Ext.app.Controller&#39;,

    config: {
        refs: {
            myButton: &#39;#buttonId&#39;
        },
        control: {
            myButton: {
                tap: &#39;onButtonTap&#39;,
                change: &#39;onButtonChange&#39;
            }
        }
    },
});
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
As seen in the above example, we refer to the button with &quot;#buttonId&quot;. The code would work for now. But what happens if we destroy the view with the button on it and then re-create the view?&lt;br /&gt;
&lt;br /&gt;
The result is, the &quot;tap&quot; handler fires, but not the &quot;change&quot; listener. The controller reference do not point to the button anymore. The reason being is, the button has been referenced via the config id. As you can clearly see Id Config is lack of flexibility.&lt;br /&gt;
&lt;br /&gt;
Here is the same case, but using the ComponentQuery:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Ext.define(&#39;MyApp.controller.Main&#39;, {
    extend: &#39;Ext.app.Controller&#39;,

    config: {
        refs: {
            myButton: &#39;button[id=buttonId]&#39;
        },
        control: {
            myButton: {
                tap: &#39;onButtonTap&#39;,
                change: &#39;onButtonChange&#39;
            }
        }
    },
});&lt;/pre&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
There is no difference between quoted and unquoted references. myButton and also &quot;myButton&quot; are valid references.&amp;nbsp;&lt;/blockquote&gt;
&lt;h3&gt;
More about ComponentQueries&lt;/h3&gt;
&lt;div&gt;
ComponentQueries can be built with:&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;The XTYPE-property&lt;/li&gt;
&lt;li&gt;Attributes in brackets, i.E. &#39;button[action=submitForm]&#39;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Functions which return true/false values in curly braces &#39;{isValid()}&#39;&lt;/li&gt;
&lt;li&gt;The itemId property &#39;#itemId&#39;&lt;/li&gt;
&lt;li&gt;The &#39;not&#39; operator. Used to retrieve all components that are not the pointed component. I.E. &#39;not textfields&#39;&lt;/li&gt;
&lt;li&gt;Like in css &#39;&amp;gt;&#39; can used for parent and child relationships (&#39;panel &amp;gt; button&#39;).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Multiple queries can be separated by using &#39;,&#39;. I.E. &#39;button, textfield&#39;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;h3&gt;
Testing ComponentQueries&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
ComponentQueries are mostly defined in controllers (ref section), but it is also possible to use the singleton object Ext.ComponentQuery (&lt;a href=&quot;http://docs.sencha.com/touch/2.2.1/#!/api/Ext.ComponentQuery&quot; target=&quot;_blank&quot;&gt;http://docs.sencha.com/touch/2.2.1/#!/api/Ext.ComponentQuery&lt;/a&gt;). To run and test a&amp;nbsp;ComponentQuery,&amp;nbsp; there is a handy option in the JavaScript console. I.E Ext.ComponentQuery.query(&#39;panel &amp;gt; button&#39;)&lt;/div&gt;
&lt;h2&gt;
Using itemId instead of id&lt;/h2&gt;
I recommend you not to use the &quot;id&quot; attribute for the identification of components. The problem is that the &quot;id&quot; must be unique throughout the entire application. Replace &quot;id&quot; with &quot;itemId&quot; will avoid this conflict.&amp;nbsp;The itemId property requires uniqueness of value only among child components of a container.&lt;br /&gt;
&lt;br /&gt;
Caution: If the itemId used in a ComponentQuery, the itemId must either pre-qualified via a parent item and/or you could put its xtype#myItemId.&lt;br /&gt;
&lt;br /&gt;
Short example. We &amp;nbsp;define a button with the itemId=&quot;navButton&quot; and the parent container of our button has the xtype=&quot;navigation&quot;. So our config could look like this:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Ext.define(&#39;MyApp.controller.Main&#39;, {
    extend: &#39;Ext.app.Controller&#39;,

    config: {
        refs: {
            myButton: &#39;button#navButton&#39;
        },
        control: {
            myButton: {
                tap: ...
            }
        }
    },
});&lt;/pre&gt;
&lt;br /&gt;
While itemIds are not unique throughout the entire application, it is a good advice to put the xtype into the query too. So instead of &#39;button#navButton&#39; we use the following query: &#39;xtype button#navButton&#39; to gain more precision:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Ext.define(&#39;MyApp.controller.Main&#39;, {
    extend: &#39;Ext.app.Controller&#39;,

    config: {
        refs: {
            myButton: &#39;navigation button#navButton&#39;
        },
        control: {
            myButton: {
                tap: ...
            }
        }
    },
});&lt;/pre&gt;
&lt;h2&gt;
Using GLOBAL Variables&lt;/h2&gt;
It is generally advised not to use global variables. First problem, there is no namespace for these variables. Second problem, the debugging of these variables often proves to be very difficult.&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;messageText = &#39;My message text.&#39;;
timeout = 5000;
&lt;/pre&gt;
In the above example, the variable &quot;messageText&quot; and &quot;timeout&quot; was defined as global. A better solution is to define these variables in a separate class.&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Ext.define(&#39;MyApp.util.Config&#39;, {
    singleton : true,
    alternateClassName : [&#39;Config&#39;],

    config : {
        app : {
            messageText = &#39;My message text.&#39;
            //...
        },
        services : {
            timeout = 5000;
            //....
        }
    },
    constructor: function () {
        return this.config;
    }
});
&lt;/pre&gt;
The new class &quot;Config&quot; is included in the &quot;app.js&quot; file via require:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Ext.application({
    name : &#39;MyApp&#39;,

    requires: [
        &#39;MyApp.util.Config&#39;
        //...
    ],
    //...
});
&lt;/pre&gt;
Access to the variables is done with:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Config.app.messageText
Config.services.timeout
&lt;/pre&gt;
Alternatively setter and getter functions can be automatically generated by Sencha. The Config class looks like this:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Ext.define(&#39;MyApp.util.Config&#39;, {
    singleton : true,
    alternateClassName : [&#39;Config&#39;],
    config: {
        messageText = &#39;My message text.&#39;,
        timeout = 5000
    },

    constructor: function(config) {
        this.initConfig(config);
    }
});
&lt;/pre&gt;
Access to the variables is done with:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;Config.getTimeout();
Config.getMessageText();
&lt;/pre&gt;
&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2013/07/common-pitfalls-and-suggestions-sencha.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPFPDC2z3_RUMxwgTnPCrRGbjz_5f6t1i9Wa1iP7BTsiJmo-ux5uFR7B9nKgtAebGP_U2crXeCaewDgmm9S4HUbrfM4OWpJO-ZgycgoRCsQGHEjtxLNOMoIrU8Zpxv8OjEkuiceBkfDkc/s72-c/helicopter-615168_1920.jpg" height="72" width="72"/><thr:total>9</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7442968962734439468.post-2615161718677664268</guid><pubDate>Mon, 17 Jun 2013 06:35:00 +0000</pubDate><atom:updated>2015-12-29T17:19:24.802+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">css</category><category domain="http://www.blogger.com/atom/ns#">icon fonts</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">picto</category><category domain="http://www.blogger.com/atom/ns#">sass</category><category domain="http://www.blogger.com/atom/ns#">Sencha Touch</category><category domain="http://www.blogger.com/atom/ns#">theming</category><title>Using SASS and the new Icon-Fonts in Sencha 2.2</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUkXs9_ZfKZH0KoBT8j20GygUxaD67qOPzCsnJTz4irulD8E617sBvZ44QOvl6l9ZTRhcPsmhXkXkrhWg6fCDQC0KCwgvIqu7TzjKVvksZB_wSTwbwZ4mUisB2BKMuyJZMvl_R1MsCkvk/s1600/mobile-phone-426559_1920.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;452&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUkXs9_ZfKZH0KoBT8j20GygUxaD67qOPzCsnJTz4irulD8E617sBvZ44QOvl6l9ZTRhcPsmhXkXkrhWg6fCDQC0KCwgvIqu7TzjKVvksZB_wSTwbwZ4mUisB2BKMuyJZMvl_R1MsCkvk/s640/mobile-phone-426559_1920.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
One element of themes in Sencha Touch 2.2 is the new use of icons as fonts. This is an awesome feature, because this offers the following new features: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;size can be easily changed.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;color can be easily changed.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;shadow can be easily added to their shape.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;transparency nearly everywhere, unlike transparent png&#39;s in ie6.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;smaller in file size&amp;nbsp;&lt;/li&gt;
&lt;li&gt;infinitely scaleable (because vector)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
The goal of using icon fonts is to replace the need to render icons on a web page using images.&lt;br /&gt;
&lt;h2&gt;
 Requirements&lt;/h2&gt;
To use this new feature it is mandatory to setup your project with SASS. If your project not yet including SASS, take a look at this article &lt;a href=&quot;http://www.uvd.co.uk/blog/theming-sencha-touch-with-sass/&quot;&gt;&quot;Theming Sencha Touch with SASS&quot;&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;
Out-of-the-box icons&lt;/h2&gt;
The lightweight Sencha Touch 2.2 default theme already includes some basic icons. It is shipped with 27 icons in total.&lt;br /&gt;
&lt;br /&gt;
The default icon set includes:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
action, add, arrow_down, arrow_left, arrow_right, arrow_up, bookmarks, compose, delete, download, favorites, home, info, locate, maps, more, organize, refresh, reply, search, settings, star, team, time, trash and user.&lt;/blockquote&gt;
Use the default icons above by typing:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;{  xtype: &#39;button&#39;,  iconCls: &#39;user&#39;,  title: &#39;User&#39;  }&lt;/pre&gt;
&lt;h2&gt;
Extend the Out-of-the-box icons&lt;/h2&gt;
Sencha Touch 2.2 is now using the &lt;a href=&quot;http://www.pictos.cc/font/&quot;&gt;http://www.pictos.cc/font/&lt;/a&gt; library. When you checkout this website, you&#39;ll find out that they have more to offer in terms of icons. &lt;br /&gt;
&lt;br /&gt;
At the first glance, the icon collections on the website might be a little bit confusing. You might ask yourself how does the mapping works between the &quot;iconCls&quot; and the pictos.&lt;br /&gt;
&lt;br /&gt;
Well, when you take a look inside the framework of Sencha Touch 2.2, you will find the following mapping in &quot;Sencha Touch SDK/resources/themes/stylesheets/sencha-touch/base/mixins/_Class.scss&quot;:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;@function icon-character-for-name($name) {
    // http://pictos.cc/font/

    // Row 1
    @if ($name == &quot;anchor&quot;) { @return &quot;a&quot;; }
    @else if ($name == &quot;box&quot;) { @return &quot;b&quot;; }
    @else if ($name == &quot;upload&quot;) { @return &quot;c&quot;; }
    @else if ($name == &quot;forbidden&quot;) { @return &quot;d&quot;; }
    @else if ($name == &quot;lightning&quot;) { @return &quot;e&quot;; }
    @else if ($name == &quot;rss&quot;) { @return &quot;f&quot;; }
    @else if ($name == &quot;team&quot;) { @return &quot;g&quot;; }
    @else if ($name == &quot;help&quot;) { @return &quot;h&quot;; }
    @else if ($name == &quot;info&quot;) { @return &quot;i&quot;; }
    @else if ($name == &quot;attachment&quot;) { @return &quot;j&quot;; }
    @else if ($name == &quot;heart&quot;) { @return &quot;k&quot;; }
    @else if ($name == &quot;list&quot;) { @return &quot;l&quot;; }
    @else if ($name == &quot;music&quot;) { @return &quot;m&quot;; }
    @else if ($name == &quot;table&quot;) { @return &quot;n&quot;; }
    @else if ($name == &quot;folder&quot;) { @return &quot;o&quot;; }
    @else if ($name == &quot;pencil&quot;) { @return &quot;p&quot;; }
    @else if ($name == &quot;chat2&quot;) { @return &quot;q&quot;; }
    @else if ($name == &quot;retweet&quot;) { @return &quot;r&quot;; }
    @else if ($name == &quot;search&quot;) { @return &quot;s&quot;; }
    @else if ($name == &quot;time&quot;) { @return &quot;t&quot;; }
    @else if ($name == &quot;switch&quot;) { @return &quot;u&quot;; }
    @else if ($name == &quot;camera&quot;) { @return &quot;v&quot;; }
    @else if ($name == &quot;chat&quot;) { @return &quot;w&quot;; }
    @else if ($name == &quot;settings2&quot;) { @return &quot;x&quot;; }
    @else if ($name == &quot;settings&quot;) { @return &quot;y&quot;; }
    @else if ($name == &quot;tags&quot;) { @return &quot;z&quot;; }

    // Row 2
    @else if ($name == &quot;attachment2&quot;) { @return &quot;A&quot;; }
    @else if ($name == &quot;bird&quot;) { @return &quot;B&quot;; }
    @else if ($name == &quot;cloud&quot;) { @return &quot;C&quot;; }
    @else if ($name == &quot;delete_black1&quot;) { @return &quot;D&quot;; }
    @else if ($name == &quot;eye&quot;) { @return &quot;E&quot;; }
    @else if ($name == &quot;file&quot;) { @return &quot;F&quot;; }
    @else if ($name == &quot;browser&quot;) { @return &quot;G&quot;; }
    @else if ($name == &quot;home&quot;) { @return &quot;H&quot;; }
    @else if ($name == &quot;inbox&quot;) { @return &quot;I&quot;; }
    @else if ($name == &quot;network&quot;) { @return &quot;J&quot;; }
    @else if ($name == &quot;key&quot;) { @return &quot;K&quot;; }
    @else if ($name == &quot;radio&quot;) { @return &quot;L&quot;; }
    @else if ($name == &quot;mail&quot;) { @return &quot;M&quot;; }
    @else if ($name == &quot;news&quot;) { @return &quot;N&quot;; }
    @else if ($name == &quot;case&quot;) { @return &quot;O&quot;; }
    @else if ($name == &quot;photos&quot;) { @return &quot;P&quot;; }
    @else if ($name == &quot;power&quot;) { @return &quot;Q&quot;; }
    @else if ($name == &quot;action&quot;) { @return &quot;R&quot;; }
    @else if ($name == &quot;favorites&quot;) { @return &quot;S&quot;; }
    @else if ($name == &quot;plane&quot;) { @return &quot;T&quot;; }
    @else if ($name == &quot;user&quot;) { @return &quot;U&quot;; }
    @else if ($name == &quot;video&quot;) { @return &quot;V&quot;; }
    @else if ($name == &quot;compose&quot;) { @return &quot;W&quot;; }
    @else if ($name == &quot;truck&quot;) { @return &quot;X&quot;; }
    @else if ($name == &quot;chart2&quot;) { @return &quot;Y&quot;; }
    @else if ($name == &quot;chart&quot;) { @return &quot;Z&quot;; }

    // Row 3
    @else if ($name == &quot;expand&quot;) { @return &quot;`&quot;; }
    @else if ($name == &quot;refresh&quot;) { @return &quot;1&quot;; }
    @else if ($name == &quot;check&quot;) { @return &quot;2&quot;; }
    @else if ($name == &quot;check2&quot;) { @return &quot;3&quot;; }
    @else if ($name == &quot;play&quot;) { @return &quot;4&quot;; }
    @else if ($name == &quot;pause&quot;) { @return &quot;5&quot;; }
    @else if ($name == &quot;stop&quot;) { @return &quot;6&quot;; }
    @else if ($name == &quot;forward&quot;) { @return &quot;7&quot;; }
    @else if ($name == &quot;rewind&quot;) { @return &quot;8&quot;; }
    @else if ($name == &quot;play2&quot;) { @return &quot;9&quot;; }
    @else if ($name == &quot;refresh2&quot;) { @return &quot;0&quot;; }
    @else if ($name == &quot;minus&quot;) { @return &quot;-&quot;; }
    @else if ($name == &quot;battery&quot;) { @return &quot;=&quot;; }
    @else if ($name == &quot;left&quot;) { @return &quot;[&quot;; }
    @else if ($name == &quot;right&quot;) { @return &quot;]&quot;; }
    @else if ($name == &quot;calendar&quot;) { @return &quot;\005C&quot;; }
    @else if ($name == &quot;shuffle&quot;) { @return &quot;;&quot;; }
    @else if ($name == &quot;wireless&quot;) { @return &quot;&#39;&quot;; }
    @else if ($name == &quot;speedometer&quot;) { @return &quot;,&quot;; }
    @else if ($name == &quot;more&quot;) { @return &quot;.&quot;; }
    @else if ($name == &quot;print&quot;) { @return &quot;/&quot;; }


    // Row 4
    @else if ($name == &quot;download&quot;) { @return &quot;~&quot;; }
    @else if ($name == &quot;warning_black&quot;) { @return &quot;!&quot;; }
    @else if ($name == &quot;locate&quot;) { @return &quot;@&quot;; }
    @else if ($name == &quot;trash&quot;) { @return &quot;#&quot;; }
    @else if ($name == &quot;cart&quot;) { @return &quot;$&quot;; }
    @else if ($name == &quot;bank&quot;) { @return &quot;%&quot;; }
    @else if ($name == &quot;flag&quot;) { @return &quot;^&quot;; }
    @else if ($name == &quot;add&quot;) { @return &quot;&amp;amp;&quot;; }
    @else if ($name == &quot;delete&quot;) { @return &quot;*&quot;; }
    @else if ($name == &quot;lock&quot;) { @return &quot;(&quot;; }
    @else if ($name == &quot;unlock&quot;) { @return &quot;)&quot;; }
    @else if ($name == &quot;minus2&quot;) { @return &quot;_&quot;; }
    @else if ($name == &quot;add2&quot;) { @return &quot;+&quot;; }
    @else if ($name == &quot;up&quot;) { @return &quot;{&quot;; }
    @else if ($name == &quot;down&quot;) { @return &quot;}&quot;; }
    @else if ($name == &quot;screens&quot;) { @return &quot;|&quot;; }
    @else if ($name == &quot;bell&quot;) { @return &quot;:&quot;; }
    @else if ($name == &quot;quote&quot;) { @return &quot;\&quot;&quot;; }
    @else if ($name == &quot;volume_mute&quot;) { @return &quot;&amp;lt;&quot;; }
    @else if ($name == &quot;volume&quot;) { @return &quot;&amp;gt;&quot;; }
    @else if ($name == &quot;help&quot;) { @return &quot;?&quot;; }

    // Backwards compat; icons that are not in the font
    @else if ($name == &quot;arrow_left&quot;) { @return &quot;[&quot;; }
    @else if ($name == &quot;arrow_right&quot;) { @return &quot;]&quot;; }
    @else if ($name == &quot;arrow_up&quot;) { @return &quot;{&quot;; }
    @else if ($name == &quot;arrow_down&quot;) { @return &quot;}&quot;; }
    @else if ($name == &quot;organize&quot;) { @return &quot;I&quot;; }
    @else if ($name == &quot;bookmarks&quot;) { @return &quot;I&quot;; }
    @else if ($name == &quot;loop2&quot;) { @return &quot;r&quot;; }
    @else if ($name == &quot;star&quot;) { @return &quot;S&quot;; }
    @else if ($name == &quot;maps&quot;) { @return &quot;@&quot;; }
    @else if ($name == &quot;reply&quot;) { @return &quot;R&quot;; }

    @else {
        @return null;
    }
}&lt;/pre&gt;
Ok, lets try this:
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;{  xtype: &#39;button&#39;,  iconCls: &#39;speedometer&#39;,  title: &#39;Speedometer&#39;  }&lt;/pre&gt;
But as you see in the result, the icon is still missing! This is because we did not included the icon in our &quot;*.scss&quot; file yet (because it is not in the range of the default icon set). To do this, add the following line to your &quot;*.scss&quot; file:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;@include icon(&#39;speedometer&#39;);&lt;/pre&gt;
&lt;h2&gt;
Change the color or size of an icon&lt;/h2&gt;
Changing the color of an icon is easier now than ever. All you need to do is adding the following line to your &quot;*.scss&quot; file:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;.x-button-icon {
    color: #fff;
}&lt;/pre&gt;
&lt;div&gt;
Now the color of your icon should change to white.&lt;br /&gt;
&lt;br /&gt;
In case you want to change the size of the icon:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;.x-button-icon {
    font-size: 50px;
}&lt;/pre&gt;
&lt;/div&gt;
Pretty simple, isn&#39;t it?&lt;br /&gt;
&lt;h2&gt;
Add a icon to Ext.List&lt;/h2&gt;
If you want to add a icon to Ext.List you need to define your own css class, because Ext.List do not have the iconCls config attribute.&lt;br /&gt;
&lt;br /&gt;
In this example we add an user icon to Ext.List. &lt;br /&gt;
&lt;br /&gt;
Open your &quot;*.scss&quot; file and add the following lines:&lt;br /&gt;
&lt;div&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;.userCls:before {
    font-family: &quot;Pictos&quot;;
    content: &quot;U&quot;;
    font-size: 1.5em;
}
&lt;/pre&gt;
&lt;div&gt;
Using the &quot;:before&quot; selector in CSS you can insert the user icon before the anchor text. Similarly, you can also use the :after selector to insert the icon after the text.&lt;br /&gt;
&lt;br /&gt;
Ext.List item:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;xtype : &#39;list&#39;,
store : &#39;your store&#39;,
itemTpl : new Ext.XTemplate(
 &#39;&amp;lt;span class=&quot;userCls&quot;&amp;gt;&amp;lt;/span&amp;gt;&#39;,
 &#39;&amp;lt;span&amp;gt;{name}&amp;lt;/span&amp;gt;&#39;,
 ...&lt;/pre&gt;
&lt;/div&gt;
&lt;h2&gt;
Add more custom Icon-Fonts&lt;/h2&gt;
If you need more icons, you can also attach icons from &lt;a href=&quot;http://icomoon.io/app/&quot;&gt;http://icomoon.io/app/&lt;/a&gt; or &lt;a href=&quot;http://css-tricks.com/flat-icons-icon-fonts/&quot;&gt;checkout more icon collections&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The way to add custom Icon-Fonts is explained in this video: &lt;a href=&quot;http://vimeo.com/66191690&quot;&gt;http://vimeo.com/66191690&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;
 Conclusion&lt;/h2&gt;
Well, I hope this article helps. If you have any question, please contact me. In the mean time - let&#39;s keep developing apps guys.&lt;/div&gt;
</description><link>http://tol8.blogspot.com/2013/06/using-sass-and-new-icon-fonts-in-sencha.html</link><author>noreply@blogger.com (JH)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUkXs9_ZfKZH0KoBT8j20GygUxaD67qOPzCsnJTz4irulD8E617sBvZ44QOvl6l9ZTRhcPsmhXkXkrhWg6fCDQC0KCwgvIqu7TzjKVvksZB_wSTwbwZ4mUisB2BKMuyJZMvl_R1MsCkvk/s72-c/mobile-phone-426559_1920.jpg" height="72" width="72"/><thr:total>8</thr:total></item></channel></rss>