tag:blogger.com,1999:blog-53074351344794237682024-03-05T13:01:47.494-08:00Sundeep's BlogThoughts on software development, automation testing tools, movies and much more :)sjmachhttp://www.blogger.com/profile/13128759308353994017noreply@blogger.comBlogger24125tag:blogger.com,1999:blog-5307435134479423768.post-88654589136344641672015-03-29T03:15:00.000-07:002015-03-29T03:19:48.090-07:00Getting started with Mobile Automation using Appium for Android<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoA4UGIMCZcTdRE9MT222F9XudXbqiaW-v7BT7Lk7AaO8mMWn29ZRI7hItQgsxrNZbPhMof5GBxalbyff_M6efYO-pu1oxw8MnGTNG0czRYIq8vcKZcC2XKkGQjUNAM2-AIhB5iAealrY/s1600/appium-logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoA4UGIMCZcTdRE9MT222F9XudXbqiaW-v7BT7Lk7AaO8mMWn29ZRI7hItQgsxrNZbPhMof5GBxalbyff_M6efYO-pu1oxw8MnGTNG0czRYIq8vcKZcC2XKkGQjUNAM2-AIhB5iAealrY/s1600/appium-logo.png" /></a></div>
<br />
<br />
<a href="http://appium.io/" target="_blank">Appium </a>is a free open-source mobile automation tool from Saucelabs.<br />
<br />
<br />
It is based on Selenium and borrows heavily from Selenium Webdriver.<br />
<br />
<a name='more'></a><br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/1J0aXDbjiUE/0.jpg" frameborder="0" height="266" src="http://www.youtube.com/embed/1J0aXDbjiUE?feature=player_embedded" width="320"></iframe></div>
<br />
<b>The advantages of using Appium:</b><br />
<br />
<ol style="text-align: left;">
<li> Appium is based on Selenium WebDriver so you can easily learn it. The same process of finding elements using xpath, ids etc, also work here</li>
<li> Using Appium, you test the production apk file. In short you don't mess with the application under test. </li>
<li>You can use your favourite programming language </li>
</ol>
<div>
<b>What you need to get started with mobile automation for android?</b></div>
<div>
<ol style="text-align: left;">
<li> <a href="http://developer.android.com/sdk/index.html" target="_blank">Android SDK</a> with eclipse</li>
<li>An emulator or a real device running Android OS (In my case it is Nexus 5 running 5.0.1 Lollipop / Huawei Media pad running 4.3 Jelly bean)</li>
<li>USB debugging options set </li>
</ol>
<div>
More information about the above requirements are explained in detail here:<a href="http://blog.sundeepmachado.com/2010/12/getting-started-with-android-mobile-os.html" target="_blank"> http://blog.sundeepmachado.com/2010/12/getting-started-with-android-mobile-os.html</a></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b><span style="font-size: large;">How to install Appium on Windows?</span></b></div>
<div>
<ul style="text-align: left;">
<li><b>Install the latest Appium for Windows</b></li>
</ul>
<ol style="text-align: left;">
<br />
The latest downloads are present here:
<a href="https://bitbucket.org/appium/appium.app/downloads/" target="_blank"> https://bitbucket.org/appium/appium.app/downloads/</a>
</ol>
</div>
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioxNWco4buwdzqV-yH0bz-ypcUkh13p12p4ChDFXdHYwr4CDE68Vyuc9WDLs3LApdi3EY1kN4awWVgepPa0632gM7WrSkOFCqxG9kYNy7PRJSGjo2lAgd7sY0KTYQOnGmNEaym0hEtVo0/s1600/appium-for-windows.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="appium-windows" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioxNWco4buwdzqV-yH0bz-ypcUkh13p12p4ChDFXdHYwr4CDE68Vyuc9WDLs3LApdi3EY1kN4awWVgepPa0632gM7WrSkOFCqxG9kYNy7PRJSGjo2lAgd7sY0KTYQOnGmNEaym0hEtVo0/s1600/appium-for-windows.png" title="Appium for Windows" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Take the latest Appium for Windows download</td></tr>
</tbody></table>
Here you are basically downloading the appium server.<br />
<br />
<ul>
<li><b>Configure the system path in Windows</b></li>
</ul>
<div>
The path variable should contain correct Android SDK tools path</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGw_FL5EBfDBsFoOWJGEi2zIKJ-8P8uIrM7m34f8Y2ViTCN8NEyoAklzX43oTSFaCzeoJ_U5YerTrGOQirUSGowS-a5z1W8ZRViCEGBuwruqxrzHijms_4LZ5ILpP1xKEmUNBIcTqEBWQ/s1600/android-windows-path-variable.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="path-variables-appium" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGw_FL5EBfDBsFoOWJGEi2zIKJ-8P8uIrM7m34f8Y2ViTCN8NEyoAklzX43oTSFaCzeoJ_U5YerTrGOQirUSGowS-a5z1W8ZRViCEGBuwruqxrzHijms_4LZ5ILpP1xKEmUNBIcTqEBWQ/s1600/android-windows-path-variable.png" title="path variables for appium" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Path Variable settings</td></tr>
</tbody></table>
<div>
The path variable should also contain, Java SDK details and System root details For example as shown below</div>
<div>
<br /></div>
<div>
<i>C:\Program Files\Java\jdk1.7.0_21\bin;E:\adt-bundle-windows-x86_64-20140702\sdk;E:\adt-bundle-windows-x86_64-20140702\sdk\platform-tools;</i><i>E:\adt-bundle-windows-x86_64-20140702\sdk\tools;</i><i>%SystemRoot%\system32;%SystemRoot%</i></div>
<div>
<br /></div>
<div>
<ul>
<li><b>Start the Appium server</b></li>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg-L19pytNW8F8nw8UK4rTymxd1n00jxdV9ZqW_f_cmuswaHSMgCpeg-oJ9GGcrLv4HuVSzxOWu-eNDZ7EEwqsQuaA4e-sANbv-5IcRAPazfXaV3ahnAMo4p9fIXeLkSK3wyWJbFQQp08/s1600/start-appium-server.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Start-appium-server" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg-L19pytNW8F8nw8UK4rTymxd1n00jxdV9ZqW_f_cmuswaHSMgCpeg-oJ9GGcrLv4HuVSzxOWu-eNDZ7EEwqsQuaA4e-sANbv-5IcRAPazfXaV3ahnAMo4p9fIXeLkSK3wyWJbFQQp08/s1600/start-appium-server.png" title="start appium server" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Start Appium Server</td></tr>
</tbody></table>
<div>
An application will open, just click on the play button at the top right hand side corner.</div>
</div>
<div>
The server will start at : <a href="http://127.0.0.1:4723/wd/hub">http://127.0.0.1:4723/wd/hub</a></div>
<div>
<br /></div>
<div>
Sample project</div>
<div>
<b>Installing WhatsApp on Android device and clicking Eula accept button using Appium</b></div>
<div>
<br /></div>
<div>
<br /><script src="https://gist.github.com/sjmach/b1b530a693de647773a2.js"></script></div>
<div>
<br /></div>
<br />
<br />
The entire Appium sample project can be downloaded for free via github:<br />
<a href="https://github.com/sjmach/Java/tree/master/AppiumAndroid">https://github.com/sjmach/Java/tree/master/AppiumAndroid</a></div>sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-59809409140161334622015-03-06T05:05:00.002-08:002015-03-06T06:08:40.861-08:00The official way of downgrading from Android Lollipop (5.0.1) to Android Kitkat (4.4.4)<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmy3-wT0pAyZYZ3LjuRZSaQBET6OsJLZOW2E7VGzvu9UOffJ0q4bdj3STTTylYs-ZjZDkgv6pGB6ff1WQEy7LOftQL_rs9lX4bBehVGz1xiAUUq8RX7A-AousCHdpmUlrDVJ5NVsJszO4/s1600/Android-KitKat.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="android-kitkat-logo" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmy3-wT0pAyZYZ3LjuRZSaQBET6OsJLZOW2E7VGzvu9UOffJ0q4bdj3STTTylYs-ZjZDkgv6pGB6ff1WQEy7LOftQL_rs9lX4bBehVGz1xiAUUq8RX7A-AousCHdpmUlrDVJ5NVsJszO4/s1600/Android-KitKat.png" title="android Kitkat logo" /></a></div>
<br />
<br />
You can easily install Android Kitkat on your Nexus device if you are fed up of the various bugs you have seen for your Nexus device which runs Android Lollipop.<br />
<br />
<br />
<a name='more'></a><br />
<br />
<br />
<br />
<b>The steps to downgrade Nexus 5 from Lollipop to Kitkat:</b><br />
1. Download the official Android Kitkat image from Google Android Developer blog<br />
2. Download the latest Android SDK<br />
3. Backup all your data<br />
4. Start the process<br />
<br />
The above steps are for Nexus 5. The same steps are needed to be followed for other devices <br />
<br />
<b>1. Download the official Android Kitkat image from <a href="http://developer.android.com/tools/help/adb.html" target="_blank">Google Android Developer blog</a></b><br />
<br />
You should download the latest Android 4.4.4 Kitkat image for your device from <a href="http://developer.android.com/tools/help/adb.html" target="_blank">Google as per your Nexus device.</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYTm0Aq0SnarNGgjW07Q70_TlaVO91bfWdpVSoJS2lu3qH5W50ZCmdRwSsWI1Y5BU-VQmJeHoPmaOAMmUpM2IVAjMJkXv4dDUh4dvE6rd9DHo7NH2On0I_qZJ798U4iRrAiG_pUPj00VU/s1600/android-factory-image-download.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="android-factory-image" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYTm0Aq0SnarNGgjW07Q70_TlaVO91bfWdpVSoJS2lu3qH5W50ZCmdRwSsWI1Y5BU-VQmJeHoPmaOAMmUpM2IVAjMJkXv4dDUh4dvE6rd9DHo7NH2On0I_qZJ798U4iRrAiG_pUPj00VU/s1600/android-factory-image-download.png" height="300" title="Android Factory Images" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Android Factory Images</td></tr>
</tbody></table>
As seen above, if you are a US user, download the link as highlighted inside the black box.<br />
if you are a NZ, AUS or Indian user you should download the link in the red box.<br />
<br />
After the file is downloaded, unzip the contents as shown below to a folder:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP1QDiGnxNiUyCf7KfHFamdoWZqjBp5HE-WV_9E07hdomx_fWVIEW6g5iNh_kwEWPc3QHh_2eJPidztCKqbBsw9QlAYGUJzADTJXnL1sDPzZ2FZz86USF7fzvydbGCh4KAEzfUSREP9SA/s1600/downgrade-lollipop-to-kitkat-nexus-5-safely.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="nexus-5" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP1QDiGnxNiUyCf7KfHFamdoWZqjBp5HE-WV_9E07hdomx_fWVIEW6g5iNh_kwEWPc3QHh_2eJPidztCKqbBsw9QlAYGUJzADTJXnL1sDPzZ2FZz86USF7fzvydbGCh4KAEzfUSREP9SA/s1600/downgrade-lollipop-to-kitkat-nexus-5-safely.png" title="nexus5 " /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Downgrade Nexus 5 to Android KitKat</td></tr>
</tbody></table>
<b>2. Download the latest Android SDK</b><br />
<br />
Visit the Android Developer site : <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a><br />
<br />
Now download the latest SDK as shwon below:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMxFmoHbGAvlcS_ULQxPI2lz5YDGt4_KVwxEdybkO7QN2msIX6PqwA6PHDFizjZTOnDxM2Na-8VBzb8O6MmRoj4ID1FeE03cmWygZZZ9l-0CYD4IFDnAl5fbhO-HF2F4ZIHhMZTnbajKg/s1600/android-sdk-download-options.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="lastest-android-sdk-download" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMxFmoHbGAvlcS_ULQxPI2lz5YDGt4_KVwxEdybkO7QN2msIX6PqwA6PHDFizjZTOnDxM2Na-8VBzb8O6MmRoj4ID1FeE03cmWygZZZ9l-0CYD4IFDnAl5fbhO-HF2F4ZIHhMZTnbajKg/s1600/android-sdk-download-options.png" height="333" title="Lastest sdk download" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Android SDK download</td></tr>
</tbody></table>
Also as a sub-step you need to enable "<a href="http://developer.android.com/tools/device.html#device-developer-options" target="_blank"><b>USB debugging on your Android phone</b></a>".<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdy1DhkmZuJ_rTwk8uXKTGZ7h2gpI1oT4VqyOSD-LU5_ETpT6J4xbBvSlvTtHGj-cT5pNc5v9MLHhTgn2P6RNpW6g7cpi4Ahw3FCURqFoV-wgawPGgtLTKwTtSYGnGWWfGeteIllTFjdA/s1600/android-debugging.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="android-usb-debugging" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdy1DhkmZuJ_rTwk8uXKTGZ7h2gpI1oT4VqyOSD-LU5_ETpT6J4xbBvSlvTtHGj-cT5pNc5v9MLHhTgn2P6RNpW6g7cpi4Ahw3FCURqFoV-wgawPGgtLTKwTtSYGnGWWfGeteIllTFjdA/s1600/android-debugging.png" title="Android USB debugging" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">How to enable USB debugging?</td></tr>
</tbody></table>
In the "Developer options" menu select Enable USB debugging checkbox. <br />
<br />
Now connect your phone to your Windows 7 laptop and you will notice a small android head on your phone's status bar. keep it connected and make sure your phone is charged to 75 % or above.<br />
<br />
<b>3. Backup All your data</b><br />
<br />
Do not proceed if you have not backed up your data properly. This process will erase all your phone data and even your whatsapp messages. You can backup and restore all your messages by following this tutorial: <a href="http://www.sundeepmachado.com/2012/11/how-to-take-backups-of-your-chat.html" target="_blank">Backup/Restore WhatsaApp messages.</a>.<br />
<br />
<b>4. Start the process</b><br />
<b>Open a commandline window</b>: In Windows go to Run and hit 'cmd"<br />
<b>Set path to Android SDK:</b> You can do this by typing the following command:<br />
<i>set path=%path%;<b>E:\adt-bundle-windows-x86_64-20140702\sdk\platform-tools</b></i><br />
<br />
The text in bold should be replaced by the location of your SDK downloaded in step2.<br />
<br />
<b>Visit the folder downloaded in step 1</b>: In the same command window, browse to the location of the folder downloaded in step1, by clicking <b>cd <location of folder>in the command prompt</b><br />
<br />
Now enter <b>adb devices</b> in the command prompt. You will see a unique identifier as an output<br />
<br />
Now follow the below steps:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlcEGtaP_yCMvLl5iGjL3a7SbQm8tzM4EYMak8I4SsKR3WnfhXnw3tBjbt5s1LCDv41U7Kt9HPd-B91oNTVP7PLIyv5_30GLzHPG9tvjRFWmxhZcZdMOlfED4JMiiH27_9MUooqXe-Htw/s1600/nexus-5-downgrade-to-kitkat.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="nexus-5-downgrade-from-lollipop" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlcEGtaP_yCMvLl5iGjL3a7SbQm8tzM4EYMak8I4SsKR3WnfhXnw3tBjbt5s1LCDv41U7Kt9HPd-B91oNTVP7PLIyv5_30GLzHPG9tvjRFWmxhZcZdMOlfED4JMiiH27_9MUooqXe-Htw/s1600/nexus-5-downgrade-to-kitkat.png" title="nexus-5-downgrade-from-lollipop" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Nexus 5 downgrade from Lollipop to Kitkat</td></tr>
</tbody></table>
<br />
<br />
Your phone will show the following option when you follow the 6 Step in the image:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiympoSr9mFVJgCrh790q8CdZ9t7g8tOE08-Q8OLC6XrYxYkYga8j8VUhfrbNLEe-mMU1IG33f7NcbSoi859ZYQzrQHJC5O5aJMJOPwerb0sHhxR_YxEl62BwbmmJmFUN9Tq8W5enUlxpw/s1600/android-nexus-5-restore-kitkat-from-lollipop.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="android-kitkat-from-lollipop" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiympoSr9mFVJgCrh790q8CdZ9t7g8tOE08-Q8OLC6XrYxYkYga8j8VUhfrbNLEe-mMU1IG33f7NcbSoi859ZYQzrQHJC5O5aJMJOPwerb0sHhxR_YxEl62BwbmmJmFUN9Tq8W5enUlxpw/s1600/android-nexus-5-restore-kitkat-from-lollipop.png" title="android-kitkat-from-lollipop" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Android Lollipop Nexus 5 , back to Android Kitkat</td></tr>
</tbody></table>
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-39861875890794443502014-12-15T03:33:00.002-08:002015-01-02T08:54:23.650-08:00Running a Selenium Java project using Jenkins and Maven<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKtJLnUSmYboBdXnNWmgXXHRfMVEVjtBe0gZT1s03QCUYdaQ1p2xK02pzkqVfqPzlV743uz3P25p1BXHbdchhjRCoWlCN6V9PIudVmbGCKS-A8BeW3lo4lEI3gNEnJpsftT8CCzK-rJh8/s400/jenkins-logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="jenkins-logo" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKtJLnUSmYboBdXnNWmgXXHRfMVEVjtBe0gZT1s03QCUYdaQ1p2xK02pzkqVfqPzlV743uz3P25p1BXHbdchhjRCoWlCN6V9PIudVmbGCKS-A8BeW3lo4lEI3gNEnJpsftT8CCzK-rJh8/s400/jenkins-logo.png" height="63" title="Jenkins Logo" width="200" /></a></div>
Jenkins is a multi-purpose Continuous Integration server.<br />
<br />
In this post, we will install Jenkins on a Linux machine (Ubuntu / Debian Distro) and we will configure it to run a selenium project. The same principal applies to Windows operating system.<br />
<br />
<a name='more'></a><b>How to run a selenium java project using Jenkins on Linux?</b><br />
The steps are as follows:<br />
1. Install Jenkins on Linux machine<br />
2. Make your Selenium Java project into a Maven Selenium Java project<br />
3. Configure Jenkins to run Selenium project<br />
<br />
<b>Step 1. Install Jenkins on Linux machine</b><br />
The simple way to install Jenkins on Linux (an ubuntu machine) is installing it from commandline (terminal in Ubuntu):<br />
<br />
<br />
<script src="https://gist.github.com/sjmach/b557a8d95c72db4de7d9.js"></script>
After you install it this way you can manage Jenkins via the terminal as follows:<br />
<br />
<script src="https://gist.github.com/sjmach/0c3a6abf640c9326ac4d.js"></script>
<br />
<br />
You can visit <a href="http://localhost:8080/">http://localhost:8080</a> to see whether you can access Jenkins via the web browser<br />
<br />
<b>Step 2 . Make your Selenium Java project into a Maven Selenium Java project</b><br />
I have created my sample Selenium <a href="http://blog.sundeepmachado.com/2013/06/getting-started-with-selenium-web.html" target="_blank">Google Search project</a> which was implemented in Java using TestNG into a Maven project<br />
<br />
A sample project is here : <a href="https://github.com/sjmach/JenkinsSelenium" target="_blank">Sample Selenium Java project which uses maven</a><br />
<br />
<b>Step 3. Configure Jenkins to run Selenium project</b><br />
This step has further steps:<br />
<b>1. Install Java and Maven so that Jenkins can use them</b><br />
<br />
Visit<a href="http://localhost:8080/configure" target="_blank"> http://localhost:8080/configure</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZmmcH-k-bpESUDku46kiBaaenHw1yC5PqFgWzP3vM-Vl4cMxCe6IzOHqXxbN0RLpEDokL8jr4U_Fx4eu-H7RzeQ44np-wZ-gglkZOjwghevVHeBccRkefJrBejssfhnScN33W5TVOYmU/s1600/jenkins-linux-add-java-maven-installations.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="java-maven-installation-jenkins" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZmmcH-k-bpESUDku46kiBaaenHw1yC5PqFgWzP3vM-Vl4cMxCe6IzOHqXxbN0RLpEDokL8jr4U_Fx4eu-H7RzeQ44np-wZ-gglkZOjwghevVHeBccRkefJrBejssfhnScN33W5TVOYmU/s1600/jenkins-linux-add-java-maven-installations.png" height="358" title="Java and Apache maven for Jenkins" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Install Java and Maven for Jenkins(click to enlarge)</td></tr>
</tbody></table>
If you choose the install automatically checkbox, Jenkins installs the required Java and Maven installations for you.<br />
<br />
<b>2. Tell Jenkins where is your project</b><br />
In Jenkins, create a new project and select <b>Maven Project.</b><br />
<br />
After this step, you need to tell Jenkins where is your project on your local machine.<br />
Before this step make sure you have given suitable rights to your root project directory using chmod command.<br />
<br />
If you are using a custom workplace, you will need to <a href="http://ingorichter.blogspot.in/2012/02/jenkins-change-workspaces-and-build.html" target="_blank">Configure Jenkins as shown here.</a><br />
<br />
<b>3. Run your project using the build now option in Jenkins</b><br />
<br />
You will get some issues as follows:<br />
1. <b>Cannot access pom files</b> - This issue is due to lack of proper access rights<br />
<br />
2. <b>Cannot open display </b>(error while running jenkins on linux machine)<br />
<br />
<b>How to solve Cannot open display in jenkins/hudson in Linux machine?</b><br />
The solution is simple.<br />
<br />
Open jenkins shell script located at: <span style="background-color: #ffffce; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 17.3333339691162px;">/etc/init.d/jenkins </span><br />
<br />
Add the following lines as follows before PATH variable:<br />
<br />
##Hack by Sundeep##<br />
/usr/bin/X :0 vt7 -ac<br />
export DISPLAY=:0<br />
xhost +<br />
<div>
<br /></div>
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-4408163318081576682014-04-14T02:08:00.003-07:002014-04-14T02:08:46.095-07:00Some useful Oracle database SQL queries<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcqlZ9W5xo1glPfaT8nWMcmQYuuru0kQZsfB5EQM7_k6Q3UFXNdkgeeV2_sJxyM-RCl5DPWM8GiW3FS7OwBFU3NrpTH6lryjdP6ezVvjX1AYm1ByHTDlzK1XbXwyjCp0fELGrZ98zfhKk/s1600/oracle_database_logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="oracle database queries" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcqlZ9W5xo1glPfaT8nWMcmQYuuru0kQZsfB5EQM7_k6Q3UFXNdkgeeV2_sJxyM-RCl5DPWM8GiW3FS7OwBFU3NrpTH6lryjdP6ezVvjX1AYm1ByHTDlzK1XbXwyjCp0fELGrZ98zfhKk/s1600/oracle_database_logo.png" height="112" title="oracle-database-queries" width="200" /></a></div>
<br />
The Oracle database is a widely used Relational database in the world for Enterprise applications.<br />
<br />
We will be using sample database provide by oracle as discussed here: <a href="http://docs.oracle.com/cd/B28359_01/server.111/b28328.pdf">http://docs.oracle.com/cd/B28359_01/server.111/b28328.pdf</a><br />
<br />
<br />
<a name='more'></a><br />
<br />
There are scenarios where you want to find a row or rows based on particular condition:<br />
<script src="https://gist.github.com/sjmach/10630254.js"></script>
<br />
If you cannot find the queries, just visit this link:<a href="https://gist.github.com/sjmach/10630254" target="_blank"> https://gist.github.com/sjmach/10630254</a></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-80847459286251529112014-02-16T03:16:00.001-08:002014-02-16T09:57:34.817-08:00Getting Started with the Marvel API in PHP<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRaeVBKkrhsayHNB64OnyuU1_r74pXVlFuzdntnSqllZp5Cnw9XEaArzT_4pY5DJlTUEQuVeaWZ4TKlRk04BPem_YrfjW9bms_f5Sx5tAheYHvcG7ForCNMRxsET7qr5SDZnMKc88xWbI/s1600/marveluniverse.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="marvel-universe" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRaeVBKkrhsayHNB64OnyuU1_r74pXVlFuzdntnSqllZp5Cnw9XEaArzT_4pY5DJlTUEQuVeaWZ4TKlRk04BPem_YrfjW9bms_f5Sx5tAheYHvcG7ForCNMRxsET7qr5SDZnMKc88xWbI/s1600/marveluniverse.jpg" height="480" title="Marvel universe" width="640" /></a><br />
Marvel recently launched an API that allows developers limited access to its vast database.<br />
<br />
<a name='more'></a><br />
<b><span style="font-size: large;">The API.</span></b><br />
<br />
The API is simple to understand and fully documented at: <a href="http://developer.marvel.com/docs">http://developer.marvel.com/docs</a><br />
You need to create a Marvel account to use the API.<br />
<br />
<br />
<b><span style="font-size: large;">Diving into the API.</span></b><br />
<br />
To use the API, you need the following things:<br />
1. A public key (API key)<br />
2. A private key<br />
3. A timestamp<br />
4. A md5 message digest<br />
<br />
The first two are given to you as soon as you create a developer account at Marvel.<br />
The time-stamp is a unique dynamically generated identifier generated by a requesting system at run time.<br />
<br />
The md5 message digest is a combination of time-stamp, private key and public key.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHxiIpPegKAThVH9Q82lCp_HIHSIObMhELqU_mF8vVdc4TzEM4mbhbYeVHQ4dIaLN3CVdRsSlzWxKX_nZ4QL9FFhQtL0Ih5WoH5m4H8hHwDLswbj2UmnYZOdRmLJg3PfS4KMOjSMp4lSk/s1600/marvel-API.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="marvel-api-calls" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHxiIpPegKAThVH9Q82lCp_HIHSIObMhELqU_mF8vVdc4TzEM4mbhbYeVHQ4dIaLN3CVdRsSlzWxKX_nZ4QL9FFhQtL0Ih5WoH5m4H8hHwDLswbj2UmnYZOdRmLJg3PfS4KMOjSMp4lSk/s1600/marvel-API.png" height="144" title="Marvel API" width="640" /></a></div>
<br />
<b><span style="font-size: large;">PHP implementation</span></b><br />
<br />
<br />
The PHP implementation is simple. The entire skeletal code is available at GitHub.<br />
<a href="https://github.com/sjmach/marvel-php.git">https://github.com/sjmach/marvel-php.git</a><br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com4tag:blogger.com,1999:blog-5307435134479423768.post-38355493845987490922014-02-15T23:43:00.002-08:002014-02-15T23:49:32.785-08:00We all are Automation Experts : Manual testers Vs Automation testers<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7Ohwlvf4RcqctdJnXWvtHhaJ_jExxZW6sOomP7BSKfpdQe7EHE-truBTr05Z5kIOQgmqCqKFWwznr1-aCSM88gykV0agDgu1E7bfJu-xcmkyVUPKKGqq-lWin1GeZr0YTEG7IAAoz3rE/s1600/automated-vs-manual-testing.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7Ohwlvf4RcqctdJnXWvtHhaJ_jExxZW6sOomP7BSKfpdQe7EHE-truBTr05Z5kIOQgmqCqKFWwznr1-aCSM88gykV0agDgu1E7bfJu-xcmkyVUPKKGqq-lWin1GeZr0YTEG7IAAoz3rE/s1600/automated-vs-manual-testing.gif" height="200" width="200" /></a></div>
<br />
<br />
<br />
The debate goes on. Who is the best? Manual or Automation? The article tries to explore the solution to a question that has existed for years.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<a name='more'></a><br />
<br />
<br />
<br />
<b>Background:</b><br />
<br />
I started my career as a Perl developer and Content writer. The good thing I learned from my early days is the importance of peer reviews. There was someone who always found fault in my shell scripts and I always had to rewrite some unimportant piece of my code. In a word, I hated this! The code was not ready yet, I told him or her.<br />
<br />
<b>So I improved myself not to make the same mistakes. </b><br />
<br />
<span style="font-size: small;"><b>Dive into Testing</b></span><br />
<br />
I then started my career in manual testing and automating the scenarios. Frankly I found it boring to test the same things again and again. Then I went into implementation team.<br />
<br />
I always hear some manual testers complaining about automation team in forums/ blogs. Automation testers on the other hand labelled manual testers as dumb people as they don't have any knowledge about programming.<br />
<br />
I asked myself, why this is the case?<br />
The people who actually criticized the other group had no work. To justify their meager contribution to the overall quality of the product the other group resorted to the tactics of abasing the other team. This happens everywhere, accept it.<br />
<br />
Also we are all Automation Experts. If you don't agree, let me enlighten you about things you have already automated:<br />
<ol style="text-align: left;">
<li>You travel by a bus, car or a bike to work instead of walking</li>
<li>You set an alarm to wake yourself in the morning</li>
<li>You use Excel (my favorite automation tool)</li>
</ol>
Yes we all are automation experts, but most of us don't know it yet. I have seen some developers who know nothing and yet feel superior. I actually like to work with them because they can be easily manipulated to do what you want from them by fueling their Ego.<br />
<br />
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/xWMkOwq2qIU?feature=player_embedded' frameborder='0'></iframe><br />
<br />
I am not an expert in anything. But I do manage to get things done irrespective of the tool, the scenario, the environment etc.<br />
The only thing matters is "Yes I Can" (A quote derived from Obama's campaign :) ).<br />
<br />
Manual or Automated : Remember to give your best to anything that is thrown at you. I have not given my best at few projects and trust me when I tell you, mistakes come back to haunt you. <br />
<br />
As far as the question goes, it will exist for decades. Only a very good manual tester can make a very good automation tester because the qualities required for success are the same.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-8666330935676474942014-01-19T08:02:00.001-08:002014-01-19T08:02:07.078-08:00Some selenium scenarios - Part 1<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6me-tqUTt_4kEGTf22PvzBxZgtpbMfEmVg08TXcSEnichqZXsI8XoSUrPsA4avEoGSVkKGQWJvQ_1qb-T3pM894v-rq5eFK_mB-WCOrJnaFBal7AWJH1FU_5i5UW7CGD16YVSBpwCTyM/s1600/selenium-testng.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="selenium-web-driver" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6me-tqUTt_4kEGTf22PvzBxZgtpbMfEmVg08TXcSEnichqZXsI8XoSUrPsA4avEoGSVkKGQWJvQ_1qb-T3pM894v-rq5eFK_mB-WCOrJnaFBal7AWJH1FU_5i5UW7CGD16YVSBpwCTyM/s1600/selenium-testng.jpg" title="Selenium Web Driver" /></a></div>
<br />
<br />
<a href="http://blog.sundeepmachado.com/2013/06/getting-started-with-selenium-web.html" target="_blank">Selenium web driver </a>( Java ) has revolutionized how GUI testing is done. It's free, easy to customize and takes little time to learn.<br />
<br />
It is a best alternative to both QTP and TestComplete, where you need to know hardly used languages like VB (except you are into excel automation).<br />
<br />
In this post we learn automating some scenarios in Selenium.<br />
<br />
<a name='more'></a><br />
<br />
Lets see simple tasks that can be done by Selenium.<br />
<br />
We will take the example of our previous tutorial as explained here in <a href="http://blog.sundeepmachado.com/2013/06/getting-started-with-selenium-web.html" target="_blank">detail.</a><br />
We will use selenium for :<br />
<br />
<span style="font-size: large;"><b>1. How to delete all cookies using Selenium</b></span><br />
<pre><code>driver.manage().deleteAllCookies();</code></pre>
<br />
<br />
<b><span style="font-size: large;">2. Working with page source in Selenium</span></b><br />
<br />
<pre><code>driver.getPageSource();</code></pre>
<br />
If you want to know if a text is present in the page source, you can use the below code as explained here at <a href="http://stackoverflow.com/questions/8498779/getpagesource-in-selenium2-webdriver-using-java" target="_blank">StackOverflow</a>.<br />
<pre><code>boolean b = driver.getPageSource().contains("your text");
assertTrue(b);</code></pre>
<pre><code> </code></pre>
<pre><code> </code></pre>
It is wise to write the page source so that it can be used or viewed later to a file as below:<br />
<br />
<pre><code>try {
String pagesource=driver.getPageSource();
File file = new File("files/pagesource.txt");
// if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(pagesource);
bw.close();
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
}</code></pre>
<br />
<span style="font-size: large;"><b>3. Difference between isPresent and isDisplayed</b></span><br />
<br />
<b>isElementPresent()</b> - This method basically tests if the element we are looking for is present somewhere on the page.
<br />
<b>isVisible()</b> - looks for display: none style tag -
this might throw a null pointer if we aren't careful...thus to see if an
element is visible first check if the element is present using
isElementPresent() method. Then try checking if the element is visible!<br />
<i><b>Observe that isElementPresent() won't mind even if our element is not visible.</b></i><br />
For ex:
lets say the below is the html code for a component on my test application:<br />
now if you test the above component with<br />
<pre class="lang-java prettyprint prettyprinted"><code><span class="pln">selenium</span><span class="pun">.</span><span class="pln">isElementPresent</span><span class="pun">(</span><span class="str">"testinput"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> returns </span><span class="kwd">true</span><span class="pun">!</span><span class="pln">
selenium</span><span class="pun">.</span><span class="pln">isVisible</span><span class="pun">(</span><span class="str">"testinput"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> returns </span><span class="kwd">false</span><span class="pun">!</span></code></pre>
<pre class="lang-java prettyprint prettyprinted"><code><span class="pun"> </span></code></pre>
<a href="http://stackoverflow.com/a/10223301/1606579">http://stackoverflow.com/a/10223301/1606579</a><br />
<br />
<br />
<b><span style="font-size: large;">4. Difference between Implicit wait and explicit wait in selenium</span></b><br />
<b><span style="font-size: large;"> </span></b>Explicit Waits<br />
<div class="section" id="explicit-waits">
An explicit waits is code you define to wait for a certain condition to occur before proceeding further in the code.
The worst case of this is Thread.sleep(), which sets the condition to an exact time period to wait.
There are some convenience methods provided that help you write code that will wait only as long as required.
WebDriverWait in combination with ExpectedCondition is one way this can be accomplished.<br />
<br />
<div class="highlight-java">
<div class="highlight">
<pre><span class="n">WebDriver</span> <span class="n">driver</span> <span class="o">=</span> <span class="k">new</span> <span class="n">FirefoxDriver</span><span class="o">();</span>
<span class="n">driver</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">"http://somedomain/url_that_delays_loading"</span><span class="o">);</span>
<span class="n">WebElement</span> <span class="n">myDynamicElement</span> <span class="o">=</span> <span class="o">(</span><span class="k">new</span> <span class="n">WebDriverWait</span><span class="o">(</span><span class="n">driver</span><span class="o">,</span> <span class="mi">10</span><span class="o">))</span>
<span class="o">.</span><span class="na">until</span><span class="o">(</span><span class="n">ExpectedConditions</span><span class="o">.</span><span class="na">presenceOfElementLocated</span><span class="o">(</span><span class="n">By</span><span class="o">.</span><span class="na">id</span><span class="o">(</span><span class="s">"myDynamicElement"</span><span class="o">)));</span>
</pre>
</div>
</div>
<br />
This waits up to 10 seconds before throwing a TimeoutException or if
it finds the element will return it in 0 - 10 seconds.
WebDriverWait by default calls the ExpectedCondition every 500
milliseconds until it returns successfully. A successful return is
for ExpectedCondition type is Boolean return true or not null return
value for all other ExpectedCondition types.<br />
This example is also functionally equivalent to the first <a class="reference internal" href="http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#implicit-waits">Implicit Waits</a> example.<br />
<div class="section" id="expected-conditions">
<h4>
Expected Conditions</h4>
There are some common conditions that are frequently come across when automating web browsers. Listed below are
Implementations of each. Java happens to have convienence methods so you don’t have to code an ExpectedCondition
class yourself or create your own utility package for them.<br />
<ul class="simple">
<li>Element is Clickable - it is Displayed and Enabled.</li>
</ul>
<br />
<div class="highlight-java">
<div class="highlight">
<pre><span class="n">WebDriverWait</span> <span class="n">wait</span> <span class="o">=</span> <span class="k">new</span> <span class="n">WebDriverWait</span><span class="o">(</span><span class="n">driver</span><span class="o">,</span> <span class="mi">10</span><span class="o">);</span>
<span class="n">WebElement</span> <span class="n">element</span> <span class="o">=</span> <span class="n">wait</span><span class="o">.</span><span class="na">until</span><span class="o">(</span><span class="n">ExpectedConditions</span><span class="o">.</span><span class="na">elementToBeClickable</span><span class="o">(</span><span class="n">By</span><span class="o">.</span><span class="na">id</span><span class="o">(</span><span class="s">"someid"</span><span class="o">)));</span>
</pre>
</div>
</div>
The ExpectedConditions package contains a set of predefined conditions to use with WebDriverWait.</div>
</div>
<h3>
Implicit Waits</h3>
An implicit wait is to tell WebDriver to poll the DOM for a certain
amount of time when trying to find an element or elements if they are
not immediately available.
The default setting is 0. Once set, the implicit wait is set for the
life of the WebDriver object instance.<br />
<br />
<div class="highlight-java">
<div class="highlight">
<pre><span class="n">WebDriver</span> <span class="n">driver</span> <span class="o">=</span> <span class="k">new</span> <span class="n">FirefoxDriver</span><span class="o">();</span>
<span class="n">driver</span><span class="o">.</span><span class="na">manage</span><span class="o">().</span><span class="na">timeouts</span><span class="o">().</span><span class="na">implicitlyWait</span><span class="o">(</span><span class="mi">10</span><span class="o">,</span> <span class="n">TimeUnit</span><span class="o">.</span><span class="na">SECONDS</span><span class="o">);</span>
<span class="n">driver</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">"http://somedomain/url_that_delays_loading"</span><span class="o">);</span>
<span class="n">WebElement</span> <span class="n">myDynamicElement</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="na">findElement</span><span class="o">(</span><span class="n">By</span><span class="o">.</span><span class="na">id</span><span class="o">(</span><span class="s">"myDynamicElement"</span><span class="o">));</span>
</pre>
</div>
</div>
<br />
Reference: <a href="http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp">http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp</a><br />
<br />
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-41383440236871936972013-10-08T10:22:00.001-07:002013-10-08T10:22:32.857-07:00Using your Android phone to run shell scripts<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-vTLDbO2QGTCiuLcVBGBRYEPS4Wyz-VZ8cr8k2AVg1kyROhuGhM-T6e9gXTJYQUqc9EGkaQbk_FaWP0E2IJ4InLcW45IaUoAQh7Ew8fsOGl0IIDlo49-aPS1_hnBmWXxNFVgQJxFIF50/s1600/android-linux.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="android-linux-terminal" border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-vTLDbO2QGTCiuLcVBGBRYEPS4Wyz-VZ8cr8k2AVg1kyROhuGhM-T6e9gXTJYQUqc9EGkaQbk_FaWP0E2IJ4InLcW45IaUoAQh7Ew8fsOGl0IIDlo49-aPS1_hnBmWXxNFVgQJxFIF50/s640/android-linux.png" title="Android - Linux terminal" width="150" /></a></div>
<br />
Android is a truly open source mobile operating system.<br />
<br />
<a href="https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=en" rel="nofollow" target="_blank">Android Terminal Emulator</a> is a free application allows you to work on a terminal and run some commands (shell script) on an Android phone.<br />
<br />
<br />
<br />
<a name='more'></a><br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQTqaapEF5CyTJ0Xq9cXdOCP3lxTqzeyAGIIHaZRWP-K9t7vYuVXEQnqt7J_nMmK99UaMbuwwbbSls0vSQCaIS5AD8wW-C_plF2jjm13_yCIgjkILs777a9NB3UapTmGYygRGtzk6XIo4/s1600/Screenshot_2013-10-08-22-05-16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="android-shell-script" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQTqaapEF5CyTJ0Xq9cXdOCP3lxTqzeyAGIIHaZRWP-K9t7vYuVXEQnqt7J_nMmK99UaMbuwwbbSls0vSQCaIS5AD8wW-C_plF2jjm13_yCIgjkILs777a9NB3UapTmGYygRGtzk6XIo4/s1600/Screenshot_2013-10-08-22-05-16.png" title="Running shell script on Android" /></a></div>
The usual commands (ls, cd, pwd) work pretty well.<br />
<br />
The application also has support for advance commands like mount, dos2unix, rm,ssh and most importantly the VI editor.<br />
<br />
However, typing is very difficult if you plan to use VI editor here. The best part is that you can create a shell script file with .sh extension on a desktop and save it on your SD card.<br />
<br />
To run the script just enter sh <scriptname><br />
<br />
Successfully tested with the following snippet<br />
<br />
<pre class="prettyprint"><span class="pln">su
mount </span><span class="pun">-</span><span class="pln">o rw</span><span class="pun">,</span><span class="pln">remount </span><span class="pun">/</span><span class="pln">data
rm data</span><span class="pun">/</span><span class="pln">misc</span><span class="pun">/</span><span class="pln">dhcp</span><span class="com">/*
rm -rf data/misc/wifi
mount -o r,remount /data
exit
exit</span></pre>
<br />
The above script is a fix for the wifi issue I have been facing on my NEO V phone which has CyanogenMod 9.1. </div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-22308380199636663782013-09-15T12:55:00.000-07:002013-09-15T12:55:03.667-07:00StartApp launching an SDK for Phonegap developers<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXe2GUWNdURjFQz6y4uB1zF7Ude013AIsYyKyiJp23sKOn2ESePghkI-U7LHc6KOLkp1T5hgm-Ji401yXSZf5cyP7fcddSXCU72NvD6dxBLnVK7YkIUj_1uJEhsqi-RUrA_9xdvjEMFoY/s1600/startapp.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="startapp" border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXe2GUWNdURjFQz6y4uB1zF7Ude013AIsYyKyiJp23sKOn2ESePghkI-U7LHc6KOLkp1T5hgm-Ji401yXSZf5cyP7fcddSXCU72NvD6dxBLnVK7YkIUj_1uJEhsqi-RUrA_9xdvjEMFoY/s200/startapp.png" title="StartApp" width="150" /></a></div>
<br />
<br />
StartApp, a well known company for that pays android web developers for apps is soon releasing an SDK for Phonegap developers.<br />
<br />
<br />
<a name='more'></a><br /><br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVpKU8arl1giz6aYUvz6-piHOmQn2eyJNSUF00ywXr0YY8KTnfPfHniJifubdHBQli_DdWvTayOEr5n5sdIXh8oLNmA8wDeaEK3l-m1d9_7gxi-SBe9xmriKomMpzK9O-TJV_EtaN7DWA/s1600/startapp-phonegap-sdk.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="phonegap-startapp" border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVpKU8arl1giz6aYUvz6-piHOmQn2eyJNSUF00ywXr0YY8KTnfPfHniJifubdHBQli_DdWvTayOEr5n5sdIXh8oLNmA8wDeaEK3l-m1d9_7gxi-SBe9xmriKomMpzK9O-TJV_EtaN7DWA/s640/startapp-phonegap-sdk.png" title="Phonegap and StartApp" width="640" /></a></div>
As seen in the screenshot above , StartApp is planning to release a new SDK that works well with Phonegap and Unity.<br />
<br />
Currently, it is really difficult to integrate StartApp adds with HTML 5 mobile frameworks like Phonegap.<br />
<br />
The new SDK will feature exit ads, 3D advertisements and in app search advertisements.<br />
<br />
<br />
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com1tag:blogger.com,1999:blog-5307435134479423768.post-71374204964740236482013-09-07T03:04:00.001-07:002013-09-07T03:04:14.948-07:00Getting started with Testlink<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-M_40ZKSfIiw_b40W9eTN6cBtxGRSBAgcA6zyDOb3BhEDXjyT1S7znnZ_bHTrS_IdsP-RZXHl9yhXRK7pOSlvrU-Uev5CL2Rn_oCBNR6oDuHEoShsdVY6p6wRim1XqdqHTMU_oOX_324/s1600/testlink-logo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="testlink" border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-M_40ZKSfIiw_b40W9eTN6cBtxGRSBAgcA6zyDOb3BhEDXjyT1S7znnZ_bHTrS_IdsP-RZXHl9yhXRK7pOSlvrU-Uev5CL2Rn_oCBNR6oDuHEoShsdVY6p6wRim1XqdqHTMU_oOX_324/s200/testlink-logo.jpg" title="Testlink" width="200" /></a></div>
<br />
<br />
TestLink is an open source test management tool. It is free and ideal for organizations looking for an alternative for HP Quality Center and other proprietary tools.<br />
<br />
<br />
<a name='more'></a><br />
What you need to install TestLink?<br />
1. An Apache server<br />
2. MySQL database (Postgres and Microsoft SQL server too supported)<br />
3. A PHP runtime<br />
<br />
Thankfully there is XAMPP which is available for download <a href="http://sourceforge.net/projects/xampp/" target="_blank">here</a> which takes care of the above. The installation for XAMPP is different for Windows and Linux and one must be careful to follow the OS specific guides.<br />
<br />
After installing XAMPP you just need to drop TestLink folder inside the htdocs folder of XAMPP( On Linux, you just need to copy the folder using cp command in htdocs).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwgwFX0dPzvRpJ6AnDXQuD0_bi3a_dmcZXNEebUfepS6VVWT9NN8xUKsPe1qh_FinJZK3BDIp_2b5GVLzFwDjlqr6q7ZcXaFyDLB2SiteEZpR-eC53Fd5Id2y7KGxzT0Krywclo4F8B7s/s1600/testlink-xampp-installation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="testlink-installation-xampp" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwgwFX0dPzvRpJ6AnDXQuD0_bi3a_dmcZXNEebUfepS6VVWT9NN8xUKsPe1qh_FinJZK3BDIp_2b5GVLzFwDjlqr6q7ZcXaFyDLB2SiteEZpR-eC53Fd5Id2y7KGxzT0Krywclo4F8B7s/s1600/testlink-xampp-installation.png" title="TestLink installation - XAMPP" /></a></div>
<br />
<br />
Now, you can install TestLink by visiting the URL <a href="http://localhost/testlink/install/index.php">http://localhost/testlink/install/index.php. </a><br />
<br />
<span style="font-size: large;"><b>The common errors faced during TestLink installation and their solutions are as below:</b></span><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAgv1YI7-Oq_1mdbWFlU6vcahtmQgeaySzfA_Hc_i1fyXbjz18ud5HpjoKARR7jH0SlOwMvVM8eD8gvfF9T8ZH86k1Edjc3DN0a8J-rIfUbJxOWzvBneaFHoSxGoyGoCLpJAvWoP1-mDc/s1600/teslink-installation-errors.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="common-testlink-installation-errors-solved" border="0" height="502" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAgv1YI7-Oq_1mdbWFlU6vcahtmQgeaySzfA_Hc_i1fyXbjz18ud5HpjoKARR7jH0SlOwMvVM8eD8gvfF9T8ZH86k1Edjc3DN0a8J-rIfUbJxOWzvBneaFHoSxGoyGoCLpJAvWoP1-mDc/s640/teslink-installation-errors.png" title="Common TestLink installation errors solved" width="640" /></a></div>
To solve <b>Maximum Session Idle Time before Timeout </b>and <b>Checking max. execution time (Parameter max_execution_time) </b>errors in TestLink we need to edit<b> php.ini file</b>.<br />
<br />
<b>max_execution_time=3000</b><br />
<b>session.gc_maxlifetime=60000</b><br />
<br />
The next part of errors can be solved by giving rights (chmod 777 preferably ) to the <b>logs </b>directories and <b>upload </b>area in Linux. On Windows systems, you need to edit <b>config.inc.php</b> file present in TestLink folder and set appropriate values to the following properties:<br />
<b><br /></b>
<b>$tlCfg->log_path = 'E:\xampp\htdocs\testlink\logs'; /* unix example */</b><br />
<b>$g_repositoryPath = 'E:\xampp\htdocs\testlink\upload_area'; /* unix example */</b><br />
<br />
After that restart XAMPP and enter <a href="http://localhost/testlink/install/index.php">http://localhost/testlink/install/index.php.</a> in a web browser again.<br />
Also there is a page where you need to enter MYSQL root password and you can change this in my.ini file. Enter this password and install TestLink.<br />
<br />
After installation is successful visit <a href="http://localhost/testlink/index.php">http://localhost/testlink/index.php</a> and enter admin as username and password. <br />
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com4tag:blogger.com,1999:blog-5307435134479423768.post-10211422872622010442013-08-01T12:16:00.002-07:002013-08-02T08:01:30.129-07:00How to display a dialog to a user when the internet is or gets switched off in Phonegap<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIciJ-C5CMOh2WsvOzjm1iUeFrfeXZU0MfV8eO19wPFirMqyMGZ3nncvBGKFHicgFE1lqqy6XjE_FMc1jWt8lj4LszwOsUPpyB_aeBgm4nNW6aFlD82tAv4H_JxFUtIwkPr-yfZ5J9vRk/s1600/phonegap.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="phonegap" border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIciJ-C5CMOh2WsvOzjm1iUeFrfeXZU0MfV8eO19wPFirMqyMGZ3nncvBGKFHicgFE1lqqy6XjE_FMc1jWt8lj4LszwOsUPpyB_aeBgm4nNW6aFlD82tAv4H_JxFUtIwkPr-yfZ5J9vRk/s200/phonegap.png" title="Phonegap" width="190" /></a></div>
<br />
<br />
Phonegap is an amazing framework. It makes building android apps a breeze.<br />
<br />
In this post, we will learn the technique of showing a user a native dialog box when the mobile device does not have an internet connection.<br />
<br />
<br />
<br />
<a name='more'></a>The code is as follows:<br />
<script src="https://gist.github.com/sjmach/6134245.js"></script><br />
Explanation:<br />
The whenOffline() functions is fired as soon as the device is not connected to the internet.<br />
We then use navigator.notification.alert to display the alert dialog box to the user.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9Z66Aym2HstJexkGbMoBaiA3xBoXjC9DKMCxYxJc_zqQ1xo8e-zWINqCfmTFAYJX16K_0Tx7D7rJKPaHWIrq8pg36Qb30e98fZSayVrb74U7NuMmK33yugcVDsnELrroqUiwYg8aPpSo/s1600/no-internet-alert-phonegap.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="no-internet-alert-Phonegap" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9Z66Aym2HstJexkGbMoBaiA3xBoXjC9DKMCxYxJc_zqQ1xo8e-zWINqCfmTFAYJX16K_0Tx7D7rJKPaHWIrq8pg36Qb30e98fZSayVrb74U7NuMmK33yugcVDsnELrroqUiwYg8aPpSo/s1600/no-internet-alert-phonegap.png" title="no-internet-alert-Phonegap" /></a></div>
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-34382249387432474412013-06-08T05:13:00.002-07:002013-07-22T08:58:22.871-07:00Getting started with Selenium Web Driver in Java and TestNG<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6me-tqUTt_4kEGTf22PvzBxZgtpbMfEmVg08TXcSEnichqZXsI8XoSUrPsA4avEoGSVkKGQWJvQ_1qb-T3pM894v-rq5eFK_mB-WCOrJnaFBal7AWJH1FU_5i5UW7CGD16YVSBpwCTyM/s1600/selenium-testng.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="selenium-testng" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6me-tqUTt_4kEGTf22PvzBxZgtpbMfEmVg08TXcSEnichqZXsI8XoSUrPsA4avEoGSVkKGQWJvQ_1qb-T3pM894v-rq5eFK_mB-WCOrJnaFBal7AWJH1FU_5i5UW7CGD16YVSBpwCTyM/s1600/selenium-testng.jpg" title="Selenium and TestNG" /></a></div>
<br />
<br />
Selenium is one of the best automation tools in the market.<br />
TestNG is the next generation Java Unit Testing framework.<br />
<br />
Together they can be used to automate a lot of applications having a GUI.<br />
<br />
<br />
<br />
<br />
<a name='more'></a><span style="font-size: large;"><b>The Installation guide</b></span><br />
<br />
You will need the following:<br />
<ol style="text-align: left;">
<li>Eclipse</li>
<li>Selenium</li>
<li>TestNG</li>
<li>Firefox </li>
</ol>
<br />
<b>Installing Eclipse</b><br />
You can install Eclipse by downloading the zip package from<a href="http://www.eclipse.org/downloads/" rel="nofollow" target="_blank"> Eclipse Foundation</a>. Choose Eclipse IDE for JAVA EE Developers. Make sure you have Java 1.7 installed on your machine before you start eclipse.<br />
<br />
<br />
<b>Installing Selenium </b><br />
<br />
Download the Selenium Java zip from <a href="https://code.google.com/p/selenium/downloads/list" target="_blank">Selenium Java downloads</a>. <br />
<br />
<br />
<b>Installing TestNG</b><br />
<br />
Start Eclipse and the installation are present here: <a href="http://testng.org/doc/eclipse.html">http://testng.org/doc/eclipse.html</a><br />
<br />
<span style="font-size: large;"><b><br /></b></span>
<span style="font-size: large;"><b>Bring it all together - Automating a Google Search in Selenium</b></span><br />
<br />
1. Start Eclipse and create a project.<br />
2. Make sure you add all the jar files downloaded from Selenium, including those present in libs folder. Also add the TestNG library.<br />
3. Create a class GoogleSearch and add the following contents<br />
<script src="https://gist.github.com/sjmach/5734965.js"></script>
4. Run the project as a TestNG test.<br />
<br />
<br />
How things work?<br />
Since TestNG is similar to JUnit, magic is done with the help of annotations. See this <a href="http://testng.org/doc/documentation-main.html#annotations" target="_blank">TestNG annotations</a><br />
.<br />
<br />
If everything goes well, a search query will be entered in the Google search box.<br />
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com2tag:blogger.com,1999:blog-5307435134479423768.post-74176115189279873812013-01-18T06:02:00.002-08:002013-01-18T06:06:44.350-08:00How to close an application in Phonegap Apache Cordova ?<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ91cyWBgwnCWdHrvAkPXl08YsS7B5ONIT3zorbIvllRzvVLdPK1qpjpikpXtHGVE1tlw0IcC_cBFHSrUqIaryg12d57govWIB_k_LKcgVsw-ui3pXot9_jEUKUEM9Qhg5hI5z3PRIREs/s1600/cordova_bot.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="apache-cordova" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ91cyWBgwnCWdHrvAkPXl08YsS7B5ONIT3zorbIvllRzvVLdPK1qpjpikpXtHGVE1tlw0IcC_cBFHSrUqIaryg12d57govWIB_k_LKcgVsw-ui3pXot9_jEUKUEM9Qhg5hI5z3PRIREs/s1600/cordova_bot.png" title="Apache Cordova" /></a></div>
<br />
<br />
I recently made a close application button in my Phonegap application.After searching around and reading a lot about it on Stack Overflow, I did mange to create a satisfactory close button mechanism for my android application<br />
<br />
With the help of this article you can show a confirm close dialog to a user.<br />
<br />
<br />
<br />
<a name='more'></a><br />
<br />
<span style="font-size: large;"><b>Step 1. Add a close button in HTML </b></span><br />
<br />
<script src="https://gist.github.com/4564543.js"></script> I have added a jquery button. If you are using something else, just make sure that you have included the onclick.<br />
<b><span style="font-size: large;"><br /></span></b>
<b><span style="font-size: large;">Step 2. Handle the onclick event in Javascript</span></b><br />
<br />
<script src="https://gist.github.com/4564671.js"></script>
The showConfirm function shows a dialog box to the user. When the user selects the yes button, the value of buttonIndex turns to 1 and as a result the navigator.app.exitApp() function is trigerred.<br />
<br />
<span style="font-size: large;"><b>Result:</b></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="data:image/png;base64,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7fyHH374448/PvHEE+389tmexMH//e9/voMD2y7Vlg6Bjz766Icffnj88cfjF9fT08NV+ac//eniiy9eu3btrFmz4p9btpwZEtPnnnuOK5nr1pu+++67N95445577pk3b17ZbDPw/ZWYDjzzgazx448/tvtizEpRz9dff/37779Hgi198803xLbjx4+PWUKpsmVOTFHPt/cku7ZNW7/66ivujZ2dnaUyzwB3tuRievLJJxO1kebPnx+HfNL8ccpsaB5+pH3q1Kk+KazWi2OPPZaL0S7Azz///MUXX/ziiy/4E0l99NFHG9rOnBaeOTF98803vWPM/fff/9RTT33nnXfMqNwVvd/mFHpmm11yMf3LX/6Cm5EOOeSQODZKmj9OmQOfp1ov7KJDRk855ZRBgwZx3U2cOPGf//wnlyHHkeCBb2rGa8y6mBq+MWPGEC/YXfGoo47yLo9knG++mldyMb3oootsGLR69eo4hkuaP06ZA5+nYi8OOOAAQ3H11Vd7m0TMbsevv/76gW9qxmtMLKbTp09nsMA9avTo0fStpaUlrR7anKkvMnWFT5ky5dNPPyXDf//7XybFg5XOnj37tNNO27x583nnnbdy5cre3t7Ihi1btuzEE0886aSTcJ1g5sMOO8y+HT58uO/byLpGjhxp586dO9d3rvvqwAMPDGnhkCFDrAQblMH8z3/+8xVXXOG7kTCVvH79enp99tlnL168OKTAww8/nBKuueYaLp7f/va3HR0dwcxxxDQSGm2uCM2qmzFjhvWL8aavAUcffTRfTZo0yXec1nKc9vuO+3oUnALyMRw8eDBD1yuvvPKCCy7wxZ44zAknnMBOBlMKgjX+XLNmTTWe8fPjKgytrrrqKtZwVqxYUdF1wx0VE2NcSli3bt2iRYu8mbkGaSeJNSJfIVwv9pW3pxDmyKpVqyxzSC/Gjh1LQEoKrjh9++23IHrggQcir6+yZciNmGIY/InIFEOyyu+104gRI+69917f4hWizGUfbs5zzz3XCuQ26xMpxjWffPIJZe7cudN7AcSsCzdl2p6S//a3v/lKplX2FVd1SIjNRWjZfv/733Nt85nGvPfee26WY9iwYazL+Xp93333YVFfr7mGn332WV9OFhaOOeYYXwPiiGkItP7+fqDRZh80b3u4tq1fyLq3di5am6HDyt7j3I0sP0rnyonZI8eQ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" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="data:image/png;base64,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7fyHH374448/PvHEE+389tmexMH//e9/voMD2y7Vlg6Bjz766Icffnj88cfjF9fT08NV+ac//eniiy9eu3btrFmz4p9btpwZEtPnnnuOK5nr1pu+++67N95445577pk3b17ZbDPw/ZWYDjzzgazx448/tvtizEpRz9dff/37779Hgi198803xLbjx4+PWUKpsmVOTFHPt/cku7ZNW7/66ivujZ2dnaUyzwB3tuRievLJJxO1kebPnx+HfNL8ccpsaB5+pH3q1Kk+KazWi2OPPZaL0S7Azz///MUXX/ziiy/4E0l99NFHG9rOnBaeOTF98803vWPM/fff/9RTT33nnXfMqNwVvd/mFHpmm11yMf3LX/6Cm5EOOeSQODZKmj9OmQOfp1ov7KJDRk855ZRBgwZx3U2cOPGf//wnlyHHkeCBb2rGa8y6mBq+MWPGEC/YXfGoo47yLo9knG++mldyMb3oootsGLR69eo4hkuaP06ZA5+nYi8OOOAAQ3H11Vd7m0TMbsevv/76gW9qxmtMLKbTp09nsMA9avTo0fStpaUlrR7anKkvMnWFT5ky5dNPPyXDf//7XybFg5XOnj37tNNO27x583nnnbdy5cre3t7Ihi1btuzEE0886aSTcJ1g5sMOO8y+HT58uO/byLpGjhxp586dO9d3rvvqwAMPDGnhkCFDrAQblMH8z3/+8xVXXOG7kTCVvH79enp99tlnL168OKTAww8/nBKuueYaLp7f/va3HR0dwcxxxDQSGm2uCM2qmzFjhvWL8aavAUcffTRfTZo0yXec1nKc9vuO+3oUnALyMRw8eDBD1yuvvPKCCy7wxZ44zAknnMBOBlMKgjX+XLNmTTWe8fPjKgytrrrqKtZwVqxYUdF1wx0VE2NcSli3bt2iRYu8mbkGaSeJNSJfIVwv9pW3pxDmyKpVqyxzSC/Gjh1LQEoKrjh9++23IHrggQcir6+yZciNmGIY/InIFEOyyu+104gRI+69917f4hWizGUfbs5zzz3XCuQ26xMpxjWffPIJZe7cudN7AcSsCzdl2p6S//a3v/lKplX2FVd1SIjNRWjZfv/733Nt85nGvPfee26WY9iwYazL+Xp93333YVFfr7mGn332WV9OFhaOOeYYXwPiiGkItP7+fqDRZh80b3u4tq1fyLq3di5am6HDyt7j3I0sP0rnyonZI8eQ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" /></a></div>
The end result is a native dialog box as above.<br />
<br />
References:<br />
1.<a href="http://docs.phonegap.com/en/2.3.0/cordova_notification_notification.md.html#notification.confirm">http://docs.phonegap.com/en/2.3.0/cordova_notification_notification.md.html#notification.confirm</a><br />
<br /></div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com2tag:blogger.com,1999:blog-5307435134479423768.post-19323480452024247972012-09-23T00:53:00.004-07:002013-09-07T03:13:19.270-07:00Installing Jenkins for Nightly Build and Testing<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKtJLnUSmYboBdXnNWmgXXHRfMVEVjtBe0gZT1s03QCUYdaQ1p2xK02pzkqVfqPzlV743uz3P25p1BXHbdchhjRCoWlCN6V9PIudVmbGCKS-A8BeW3lo4lEI3gNEnJpsftT8CCzK-rJh8/s1600/jenkins-logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="jenkins-logo" border="0" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKtJLnUSmYboBdXnNWmgXXHRfMVEVjtBe0gZT1s03QCUYdaQ1p2xK02pzkqVfqPzlV743uz3P25p1BXHbdchhjRCoWlCN6V9PIudVmbGCKS-A8BeW3lo4lEI3gNEnJpsftT8CCzK-rJh8/s400/jenkins-logo.png" title="Jenkins" width="400" /></a></div>
<br />
<br />
At night my computer is busy doing some weird stuff ( Indexing or creating data dealing with excel sheets and much more).<br />
<br />
I decided to get more work out of it by using <a href="http://jenkins-ci.org/" target="_blank">Jenkins</a> (I used Hudson before) as a continuous integration tool server.<br />
<br />
<br />
<a name='more'></a><b>Step 1: Download and install Jenkins & Java</b><br />
<br />
I have a Windows XP SP3 desktop . So The first step is downloading the latest stable build from <a href="http://jenkins-ci.org/" target="_blank">Jenkins</a> home page. ( the setup sucks big time so we use the war ) <a href="http://mirrors.jenkins-ci.org/war/latest/jenkins.war" target="_blank"></a><br />
<strike>The build used: <b>1.482</b>. </strike><br />
<br />
The above build is not stable yet. So we use <a href="http://mirrors.jenkins-ci.org/war-stable/latest/jenkins.war" target="_blank">Jenkins ver. 1.466.2</a><br />
<br />
Installing Java from the Oracle website : <a href="http://www.java.com/en/download/index.jsp" target="_blank">Java Download</a>. <br />
Install Java 1.6.0.17 <br />
<br />
<br />
<b>Step 2: Running Jenkins</b><br />
Go to the location where you have downloaded the war file.<br />
To start Jenkins we use the following command:<br />
<b>java -jar jenkins.war</b><br />
<br />
Now using a web browser, go to <a href="http://localhost:8080/" target="_blank">http://localhost:8080/.</a><br />
<br />
That's it Jenkins is up and running.<br />
<br />
<br />
<b>The installation was not as smooth as it seem.</b><br />
<b>I got the following error on the latest build 1.482: </b><br />
<pre>SEVERE: Failed to initialize Jenkins
org.jvnet.hudson.reactor.ReactorException: java.lang.Error
vocationTargetException
at org.jvnet.hudson.reactor.Reactor.execute(Reacto
at jenkins.InitReactorRunner.run(InitReactorRunner
at jenkins.model.Jenkins.executeReactor(Jenkins.ja
at jenkins.model.Jenkins.<init>(Jenkins.java:791)
at hudson.model.Hudson.<init>(Hudson.java:81)
at hudson.model.Hudson.<init>(Hudson.java:77)
at hudson.WebAppMain$2.run(WebAppMain.java:214)
Caused by: java.lang.Error: java.lang.reflect.InvocationTa
at hudson.init.InitializerFinder.invoke(Initialize
at hudson.init.InitializerFinder$TaskImpl.run(Init
)
at org.jvnet.hudson.reactor.Reactor.runTask(Reacto
at jenkins.model.Jenkins$7.runTask(Jenkins.java:87
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.
at org.jvnet.hudson.reactor.Reactor$Node.run(React
at java.util.concurrent.ThreadPoolExecutor$Worker.
)
at java.util.concurrent.ThreadPoolExecutor$Worker.
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Na
at sun.reflect.NativeMethodAccessorImpl.invoke(Unk
at sun.reflect.DelegatingMethodAccessorImpl.invoke
at java.lang.reflect.Method.invoke(Unknown Source)
at hudson.init.InitializerFinder.invoke(Initialize
... 8 more
Caused by: java.lang.NullPointerException
at org.apache.mina.core.service.SimpleIoProcessorP
ocessorPool.java:289)
at org.apache.mina.core.service.SimpleIoProcessorP
cessorPool.java:229)
at org.apache.mina.core.service.SimpleIoProcessorP
cessorPool.java:123)
at org.apache.mina.core.polling.AbstractPollingIoA
tPollingIoAcceptor.java:125)
at org.apache.mina.transport.socket.nio.NioSocketA
etAcceptor.java:78)
at org.apache.sshd.SshServer.createAcceptor(SshSer
at org.apache.sshd.SshServer.start(SshServer.java:
at org.jenkinsci.main.modules.sshd.SSHD.start(SSHD
at org.jenkinsci.main.modules.sshd.SSHD.init(SSHD.
... 13 more
←[0m←[33mSep 23, 2012 12:29:32 PM org.jenkinsci.main.modul
pl onBeforeShutdown
WARNING: Failed to shutdown SSHD
java.lang.NullPointerException
at org.apache.sshd.SshServer.stop(SshServer.java:3
at org.jenkinsci.main.modules.sshd.SSHD.stop(SSHD.
at org.jenkinsci.main.modules.sshd.ItemListenerImp
mListenerImpl.java:20)
at jenkins.model.Jenkins.cleanUp(Jenkins.java:2568
at hudson.WebAppMain$2.run(WebAppMain.java:230)
←[0mSep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping external-monitor-job
Sep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping ldap
Sep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping pam-auth
Sep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping ant
Sep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping javadoc
Sep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping subversion
Sep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping translation
Sep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping cvs
Sep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping ssh-slaves
Sep 23, 2012 12:29:32 PM hudson.PluginWrapper stop
INFO: Stopping maven-plugin
</init></init></init></pre>
<br />
Solution: This is a bug. The workaround is delete the<b>.jenkins </b>folder which is present at C:\Documents and Settings\<USERNAME> and start Jenkins again.</div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-67107241251833096812012-08-08T09:44:00.001-07:002012-08-08T09:44:32.483-07:00Using Phonegap to build mobile applications<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizLEg27VWNivTvhozWnHC-ZNyw4jMtHTEM2bH-pa1NOvIVRYPhg8IzGYPGEdDokYFJzFd1B3hIljdh2y5ocWQACzF-e81Nlh1k2w3v6PmRC-C1VsqDWwAJ9pR6cFkJNtX0vMD_9iKwGPgM/s1600/phonegap-logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="phonegap-logo" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizLEg27VWNivTvhozWnHC-ZNyw4jMtHTEM2bH-pa1NOvIVRYPhg8IzGYPGEdDokYFJzFd1B3hIljdh2y5ocWQACzF-e81Nlh1k2w3v6PmRC-C1VsqDWwAJ9pR6cFkJNtX0vMD_9iKwGPgM/s1600/phonegap-logo.png" title="PhoneGap" /></a></div>
<br />
Today building a successful application for mobile is a dream for every developer.<br />
<br />
There are a large number of dev tools out there. However, PhoneGap (also known as Apache Cordova) seems to lead the pack and for obvious reasons.<br />
(This tutorial is intended for developers who would use PhoneGap for Android OS.)<br />
<br />
<a name='more'></a><br />
Steps :<br />
<br />
<ol>
<li> You will need to setup your Android Developer environment as explained in this article : <a href="http://blog.sundeepmachado.com/2010/12/getting-started-with-android-mobile-os.html" rel="nofollow" target="_blank">Getting started with Android</a>.</li>
<li>Download PhoneGap</li>
<li>Follow the instructions as present here <a href="http://docs.phonegap.com/en/2.0.0/guide_getting-started_android_index.md.html#Getting%20Started%20with%20Android" rel="nofollow" target="_blank">PhoneGap documentation</a>.</li>
</ol>
<br />
<span style="font-size: large;"><b>Why use PhoneGap?</b></span><br />
To develop for Android you will need to learn or know Java programming language.<br />
With PhoneGap you can use HTML and javacript to build mobile apps which is way easier then JAVA.<br />
<br />
<b><span style="font-size: large;">PhoneGap versus Adobe Flash Builder </span></b><br />
The main disadvantage of using Adobe Flash Builder is that the final application size is massive. This is primarily because your final app contains Adobe Air code too.<br />
<br />
A simple Hello World application size in Flash Builder was 8 MB<br />
A simple Hello World application size in PhoneGap was 852 KB.<br />
<br />
<br />
<br />
<br />sjmachhttp://www.blogger.com/profile/13128759308353994017noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-65463434364144759482012-05-14T21:15:00.002-07:002012-05-14T21:15:31.035-07:00Get the basics right<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a alt="tree" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS1vRYRQcubSd_gb7oLrJGYYehw6zQ870HUTiFJVUNQk0I7a2T9SFVPFChf_NYM_r6xzhcOkec4JYJVXn1ZMe7_5xnWvqzk56fhgrcVN_DJRZn8podCLtCvTCnNqz3UHFxOb6TSIkIow4/s1600/tree.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="The Tree"><img border="0" height="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS1vRYRQcubSd_gb7oLrJGYYehw6zQ870HUTiFJVUNQk0I7a2T9SFVPFChf_NYM_r6xzhcOkec4JYJVXn1ZMe7_5xnWvqzk56fhgrcVN_DJRZn8podCLtCvTCnNqz3UHFxOb6TSIkIow4/s320/tree.jpg" width="320" /></a></div>
<br />
Life has a funny way of saying it.<br />
" You won't get far until you get the basics right"<br />
<br />
<br /></div>sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-57420202455204674922011-05-17T19:44:00.000-07:002012-09-22T09:50:02.381-07:00Continuous Integration with Hudson<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a alt="Hudson" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCYpsxHY3BUIxTfrKGB5Sr8IDTGzgwIqyzgIXgyRnBncGaM8LVRCbPthNkA84vOPbmjyxLlrSX-lhVNHztk4UdeIQ7tCXAUEzyx3zbWw9_e0WmOaMnwmh_AMq_04rPOQld763zPuaanpc/s1600/Hudson-CI.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" title="Hudson"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCYpsxHY3BUIxTfrKGB5Sr8IDTGzgwIqyzgIXgyRnBncGaM8LVRCbPthNkA84vOPbmjyxLlrSX-lhVNHztk4UdeIQ7tCXAUEzyx3zbWw9_e0WmOaMnwmh_AMq_04rPOQld763zPuaanpc/s1600/Hudson-CI.jpg" /></a></div>
When things have to go wrong, they will go wrong - Murphy Law<br />
<br />
<br />
<br />
This law also holds true when you are developing or maintaining a software. Thankfully we have something called <a href="http://martinfowler.com/articles/continuousIntegration.html">Continuous Integration </a>that helps to catch bugs at a very early stage.<br />
<br />
<br />
<br />
<br />
<br />
<a href="http://draft.blogger.com/blogger.g?blogID=5307435134479423768" name="more"></a><br />
<br />
<br />
<br />
This is where <a href="http://hudson-ci.org/">Hudson</a> comes in.<br />
<br />
Hudson is a free java based tool. the very fact that it is free makes it an ideal choice for developers cum testers like me. Being free also has it disadvantages though. However, the benefits outweigh the disadvantages.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/6k0S4O2PnTc?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br />
My preferred web server of choice is Oracle's Weblogic Server. Hudson can be installed on Weblogic Server by doing some changes as <a href="http://m-button.blogspot.com/2008/09/how-to-deploy-hudson-on-weblogic.html">Hudson installed on Weblogic </a><br />
<br />
Hopefully I will be able to use Hudson also on Websphere.</div>
sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-12522891512756133192011-03-05T23:39:00.000-08:002011-03-05T23:39:52.428-08:00The King's Speech review<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a alt="the_kings_speech_poster" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUcRX1sA01tzveTCLAAxkA9Umdo7BZUFDWSh7fs96HfBI6zIhqphyphenhyphenhgz02LlbZxEY5_eLuCcpQiq15KjDjz55Io5YkQnBVn7BbSJsfCp3nn-HM8n-WPuyWRA3E93iZRrH6VQ-cYPBexeU/s1600/The-Kings-Speech-Poster+.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" title=" The King's Speech Poster"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUcRX1sA01tzveTCLAAxkA9Umdo7BZUFDWSh7fs96HfBI6zIhqphyphenhyphenhgz02LlbZxEY5_eLuCcpQiq15KjDjz55Io5YkQnBVn7BbSJsfCp3nn-HM8n-WPuyWRA3E93iZRrH6VQ-cYPBexeU/s1600/The-Kings-Speech-Poster+.jpg" /></a></div>A British king who stammers finds help in the form of a failed Australian actor.<br />
<br />
The film won the Academy Award for the best film. But is it worth an Oscar?<br />
<br />
<br />
<br />
<br />
<a name='more'></a>The first half is slow and rather dull. It highlights the plight of a Prince Arthur who is finding it really hard to speak at public events.<br />
<br />
</div><iframe allowfullscreen="" frameborder="0" height="283" src="http://www.youtube.com/embed/pzI4D6dyp_o" title="YouTube video player" width="450"></iframe><br />
<br />
His elder brother David is the bad seed in the family who is more concerned in pleasing 'The Love of His life' than doing his royal duties.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a alt="the_kings_speech" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-nlTAw9ypuxvA-G0y2izNWjiuqQJTtBkncJLwBNhnUkSsWEkrSJS6TpFwsw7gsT55jlitgjt8DaWWDW0Esu09-SpIrv4Ahb064sTeEyB9kCyZ2lmEdMMon1uAYs2BJxYOyDFYc0kUW04/s1600/vlcsnap-2011-03-06-12h27m11s165.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="The King's Speech"><img border="0" height="353" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-nlTAw9ypuxvA-G0y2izNWjiuqQJTtBkncJLwBNhnUkSsWEkrSJS6TpFwsw7gsT55jlitgjt8DaWWDW0Esu09-SpIrv4Ahb064sTeEyB9kCyZ2lmEdMMon1uAYs2BJxYOyDFYc0kUW04/s640/vlcsnap-2011-03-06-12h27m11s165.png" width="640" /></a></div><br />
<span class="Apple-style-span" style="color: #666666; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: medium; line-height: 18px;"><b>The Good</b></span><br />
<span class="Apple-style-span" style="color: #666666; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18px;">The movie is really worth an Oscar. It is simple and believable. It comes close to the actual events that happened to the British Monarchy during the World War II.</span><br />
<br />
<b style="color: #666666; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18px;"><span class="Apple-style-span" style="font-size: medium;">The Bad</span></b><br />
<span class="Apple-style-span" style="color: #666666; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18px;">The movie starts off slowly at the start.</span><br />
<br />
<b style="color: #666666; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18px;"><span class="Apple-style-span" style="font-size: medium;">The Quotes</span></b><br />
<blockquote><span class="Apple-style-span" style="color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: x-small;"><span class="Apple-style-span" style="line-height: 18px;"></span></span><br />
<blockquote><span class="Apple-style-span" style="color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: x-small;"><span class="Apple-style-span" style="line-height: 18px;">Lionel Logue: You still stammered on the 'W'. </span></span></blockquote><blockquote><span class="Apple-style-span" style="color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: x-small;"><span class="Apple-style-span" style="line-height: 18px;">King George VI: Well I had to throw in a few so they knew it was me. </span></span></blockquote></blockquote><b style="color: #666666; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18px;"><span class="Apple-style-span" style="font-size: medium;">Rating</span></b><br />
<b style="color: #666666; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18px;"><span class="Apple-style-span" style="font-size: medium;">4.5 / 5 </span></b></div>sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-64191486169249768472011-02-13T03:01:00.000-08:002011-02-14T09:26:30.344-08:00Shutter Island<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkR7cLCcycjvrBKg-x5XaRCZ4Cav8N3ImQh4sfBngni0aJLLV32NcNfKEu4Rv4pc7BNid_EsNHj1t0V1MFLo1Fsqo07g5UbErVjFphRyvrkRRggZazT_j70PlDvz13DzhTs37x-jQROxwz/s1600/shutter-island-poster.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Shutter island poster" border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkR7cLCcycjvrBKg-x5XaRCZ4Cav8N3ImQh4sfBngni0aJLLV32NcNfKEu4Rv4pc7BNid_EsNHj1t0V1MFLo1Fsqo07g5UbErVjFphRyvrkRRggZazT_j70PlDvz13DzhTs37x-jQROxwz/s200/shutter-island-poster.jpg" title="shutter_island" width="132" /></a></div>There are a lot of movies out there but very few movies, actually make you think. Shutter Island is one of them.<br />
<br />
<br />
Leonardo DiCaprio has a thing of making memorable movies. We all remember the Titanic (for those who don't know, you must have lived under a rock) and also for movies like Inception.<br />
<br />
<br />
<br />
<br />
<br />
<a name='more'></a><b><span class="Apple-style-span" style="font-size: large;">One line summary</span></b><br />
The movie revolves around a US Marshal who is sent to an Island called Shutter Island which houses a mental asylum to find a missing lady patient.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a alt="shutter_island" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG636OM2WkjOkmOb7qa0Bc83OuTaQudiXZN042RkgT6FvLZEy9T-CwuzFuXzQ94dfEIsQVlNhLU2G9NNyBwZr_kJZen7UefrhQp6kP2eaoU93hbI-S17W1SAkIB4yfmD2sJABPe-Fgvh08/s1600/shutter_island_snapshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Shutter Island"><img border="0" height="161" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG636OM2WkjOkmOb7qa0Bc83OuTaQudiXZN042RkgT6FvLZEy9T-CwuzFuXzQ94dfEIsQVlNhLU2G9NNyBwZr_kJZen7UefrhQp6kP2eaoU93hbI-S17W1SAkIB4yfmD2sJABPe-Fgvh08/s400/shutter_island_snapshot.png" width="400" /></a></div><br />
<span class="Apple-style-span" style="font-size: large;"><b>The Good</b></span><br />
Leonardo shows exactly why he is a Oscar nominated actor. The plot is believable.<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">The Bad</span></b><br />
The movie is really long. It is more than 2 hours and has some predictable moments<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">The Quotes</span></b><br />
<blockquote><span class="Apple-style-span" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;">Which would be worse, to live as a monster or to die as a good man?</span></blockquote><b><span class="Apple-style-span" style="font-size: large;">Rating</span></b><br />
<b><span class="Apple-style-span" style="font-size: large;">4 / 5 </span></b><br />
<span class="Apple-style-span" style="font-size: large;"><b><br />
</b></span><br />
<span class="Apple-style-span" style="font-size: large;"><b><br />
</b></span>sjmachhttp://www.blogger.com/profile/13128759308353994017noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-23332344434663416732011-02-01T22:24:00.001-08:002011-02-01T22:24:48.580-08:00The rules for Coding<p> <a href="http://lh3.ggpht.com/_sT6j_pJX7go/TUj4q2Zj9KI/AAAAAAAAACs/KCFlHbC7Ux4/s1600-h/php_code%5B7%5D.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="php_code" border="0" alt="php_code" align="left" src="http://lh5.ggpht.com/_sT6j_pJX7go/TUj4rt8-SMI/AAAAAAAAACw/YjsHrUqsrSM/php_code_thumb%5B5%5D.png?imgmax=800" width="154" height="130"></a> </p> <p> Yes, we all have seen these rules in some programming books. But we all tend to forget about them. </p> <p> </p> <p> </p> <p> </p> <p>Let me write it here so that I might remember them:</p> <ol> <li>The computer behaves the way you tell it so. If it doesn’t it’s still your fault. <li>It is not guaranteed that you will develop a bug free system. Save yourself the embarrassment. Please get it tested. <li>Always try to improve. Google for code you want. Find fault in that code and improve it. It will save you a lot of time. <li>Add value to anything you do. The world doesn’t care if you try to build something like Facebook. It will only notice you if you have a unique idea like Facebook.</li></ol> sjmachhttp://www.blogger.com/profile/08269837582976340110noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-4508608295162169802010-12-26T23:56:00.000-08:002010-12-26T23:56:50.956-08:00Windows XP crash<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdYcDKqULWQvCMZV6Syu6jN3LJI8glM1ZRmN1OT0HaKy8tdHfaegYRY90G_8GgUoxeJnAVCPc4Ctp4OvcW9OHq4nfeYg14ETOuzHGxX97nkTEshhAMDiVO-6tD6lo871CmpgpEShwbWySq/s1600/Ubuntu-vs-Windows.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="windowsvs_ubuntu" border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdYcDKqULWQvCMZV6Syu6jN3LJI8glM1ZRmN1OT0HaKy8tdHfaegYRY90G_8GgUoxeJnAVCPc4Ctp4OvcW9OHq4nfeYg14ETOuzHGxX97nkTEshhAMDiVO-6tD6lo871CmpgpEShwbWySq/s320/Ubuntu-vs-Windows.jpg" title="Windows VS UBUNTU" width="320" /></a></div><br />
My Windows XP partition has suddenly crashed. It gave the blue screen of death and then when I rebooted, stating some hardware boot problems, the OS decided that it won't boot.<br />
<br />
<a name='more'></a><br />
<br />
This means I have lost a massive 60 GB of precious data collected over 5 years. Thankfully I <a href="http://www.sundeepmachado.com/2010/09/using-power-of-cloud-computing-to.html">backed up most of the data on the cloud as discussed in this article</a>.<br />
<br />
I have three levels of backup currently:<br />
1. A secondary hard disk of 40 GB<br />
2. 5 CD-ROM disks<br />
3. Data on social networking sites and on the cloud.<br />
<br />
My computer is still operational as I have Ubuntu 10.04 LTS working just fine. However the folks at home want Windows XP.<br />
<br />
The problem: I already have Ubuntu installed, Windows XP won't install ( a monopolistic view of Microsoft).<br />
<br />
It seems I have to add another layer of backup, an 8 GB pen drive that has a backup of all the important files of my PC.<br />
<br />
How to recover data from a PC crash in Windows XP?<br />
I can recover my data in XP using some Partition Recovery software.sjmachhttp://www.blogger.com/profile/13128759308353994017noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-72217815122637435472010-12-23T19:59:00.000-08:002010-12-26T23:57:05.390-08:00Getting started with Android mobile OS development<div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><strong>The question is why Android OS?</strong><br />
Android OS is free to develop and has not unnecessary restrictions like Apple where you need a Mac to develop Apps. I like freedom that Android provides.<br />
<br />
<br />
<a name='more'></a><br />
</div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><strong>What will you need?</strong></div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">A computer with at least 1 GB of physical Ram with <a _mce_href="http://www.eclipse.org/downloads/" href="http://www.eclipse.org/downloads/" target="_blank" title="Eclipse Dowloads">Eclipse for Java</a> installed. Also you should install the Android sdk:</div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><a _mce_href="http://developer.android.com/sdk/index.html" href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a></div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Once done, you will find a new perspective in Eclipse</div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><a _mce_href="http://sundeepmachado.files.wordpress.com/2010/10/android_eclipse.jpg" href="http://sundeepmachado.files.wordpress.com/2010/10/android_eclipse.jpg"><img _mce_src="http://sundeepmachado.files.wordpress.com/2010/10/android_eclipse.jpg?w=300" alt="Android SDK for Eclipse " class="aligncenter size-medium wp-image-17" height="225" src="http://sundeepmachado.files.wordpress.com/2010/10/android_eclipse.jpg?w=300" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block; margin-left: auto; margin-right: auto;" title="android_eclipse" width="300" /></a></div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><br />
</div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Ok, you now need to create a virtual image for a cell phone device.</div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><a _mce_href="http://developer.android.com/guide/developing/tools/avd.html" href="http://developer.android.com/guide/developing/tools/avd.html">http://developer.android.com/guide/developing/tools/avd.html</a></div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><br />
</div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Hopefully now you can start coding with Android. If only Google had made it more simpler to develop Android apps. </div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><br />
</div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">But it is way better than Apple, I must say and I don't need a Mac for developing apps for Android. I really hate Apple for doing that. So monopolistic!!</div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Helpful Guide:</div><div style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><a _mce_href="http://gizmodo.com/5544988/how-to-try-android-froyo-on-your-computer?skyline=true&s=i" href="http://gizmodo.com/5544988/how-to-try-android-froyo-on-your-computer?skyline=true&s=i">http://gizmodo.com/5544988/how-to-try-android-froyo-on-your-computer?skyline=true&s=i</a></div>sjmachhttp://www.blogger.com/profile/13128759308353994017noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-56950667113843053952010-10-27T10:53:00.000-07:002010-12-16T07:37:40.383-08:00Matlab hack: Running your executable without MatlabThe problem with having to create an executable with the default <span class="Apple-style-span" style="color: #625f5e; font-family: Verdana, Geneva, sans-serif; font-size: 12px; line-height: 20px;"><strong> </strong><b><i>Lcc C </i></b></span>compiler is that you need Matlab to be installed for the program to run.<br />
<br />
Fortunately found a hack:<br />
<a href="http://bestofthisweb.com/blogs/tag/matlab-exe/">http://bestofthisweb.com/blogs/tag/matlab-exe/</a>sjmachhttp://www.blogger.com/profile/13128759308353994017noreply@blogger.com0tag:blogger.com,1999:blog-5307435134479423768.post-38962417245019021442010-10-23T03:19:00.000-07:002010-12-16T07:37:51.798-08:00It has been a whileIt has been 2 years since I last touched my project. Couple of things have kept me away. I finally got a decent job which gives ample time to explore and complete my research projects.<br />
<b><br />
</b><br />
<b>What is the motivating factor to start all over again?</b><br />
The thing is that I built this project from scratch with a bunch of close friends. It just thrills me to do something creative and new.<br />
<br />
I now am alone to improve this project. I did not fully wrote the source code. That credit goes to <b>PAPA </b>as we call him. <br />
<br />
The CBIR project will be a weekend activity. Maybe 4 hours per week will be sufficient. Need to improve couple of things in the code.sjmachhttp://www.blogger.com/profile/13128759308353994017noreply@blogger.com0