tag:blogger.com,1999:blog-27715929834868666342024-03-08T11:17:11.895-08:00Ext JS, Selenium IDE, Java/J2EE, SQL, Testing, Web Security Attacks, Performance Improvements etchEllo aLl,
mYself rItesh. I aM a sOfware pRofessinal and I wOrk oN cReating wEb aPplication/wEb sItes. THis bLog iS jUst tO sHare tHe tHing I lEarn.
HOpe yOu fInd tHis bLog uSefull!Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-2771592983486866634.post-63956984472813273422009-09-17T04:16:00.001-07:002009-09-17T04:16:03.033-07:00QEngine, Selenium and PureTest<div class="Section1"><h1 style=" margin-left:0pt; margin-right:0pt"><span style="color:#365f91; font-family:'Cambria'"><b><font size="4">QEngine, Selenium, PureTest </font></b></span><span style="color:#365f91; font-family:'Cambria'"><b><font size="4">comparison</font></b></span></h1><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">I have tried comparing QEngine , Selenium and PureTest in the limited period of time I had. As you would know all of these tools are automated testing tools. Being a developer I </font></span><span style="font-family:'Calibri'"><font size="3">found all</font></span><span style="font-family:'Calibri'"><font size="3"> of them easy to install and </font></span><span style="font-family:'Calibri'"><font size="3">use.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Here is </font></span><span style="font-family:'Calibri'"><font size="3">a simple</font></span><span style="font-family:'Calibri'"><font size="3"> comparison:-</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_108hq78zhgm_b" width="624" height="417" alt="" border="0"></img></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><h3 style=" margin-left:0pt; margin-right:0pt"><span style="color:#4f81bd; font-family:'Cambria'"><b><font size="3">QEngine</font></b></span> <span style="color:#4f81bd; font-family:'Cambria'"><b><font size="3">:</font></b></span></h3><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">The product is now sold by ManageEngine, previously it was owned by AdventNet. You can download a free trial at </font></span><a href="http://www.manageengine.com/products/qengine/"><span style="color:#0000ff; font-family:'Calibri'"><u><font size="3">http://www.manageengine.com/products/qengine/</font></u></span></a><span style="font-family:'Calibri'"><font size="3"> .</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">This tool provide some of the unique features like load testing, stress testing, web service testing, </font></span><span style="font-family:'Calibri'"><font size="3">performance testing </font></span><span style="font-family:'Calibri'"><font size="3">reports, </font></span><span style="font-family:'Calibri'"><font size="3">web based test manager</font></span><span style="font-family:'Calibri'"><font size="3"> etc. </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">QEngine application acts as a server looking for specific browsers request. This request comes from browser which has QEngine plug-in installed. Thus, it is mandatory to have QEngine plug-in installed on your browser to use this application.</font></span> </p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Once you have this setup ready you can do everything you can do with QEngine in the browser itself.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><b><font size="3">Advantages</font></b></span><span style="font-family:'Calibri'"><b><font size="3">:</font></b></span></p><ol type="1"><li><span style="font-family:'Calibri'"><font size="3">Test case recording/replay</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Ajax testing </font></span></li><li><span style="font-family:'Calibri'"><font size="3">Load</font></span><span style="font-family:'Calibri'"><font size="3"> testing</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Stress testing</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Database testing – monitors db connections</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Application server testing – monitors server resources viz. CPU and memory usage</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Modem simulation</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Regression test scheduling</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Web service testing</font></span></li></ol><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><b><font size="3">Limitations:</font></b></span></p><ol type="1"><li><span style="font-family:'Calibri'"><font size="3">You cannot use the recorded test cases in any other tool e.g. JUnit</font></span></li><li><span style="font-family:'Calibri'"><font size="3">No support for Xpath. It identifies html elements</font></span><span style="font-family:'Calibri'"><font size="3"> only</font></span><span style="font-family:'Calibri'"><font size="3"> through tag </font></span><span style="font-family:'Calibri'"><font size="3">and its attributes</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Not suitable for Web 2.0 applications</font></span></li></ol><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Thought I tested this on IE8, I could not install </font></span><span style="font-family:'Calibri'"><font size="3">the QEnigine plug-in on FF 3.5.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><h3 style=" margin-left:0pt; margin-right:0pt"><span style="color:#4f81bd; font-family:'Cambria'"><b><font size="3">Selenium:</font></b></span></h3><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">I find easy to use Selenium, may be because I have been working on it for quite a long time now. I used Selenium IDE and Selenium Core to test applications. You can download these tools from </font></span><a href="http://seleniumhq.org/download/"><span style="color:#0000ff; font-family:'Calibri'"><u><font size="3">http://seleniumhq.org/download/</font></u></span></a><span style="font-family:'Calibri'"><font size="3"> .</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">The only way to record test cases hear is by using Firefox add-on “Selenium IDE”. Once you have recorded test cases you can play them on different browser by using “Selenium Core” or “Selenium RC”.</font></span><span style="font-family:'Calibri'"><font size="3"> “Selenium Core” core provides a single Web page where you can test the application or view the test cases on the same page. The page is divided into two frames one for Selenium and other for your web application. </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><b><font size="3">Advantages:</font></b></span></p><ol type="1"><li><span style="font-family:'Calibri'"><font size="3">Test case recording/replay</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Easy customization of recorded test scripts</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Ajax testing - provide easy options like waitForElementPresent command </font></span></li><li><span style="font-family:'Calibri'"><font size="3">Java/JUnit integration</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Free tool</font></span></li><li><span style="font-family:'Calibri'"><font size="3">HTML elements can be location using different ways like </font></span><span style="font-family:'Calibri'"><font size="3">Xpath, CSS selectors etc. – very useful in testing if you are using JavaScript frameworks like ExtJS</font></span></li><li><span style="font-family:'Calibri'"><font size="3">No need for any external plug-in while testing on different browsers</font></span></li></ol><p style=" margin-left:36pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><b><font size="3">Limitations:</font></b></span></p><ol type="1"><li><span style="font-family:'Calibri'"><font size="3">No support for performance testing</font></span></li></ol><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><h3 style=" margin-left:0pt; margin-right:0pt"><span style="color:#4f81bd; font-family:'Cambria'"><b><font size="3">PureTest</font></b></span></h3><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">You can download PureTest from </font></span><a href="http://www.minq.se/products/puretest/"><span style="color:#0000ff; font-family:'Calibri'"><u><font size="3">http://www.minq.se/products/puretest/</font></u></span></a><span style="font-family:'Calibri'"><font size="3"> .</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Once you install PureTest application, you need to configure your browser proxy to point to PureTest server. After setting the proxy, any request-response action you do on the browser get recorded in the script. You can view these scripts in the PureTest application window. It does not support browser interface – you can use browser only for recording.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">You can use the recorded script to replay back in the PureTest application, you can edit request </font></span><span style="font-family:'Calibri'"><font size="3"> or validate response.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><b><font size="3">Advantages:</font></b></span></p><ol type="1"><li><span style="font-family:'Calibri'"><font size="3">You can test your application without any browser.</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Can change request parameters</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Can validate response</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Can record all browser requests including Ajax calls</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Free tool</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Web crawler included</font></span></li><li><span style="font-family:'Calibri'"><font size="3">Very easy to record/playback</font></span></li></ol><p style=" margin-left:36pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><b><font size="3">Limitations:</font></b></span></p><ol type="1"><li><span style="font-family:'Calibri'"><font size="3">Cannot test UI elements</font></span></li><li><span style="font-family:'Calibri'"><font size="3">No support for performance testing</font></span></li></ol><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">This can also be used for detecting broken links</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p></div><br>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com1tag:blogger.com,1999:blog-2771592983486866634.post-53944854215311061672009-08-30T22:54:00.001-07:002009-08-30T22:54:18.953-07:00Function Point Analysis(FPA)<div class="Section1"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(23, 54, 93); font-family: 'Cambria';"><font size="6">Function</font></span> <span style="color: rgb(23, 54, 93); font-family: 'Cambria';"><font size="6">Point</font></span><span style="color: rgb(23, 54, 93); font-family: 'Cambria';"><font size="6"> Analysis</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Following is the brief summery from the </font></span><span style="font-family: 'Calibri';"><b><font size="3">IFPUG Counting Practices Manual 4.1</font></b></span><span style="font-family: 'Calibri';"><font size="3">.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Verdana';"><font size="2"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">Introduction</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">IFPUG counting</font></span><span style="font-family: 'Calibri';"><font size="3"> practices manual is usually updated on January month of every year. I am referring here an old version of this manual which was released on January 1999. The practices might have changed since then.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">The latest manual is available on IFPUG site only to registered members. Membership is not free.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Definition: Function point analysis (FPA) is a standard method for measuring software development from the user point of view.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><br><span style="font-family: 'Verdana';"><b><font size="2">Features:</font></b></span></p><ul type="disc"><li><span style="font-family: 'Calibri';"><font size="3">FPA quantifies the software system primarily based on logical design </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Measures functionality which users request/receives </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Independent of technology used for implementation </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Simplifies measurement process </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Consistent process among various projects and </font></span><span style="font-family: 'Calibri';"><font size="3">organizations</font></span></li></ul><p style="margin-left: 0pt; margin-right: 0pt;"><br><span style="font-family: 'Verdana';"><b><font size="2">Usage:</font></b></span><br><span style="font-family: 'Verdana';"><font size="2"> </font></span></p><ul type="disc"><li><span style="font-family: 'Calibri';"><font size="3">Find estimate cost and resource required for software development </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">To determine size of purchased application package </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">To determine use of application package to the needs of </font></span><span style="font-family: 'Calibri';"><font size="3">organization</font></span> </li><li><span style="font-family: 'Calibri';"><font size="3">Software comparison</font></span></li></ul><br><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">Procedure</font></b></span><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4"> for FPA calculation</font></b></span><br><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4"> </font></b></span></h1><ol type="1"><li><span style="font-family: 'Calibri';"><font size="3">Determine type of</font></span><span style="font-family: 'Calibri';"><font size="3"> function point</font></span><span style="font-family: 'Calibri';"><font size="3"> count </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Identify</font></span><span style="font-family: 'Calibri';"><font size="3"> application boundary </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Determine unadjusted function point count </font></span></li><ol type="a"><li><span style="font-family: 'Calibri';"><font size="3">count</font></span><span style="font-family: 'Calibri';"><font size="3"> data function</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">count</font></span><span style="font-family: 'Calibri';"><font size="3"> transaction function</font></span></li></ol><li><span style="font-family: 'Calibri';"><font size="3">Determine value adjustment factor </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Calculate adjusted function point count</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><img src="http://docs.google.com/File?id=dctg84bx_103gb5bv7g7_b" alt="" width="624" border="0" height="202"></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">Figure </font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">1</font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">: Procedure Diagram</font></b></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">Function</font></b></span><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4"> P</font></b></span><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">oint </font></b></span><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">C</font></b></span><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">ount Type</font></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">There are three types of function point count:-</font></span></p><ol type="1"><li><span style="font-family: 'Calibri';"><font size="3">Development project function point count</font></span><span style="font-family: 'Calibri';"><font size="3"> - The development project function point count measures the functions provided to the users with the first installation of the software delivered when the project is complete</font></span><span style="font-family: 'Calibri';"><font size="3">.</font></span><br><span style="font-family: 'Calibri';"><font size="3"> </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Enhancement project function point count</font></span><span style="font-family: 'Calibri';"><font size="3"> - The enhancement project function point count measures the modifications to the existing application that add, change, or delete user functions delivered when the project is complete.</font></span><br><span style="font-family: 'Calibri';"><font size="3"> </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Application function point count</font></span><span style="font-family: 'Calibri';"><font size="3"> – The application function point count and project count are associated with an installed application. It is also referred to as the </font></span><span style="font-family: 'Calibri';"><i><font size="3">baseline </font></i></span><span style="font-family: 'Calibri';"><font size="3">or </font></span><span style="font-family: 'Calibri';"><i><font size="3">installed </font></i></span><span style="font-family: 'Calibri';"><font size="3">function point count. This count provides a measure of the current functions the application provides the user. This number is initialized when the development project function point count is completed. It is updated every time completion of an enhancement project alters the application's functions.</font></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><img src="http://docs.google.com/File?id=dctg84bx_104fcx4fngd_b" alt="" width="624" border="0" height="296"></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">Figure </font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">2</font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">: Type of counts</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Formula for calculating adjusted function point count changes depending on function point count type (step 1 in procedures).</font></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">Counting scope and application boundary</font></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Counting scope means the functionality that will be included in particular function point count.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Application boundary is the border between the system being measured and users.</font></span><span style="font-family: 'Calibri';"><font size="3"> (See fig. below)</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><img src="http://docs.google.com/File?id=dctg84bx_105sq5kh9mf_b" alt="" width="624" border="0" height="414"></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">Figure </font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">3</font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">: </font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">Summery</font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2"> diagram for Human Resource Application</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">Unadjusted function point count</font></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Unadjusted function point count (UFPC) is the </font></span><span style="font-family: 'Calibri';"><b><font size="3">specific countable functionality</font></b></span><span style="font-family: 'Calibri';"><font size="3"> provided by the system or project to the users. UFPC is evaluated in terms of what system does and not how it done.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">UFPC has two function types:-</font></span></p><ol type="a"><li><span style="font-family: 'Calibri';"><font size="3">Data function</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Transactional function</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><img src="http://docs.google.com/File?id=dctg84bx_106f4fdrgd5_b" alt="" width="549" border="0" height="298"></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">Figure </font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">4</font></b></span><span style="color: rgb(79, 129, 189); font-family: 'Calibri';"><b><font size="2">: UFPC function type</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">The basic difference is Data functions deals with </font></span><span style="font-family: 'Calibri';"><b><font size="3">data</font></b></span><span style="font-family: 'Calibri';"><font size="3"> and Transactional function deal with </font></span><span style="font-family: 'Calibri';"><b><font size="3">processing</font></b></span><span style="font-family: 'Calibri';"><font size="3"> of data.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3">a)</font></b></span> <span style="font-family: 'Calibri';"><b><font size="3">Count Data Functions:</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Data functions represent functionality provided to users by the system to meet internal or external data requirements. </font></span><br><br><span style="font-family: 'Calibri';"><font size="3">The term file here does not mean file in the traditional data processing sense. In this case, file refers to a logically related group of data and not the physical implementation of those groups of data. Data</font></span><span style="font-family: 'Calibri';"><font size="3"> functions are either Internal Logical Files (ILF) or External Interface Files (EIF).</font></span></p><ol type="1"><li><span style="font-family: 'Calibri';"><b><font size="3">Internal Logical File (ILF)</font></b></span><span style="font-family: 'Calibri';"><font size="3"> – An internal logical file is </font></span><span style="font-family: 'Calibri';"><font size="3">a user identifiable group</font></span><span style="font-family: 'Calibri';"><font size="3"> of </font></span><span style="font-family: 'Calibri';"><font size="3">logically related data or control information maintained within the boundary of application.</font></span><br><br><span style="font-family: 'Calibri';"><font size="3"> ILF </font></span><span style="font-family: 'Calibri';"><font size="3">holds data maintained through one or more elementary processes of the application being counted. </font></span><span style="font-family: 'Calibri';"><b><font size="3">Figure</font></b></span> <span style="font-family: 'Calibri';"><b><font size="3">2</font></b></span><span style="font-family: 'Calibri';"><font size="3"> shows a group of related employee data maintained within the Human Resources Application.</font></span><br><span style="font-family: 'Calibri';"><font size="3"> </font></span></li><li><span style="font-family: 'Calibri';"><b><font size="3">External Interface </font></b></span><span style="font-family: 'Calibri';"><b><font size="3">File (</font></b></span><span style="font-family: 'Calibri';"><b><font size="3">EIF) – </font></b></span><span style="font-family: 'Calibri';"><font size="3">An externa</font></span><span style="font-family: 'Calibri';"><font size="3">l interface file is a user identifiable group of logically related data or control information reference by the application, but maintained within the boundary of another application. </font></span><br><br><span style="font-family: 'Calibri';"><font size="3">The primary intent of EIF is to hold data referenced through one or more elementary process within the boundary or the application counted. </font></span><span style="font-family: 'Calibri';"><b><font size="3">Figure 2</font></b></span><span style="font-family: 'Calibri';"><font size="3"> shows conversion rate information maintained by the Currency Application and referenced by the Human Resource Application.</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">An </font></span><span style="font-family: 'Calibri';"><b><i><font size="3">elementary process</font></i></b></span> <span style="font-family: 'Calibri';"><font size="3">is the smallest unit of activity that is meaningful to the user(s). E.g. add a new employee to employee list.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><i><font size="3">Control Information</font></i></b></span><span style="font-family: 'Calibri';"><font size="3"> is data that influences an elementary process of the application being counted. It specifies what, when, or how data is to be processed. E.g. schedule payment of employee.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">The primary difference between an internal logical file and an external interface</font></span> <span style="font-family: 'Calibri';"><font size="3">file is that an EIF </font></span><span style="font-family: 'Calibri';"><font size="3">is not </font></span><span style="font-family: 'Calibri';"><font size="3">maintained by the application being counted, while an</font></span> <span style="font-family: 'Calibri';"><font size="3">ILF is.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3">b) </font></b></span><span style="font-family: 'Calibri';"><b><font size="3">Count Transactional Functions:</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Transactional functions represent the functionality provided to the users by the system to process data. Transactional functions are External Input (EI), External Output (EO) or External </font></span><span style="font-family: 'Calibri';"><font size="3">Inquiry </font></span><span style="font-family: 'Calibri';"><font size="3">(EQ).</font></span></p><ol type="1"><li><span style="font-family: 'Calibri';"><b><font size="3">External Input (EI) -</font></b></span> <span style="font-family: 'Calibri';"><font size="3">An</font></span><span style="font-family: 'Calibri';"><font size="3"> external input (EI) is an elementary</font></span><span style="font-family: 'Calibri';"><b><font size="3"> process</font></b></span><span style="font-family: 'Calibri';"><font size="3"> that processes data or</font></span> <span style="font-family: 'Calibri';"><font size="3">control information that comes from outside the application’s boundary. </font></span><br><br><span style="font-family: 'Calibri';"><font size="3">The primary intent of an EI is to maintain one or more ILFs and/or to alter</font></span> <span style="font-family: 'Calibri';"><font size="3">the behavior of the system. The</font></span><span style="font-family: 'Calibri';"><font size="3"> example </font></span><span style="font-family: 'Calibri';"><b><font size="3">Figure 2</font></b></span> <span style="font-family: 'Calibri';"><font size="3">shows the process of entering employee</font></span> <span style="font-family: 'Calibri';"><font size="3">information into the Human Resources Application.</font></span><br><span style="font-family: 'Calibri';"><font size="3"> </font></span></li><li><span style="font-family: 'Calibri';"><b><font size="3">External Output (EO) –</font></b></span><span style="font-family: 'Calibri';"><font size="3"> An external output (EO) is an elementary process that sends data or control information outside the application’s boundary. </font></span><br><br><span style="font-family: 'Calibri';"><font size="3">The primary intent of an external output is to present information to a user through processing logic other than or in addition to the retrieval of data or control information. The processing logic must contain at least one mathematical formula or calculation, or create derived data. An external output may also maintain one or more ILFs and/or alter the behavior of the system. The example on </font></span><span style="font-family: 'Calibri';"><b><font size="3">Figure 2</font></b></span><span style="font-family: 'Calibri';"><font size="3"> shows the process of producing a report that lists all employees stored in the Human Resources Application.</font></span><br><span style="font-family: 'Calibri';"><font size="3"> </font></span></li><li><span style="font-family: 'Calibri';"><b><font size="3">External </font></b></span><span style="font-family: 'Calibri';"><b><font size="3">Inquiry (</font></b></span><span style="font-family: 'Calibri';"><b><font size="3">EQ</font></b></span><span style="font-family: 'Calibri';"><b><font size="3">) -</font></b></span> <span style="font-family: 'Calibri';"><font size="3">An external inquiry (EQ) is an elementary process that sends data or control information outside the application boundary.</font></span><br><br><span style="font-family: 'Calibri';"><font size="3"> The primary intent of an external inquiry is to present information to a user through the retrieval of data or control information. The processing logic contains no mathematical formula or calculation, and creates no derived data. No ILF is maintained during the processing, nor is the behavior of the system altered. The example on </font></span><span style="font-family: 'Calibri';"><b><font size="3">Figure 2</font></b></span><span style="font-family: 'Calibri';"><font size="3"> shows the process of inquiring on employee information (input request) and viewing an employee's information when it appears on a screen (output retrieval).</font></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3">Notes</font></b></span><span style="font-family: 'Calibri';"><b><font size="3">:</font></b></span></p><ul type="disc"><li><span style="font-family: 'Calibri';"><font size="3">Count one DET for the capability to send a system response message outside the application boundary to indicate an error occurred during processing, confirm that processing is complete or verify that processing should continue. E.g. validation messages, error messages</font></span></li></ul><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">Value Adjustment Factor</font></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">The value adjustment factor (VAF) indicates the general functionality provided to the user of the application. The VAF is comprised of 14 general system characteristics (GSCs) that assess the general functionality of the application. Each characteristic has associated descriptions that help determine the degree of influence of the characteristic. The degrees of influence range on a scale of zero to five, from no influence to strong influence.</font></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">Adjusted Function Point Count</font></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">The adjusted function point count is calculated using a specific formula for a development project, enhancement project, or application (system baseline) function point count.</font></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145); font-family: 'Cambria';"><b><font size="4">Software cost estimation using the Function Point (FP) Method</font></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">To accomplish a Function Point estimation, we need to analyze the </font></span><span style="font-family: 'Calibri';"><b><u><font size="3">information domain</font></u></b></span><span style="font-family: 'Calibri';"><font size="3"> of the software. That is, what is required of the software and what the output would be, to give a </font></span><span style="font-family: 'Calibri';"><b><i><font size="3">weighting factor.</font></i></b></span><span style="font-family: 'Calibri';"><font size="3"> After this analysis, we use a given formula to calculate the amount of FP that exist in the software, then apply the cost per FP to arrive at a final estimation. All of this is done as follows.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><u><font size="3">Weighting Factor Estimation:</font></u></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3">Measurement parameter count simple average complex </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Number of user inputs x 3 4 6 =</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Number of user outputs x 4 5 7 = </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Number of user inquires x 3 4 6 = </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Number of files x 7 10 15 = </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Number of external interfaces x 5 7 10 = </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Total </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">After getting a Total, we now use the following formula to get the FP:</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3">FP = Total x (0.65 + 0.01 x </font></b></span><span style="font-family: 'WP MathA';"><b><font size="3">3</font></b></span><span style="font-family: 'Calibri';"><b><font size="3"> F</font></b></span><span style="font-family: 'Calibri'; vertical-align: sub;"><b><font size="1">i </font></b></span><span style="font-family: 'Calibri';"><b><font size="3">)</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Where the constants are empirical values and </font></span><span style="font-family: 'Calibri';"><b><font size="3">F</font></b></span><span style="font-family: 'Calibri'; vertical-align: sub;"><b><font size="1">i </font></b></span><span style="font-family: 'Calibri';"><font size="3"> is obtained from the following 14 points evaluation. </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"> <span style="font-family: 'Calibri';"><b><font size="3">Rate each factor on a scale of 0 to 5 </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3">No Incidental Moderate Average Significant Essential</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol type="1"><li><span style="font-family: 'Calibri';"><font size="3">Does the system require reliable backup and recovery?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="2" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Are data communications required?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="3" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Are there distributed processing functions?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="4" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Is performance critical?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="5" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Will the system run in an existing, heavily utilized environment?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="6" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Does the system require on-line data entry?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="7" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Does the on-line data entry require the input transaction to be built over multiple screens or operations?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="8" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Are the master files updated on-line?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="9" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Are the inputs, outputs, files, or inquiries complex?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="10" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Is the internal processing complex?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="11" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Is the code designed to be reusable?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="12" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Are conversion and installation included in the design?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="13" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Is the system designed for multiple installations in different organizations?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="14" type="1"><li><span style="font-family: 'Calibri';"><font size="3">Is the application designed to facilitate change and ease of use by the user?</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3">When we evaluate the above 14 points and sum the evaluation, we would add a complexity adjustment factor of 1.17.</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><u><font size="3">For Example:</font></u></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><u><font size="3">Problem statement:</font></u></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">A software package is to be developed for a CAD. </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><i><font size="3">The CAD software will accept 2 and 3 dimensional geometric data from an engineer. The engineer will interact and control the CAD system through a user interface that will exhibit characteristics of good human-machine interface design. All geometric data and other supporting information will be maintained in a CAD database. Design analysis modules will be developed to produce required output which will be displayed on a variety of graphics devices. The software will be designed to control and interact with peripheral devices that include a mouse, digitizer and laser printer.</font></i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">This statement needs to be expanded when requirement analysis (elicitation) is done to get a complete picture of the system. After this was done the following is obtained .</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">If we had to develop a software (name ALPHA) and after analyzing the requirements, etc. we end up with the following Weighted Factor Estimation. Assuming we are using </font></span><span style="font-family: 'Calibri';"><b><font size="3">average, we get the following:</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><u><font size="3">Weighting Factor Estimation:</font></u></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3">Measurement parameter count simple average complex </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><span style="font-family: 'Calibri';"><font size="3">Number of user inputs <span style="background-color: rgb(204, 204, 204);"> </span></font></span><span style="font-family: 'Calibri'; color: rgb(0, 0, 0); background-color: rgb(204, 204, 204);"><font size="3">24</font></span><span style="font-family: 'Calibri';"><font size="3"><span style="color: rgb(0, 0, 255); background-color: rgb(204, 204, 204);"> </span><span style="background-color: rgb(204, 204, 204);"> </span> x 4 = </font></span><span style="font-family: 'Calibri'; background-color: rgb(204, 204, 204);"><font size="3">96</font></span><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><span style="font-family: 'Calibri';"><font size="3">Number of users <span style="background-color: rgb(204, 204, 204);"> </span></font></span><span style="font-family: 'Calibri'; background-color: rgb(204, 204, 204);"><font size="3">16</font></span><span style="font-family: 'Calibri';"><font size="3"><span style="background-color: rgb(204, 204, 204);"> </span> x 5 = </font></span><span style="font-family: 'Calibri'; background-color: rgb(204, 204, 204);"><font size="3">80</font></span><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><span style="font-family: 'Calibri';"><font size="3">Number of user inquires <span style="background-color: rgb(204, 204, 204);"> </span></font></span><span style="font-family: 'Calibri'; background-color: rgb(204, 204, 204);"><font size="3">22</font></span><span style="font-family: 'Calibri';"><font size="3"><span style="background-color: rgb(204, 204, 204);"> </span> x 4 = </font></span><span style="font-family: 'Calibri'; background-color: rgb(204, 204, 204);"><font size="3">88</font></span><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><span style="font-family: 'Calibri';"><font size="3">Number of files </font></span><span style="font-family: 'Calibri'; background-color: rgb(204, 204, 204);"><font size="3">4</font></span><span style="font-family: 'Calibri';"><font size="3"><span style="background-color: rgb(204, 204, 204);"> </span> x 10 = </font></span><span style="font-family: 'Calibri'; background-color: rgb(204, 204, 204);"><font size="3">40</font></span><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"><br></font></span></p><span style="font-family: 'Calibri';"><font size="3">Number of external interfaces </font></span><span style="font-family: 'Calibri'; background-color: rgb(204, 204, 204);"><font size="3">2</font></span><span style="font-family: 'Calibri';"><font size="3"><span style="background-color: rgb(204, 204, 204);"> </span> x 7 =<span style="background-color: rgb(255, 255, 255);"> </span></font></span><span style="font-family: 'Calibri'; background-color: rgb(204, 204, 204);"><font size="3">14</font></span><p style="margin-left: 0pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"><br></font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3">Total ---------------------------------------------------------------------------------------><span style="background-color: rgb(208, 224, 227);"> </span></font></b></span><span style="font-family: 'Calibri'; background-color: rgb(208, 224, 227);"><b><font size="3">318</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">And for the 14 points we had </font></span><span style="font-family: 'Calibri';"><b><u><font size="3">plus</font></u></b></span><span style="font-family: 'Calibri';"><font size="3"> the complexity adjustment factor:</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><u><font size="3">Factor </font></u></b></span><span style="font-family: 'Calibri';"><font size="3"> </font></span><span style="font-family: 'Calibri';"><b><u><font size="3">Value</font></u></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol type="1"><li><span style="font-family: 'Calibri';"><font size="3">Backup & recovery 4</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Data communications 2</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Distributed processing 0</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Performance critical 4</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Existing operating environment 3</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">On-line data entry 4</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Input transaction over multiple screens 5 </font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Master files updated on-line 3</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Information domain values complex 5</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Internal processing complex 5</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Code designed for reuse 4</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Conversion/installation in design 3</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Multiple installations 5</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Application designed for change 5</font></span></li><li><span style="font-family: 'Calibri';"><font size="3">Complexity adjustment factor 1.17 </font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'WP MathA';"><b><font size="3">3</font></b></span><span style="font-family: 'Calibri';"><b><font size="3"> F</font></b></span><span style="font-family: 'Calibri'; vertical-align: sub;"><b><font size="1">15 </font></b></span><span style="font-family: 'Calibri';"><b><font size="3"> 53.17</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Recall the formula:</font></span><span style="font-family: 'Calibri';"><b><font size="3"> FP = Total x (0.65 + 0.01 x </font></b></span><span style="font-family: 'WP MathA';"><b><font size="3">3</font></b></span><span style="font-family: 'Calibri';"><b><font size="3"> F</font></b></span><span style="font-family: 'Calibri'; vertical-align: sub;"><b><font size="1">i </font></b></span><span style="font-family: 'Calibri';"><b><font size="3">)</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">We now have </font></span><span style="font-family: 'Calibri';"><b><font size="3">FP = 318 x (0.65 + 0.01 x 53.17)</font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> = 375 </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><b><font size="3"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Now if we have the following assumptions:</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol type="1"><li><span style="font-family: 'Calibri';"><font size="3">The organization produces on an average 6.5 FP per month</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><ol start="2" type="1"><li><span style="font-family: 'Calibri';"><font size="3">And labor costs is $8000.00 per month</font></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">We can now make an estimate of the software:</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span> </p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">At 8000 per month with 6.5 FP per month, then the cost per FP is $(8000/6.5) which is approximately $1230.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">For 375 FP the project will cost $(1230 x 375) </font></span><span style="font-family: 'WP MathA';"><font size="3">.</font></span><span style="font-family: 'Calibri';"><font size="3"> $461,000.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(255, 0, 0); font-family: 'Calibri';"><b><font size="3">NOTE:</font></b></span><span style="color: rgb(255, 0, 0); font-family: 'Calibri';"><font size="3"> The information above is collected from various sites. Some information might be copyrighted. </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p></div><br>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com0tag:blogger.com,1999:blog-2771592983486866634.post-75485561043979812072009-08-06T03:38:00.000-07:002009-08-07T02:28:03.541-07:00SQL Query: Find second highest salaried employee ?<span style="font-weight:bold;">Here's the SQL code:-</span><br /><table border="1"><tr><td><br />--Returns name and salary of employee assuming EMPLOYEE and SALARY are different tables with<br />--column ID connecting both<br />SELECT NAME,SALARY FROM EMPLOYEE INNER JOIN SALARY ON EMPLOYEE.ID=SALARY.ID WHERE SALARY IN(<br /> --following query returns required salary (Second largest in example)<br /> SELECT MAX(SALARY) FROM SALARY WHERE SALARY NOT IN<br /> (<br /> --follwing query returns top x(1 in example) salaries<br /> --replace x to 0,1,... to get highest, second highest,...<br /> SELECT TOP 1 SALARY FROM SALARY ORDER BY salary DESC<br /> )<br />)<br /></td><tr></table><br><hr><br><br />SQL Query to find THIRD highest salaried employee:-<br /><table border=1><tr><td><br /><code><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue; ">SELECT</span> <span style="color: maroon; ">name</span><span style="color: silver; ">,</span><br /><br> <span style="color: maroon; ">salary</span><br /><br><span style="color: blue; ">FROM</span> <span style="color: maroon; ">employee</span><br /><br> <span style="color: blue; ">INNER</span> <span style="color: blue; ">JOIN</span> <span style="color: maroon; ">salary</span><br /><br> <span style="color: blue; ">ON</span> <span style="color: maroon; ">employee</span><span style="color: silver; ">.</span><span style="color: maroon; ">id</span> <span style="color: silver; ">=</span> <span style="color: maroon; ">salary</span><span style="color: silver; ">.</span><span style="color: maroon; ">id</span><br /><br><span style="color: blue; ">WHERE</span> <span style="color: maroon; ">salary</span> <span style="color: blue; ">IN</span> <span style="color: maroon; ">(</span><span style="color: blue; ">SELECT</span> <span style="color: fuchsia; font-weight: bold; ">Max</span><span style="color: maroon; ">(</span><span style="color: maroon; ">salary</span><span style="color: maroon; ">)</span><br /><br> <span style="color: blue; ">FROM</span> <span style="color: maroon; ">salary</span><br /><br> <span style="color: blue; ">WHERE</span> <span style="color: maroon; ">salary</span> <span style="color: blue; ">NOT</span> <span style="color: blue; ">IN</span> <span style="color: maroon; ">(</span><span style="color: blue; ">SELECT</span> <span style="color: blue; ">TOP</span> <span style="color: black; ">2</span> <span style="color: maroon; ">salary</span><br /><br> <span style="color: blue; ">FROM</span> <span style="color: maroon; ">salary</span><br /><br> <span style="color: blue; ">ORDER</span> <span style="color: blue; ">BY</span> <span style="color: maroon; ">salary</span> <span style="color: blue; ">DESC</span><span style="color: maroon; ">)</span><span style="color: maroon; ">)</span><br /></span></code><br /></td><tr></table>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com2tag:blogger.com,1999:blog-2771592983486866634.post-76665386673082020252009-07-28T04:13:00.000-07:002009-08-28T02:17:33.305-07:00All about Java Collection with simple example<span style="font-weight:bold;">Program:-</span><br /><br />You can create a class <blockquote>collections.Main</blockquote> and copy-paste the following content. You can play with this example then to understand the Java Collection concept.<br /><br />package collections;<br /><br />import java.util.ArrayList;<br />import java.util.Collections;<br />import java.util.Comparator;<br />import java.util.HashMap;<br />import java.util.HashSet;<br />import java.util.LinkedList;<br />import java.util.List;<br />import java.util.Map;<br />import java.util.Set;<br />import java.util.SortedMap;<br />import java.util.SortedSet;<br />import java.util.TreeMap;<br />import java.util.TreeSet;<br />import java.util.Vector;<br /><br />public class Main<br />{<br /> public static void main( String... arg )<br /> {<br /> <br /> /*<br /> * Set Interface<br /> */<br /> Set set = new HashSet();<br /> set.add(31);<br /> set.add(20);<br /> set.add(100);<br /> set.add(31); // Notice: here we are trying to add object which is already present in set<br /> System.out.println("Hash Set\t\t: " + set.toString());<br /> set.clear();<br /> set = new TreeSet(); // Tree Set is ordered collection<br /> set.add(31);<br /> set.add(20);<br /> set.add(100);<br /> set.add(31); // Notice: here we are trying to add object which is already present in set<br /> System.out.println("Tree Set\t\t: " + set.toString());<br /> SortedSet sset = new TreeSet(); // Tree Set is ordered collection<br /> sset.add(31);<br /> sset.add(20);<br /> sset.add(100);<br /> sset.add(32); // Notice: here we are trying to add object which is already present in set<br /> System.out.println("Tree SortedSet\t\t: " + sset.toString());<br /> <br /> <br /> /*<br /> * List Interface<br /> */<br /> List list = new ArrayList();<br /> list.add(31);<br /> list.add(20);<br /> list.add(100);<br /> list.add(31); // Notice: here we are trying to add object which is already present in set<br /> System.out.println("Array List\t\t: " + list.toString());<br /> list.clear();<br /> list = new Vector();// Vector are thread safe<br /> list.add(31);<br /> list.add(20);<br /> list.add(100);<br /> list.add(31); // Notice: here we are trying to add object which is already present in set<br /> System.out.println("Vector\t\t\t: " + list.toString());<br /> LinkedList llist = new LinkedList();// Vector are thread safe<br /> llist.add(31);<br /> llist.add(20);<br /> llist.add(100);<br /> llist.add(31); // Notice: here we are trying to add object which is already present in set<br /> llist.addFirst(0);<br /> llist.addLast(1);<br /> System.out.println("Linked List\t\t: " + llist.toString());<br /> <br /> <br /> /*<br /> * Map Interface<br /> */<br /> Map map = new HashMap();<br /> map.put(1, "abc");<br /> map.put(3, "xyz");<br /> map.put(2, "ijk");<br /> map.put(null, "first");<br /> map.put(null, "second");<br /> map.put(4, null);<br /> map.put(5, null);<br /> System.out.println("Hash Map\t\t: " + map.toString());<br /> map.clear();<br /> map = new TreeMap();// Ordered collection<br /> map.put(1, "abc");<br /> map.put(3, "xyz");<br /> map.put(2, "ijk");<br /> // Cannot have null as a key<br /> // map.put(null, "first");<br /> // map.put(null, "second");<br /> map.put(4, null);<br /> map.put(5, null);<br /> System.out.println("Tree Map\t\t: " + map.toString());<br /> SortedMap smap = new TreeMap();// Ordered collection<br /> smap.put(1, "abc");<br /> smap.put(3, "xyz");<br /> smap.put(2, "ijk");<br /> // Cannot have null as a key<br /> // map.put(null, "first");<br /> // map.put(null, "second");<br /> smap.put(4, null);<br /> smap.put(5, null);<br /> System.out.println("Tree SortedMap\t\t: " + map.toString());<br /> <br /> <br /> /*<br /> * Comparator and Comparable interfaces<br /> */<br /> Employee emp1 = new Employee(2, "Ritesh", 23);<br /> Employee emp2 = new Employee(1, "Ajay", 28);<br /> Employee emp3 = new Employee(5, "Sonal", 25);<br /> Employee emp4 = new Employee(3, "Payal", 22);<br /> Employee emp5 = new Employee(4, "Sushil", 29);<br /> Employee emp6 = new Employee(9, "Pranav", 25);<br /> Employee emp7 = new Employee(8, "Amit", 23);<br /> Employee emp8 = new Employee(7, "Ganesh", 22);<br /> Employee emp9 = new Employee(6, "Gaurav", 20);<br /> List empList = new ArrayList();<br /> empList.add(emp1);<br /> empList.add(emp2);<br /> empList.add(emp3);<br /> empList.add(emp4);<br /> empList.add(emp5);<br /> empList.add(emp6);<br /> empList.add(emp7);<br /> empList.add(emp8);<br /> empList.add(emp9);<br /> // Collections.sort(empList);<br /> System.out.println("\n\nWithout Comparable/Comparator:" + empList);<br /> // WITH COMPARABLE IMPLEMENTED<br /> EmployeeC empc1 = new EmployeeC(2, "Ritesh", 23);<br /> EmployeeC empc2 = new EmployeeC(1, "Ajay", 28);<br /> EmployeeC empc3 = new EmployeeC(5, "Sonal", 25);<br /> EmployeeC empc4 = new EmployeeC(3, "Payal", 22);<br /> EmployeeC empc5 = new EmployeeC(4, "Sushil", 29);<br /> EmployeeC empc6 = new EmployeeC(9, "Pranav", 25);<br /> EmployeeC empc7 = new EmployeeC(8, "Amit", 23);<br /> EmployeeC empc8 = new EmployeeC(7, "Ganesh", 22);<br /> EmployeeC empc9 = new EmployeeC(6, "Gaurav", 20);<br /> List empcList = new ArrayList();<br /> empcList.add(empc1);<br /> empcList.add(empc2);<br /> empcList.add(empc3);<br /> empcList.add(empc4);<br /> empcList.add(empc5);<br /> empcList.add(empc6);<br /> empcList.add(empc7);<br /> empcList.add(empc8);<br /> empcList.add(empc9);<br /> Collections.sort(empcList);<br /> System.out.println("\n\nWith Comparable:" + empcList);<br /> // WITH COMPARATOR<br /> Collections.sort(empList, new EmployeeNameComparator());<br /> System.out.println("\n\nWith Name Comparator:" + empList);<br /> Collections.sort(empList, new EmployeeAgeComparator());<br /> System.out.println("\n\nWith Age Comparator:" + empList);<br /> }<br />}<br /><br />/*<br />* Following class doesn't implements comparable<br />*/<br />class Employee<br />{<br /> public int empId;<br /> public String empName;<br /> public int age;<br /> <br /> public Employee( int id, String name, int age )<br /> {<br /> this.empId = id;<br /> this.empName = name;<br /> this.age = age;<br /> }<br /> <br /> @Override<br /> public String toString()<br /> {<br /> // TODO Auto-generated method stub<br /> return "\nId:" + this.empId + " Name:" + this.empName + " Age:" + this.age;<br /> }<br />}<br /><br />/*<br />* Following class implement Comparable interface<br />*/<br />class EmployeeC extends Employee implements Comparable<br />{<br /> public EmployeeC( int id, String name, int age )<br /> {<br /> super(id, name, age);<br /> }<br /> <br /> @Override<br /> public int compareTo( Employee o )<br /> {<br /> return (this.empId - o.empId);<br /> }<br />}<br /><br />/*<br />* Comparator classes to compare Employee with different criteria<br />*/<br />class EmployeeNameComparator implements Comparator<br />{<br /> @Override<br /> public int compare( Employee o1, Employee o2 )<br /> {<br /> return o1.empName.compareTo(o2.empName);<br /> }<br />}<br /><br />class EmployeeAgeComparator implements Comparator<br />{<br /> @Override<br /> public int compare( Employee o1, Employee o2 )<br /> {<br /> return (o1.age < o2.age ? 0 : 1);<br /> }<br />}<br /><br /><br /><span style="font-weight:bold;">Output:-</span><br /><br />Hash Set : [100, 20, 31]<br />Tree Set : [20, 31, 100]<br />Tree SortedSet : [20, 31, 32, 100]<br />Array List : [31, 20, 100, 31]<br />Vector : [31, 20, 100, 31]<br />Linked List : [0, 31, 20, 100, 31, 1]<br />Hash Map : {null=second, 1=abc, 2=ijk, 3=xyz, 4=null, 5=null}<br />Tree Map : {1=abc, 2=ijk, 3=xyz, 4=null, 5=null}<br />Tree SortedMap : {1=abc, 2=ijk, 3=xyz, 4=null, 5=null}<br /><br /><br />Without Comparable/Comparator:[<br />Id:2 Name:Ritesh Age:23, <br />Id:1 Name:Ajay Age:28, <br />Id:5 Name:Sonal Age:25, <br />Id:3 Name:Payal Age:22, <br />Id:4 Name:Sushil Age:29, <br />Id:9 Name:Pranav Age:25, <br />Id:8 Name:Amit Age:23, <br />Id:7 Name:Ganesh Age:22, <br />Id:6 Name:Gaurav Age:20]<br /><br /><br />With Comparable:[<br />Id:1 Name:Ajay Age:28, <br />Id:2 Name:Ritesh Age:23, <br />Id:3 Name:Payal Age:22, <br />Id:4 Name:Sushil Age:29, <br />Id:5 Name:Sonal Age:25, <br />Id:6 Name:Gaurav Age:20, <br />Id:7 Name:Ganesh Age:22, <br />Id:8 Name:Amit Age:23, <br />Id:9 Name:Pranav Age:25]<br /><br /><br />With Name Comparator:[<br />Id:1 Name:Ajay Age:28, <br />Id:8 Name:Amit Age:23, <br />Id:7 Name:Ganesh Age:22, <br />Id:6 Name:Gaurav Age:20, <br />Id:3 Name:Payal Age:22, <br />Id:9 Name:Pranav Age:25, <br />Id:2 Name:Ritesh Age:23, <br />Id:5 Name:Sonal Age:25, <br />Id:4 Name:Sushil Age:29]<br /><br /><br />With Age Comparator:[<br />Id:6 Name:Gaurav Age:20, <br />Id:3 Name:Payal Age:22, <br />Id:7 Name:Ganesh Age:22, <br />Id:2 Name:Ritesh Age:23, <br />Id:8 Name:Amit Age:23, <br />Id:5 Name:Sonal Age:25, <br />Id:9 Name:Pranav Age:25, <br />Id:1 Name:Ajay Age:28, <br />Id:4 Name:Sushil Age:29]Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com0tag:blogger.com,1999:blog-2771592983486866634.post-44928489156213958912009-07-16T23:19:00.000-07:002009-07-28T04:24:42.584-07:00Find SQLServer running portUse query in you SQLServer Studio:-<br /><br /><span style="font-style: italic; font-family: times new roman;font-size:85%;" >USE master<br />GO<br />Xp_readerrorlog<br /><br /></span>Look for "Server is listening on..." stringt.Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com0tag:blogger.com,1999:blog-2771592983486866634.post-32768960652720163012009-07-02T23:54:00.001-07:002009-07-28T04:26:41.342-07:00Using Selenium IDE<div class="Section1"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(23, 54, 93);font-family:'Cambria';" ><span style="font-size:6;">Using Selenium </span></span><span style="color: rgb(23, 54, 93);font-family:'Cambria';" ><span style="font-size:6;">IDE</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Introduction</span></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><a href="http://seleniumhq.org/projects/ide/"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><b><u><span style="font-size:100%;">Selenium IDE</span></u></b></span></a><span style="font-family:'Calibri';"><b><span style="font-size:100%;"> is a Firefox add-on that makes it easy to record and playback tests in Firefox 2+. You can even use it generate code to run the tests with Selenium Remote Control.</span></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Things you will need</span></b></span></h1><ul type="circle"><ul type="circle"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Selenium IDE</span></span></li><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Firebug</span></span></li></ul></ul><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">Bothe of above come as Firefox add-ons.</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Selenium issues </span></b></span></h1><ul type="disc"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Many JavaScript frameworks g</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;">enerate</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;"> lots of html tags with auto generated </span></span><span style="font-family:'Calibri';"><span style="font-size:100%;">ids.</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;"> Such pages are difficult to record.</span></span></li><li><span style="font-family:'Calibri';"><span style="font-size:100%;">In some cases html elements</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;"> ids changes between user sessions</span></span></li></ul><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;"> Suggestions</span></b></span></h1><ul type="disc"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Explicitly mention id wherever possible</span></span></li><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Give explicit id to html tags like :-</span></span></li><ul type="circle"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">input</span></span></li><li><span style="font-family:'Calibri';"><span style="font-size:100%;">image</span></span></li><li><span style="font-family:'Calibri';"><span style="font-size:100%;">anchor</span></span></li><li><span style="font-family:'Calibri';"><span style="font-size:100%;">button</span></span></li></ul></ul><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Two important question </span></b></span></h1><ol type="1"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">What command to </span></span><span style="font-family:'Calibri';"><span style="font-size:100%;">use?</span></span></li><li><span style="font-family:'Calibri';"><span style="font-size:100%;">On which element (target</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;">)?</span></span></li></ol><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">There answers</span></b></span></h1><ol type="1"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Selenium Documentation</span></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><a href="http://seleniumhq.org/documentation/core/reference.html"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><u><span style="font-size:100%;">http://seleniumhq.org/documentation/core/reference.html</span></u></span></a> </p><p style="margin-left: 72pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><ol start="2" type="1"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">X-path </span></span><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span><span style="font-family:'Calibri';"><span style="font-size:100%;">Basics</span></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><a href="http://www.w3schools.com/XPath/xpath_syntax.asp"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><u><span style="font-size:100%;">http://www.w3schools.com/XPath/xpath_syntax.asp</span></u></span></a> </p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">How to </span></b></span><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">go about it?</span></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/JM4GldTw_Cw&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/JM4GldTw_Cw&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></span></span></p></div>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com0tag:blogger.com,1999:blog-2771592983486866634.post-12021903984511956212009-06-10T23:05:00.001-07:002009-07-28T04:27:33.541-07:00JUnit<div class="Section1"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(23, 54, 93);font-family:'Cambria';" ><span style="font-size:6;">JUnit</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">JUnit is a</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;">n open source</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;"> unit testing framework for writing repeatable tests.</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><br /></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">Site: </span></span><a href="http://junit.org/"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><u><span style="font-size:100%;">http://junit.org/</span></u></span></a></p><p style="margin-left: 0pt; margin-right: 0pt;"><a href="http://junit.org/"><br /></a> </p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Test</span></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">Simple JUnit</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;"> 4</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;"> Test:</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">@Test public void simpleAdd() {</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> assertTrue(2+2,4);</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">}</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"><br /></span></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Fixtures</span></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">Test fixtures are the objects which are shared by multiple </span></span><span style="font-family:'Calibri';"><span style="font-size:100%;">tests</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;">.</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">e.g. Database connection, Class instances</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">public class MoneyTest {</span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> private Person person;</span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"><br /></span></span></p><span style="font-family:'Courier New';"><span style="font-size:85%;"><br /></span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> @Before public void setUp() {</span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;">person= new Person("Ritesh", 24, true);</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> }</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">}</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span><br /></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Exceptions</span></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">For testing functions which need to be</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;"> tested for expected Exceptions:</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">@Test(expected= IndexOutOfBoundsException.class) public void empty() {</span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> new ArrayList<Object>().get(0);</span></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">}</span></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;"> </span></b></span></h1><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Running Test</span></b></span></h1><ul type="disc"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">JUnit Console tool:</span></span></li></ul><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><b><i><span style="font-size:100%;">org.junit.runner.JUnitCore.runClasses(TestClass1.class, ...);</span></i></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><ul type="disc"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Eclipse inbuilt tool</span></span></li></ul><br /><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Test Suite</span></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">Create empty class with following annotations:</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">@RunWith(Suite.</span></span><span style="font-family:'Courier New';"><b><span style="font-size:85%;">class</span></b></span><span style="font-family:'Courier New';"><span style="font-size:85%;">)</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">@SuiteClasses({</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;">AdditonTest</span></span><span style="font-family:'Courier New';"><span style="font-size:85%;">.</span></span><span style="font-family:'Courier New';"><b><span style="font-size:85%;">class</span></b></span><span style="font-family:'Courier New';"><span style="font-size:85%;">,</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span><span style="font-family:'Courier New';"><span style="font-size:85%;">MultiplicationTest.class</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">})</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><b><span style="font-size:85%;">public</span></b></span> <span style="font-family:'Courier New';"><b><span style="font-size:85%;">class</span></b></span><span style="font-family:'Courier New';"><span style="font-size:85%;"> AllRetrivalTests {</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;"> </span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Courier New';"><span style="font-size:85%;">}</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> <br /></span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;"> </span></span></p><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Testing Web Application</span></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">Cactus is an open source JUnit extension for testing Web application</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;"> i.e. Servlet and JSP’s</span></span><span style="font-family:'Calibri';"><span style="font-size:100%;">.</span></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">Struts:</span></span></p><ol type="1"><li> <a href="http://www.onjava.com/pub/a/onjava/2004/09/22/test-struts.html"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><u><span style="font-size:100%;">http://www.onjava.com/pub/a/onjava/2004/09/22/test-struts.html</span></u></span></a></li><li> <a href="http://depressedprogrammer.wordpress.com/2007/06/18/unit-testing-struts-2-actions-spring-junit/"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><u><span style="font-size:100%;">http://depressedprogrammer.wordpress.com/2007/06/18/unit-testing-struts-2-actions-spring-junit/</span></u></span></a></li><li><a href="http://www.rkcole.com/articles/struts/crudTutorial/step1.html#createUnitTestClasses"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><u><span style="font-size:100%;">http://www.rkcole.com/articles/struts/crudTutorial/step1.html#createUnitTestClasses</span></u></span></a> </li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Calibri';"><span style="font-size:100%;">Hibernate:</span></span></p><ol type="1"><li><a href="http://today.java.net/pub/a/today/2005/10/11/testing-hibernate-mapping.html"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><u><span style="font-size:100%;">http://today.java.net/pub/a/today/2005/10/11/testing-hibernate-mapping.html</span></u></span></a></li></ol><br /><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Reference:</span></b></span></h1><ol type="1"><li><a href="http://junit.sourceforge.net/"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><u><span style="font-size:100%;">http://junit.sourceforge.net/</span></u></span></a> </li><li><a href="http://www.ibm.com/developerworks/java/library/j-junit4.html?ca=dgr-lnxw01JUnit4"><span style="color: rgb(0, 0, 255);font-family:'Calibri';" ><u><span style="font-size:100%;">http://www.ibm.com/developerworks/java/library/j-junit4.html?ca=dgr-lnxw01JUnit4</span></u></span></a> </li></ol><br /><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="color: rgb(54, 95, 145);font-family:'Cambria';" ><b><span style="font-size:130%;">Usage</span></b></span></h1><ul type="disc"><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Tests should be written before the code. Test-first programming.</span></span></li><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Test only the code that can break</span></span></li><li><span style="font-family:'Calibri';"><span style="font-size:100%;">Run unit tests often, ideally every time you change the code</span></span></li></ul></div>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com0tag:blogger.com,1999:blog-2771592983486866634.post-45391309494500731942009-06-09T21:54:00.001-07:002009-07-28T04:29:11.726-07:00ExtJS 2.0 development issues<div class="Section1"><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family:'Verdana';font-size:85%;"><b><u>Ext JS</u></b></span><span style="font-family:'Verdana';font-size:85%;"><b><u> 2.0 development issues<br /></u></b></span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Increase Tab Strip size for Tab Panel</b></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Times New Roman';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><img src="http://docs.google.com/File?id=dctg84bx_23ggmjj3hn_b" alt="" width="296" border="0" height="89" /></span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Times New Roman';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">Use </span><span style="font-family:'Verdana';font-size:85%;"><b>tabStripInnerStyle</b></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">config in </span><span style="font-family:'Verdana';font-size:85%;">the Tab panel. This is not a part of functionality ext js provide. So, I had to override few of its components methods to make this happen. Here is the override for it</span><span style="font-family:'Verdana';font-size:85%;">–</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><table style="margin-left: 36pt;color:#999999;" class="" border="3" border cellpadding="0" cellspacing="0"><tbody><tr><td style="vertical-align: top;" width="535"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>/*</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>* Override to set Tab Strip Size</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>*/</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>Ext.TabPanel.override({</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> tabStripInnerStyle : '', </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> onRender : function(ct, position){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> Ext.TabPanel.superclass.onRender.call(this, ct, position);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(this.plain){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var pos = this.tabPosition == 'top' ? 'header' : 'footer';</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this[pos].addClass('x-tab-panel-'+pos+'-plain');</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var st = this[this.stripTarget];</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.stripWrap = st.createChild({cls:'x-tab-strip-wrap', cn:{</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> tag:'ul', cls:'x-tab-strip x-tab-strip-'+this.tabPosition}});</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.stripSpacer = st.createChild({cls:'x-tab-strip-spacer'});</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.strip = new Ext.Element(this.stripWrap.dom.firstChild);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.edge = this.strip.createChild({tag:'li', cls:'x-tab-edge'});</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.strip.createChild({cls:'x-clear'});</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.body.addClass('x-tab-panel-body-'+this.tabPosition);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(!this.itemTpl){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var tt = new Ext.Template(</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<li class="{cls}" id="{id}"><a class="x-tab-strip-close" onclick="return false;"></a>',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<a class="x-tab-right" href="#" onclick="return false;"><em class="x-tab-left">',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<span style="{tabStripInnerStyle}" class="x-tab-strip-inner"><span class="x-tab-strip-text {iconCls}">{text}</span></span>', </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '</em></a></li>'</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> );// *** changed</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> tt.disableFormats = true;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> tt.compile();</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> Ext.TabPanel.prototype.itemTpl = tt;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.items.each(this.initTab, this);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> },</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> // private</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> initTab : function(item, index){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var before = this.strip.dom.childNodes[index];</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var cls = item.closable ? 'x-tab-strip-closable' : '';</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(item.disabled){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> cls += ' x-item-disabled';</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(item.iconCls){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> cls += ' x-tab-with-icon';</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(item.tabCls){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> cls += ' ' + item.tabCls;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var p = {</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> id: this.id + this.idDelimiter + item.getItemId(),</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> text: item.title,</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> cls: cls,</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> iconCls: item.iconCls || '',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> tabStripInnerStyle : this.tabStripInnerStyle // *** added</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> };</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var el = before ?</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.itemTpl.insertBefore(before, p) :</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.itemTpl.append(this.strip, p);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> Ext.fly(el).addClassOnOver('x-tab-strip-over');</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(item.tabTip){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> Ext.fly(el).child('span.x-tab-strip-text', true).qtip = item.tabTip;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> item.on('disable', this.onItemDisabled, this);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> item.on('enable', this.onItemEnabled, this);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> item.on('titlechange', this.onItemTitleChanged, this);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> item.on('beforeshow', this.onBeforeShowItem, this);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>});</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p></td></tr></tbody></table><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">And then use the config as:-</span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;">tabStripInnerStyle “padding:5px”</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=52131"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=52131</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Times New Roman';font-size:85%;"><br /></span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Times New Roman';font-size:85%;"> </span></p><ol start="2" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Paging toolbar don’t get updated if you remove a record from grid store</b></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><b> </b></span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span><span style="font-size:85%;"><img src="http://docs.google.com/File?id=dctg84bx_24f5s32jdj_b" alt="" width="99" border="0" height="45" /></span><span style="font-family:'Verdana';font-size:85%;"> </span><span style="font-size:85%;"><img src="http://docs.google.com/File?id=dctg84bx_25fmmqqbnj_b" alt="" width="102" border="0" height="45" /></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">This is again not a part of core functionality provided by Ext JS api. I </span><span style="font-family:'Verdana';font-size:85%;">created</span><span style="font-family:'Verdana';font-size:85%;"> following override to make this happen.</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><table style="margin-left: 36pt;color:#999999;" class="" border="3" border cellpadding="0" cellspacing="0"><tbody><tr><td style="vertical-align: top;" width="535"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>Ext.data.Store.override({</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> removeCount :0,</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> remove : function(record){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var index = this.data.indexOf(record);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.data.removeAt(index);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(this.pruneModifiedRecords){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.modified.remove(record);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(this.snapshot){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.snapshot.remove(record);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.fireEvent("remove", this, record, index);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.removeCount++;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> },</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> getTotalCount : function(){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> return this.totalLength ? (this.totalLength-this.removeCount): 0;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> },</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> load : function(options){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> options = options || {};</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.removeCount = 0;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(this.fireEvent("beforeload", this, options) !== false){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.storeOptions(options);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var p = Ext.apply(options.params || {}, this.baseParams);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(this.sortInfo && this.remoteSort){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var pn = this.paramNames;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> p[pn["sort"]] = this.sortInfo.field;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> p[pn["dir"]] = this.sortInfo.direction;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.proxy.load(p, this.reader, this.loadRecords, this, options);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> return true;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> } else {</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> return false;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> },</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>});</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p></td></tr></tbody></table><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=51790"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=51790</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> <br /></span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="3" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Visible row body in Grid Panel</b></span> <span style="font-size:85%;"><br /></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"> </p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">By default single row body is possible in each grid row, which can be show or hided by using </span><span style="font-family:'Verdana';font-size:85%;"><b>enableRowBody</b></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">config</span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">for grid view. Thus there’s only one </span><span style="font-family:'Verdana';font-size:85%;"><b><tr></b></span><span style="font-family:'Verdana';font-size:85%;"> element</span><span style="font-family:'Verdana';font-size:85%;">(row body)</span><span style="font-family:'Verdana';font-size:85%;"> present by default. To add another </span><span style="font-family:'Verdana';font-size:85%;"><b><tr></b></span><span style="font-family:'Verdana';font-size:85%;"> element which is always visible to user, few methods from GridView class had to be overrided.</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">Here is the code for it:-</span></p><table style="margin-left: 36pt;color:#999999;" class="" border="3" border cellpadding="0" cellspacing="0"><tbody><tr><td style="vertical-align: top;" width="535"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>/**</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>* @cfg {Boolean} enableVisibleRowBody True to add a second TR element per row that can be used to provide a visible row body along with </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>* hidable row body (third tr element) that spans beneath the data row. - Author : ritesh</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>*/</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>Ext.grid.GridView.override({</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> initTemplates : function(){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var ts = this.templates || {};</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(!ts.master){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> ts.master = new Ext.Template(</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<div class="x-grid3" hidefocus="true">',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<div class="x-grid3-viewport">',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> "</div>",</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<div class="x-grid3-resize-marker">&#160;</div>',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<div class="x-grid3-resize-proxy">&#160;</div>',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> "</div>"</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> );</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(!ts.header){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> ts.header = new Ext.Template(</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<thead><tr class="x-grid3-hd-row">{cells}</tr></thead>',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> "</table>"</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> );</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(!ts.hcell){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> ts.hcell = new Ext.Template(</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<td class="x-grid3-hd x-grid3-cell x-grid3-td-{id}" style="{style}"><div {tooltip} {attr} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">', this.grid.enableHdMenu ? '<a class="x-grid3-hd-btn" href="#"></a>' : '',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '{value}<img class="x-grid3-sort-icon" src="', Ext.BLANK_IMAGE_URL, '" />',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> "</div></td>"</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> );</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(!ts.body){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> ts.body = new Ext.Template('{rows}');</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(!ts.row){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> ts.row = new Ext.Template(</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<div class="x-grid3-row {alt}" style="{tstyle}"><table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<tbody><tr>{cells}</tr>',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> (this.enableVisibleRowBody ? '<tr id="testingrowbody"><td colspan="{cols}" >{visibleBody}</td></tr>' : ''),</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> (this.enableRowBody ? '<tr class="x-grid3-row-body-tr" style="{bodyStyle}"><td colspan="{cols}" class="x-grid3-body-cell" tabIndex="0" hidefocus="on"><div class="x-grid3-row-body">{body}</div></td></tr>' : ''),</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '</tbody></table></div>'</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> );</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(!ts.cell){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> ts.cell = new Ext.Template(</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} {css}" style="{style}" tabIndex="0" {cellAttr}>',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> '<div class="x-grid3-cell-inner x-grid3-col-{id}" unselectable="on" {attr}>{value}</div>',</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> "</td>"</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> );</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> for(var k in ts){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var t = ts[k];</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(t && typeof t.compile == 'function' && !t.compiled){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> t.disableFormats = true;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> t.compile();</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.templates = ts;</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.tdClass = 'x-grid3-cell';</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.cellSelector = 'td.x-grid3-cell';</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.hdCls = 'x-grid3-hd';</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.rowSelector = 'div.x-grid3-row';</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.colRe = new RegExp("x-grid3-td-([^\\s]+)", "");</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> </i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>});</i></span></p></td></tr></tbody></table><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">Now you can set </span><span style="font-family:'Verdana';font-size:85%;"><b>enableVisibleRowBody</b></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">along with </span><span style="font-family:'Verdana';font-size:85%;"><b>enableRowBody</b></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">to have another visible row for each grid row.</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">You will also have to set </span><span style="font-family:'Verdana';font-size:85%;"><b>visibleBody</b></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">value</span><span style="font-family:'Verdana';font-size:85%;"> similar to </span><span style="font-family:'Verdana';font-size:85%;"><b>body</b></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">in </span><span style="font-family:'Verdana';font-size:85%;"><b>getRowClass</b></span> <span style="font-family:'Verdana';font-size:85%;"> method ( this method need to override in case of expander )</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="4" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Text Field getting validated for blank space</b></span> </li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">Us<span style="background-color: rgb(255, 255, 255);">e </span></span><span style="background-color: rgb(255, 255, 255);font-family:'Verdana';font-size:85%;" ><b>undocumented</b> stripCharsRe config in textfield as –</span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;">stripCharsRe:/(^\s+$)/g</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=54225"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=54225</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="5" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Grid doesn’t show the mask while loading</b></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">Use the following listener in the grid config :-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><table style="margin-left: 36pt;color:#999999;" class="" border="3" border cellpadding="0" cellspacing="0"><tbody><tr><td style="vertical-align: top;" width="535"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>listeners :{</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> render : function(comp){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> comp.getStore().load.defer(20,comp.getStore());</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p></td></tr></tbody></table><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=50130"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=50130</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="6" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Combobox inner list not aligning list items propertly</b></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">This was a bug in Ext API. The solution is the following override :-</span></p><table style="margin-left: 36pt;color:#999999;" class="" border="3" border cellpadding="0" cellspacing="0"><tbody><tr><td style="vertical-align: top;" width="535"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>Ext.Component.override({</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> initState : function(config){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(Ext.state.Manager){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var id = this.getStateId();</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(id){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var state = Ext.state.Manager.get(id);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(state){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(this.fireEvent('beforestaterestore', this, state) !== false){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.applyState(state);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.fireEvent('staterestore', this, state);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> },</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> saveState : function(){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(Ext.state.Manager){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var id = this.getStateId();</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(id){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> var state = this.getState();</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> if(this.fireEvent('beforestatesave', this, state) !== false){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> Ext.state.Manager.set(id, state);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> this.fireEvent('statesave', this, state);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> },</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> getStateId : function(){</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> return this.stateId || ((this.id.indexOf('ext-comp-') == 0 || this.id.indexOf('ext-gen') == 0) ? null : this.id);</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i> }</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"><i>});</i></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:78%;"> </span></p></td></tr></tbody></table><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?p=225278#post225278"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?p=225278#post225278</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="7" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Abort </b></span><span style="font-family:'Verdana';font-size:85%;"><b>ajax</b></span><span style="font-family:'Verdana';font-size:85%;"><b> request from data store</b></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;">Use </span><span style="font-family:'Verdana';font-size:85%;"><i>Ext.Ajax.abort(store.proxy.activeRequest);</i></span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=46514"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=46514</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="8" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Combo box problem with getValues() and getValue()</b></span></li></ol><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">Use </span><span style="font-family:'Verdana';font-size:85%;"><b>hidden</b></span><span style="font-family:'Verdana';font-size:85%;"><b>Id</b></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">config </span><span style="font-family:'Verdana';font-size:85%;">to set hidden form field and then use the same to call </span><span style="font-family:'Verdana';font-size:85%;"><b>getValues()</b></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=41522"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=41522</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="9" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>O</b></span><span style="font-family:'Verdana';font-size:85%;"><b>ptimize loading of my ExtJS Appliction</b></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>JSMin</b></span></li><li><span style="font-family:'Verdana';font-size:85%;"><b>GZip</b></span></li><li><span style="font-family:'Verdana';font-size:85%;"><b>Concatenated JS</b></span><span style="font-family:'Verdana';font-size:85%;">, </span><span style="font-family:'Verdana';font-size:85%;"><b>CSS </b></span><span style="font-family:'Verdana';font-size:85%;">files into single one</span></li><li><span style="font-family:'Verdana';font-size:85%;">Use client side caching i.e. set </span><span style="font-family:'Verdana';font-size:85%;"><b>EXPIRE </b></span><span style="font-family:'Verdana';font-size:85%;">header to all </span><span style="font-family:'Verdana';font-size:85%;"><b>static </b></span><span style="font-family:'Verdana';font-size:85%;">content</span></li><li><span style="font-family:'Verdana';font-size:85%;">Use server side caching for </span><span style="font-family:'Verdana';font-size:85%;"><b>dynamic </b></span><span style="font-family:'Verdana';font-size:85%;">pages</span></li><li><span style="font-family:'Verdana';font-size:85%;">Use </span><span style="font-family:'Verdana';font-size:85%;"><b>CDN </b></span><span style="font-family:'Verdana';font-size:85%;">ifpossible</span></li><li><span style="font-family:'Verdana';font-size:85%;">Use </span><span style="font-family:'Verdana';font-size:85%;"><b>CSS Sprites </b></span><span style="font-family:'Verdana';font-size:85%;">wherever possible</span></li><li><span style="font-family:'Verdana';font-size:85%;">Optimize images i.e. </span><span style="font-family:'Verdana';font-size:85%;"><b>reduce </b></span><span style="font-family:'Verdana';font-size:85%;">colors, use </span><span style="font-family:'Verdana';font-size:85%;"><b>PNG</b></span></li><li><span style="font-family:'Verdana';font-size:85%;"><b>Lazy loading</b></span><span style="font-family:'Verdana';font-size:85%;"> wherever possible</span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=50816"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=50816</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="10" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>S</b></span><span style="font-family:'Verdana';font-size:85%;"><b>how tool tips for every item of Ext ComboBox</b></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">Use :-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;">tpl: '<tpl for="."><div class="x-combo-list-item" ext:qtip="{tip}">{text}</div></tpl>'</span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=49612"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=49612</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="11" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Change</b></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;"><b>Font size of Combo box list </b></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;">Use :-</span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;">listClass: ‘my-combo-lst’</span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">in Combo box config.</span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;">And put following line in your css file :-</span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;">.my-combo-lst .x-combo-list-item{font-size:10px;}</span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=50144"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=50144</u></span></a></span> </p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><ol start="12" type="1"><li><span style="font-family:'Verdana';font-size:85%;"><b>Change emptyMsg of a bottom toolbar</b></span></li></ol><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Workaround:</u></span><span style="font-size:85%;"> </span><span style="font-family:'Verdana';font-size:85%;">-</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;">Use :-</span></p><p style="margin-left: 36pt; margin-right: 0pt; background-color: rgb(255, 255, 255);"><span style="font-family:'Verdana';font-size:85%;"><b>grid.getBottomToolbar().displayEl.update('');</b></span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"><u>Reference</u></span><span style="font-family:'Verdana';font-size:85%;">:</span><span style="font-family:'Verdana';font-size:85%;"> -</span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-size:85%;"><a href="http://extjs.com/forum/showthread.php?t=49158"><span style="color: rgb(0, 0, 255);font-family:'Verdana';" ><u>http://extjs.com/forum/showthread.php?t=49158</u></span></a> </span><span style="font-family:'Verdana';font-size:85%;"> </span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family:'Verdana';font-size:85%;"> </span></p></div><span style="font-size:85%;"><br /></span>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com0tag:blogger.com,1999:blog-2771592983486866634.post-16346544735120060392009-06-09T21:46:00.001-07:002009-07-28T04:29:55.997-07:00Glassfish Configration<div class="Section1"><ol type="1"><li><span style="font-family:'Verdana'"><font size="3">D</font></span><span style="font-family:'Verdana'"><font size="3">ownload glassfish from </font></span><a href="http://java.net/download/javaee5/v2ur2/promoted/WINNT/glassfish-installer-v2ur2-b04-windows.jar"><span style="color:#0000ff; font-family:'Verdana'"><u><font size="3">http://java.net/download/javaee5/v2ur2/promoted/WINNT/glassfish-installer-v2ur2-b04-windows.jar</font></u></span></a></li><li><span style="font-family:'Verdana'"><font size="3">Put</font></span><span style="font-family:'Verdana'"><font size="3"> jar</font></span><span style="font-family:'Verdana'"><font size="3"> on C drive</font></span></li><li><span style="font-family:'Verdana'"><font size="3">Run </font></span><span style="color:#0000ff; font-family:'Verdana'"><i><font size="3">java -Xmx256m -jar </font></i></span><span style="color:#0000ff; font-family:'Verdana'"><i><font size="3">glassfish-installer-v2ur2-b04-windows.jar</font></i></span> <span style="font-family:'Verdana'"><font size="3">from command line</font></span></li><li><span style="font-family:'Verdana'"><font size="3">Run </font></span><span style="color:#0000ff; font-family:'Verdana'"><i><font size="3">C:\glassfish</font></i></span><span style="color:#0000ff; font-family:'Verdana'"><i><font size="3">></font></i></span><span style="color:#0000ff; font-family:'Verdana'"><i><font size="3">lib\ant\bin</font></i></span><span style="color:#0000ff; font-family:'Verdana'"><i><font size="3">\a</font></i></span><span style="color:#0000ff; font-family:'Verdana'"><i><font size="3">nt -f setup.xml</font></i></span> <span style="font-family:'Verdana'"><font size="3">from command line</font></span></li><li><span style="font-family:'Verdana'"><font size="3">Set JDK in asenv.bat if needed by your project. Default is Java 5</font></span></li><li><span style="font-family:'Verdana'"><font size="3">Add jar file for database driver you are using to lib folder of server</font></span></li><li><span style="font-family:'Verdana'"><font size="3">add your project jar in the outodeploy directory of your default domain</font></span></li><li><span style="font-family:'Verdana'"><font size="3">Go to sever console on </font></span><a href="http://localhost:4848/login.jsf"><span style="color:#0000ff; font-family:'Verdana'"><u><font size="3">http://localhost:4848/login.jsf</font></u></span></a></li><li><span style="font-family:'Verdana'"><font size="3">Create connection pool </font></span></li><li><span style="font-family:'Verdana'"><font size="3">add </font></span><span style="font-family:'Times New Roman'"><font size="3">com.microsoft.sqlserver.jdbc.</font></span><span style="font-family:'Times New Roman'"><font size="3">SQLServerConnectionPoolDataSource </font></span><span style="font-family:'Verdana'"><font size="3">as DataSource class name.</font></span></li><li><span style="font-family:'Verdana'"><font size="3">Create JDBC resource </font></span></li><li><span style="font-family:'Verdana'"><font size="3">Start server using command </font></span><span style="font-family:'Verdana'"><font size="3">C:\glassfish\bin>asadmin.bat start-domain domain1</font></span></li><li><span style="font-family:'Verdana'"><font size="3">Use stop-domain command for stopping server</font></span></li><li><span style="font-family:'Verdana'"><font size="3">Run </font></span><a href="http://localhost:8080/Your_Application"><span style="color:#0000ff; font-family:'Verdana'"><u><font size="3">http://localhost:8080/Your_Application</font></u></span></a><span style="font-family:'Verdana'"><font size="3"> in the browser</font></span></li><li><span style="font-family:'Verdana'"><font size="3">See the server log file for any errors in the application deployment</font></span></li></ol></div><br>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com1tag:blogger.com,1999:blog-2771592983486866634.post-48862353683978673052009-06-09T21:44:00.001-07:002009-07-28T04:34:40.628-07:00Selenium IDE Issues with ExtJS<div class="Section1"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="color:#333333; font-family:'Verdana'"><b><u><font size="3">Selenium IDE issues with ExtJS application</font></u></b></span></p><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="color:#333333; font-family:'Verdana'"><b><font size="3"> </font></b></span></p><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="color:#333333; font-family:'Verdana'"><b><font size="3"> </font></b></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><font size="2">ExtJS</font></b></span><span style="font-family:'Verdana'"><font size="2"> automatically creates id’s for components if not provided by the developer. This id changes every time the component is created, so will not be the same for every user visit to the same page.</font></span><span style="font-family:'Verdana'"><font size="2"> We should define id </font></span><span style="font-family:'Verdana'"><b><font size="2">explicitly</font></b></span><span style="font-family:'Verdana'"><font size="2"> for every ExtJS components </font></span><span style="font-family:'Verdana'"><font size="2">which </font></span><span style="font-family:'Verdana'"><font size="2">need be tested using </font></span><span style="font-family:'Verdana'"><b><font size="2">Selenium</font></b></span><span style="font-family:'Verdana'"><font size="2">.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">Explicitly </font></span><span style="font-family:'Verdana'"><font size="2">mention</font></span><span style="font-family:'Verdana'"><font size="2"> id</font></span><span style="font-family:'Verdana'"><font size="2"> config</font></span><span style="font-family:'Verdana'"><font size="2"> for </font></span><span style="font-family:'Verdana'"><font size="2">components with which user can interact. e.g.</font></span> <span style="font-family:'Verdana'"><font size="2">form components</font></span><span style="font-family:'Verdana'"><font size="2">, h</font></span><span style="font-family:'Verdana'"><font size="2">yperlinks</font></span><span style="font-family:'Verdana'"><font size="2">,</font></span> <span style="font-family:'Verdana'"><font size="2">i</font></span><span style="font-family:'Verdana'"><font size="2">mages</font></span><span style="font-family:'Verdana'"><font size="2">, buttons etc.</font></span> </p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">Some of the issue which you may encounter while testing your application with Selenium are as follows:- </font></span></p><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="color:#333333; font-family:'Verdana'"><b><font size="3"> </font></b></span></p><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="color:#333333; font-family:'Verdana'"><b><font size="3"> </font></b></span></p><ol type="1"><li><span style="font-family:'Verdana'"><b><font size="2">Button</font></b></span><span style="font-family:'Verdana'"><font size="2"> component</font></span> </li></ol><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Problem</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">:</font></b></span> <span style="font-family:'Verdana'"><font size="2">Selenum IDE cannot record the exact button ID of the button component.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Solution</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">: </font></b></span></p><ol type="a"><ol type="a"><li><span style="font-family:'Verdana'"><font size="2">Find the id of the button component manually (using firebug) and replace the default capture</font></span><span style="font-family:'Verdana'"><font size="2">d</font></span><span style="font-family:'Verdana'"><font size="2"> button id with it</font></span> </li><li><span style="font-family:'Verdana'"><font size="2">We can also use xpath expression as target for this as – “//table[@id='buttonID']//button”</font></span> </li></ol></ol><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_32g4hgk7ft_b" width="88" height="45" alt="" border="0"></img></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Times New Roman'"><font size="3"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">For this to work explicit</font></span> <span style="font-family:'Verdana'"><font size="2">id config must be provided for each</font></span><span style="font-family:'Verdana'"><font size="2"> required</font></span><span style="font-family:'Verdana'"><font size="2"> button component.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><ol start="2" type="1"><li><span style="font-family:'Verdana'"><b><font size="2">TabPanel</font></b></span><span style="font-family:'Verdana'"><font size="2"> component</font></span></li></ol><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Problem</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">:</font></b></span><span style="font-family:'Verdana'"><font size="2"> Tab strip not detected </font></span><span style="font-family:'Verdana'"><font size="2">properly </font></span><span style="font-family:'Verdana'"><font size="2">in record mode</font></span><span style="font-family:'Verdana'"><font size="2">.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Solution</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">: </font></b></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">//div[@id='tabpanel_id']//ul/li[2]</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">Will select the second tab from the tab panel</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">Or if you are using tabpanel inside tabpane</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">//div[@id='outer_tabpanel_id']//div[@class='x-tab-strip-wrap'][1]/ul/li[2] will select the second tab for the outside tab panel.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="color:#ff0000; font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_33hs9v4s4f_b" width="281" height="121" alt="" border="0"></img></p><ol start="3" type="1"><li><span style="font-family:'Verdana'"><b><font size="2">Combo Box</font></b></span><span style="font-family:'Verdana'"><font size="2"> component</font></span> </li></ol><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Problem</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">:</font></b></span><span style="font-family:'Verdana'"><font size="2"> Selenium can not detect dropdown icon and list items</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Solution</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">: </font></b></span><span style="font-family:'Verdana'"><font size="2">Need to override </font></span><span style="font-family:'Verdana'"><b><font size="2">initList</font></b></span> <span style="font-family:'Verdana'"><font size="2">method of </font></span><span style="font-family:'Verdana'"><b><font size="2">combo</font></b></span><span style="font-family:'Verdana'"><font size="2"> to modify following line to include ids in the list:-</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><table cellspacing="0" cellpadding="0" style=" margin-left:18pt" class="zeroBorder"><tr><td width="559" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="1">this.innerList = this.list.createChild({cls:cls+'-inner'</font></span><span style="color:#ff0000; font-family:'Verdana'"><font size="1">, id:this.id+'-list'</font></span><span style="font-family:'Verdana'"><font size="1">});</font></span></p></td></tr></table><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span><span style="background-color:#ffffff; font-family:'Courier New'"><font size="2"> </font></span> </p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">Record the test case for </font></span><span style="font-family:'Verdana'"><font size="2">combo box</font></span> <span style="font-family:'Verdana'"><font size="2">now. The</font></span><span style="font-family:'Verdana'"><font size="2"> list item can be identified as: - </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="color:#333333; font-family:'Verdana'"><font size="2">/</font></span><span style="color:#333333; font-family:'Verdana'"><font size="2">/div[@id='comboId-list']/div[2]</font></span> </p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> Hear div[2] indicates second item in the list.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_34gq6b8mgr_b" width="155" height="138" alt="" border="0"></img></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><ol start="4" type="1"><li><span style="font-family:'Verdana'"><b><font size="2">G</font></b></span><span style="font-family:'Verdana'"><b><font size="2">rid</font></b></span> <span style="font-family:'Verdana'"><b><font size="2">Component </font></b></span><span style="font-family:'Verdana'"><font size="2">- Row identification</font></span> </li></ol><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Problem</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">:</font></b></span> <span style="font-family:'Verdana'"><font size="2">Grid r</font></span><span style="font-family:'Verdana'"><font size="2">ows are not give</font></span><span style="font-family:'Verdana'"><font size="2">n</font></span><span style="font-family:'Verdana'"><font size="2"> unique identification by default</font></span><span style="font-family:'Verdana'"><font size="2">. </font></span><span style="font-family:'Verdana'"><font size="2">Thus </font></span><span style="font-family:'Verdana'"><font size="2">Selenium cannot record the user inputs on grid row properly.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Solution</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">: </font></b></span><span style="font-family:'Verdana'"><font size="2">Use click command on following target elements</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><ol type="1"><li><span style="font-family:'Verdana'"><font size="2">//div[@id=</font></span><span style="font-family:'Verdana'"><font size="2">’GRID_ID'</font></span><span style="font-family:'Verdana'"><font size="2">]//div[@class='x-grid3-body']/div[2]</font></span> </li></ol><p style=" margin-left:36pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:36pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">This will locate second row of the grid</font></span></p><p style=" margin-left:36pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_35hjmvcgcp_b" width="356" height="148" alt="" border="0"></img></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><ol start="2" type="1"><li><span style="font-family:'Verdana'"><font size="2">//div[@id='GRID_ID']//div[@class='x-grid3-body']/div[2]//div[@class='x-grid3-row-expander']</font></span></li></ol><p style=" margin-left:36pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:36pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">This will locate the expander element for the second row of the grid</font></span></p><p style=" margin-left:36pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_36ssbp2rfd_b" width="391" height="267" alt="" border="0"></img></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><ol start="5" type="1"><li><span style="font-family:'Verdana'"><b><font size="2">Window</font></b></span> <span style="font-family:'Times New Roman'"><font size="3">component</font></span></li></ol><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Problem</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">:</font></b></span><span style="font-family:'Verdana'"><font size="2"> C</font></span><span style="font-family:'Verdana'"><font size="2">lose button id </font></span><span style="font-family:'Verdana'"><font size="2">is </font></span><span style="font-family:'Verdana'"><font size="2">auto generated</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Solution</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">: </font></b></span><span style="font-family:'Verdana'"><font size="2">We can use xpath expression as //div[@id='windowId']//div[@class='x-tool x-tool-close']</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_37gpwnq2fk_b" width="301" height="226" alt="" border="0"></img></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><ol start="6" type="1"><li><span style="font-family:'Verdana'"><b><font size="2">Grid</font></b></span><span style="font-family:'Verdana'"><b><font size="2"> Component - </font></b></span> <span style="font-family:'Verdana'"><font size="2">S</font></span><span style="font-family:'Verdana'"><font size="2">tore loading </font></span></li></ol><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Problem</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">:</font></b></span><span style="font-family:'Verdana'"><font size="2"> Determine when grid has finished loading its data.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Solution</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">: </font></b></span><span style="font-family:'Verdana'"><font size="2">Use command – waitForElementNotPresent</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span> <span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> </font></span><span style="font-family:'Verdana'"><font size="2"> and Target - //div[@id='gridId']//div[@class= 'ext-el-mask']</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_38f84s38hq_b" width="293" height="224" alt="" border="0"></img></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2">This works</font></span> <span style="color:#008000; font-family:'Verdana'"><font size="2">only</font></span><span style="font-family:'Verdana'"><font size="2"> when loadMask config of grid is set to true.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><ol start="7" type="1"><li><span style="font-family:'Verdana'"><b><font size="2">Date Field Component </font></b></span></li></ol><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Problem</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">:</font></b></span> <span style="font-family:'Verdana'"><font size="2">Selenium </font></span><span style="font-family:'Verdana'"><font size="2">IDE doesn’t detect user inputs on date field component properly </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><u><font size="2">Solution</font></u></b></span><span style="font-family:'Verdana'"><b><font size="2">: </font></b></span><span style="font-family:'Verdana'"><font size="2">Use click commands on following html elements to simulate user click on Date field.</font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><ol type="1"><li><span style="font-family:'Verdana'"><font size="2">//input[@id='</font></span><span style="font-family:'Verdana'"><font size="2">DATEFIELD_ID</font></span><span style="font-family:'Verdana'"><font size="2">']/../img</font></span></li></ol><p style=" margin-left:36pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_39cgmwr2cw_b" width="173" height="45" alt="" border="0"></img></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><ol start="2" type="1"><li><span style="font-family:'Verdana'"><font size="2">//div[@class='x-layer x-menu x-menu-plain x-date-menu'][@style='position: absolute; z-index: 15000; </font></span><span style="font-family:'Verdana'"><b><i><font size="2">visibility: visible</font></i></b></span><span style="font-family:'Verdana'"><font size="2">; left: 587px; top: 105px;']//em[span=16]</font></span></li></ol><p style=" margin-left:36pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_40hkd44ff3_b" width="192" height="232" alt="" border="0"></img></p><p style=" margin-left:18pt; margin-right:0pt"><span style="color:#008000; font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><u><font size="2">Reference:</font></u></span><span style="font-family:'Verdana'"><u><font size="2">-</font></u></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><a href="http://seleniumhq.org/projects/core/reference.html"><span style="color:#0000ff; font-family:'Verdana'"><u><font size="2">http://seleniumhq.org/projects/core/reference.html</font></u></span></a></p><p style=" margin-left:18pt; margin-right:0pt"><a href="http://www.w3schools.com/XPath/xpath_syntax.asp"><span style="color:#0000ff; font-family:'Verdana'"><u><font size="2">http://www.w3schools.com/XPath/xpath_syntax.asp</font></u></span></a></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:18pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="color:#0000ff; font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Verdana'"><font size="2"> </font></span></p><p style=" margin-left:27pt; margin-right:0pt"><span style="color:#333333; font-family:'Verdana'"><font size="3"> </font></span></p></div><br>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com4tag:blogger.com,1999:blog-2771592983486866634.post-41765583059634754822009-05-27T07:30:00.001-07:002009-07-28T04:35:02.033-07:00Web Application Performance Improvement<div class="Section1"><h1 style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Cambria'"><b><font size="5">Web Application Performance Improvement</font></b></span></h1><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Cambria'"><b><i><font size="3">By </font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="3">Ritesh Kapse</font></i></b></span> </p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Verdana'"><b><font size="4"> </font></b></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Almost every Web 2.0 application relies heavily on JavaScript</font></span><span style="font-family:'Calibri'"><font size="3"> (JS)</font></span><span style="font-family:'Calibri'"><font size="3"> code</font></span><span style="font-family:'Calibri'"><font size="3">, </font></span><span style="font-family:'Calibri'"><font size="3">Cascading Style Sheets (</font></span><span style="font-family:'Calibri'"><font size="3">CSS</font></span><span style="font-family:'Calibri'"><font size="3">)</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span><span style="font-family:'Calibri'"><font size="3"> and images</font></span><span style="font-family:'Calibri'"><font size="3"> to make </font></span><span style="font-family:'Calibri'"><font size="3">the user interface of the application </font></span><span style="font-family:'Calibri'"><font size="3">more interactive</font></span><span style="font-family:'Calibri'"><font size="3"> and rich</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span><span style="font-family:'Calibri'"><font size="3"> However</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span> <span style="font-family:'Calibri'"><font size="3">these files </font></span><span style="font-family:'Calibri'"><font size="3">might </font></span><span style="font-family:'Calibri'"><font size="3">cause </font></span><span style="font-family:'Calibri'"><font size="3">some performance</font></span><span style="font-family:'Calibri'"><font size="3">-</font></span><span style="font-family:'Calibri'"><font size="3">related problems if not </font></span><span style="font-family:'Calibri'"><font size="3">managed</font></span> <span style="font-family:'Calibri'"><font size="3">properly</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span> <span style="font-family:'Calibri'"><font size="3">for instance</font></span> <span style="font-family:'Calibri'"><font size="3">sluggish network and runtime performance</font></span><span style="font-family:'Calibri'"><font size="3"> issue</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Following </font></span><span style="font-family:'Calibri'"><font size="3">are </font></span><span style="font-family:'Calibri'"><font size="3">a few </font></span><span style="font-family:'Calibri'"><font size="3">general techniques </font></span><span style="font-family:'Calibri'"><font size="3">that </font></span><span style="font-family:'Calibri'"><font size="3">we can apply to every</font></span><span style="font-family:'Calibri'"><font size="3"> such</font></span><span style="font-family:'Calibri'"><font size="3"> Web </font></span><span style="font-family:'Calibri'"><font size="3">a</font></span><span style="font-family:'Calibri'"><font size="3">pplication to make it work </font></span><span style="font-family:'Calibri'"><font size="3">better and faster</font></span><span style="font-family:'Calibri'"><font size="3">. </font></span></p><h2 style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Cambria'"><b><i><font size="4">File </font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">Compression</font></i></b></span></h2><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">We can </font></span><span style="font-family:'Calibri'"><font size="3">compress server responses, such as HTML, JS, and CSS files, </font></span><span style="font-family:'Calibri'"><font size="3">us</font></span><span style="font-family:'Calibri'"><font size="3">ing</font></span> <span style="font-family:'Calibri'"><b><font size="3">G</font></b></span><span style="font-family:'Calibri'"><b><font size="3">z</font></b></span><span style="font-family:'Calibri'"><b><font size="3">ip</font></b></span> <span style="font-family:'Calibri'"><font size="3">before sending them</font></span><span style="font-family:'Calibri'"><font size="3"> to </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">requesting browser</font></span><span style="font-family:'Calibri'"><font size="3">. </font></span><span style="font-family:'Calibri'"><font size="3">G</font></span><span style="font-family:'Calibri'"><font size="3">z</font></span><span style="font-family:'Calibri'"><font size="3">ip</font></span> <span style="font-family:'Calibri'"><font size="3">is a data compression </font></span><span style="font-family:'Calibri'"><font size="3">technique</font></span><span style="font-family:'Calibri'"><font size="3"> and </font></span><span style="font-family:'Calibri'"><font size="3">can reduce the </font></span><span style="font-family:'Calibri'"><font size="3">W</font></span><span style="font-family:'Calibri'"><font size="3">eb page </font></span><span style="font-family:'Calibri'"><font size="3">size to about 70% </font></span><span style="font-family:'Calibri'"><font size="3">of its original size</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span> <span style="font-family:'Calibri'"><font size="3">This </font></span><span style="font-family:'Calibri'"><font size="3">help</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span> <span style="font-family:'Calibri'"><font size="3">in </font></span><span style="font-family:'Calibri'"><font size="3">send</font></span><span style="font-family:'Calibri'"><font size="3">ing</font></span><span style="font-family:'Calibri'"><font size="3"> the same </font></span><span style="font-family:'Calibri'"><font size="3">data</font></span> <span style="font-family:'Calibri'"><font size="3">to browser</font></span><span style="font-family:'Calibri'"><font size="3"> about</font></span> <span style="font-family:'Calibri'"><font size="3">six</font></span><span style="font-family:'Calibri'"><font size="3"> times faster.</font></span><span style="font-family:'Calibri'"><font size="3"> However</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span> <span style="font-family:'Calibri'"><font size="3">using </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">same technique for images and PDF files</font></span> <span style="font-family:'Calibri'"><font size="3">might not be effective </font></span><span style="font-family:'Calibri'"><font size="3">as </font></span><span style="font-family:'Calibri'"><font size="3">these files </font></span><span style="font-family:'Calibri'"><font size="3">are already in </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">compressed format.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">We can compress files just </font></span><span style="font-family:'Calibri'"><font size="3">by adding a</font></span><span style="font-family:'Calibri'"><font size="3"> simple</font></span> <span style="font-family:'Calibri'"><font size="3">Servlet</font></span> <span style="font-family:'Calibri'"><font size="3">F</font></span><span style="font-family:'Calibri'"><font size="3">ilter</font></span> <span style="font-family:'Calibri'"><font size="3">to the Web applicatio</font></span><span style="font-family:'Calibri'"><font size="3">n. Also, the browser must support Gzip; almost all the advanced browsers support Gzip. </font></span><span style="font-family:'Calibri'"><font size="3">Th</font></span><span style="font-family:'Calibri'"><font size="3">e</font></span> <span style="font-family:'Calibri'"><font size="3">Servlet</font></span> <span style="font-family:'Calibri'"><font size="3">filter</font></span> <span style="font-family:'Calibri'"><font size="3">checks whether the browser supports Gzip </font></span><span style="font-family:'Calibri'"><font size="3">in</font></span><span style="font-family:'Calibri'"><font size="3"> the request </font></span><span style="font-family:'Calibri'"><font size="3">header parameter </font></span><span style="font-family:'Calibri'"><b><font size="3">Accept-Encoding</font></b></span><span style="font-family:'Calibri'"><font size="3">.</font></span> <span style="font-family:'Calibri'"><font size="3">If the browser supports </font></span><span style="font-family:'Calibri'"><font size="3">G</font></span><span style="font-family:'Calibri'"><font size="3">z</font></span><span style="font-family:'Calibri'"><font size="3">ip</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span> <span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">filter</font></span><span style="font-family:'Calibri'"><font size="3"> compress</font></span><span style="font-family:'Calibri'"><font size="3">es</font></span><span style="font-family:'Calibri'"><font size="3"> the </font></span><span style="font-family:'Calibri'"><font size="3">files </font></span><span style="font-family:'Calibri'"><font size="3">to </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">G</font></span><span style="font-family:'Calibri'"><font size="3">z</font></span><span style="font-family:'Calibri'"><font size="3">ip format</font></span><span style="font-family:'Calibri'"><font size="3"> just before sending the response</font></span><span style="font-family:'Calibri'"><font size="3">. On receiving </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">server</font></span><span style="font-family:'Calibri'"><font size="3"> response</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span> <span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">browser check</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span> <span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><b><font size="3">Content-Encoding</font></b></span> <span style="font-family:'Calibri'"><font size="3">header </font></span><span style="font-family:'Calibri'"><font size="3">parameter</font></span><span style="font-family:'Calibri'"><font size="3"> in the file to</font></span> <span style="font-family:'Calibri'"><font size="3">determine </font></span><span style="font-family:'Calibri'"><font size="3">whether the response is compressed and in which format it is compressed</font></span><span style="font-family:'Calibri'"><font size="3">. </font></span><span style="font-family:'Calibri'"><font size="3">If the response is compressed, the browser decompresses the response before displaying the Web page.</font></span></p><h2 style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Cambria'"><b><i><font size="4">Server</font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">-</font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">side </font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">C</font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">aching </font></i></b></span></h2><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">We can use this technique for dynamic pages involving</font></span><span style="font-family:'Calibri'"><font size="3"> some</font></span><span style="font-family:'Calibri'"><font size="3"> complex logic </font></span><span style="font-family:'Calibri'"><font size="3">that </font></span><span style="font-family:'Calibri'"><font size="3">is </font></span><span style="font-family:'Calibri'"><font size="3">executed </font></span><span style="font-family:'Calibri'"><font size="3">in </font></span><span style="font-family:'Calibri'"><font size="3">a</font></span> <span style="font-family:'Calibri'"><font size="3">same </font></span><span style="font-family:'Calibri'"><font size="3">way </font></span><span style="font-family:'Calibri'"><font size="3">for every request</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span> <span style="font-family:'Calibri'"><font size="3">Here, </font></span><span style="font-family:'Calibri'"><font size="3">w</font></span><span style="font-family:'Calibri'"><font size="3">e</font></span><span style="font-family:'Calibri'"><font size="3"> can save the Servlet response</font></span><span style="font-family:'Calibri'"><font size="3">, that is, </font></span><span style="font-family:'Calibri'"><font size="3">HTML </font></span><span style="font-family:'Calibri'"><font size="3">files </font></span><span style="font-family:'Calibri'"><font size="3">in a temporary directory </font></span><span style="font-family:'Calibri'"><font size="3">in the form of</font></span> <span style="font-family:'Calibri'"><font size="3">cache on server</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span> <span style="font-family:'Calibri'"><font size="3">I</font></span><span style="font-family:'Calibri'"><font size="3">f</font></span> <span style="font-family:'Calibri'"><font size="3">a </font></span><span style="font-family:'Calibri'"><font size="3">user request</font></span><span style="font-family:'Calibri'"><font size="3">s </font></span><span style="font-family:'Calibri'"><font size="3">for </font></span><span style="font-family:'Calibri'"><font size="3">the same page</font></span><span style="font-family:'Calibri'"><font size="3"> thereafter</font></span><span style="font-family:'Calibri'"><font size="3">, </font></span><span style="font-family:'Calibri'"><font size="3">it </font></span><span style="font-family:'Calibri'"><font size="3">is </font></span><span style="font-family:'Calibri'"><font size="3">taken from the cache.</font></span><span style="font-family:'Calibri'"><font size="3"> This </font></span><span style="font-family:'Calibri'"><font size="3">way, the </font></span><span style="font-family:'Calibri'"><font size="3">server </font></span><span style="font-family:'Calibri'"><font size="3">does </font></span><span style="font-family:'Calibri'"><font size="3">not</font></span><span style="font-family:'Calibri'"><font size="3"> have to execute </font></span><span style="font-family:'Calibri'"><font size="3">S</font></span><span style="font-family:'Calibri'"><font size="3">ervlet again to produce </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">HTML response. This </font></span><span style="font-family:'Calibri'"><font size="3">technique </font></span><span style="font-family:'Calibri'"><font size="3">save</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3"> time and processing power of </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">server.</font></span> </p><p style=" margin-left:36pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">We can </font></span><span style="font-family:'Calibri'"><font size="3">also </font></span><span style="font-family:'Calibri'"><font size="3">implement </font></span><span style="font-family:'Calibri'"><font size="3">the server-side caching </font></span><span style="font-family:'Calibri'"><font size="3">in </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">f</font></span><span style="font-family:'Calibri'"><font size="3">ilter</font></span> <span style="font-family:'Calibri'"><font size="3">and </font></span><span style="font-family:'Calibri'"><font size="3">use</font></span><span style="font-family:'Calibri'"><font size="3"> the </font></span><span style="font-family:'Calibri'"><font size="3">Uniform Resource Identifier (</font></span><span style="font-family:'Calibri'"><font size="3">URI</font></span><span style="font-family:'Calibri'"><font size="3">)</font></span><span style="font-family:'Calibri'"><font size="3"> to uniquely identify the requested page.</font></span></p><h2 style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Cambria'"><b><i><font size="4">Client</font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">-</font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">side caching </font></i></b></span></h2><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">We can </font></span><span style="font-family:'Calibri'"><font size="3">cache </font></span><span style="font-family:'Calibri'"><font size="3">some of the </font></span><span style="font-family:'Calibri'"><font size="3">W</font></span><span style="font-family:'Calibri'"><font size="3">eb page resource</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3"> on the client browser itself. </font></span><span style="font-family:'Calibri'"><font size="3">We can store</font></span><span style="font-family:'Calibri'"><font size="3"> the</font></span><span style="font-family:'Calibri'"><font size="3"> static content</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3"> on </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">browser cache</font></span><span style="font-family:'Calibri'"><font size="3">. This is done by setting </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><b><font size="3">Expires</font></b></span><span style="font-family:'Calibri'"><font size="3"> header</font></span><span style="font-family:'Calibri'"><font size="3"> to </font></span><span style="font-family:'Calibri'"><font size="3">a </font></span><span style="font-family:'Calibri'"><font size="3">far future date. This way</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span><span style="font-family:'Calibri'"><font size="3"> when </font></span><span style="font-family:'Calibri'"><font size="3">a</font></span> <span style="font-family:'Calibri'"><font size="3">user request</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3"> the same page later</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span> <span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">browser fetch</font></span><span style="font-family:'Calibri'"><font size="3">es</font></span> <span style="font-family:'Calibri'"><font size="3">the cached </font></span><span style="font-family:'Calibri'"><font size="3">content from</font></span> <span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">browser</font></span><span style="font-family:'Calibri'"><font size="3"> cache</font></span><span style="font-family:'Calibri'"><font size="3">. N</font></span><span style="font-family:'Calibri'"><font size="3">o</font></span><span style="font-family:'Calibri'"><font size="3"> server request </font></span><span style="font-family:'Calibri'"><font size="3">is </font></span><span style="font-family:'Calibri'"><font size="3">made for </font></span><span style="font-family:'Calibri'"><font size="3">the cached resources</font></span><span style="font-family:'Calibri'"><font size="3"> and </font></span><span style="font-family:'Calibri'"><font size="3">thus </font></span><span style="font-family:'Calibri'"><font size="3">t</font></span><span style="font-family:'Calibri'"><font size="3">h</font></span><span style="font-family:'Calibri'"><font size="3">e</font></span><span style="font-family:'Calibri'"><font size="3"> page load</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3"> faster</font></span><span style="font-family:'Calibri'"><font size="3"> because of fewer server requests</font></span><span style="font-family:'Calibri'"><font size="3">. </font></span><span style="font-family:'Calibri'"><font size="3">This is mainly used for</font></span><span style="font-family:'Calibri'"><font size="3"> static </font></span><span style="font-family:'Calibri'"><font size="3">W</font></span><span style="font-family:'Calibri'"><font size="3">eb </font></span><span style="font-family:'Calibri'"><font size="3">content</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span> <span style="font-family:'Calibri'"><font size="3">such as </font></span><span style="font-family:'Calibri'"><font size="3">images.</font></span></p><p style=" margin-left:36pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">For dynamic contents </font></span><span style="font-family:'Calibri'"><font size="3">(such as </font></span><span style="font-family:'Calibri'"><font size="3">JS</font></span><span style="font-family:'Calibri'"><font size="3"> and </font></span><span style="font-family:'Calibri'"><font size="3">CSS</font></span><span style="font-family:'Calibri'"><font size="3"> files</font></span><span style="font-family:'Calibri'"><font size="3">)</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span><span style="font-family:'Calibri'"><font size="3"> we can set conditional request to </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">server</font></span> <span style="font-family:'Calibri'"><font size="3">that </font></span><span style="font-family:'Calibri'"><font size="3">will check if the resource is modified</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span> <span style="font-family:'Calibri'"><font size="3">We can </font></span><span style="font-family:'Calibri'"><font size="3">add </font></span><span style="font-family:'Calibri'"><b><font size="3">Last-Modified</font></b></span><span style="font-family:'Calibri'"><font size="3"> header </font></span><span style="font-family:'Calibri'"><font size="3">in </font></span><span style="font-family:'Calibri'"><font size="3">every such file. When </font></span><span style="font-family:'Calibri'"><font size="3">browser </font></span><span style="font-family:'Calibri'"><font size="3">cache has a </font></span><span style="font-family:'Calibri'"><font size="3">file </font></span><span style="font-family:'Calibri'"><font size="3">that includes </font></span><span style="font-family:'Calibri'"><font size="3">the</font></span> <span style="font-family:'Calibri'"><b><font size="3">Last-Modified</font></b></span><span style="font-family:'Calibri'"><font size="3"> header, </font></span><span style="font-family:'Calibri'"><font size="3">the browser </font></span><span style="font-family:'Calibri'"><font size="3">use</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span> <span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><b><font size="3">Last-Modified</font></b></span><span style="font-family:'Calibri'"><font size="3"> header information </font></span><span style="font-family:'Calibri'"><font size="3">to ask the server if the </font></span><span style="font-family:'Calibri'"><font size="3">file </font></span><span style="font-family:'Calibri'"><font size="3">has changed since the last time it was seen, with </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><b><font size="3">If-Modified-Since</font></b></span><span style="font-family:'Calibri'"><font size="3"> request</font></span><span style="font-family:'Calibri'"><font size="3"> header parameter</font></span><span style="font-family:'Calibri'"><i><font size="3">.</font></i></span><span style="font-family:'Calibri'"><font size="3"> If the </font></span><span style="font-family:'Calibri'"><font size="3">file </font></span><span style="font-family:'Calibri'"><font size="3">is not change</font></span><span style="font-family:'Calibri'"><font size="3">d, the</font></span><span style="font-family:'Calibri'"><font size="3"> browser </font></span><span style="font-family:'Calibri'"><font size="3">use</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3"> the </font></span><span style="font-family:'Calibri'"><font size="3">local </font></span><span style="font-family:'Calibri'"><font size="3">copy </font></span><span style="font-family:'Calibri'"><font size="3">of the file </font></span><span style="font-family:'Calibri'"><font size="3">that is</font></span> <span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">cached copy.</font></span></p><h2 style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Cambria'"><b><i><font size="4">J</font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">ava </font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">S</font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">cript</font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4"> Optimization</font></i></b></span></h2><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">We can optimize JavaScript by u</font></span><span style="font-family:'Calibri'"><font size="3">sing </font></span><span style="font-family:'Calibri'"><font size="3">Ajax</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span> <span style="font-family:'Calibri'"><font size="3">With </font></span><span style="font-family:'Calibri'"><font size="3">Ajax</font></span><span style="font-family:'Calibri'"><font size="3">, </font></span><span style="font-family:'Calibri'"><font size="3">w</font></span><span style="font-family:'Calibri'"><font size="3">e can introduce lazy loading of </font></span><span style="font-family:'Calibri'"><font size="3">JavaScript</font></span><span style="font-family:'Calibri'"><font size="3"> code by loading the executable code only when it is </font></span><span style="font-family:'Calibri'"><font size="3">needed</font></span><span style="font-family:'Calibri'"><font size="3">. This reduce</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span> <span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">initial load time by reducing the JavaScript code</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">If </font></span><span style="font-family:'Calibri'"><font size="3">a</font></span><span style="font-family:'Calibri'"><font size="3"> Web</font></span><span style="font-family:'Calibri'"><font size="3"> application has</font></span> <span style="font-family:'Calibri'"><font size="3">multiple external </font></span><span style="font-family:'Calibri'"><font size="3">JS</font></span><span style="font-family:'Calibri'"><font size="3"> files </font></span><span style="font-family:'Calibri'"><font size="3">in a single page, </font></span><span style="font-family:'Calibri'"><font size="3">a new request is made for each </font></span><span style="font-family:'Calibri'"><font size="3">JS</font></span><span style="font-family:'Calibri'"><font size="3"> file when </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">page starts loading. These requests are made </font></span><span style="font-family:'Calibri'"><font size="3">one after </font></span><span style="font-family:'Calibri'"><font size="3">another</font></span> <span style="font-family:'Calibri'"><font size="3">in a sequential manner. </font></span><span style="font-family:'Calibri'"><font size="3">We </font></span><span style="font-family:'Calibri'"><font size="3">can concatenate </font></span><span style="font-family:'Calibri'"><font size="3">all </font></span><span style="font-family:'Calibri'"><font size="3">these files </font></span><span style="font-family:'Calibri'"><font size="3">to a single file.</font></span> <span style="font-family:'Calibri'"><font size="3">This reduce</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3"> the number of server </font></span><span style="font-family:'Calibri'"><font size="3">request</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3"> and </font></span><span style="font-family:'Calibri'"><font size="3">makes </font></span><span style="font-family:'Calibri'"><font size="3">the page load faster</font></span><span style="font-family:'Calibri'"><font size="3">. </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">JS Minim</font></span><span style="font-family:'Calibri'"><font size="3">ization is a good technique to remove unnecessary comments and whitespaces from </font></span><span style="font-family:'Calibri'"><font size="3">a </font></span><span style="font-family:'Calibri'"><font size="3">file</font></span><span style="font-family:'Calibri'"><font size="3">, and</font></span><span style="font-family:'Calibri'"><font size="3"> JS Obfuscation replaces the variable and function name</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3"> in </font></span><span style="font-family:'Calibri'"><font size="3">a </font></span><span style="font-family:'Calibri'"><font size="3">file with smaller ones</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span><span style="font-family:'Calibri'"><font size="3"> thus reducing the file size further. </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">We can use readymade tool</font></span><span style="font-family:'Calibri'"><font size="3">s</font></span><span style="font-family:'Calibri'"><font size="3">, such as </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">JSMin and </font></span><span style="font-family:'Calibri'"><font size="3">the </font></span><span style="font-family:'Calibri'"><font size="3">YUI compressor</font></span><span style="font-family:'Calibri'"><font size="3">s,</font></span><span style="font-family:'Calibri'"><font size="3"> to achieve JS Minimization and Obfuscation.</font></span> </p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Java Script Optimizer</font></span> <span style="font-family:'Calibri'"><font size="3">(JSO) </font></span><span style="font-family:'Calibri'"><font size="3">is </font></span><span style="font-family:'Calibri'"><font size="3">an</font></span><span style="font-family:'Calibri'"><font size="3"> open-</font></span><span style="font-family:'Calibri'"><font size="3">source </font></span><span style="font-family:'Calibri'"><font size="3">J</font></span><span style="font-family:'Calibri'"><font size="3">ava</font></span><span style="font-family:'Calibri'"><font size="3"> API </font></span><span style="font-family:'Calibri'"><font size="3">that </font></span><span style="font-family:'Calibri'"><font size="3">can be used to achieve </font></span><span style="font-family:'Calibri'"><font size="3">JS</font></span> <span style="font-family:'Calibri'"><font size="3">concatenation, </font></span><span style="font-family:'Calibri'"><font size="3">JS</font></span><span style="font-family:'Calibri'"><font size="3"> minimization</font></span><span style="font-family:'Calibri'"><font size="3">,</font></span><span style="font-family:'Calibri'"><font size="3"> and client</font></span><span style="font-family:'Calibri'"><font size="3">-</font></span><span style="font-family:'Calibri'"><font size="3">side caching.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Following </font></span><span style="font-family:'Calibri'"><font size="3">table shows</font></span> <span style="font-family:'Calibri'"><font size="3">how </font></span><span style="font-family:'Calibri'"><font size="3">much </font></span><span style="font-family:'Calibri'"><font size="3">JSM</font></span><span style="font-family:'Calibri'"><font size="3">in</font></span><span style="font-family:'Calibri'"><font size="3"> and Gzip</font></span><span style="font-family:'Calibri'"><font size="3"> can reduce the file size.</font></span></p><table cellspacing="0" cellpadding="0" width="371" style=" margin-left:4.5pt; width:278.1pt" class="zeroBorder"><tr><td width="95" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><b><font size="3">JSMin</font></b></span></p></td><td width="144" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><b><font size="3">G</font></b></span><span style="font-family:'Calibri'"><b><font size="3">z</font></b></span><span style="font-family:'Calibri'"><b><font size="3">ip</font></b></span></p></td><td width="132" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><b><font size="3">File </font></b></span><span style="font-family:'Calibri'"><b><font size="3">Size</font></b></span><span style="font-family:'Calibri'"><b><font size="3">(approx)</font></b></span></p></td></tr><tr><td width="95" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">No</font></span></p></td><td width="144" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">No</font></span></p></td><td width="132" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">100%</font></span></p></td></tr><tr><td width="95" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">Yes</font></span></p></td><td width="144" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">No</font></span></p></td><td width="132" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">52%</font></span></p></td></tr><tr><td width="95" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">N</font></span><span style="font-family:'Calibri'"><font size="3">o</font></span></p></td><td width="144" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">Y</font></span><span style="font-family:'Calibri'"><font size="3">es</font></span></p></td><td width="132" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">31%</font></span></p></td></tr><tr><td width="95" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">Y</font></span><span style="font-family:'Calibri'"><font size="3">es</font></span></p></td><td width="144" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">Y</font></span><span style="font-family:'Calibri'"><font size="3">es</font></span></p></td><td width="132" style=" vertical-align:top"><p style=" margin-left:0pt; margin-right:0pt; text-align:center"><span style="font-family:'Calibri'"><font size="3">20%</font></span></p></td></tr></table><h2 style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Cambria'"><b><i><font size="4">Other </font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">T</font></i></b></span><span style="font-family:'Cambria'"><b><i><font size="4">echniques</font></i></b></span></h2><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Content Delivery Network (CDN)</font></span> <span style="font-family:'Calibri'"><font size="3">can be </font></span><span style="font-family:'Calibri'"><font size="3">a</font></span> <span style="font-family:'Calibri'"><font size="3">good option to use if </font></span><span style="font-family:'Calibri'"><font size="3">a Web application has </font></span><span style="font-family:'Calibri'"><font size="3">a </font></span><span style="font-family:'Calibri'"><font size="3">large number of distributed </font></span><span style="font-family:'Calibri'"><font size="3">users. A</font></span> <span style="font-family:'Calibri'"><font size="3">CDN is a collection of </font></span><span style="font-family:'Calibri'"><font size="3">W</font></span><span style="font-family:'Calibri'"><font size="3">eb servers distributed across multiple locations to deliver content more efficiently to users</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">We can further optimize the speed of </font></span><span style="font-family:'Calibri'"><font size="3">a Web </font></span><span style="font-family:'Calibri'"><font size="3">application by reducing the number of images </font></span><span style="font-family:'Calibri'"><font size="3">we </font></span><span style="font-family:'Calibri'"><font size="3">use</font></span><span style="font-family:'Calibri'"><font size="3"> in the application</font></span><span style="font-family:'Calibri'"><font size="3">. We can </font></span><span style="font-family:'Calibri'"><font size="3">also </font></span><span style="font-family:'Calibri'"><font size="3">reduce</font></span><span style="font-family:'Calibri'"><font size="3"> colors in images</font></span><span style="font-family:'Calibri'"><font size="3"> to reduce </font></span><span style="font-family:'Calibri'"><font size="3">their </font></span><span style="font-family:'Calibri'"><font size="3">file size</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span> <span style="font-family:'Calibri'"><font size="3">U</font></span><span style="font-family:'Calibri'"><font size="3">sing </font></span><span style="font-family:'Calibri'"><font size="3">PNG files </font></span><span style="font-family:'Calibri'"><font size="3">is also a good idea </font></span><span style="font-family:'Calibri'"><font size="3">as they </font></span><span style="font-family:'Calibri'"><font size="3">are smaller as compared to GIF</font></span><span style="font-family:'Calibri'"><font size="3"> files</font></span><span style="font-family:'Calibri'"><font size="3">, and</font></span><span style="font-family:'Calibri'"><font size="3"> CSS Sprites is a good </font></span><span style="font-family:'Calibri'"><font size="3">technique</font></span> <span style="font-family:'Calibri'"><font size="3">to reduce server calls by merging multiple images into a single </font></span><span style="font-family:'Calibri'"><font size="3">one</font></span><span style="font-family:'Calibri'"><font size="3">.</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><img src="http://docs.google.com/File?id=dctg84bx_17grjppnfm_b" width="576" height="346" alt="" border="0"></img></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Fig. Filter implementation for GZip, JS Minimization and Cache optimization</font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Every</font></span> <span style="font-family:'Calibri'"><font size="3">day many new technologies are coming up that </font></span><span style="font-family:'Calibri'"><font size="3">tend to </font></span><span style="font-family:'Calibri'"><font size="3">provide rich internet experience to users with as less bandwidth usage as possible. For example, Packer (a JavaScript compressor similar to JSMin) along with Gzip can compress JS files to about 13% of its size. </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3"> </font></span></p><p style=" margin-left:0pt; margin-right:0pt"><span style="font-family:'Calibri'"><font size="3">Reference:</font></span></p><ul type="disc"><li><a href="http://developer.yahoo.com/performance/rules.html"><span style="color:#0000ff; font-family:'Calibri'"><u><font size="3">http://developer.yahoo.com/performance/rules.html</font></u></span></a></li><li><a href="http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html"><span style="color:#0000ff; font-family:'Calibri'"><u><font size="3">http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html</font></u></span></a> </li><li><a href="http://js-optimizer.sourceforge.net/"><span style="color:#0000ff; font-family:'Calibri'"><u><font size="3">http://js-optimizer.sourceforge.net/</font></u></span></a> </li></ul></div><br>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com0tag:blogger.com,1999:blog-2771592983486866634.post-87971879474361235732009-05-27T07:06:00.001-07:002009-07-28T04:35:17.484-07:00Web Security Attacks<div class="Section1"><h1 style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Cambria';"><b><font size="5">Web </font></b></span><span style="font-family: 'Cambria';"><b><font size="5">Security</font></b></span><span style="font-family: 'Cambria';"><b><font size="5"> Attacks</font></b></span></h1><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Cambria';"><b><i><font size="3">By </font></i></b></span><span style="font-family: 'Cambria';"><b><i><font size="3">Ritesh Kapse</font></i></b></span> </p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Verdana';"><b><font size="4"> </font></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Web surfing feels </font></span><span style="font-family: 'Calibri';"><font size="3">both </font></span><span style="font-family: 'Calibri';"><font size="3">safe and anonymous</font></span><span style="font-family: 'Calibri';"><font size="3"> to</font></span><span style="font-family: 'Calibri';"><font size="3"> the end users but it is not. </font></span><span style="font-family: 'Calibri';"><font size="3">Active contents like ActiveX, JavaScript</font></span><span style="font-family: 'Calibri';"><font size="3">,</font></span> <span style="font-family: 'Calibri';"><font size="3">VBScript</font></span><span style="font-family: 'Calibri';"><font size="3">,</font></span> <span style="font-family: 'Calibri';"><font size="3">Flash </font></span><span style="font-family: 'Calibri';"><font size="3">and Java applets bring</font></span><span style="font-family: 'Calibri';"><font size="3"> possibility that the web page introduce viruses or other malicious software into the end user’s system.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Most visitors to the site are content to the web page </font></span><span style="font-family: 'Calibri';"><font size="3">usage for which it </font></span><span style="font-family: 'Calibri';"><font size="3">was</font></span> <span style="font-family: 'Calibri';"><font size="3">created</font></span><span style="font-family: 'Calibri';"><font size="3">, but few will try to peek at the thing which you didn’t intend for public consumption.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Following </font></span><span style="font-family: 'Calibri';"><font size="3">are </font></span><span style="font-family: 'Calibri';"><font size="3">few </font></span><span style="font-family: 'Calibri';"><font size="3">of such techniques which web site hackers might use to exploit security of your web application</font></span><span style="font-family: 'Calibri';"><font size="3">. </font></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><img src="http://docs.google.com/File?id=dctg84bx_102g7f62df_b" alt="" width="576" border="0" height="285"></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><b><i><u><font size="3">Fig. </font></u></i></b></span><span style="font-family: 'Calibri';"><b><i><u><font size="3">Web security attack</font></u></i></b></span><span style="font-family: 'Calibri';"><b><i><u><font size="3">s</font></u></i></b></span><span style="font-family: 'Calibri';"><b><i><u><font size="3"> distribution</font></u></i></b></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><b><i><font size="3"> </font></i></b></span></p><h2 style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Cambria';"><b><i><font size="4">Session Prediction</font></i></b></span></h2><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Surreptitiously obtaining session information about authorized visitor e.g. session ID</font></span><span style="font-family: 'Calibri';"><font size="3"> is a session prediction attack</font></span><span style="font-family: 'Calibri';"><font size="3">. </font></span><span style="font-family: 'Calibri';"><font size="3">Session Id is normally stored in cookies or URL. </font></span><span style="font-family: 'Calibri';"><font size="3">By predicting session ID values</font></span><span style="font-family: 'Calibri';"><font size="3"> attacker </font></span><span style="font-family: 'Calibri';"><font size="3">can</font></span><span style="font-family: 'Calibri';"><font size="3"> bypass the authentication schema of any web application. </font></span><span style="font-family: 'Calibri';"><font size="3">A</font></span><span style="font-family: 'Calibri';"><font size="3">n attacker can predict a valid session ID value and get access to the web </font></span><span style="font-family: 'Calibri';"><font size="3">application</font></span><span style="font-family: 'Calibri';"><font size="3"> by analyzing session ID generation process</font></span><span style="font-family: 'Calibri';"><font size="3">.</font></span> <span style="font-family: 'Calibri';"><font size="3">Once </font></span><span style="font-family: 'Calibri';"><font size="3">identified</font></span><span style="font-family: 'Calibri';"><font size="3">, hacker might use the same session id information for future visits to that or associated sites.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Different versions of Jetty, the popular java web server, are vulnerable to a session id prediction attack.</font></span> <span style="font-family: 'Calibri';"><font size="3">Jetty uses java.util.Random to generate session ids</font></span><span style="font-family: 'Calibri';"><font size="3"> randomly</font></span><span style="font-family: 'Calibri';"><font size="3">. The </font></span><span style="font-family: 'Calibri';"><font size="3">i</font></span><span style="font-family: 'Calibri';"><font size="3">nternal state </font></span><span style="font-family: 'Calibri';"><font size="3">of this generator can </font></span><span style="font-family: 'Calibri';"><font size="3">easily </font></span><span style="font-family: 'Calibri';"><font size="3">be </font></span><span style="font-family: 'Calibri';"><font size="3">discovered, leading to an attacker being able to hijack existing and future sessions.</font></span></p><h2 style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Cambria';"><b><i><font size="4">Authentication Hacking </font></i></b></span></h2><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Obtaining login information about user to a website is an authentication hacking attack.</font></span> <span style="font-family: 'Calibri';"><font size="3"> </font></span><span style="font-family: 'Calibri';"><font size="3">Web Application assigns specific privilege to user based on the identity established by the supplied </font></span><span style="font-family: 'Calibri';"><font size="3">credentials</font></span><span style="font-family: 'Calibri';"><font size="3">. In authentication hacking,</font></span> <span style="font-family: 'Calibri';"><font size="3">a</font></span><span style="font-family: 'Calibri';"><font size="3">ttacker has to gain access to login prompt and enter correct match of login and password information. </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">P</font></span><span style="font-family: 'Calibri';"><font size="3">assword guessing can be one of most effective techniques to defeat web authentication</font></span><span style="font-family: 'Calibri';"><font size="3">. Some common username/passwords could be:-</font></span></p><table style="margin-left: auto; text-align: left; margin-right: auto;" class="zeroBorder" cellpadding="0" cellspacing="0"><tbody><tr><td style="vertical-align: top;" width="132"><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><font size="3">Username</font></span></p></td><td style="vertical-align: top;" width="168"><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><font size="3">Pas</font></span><span style="font-family: 'Calibri';"><font size="3">sword</font></span></p></td></tr><tr><td style="vertical-align: top;" width="132"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">root</font></span></p></td><td style="vertical-align: top;" width="168"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">root</font></span></p></td></tr><tr><td style="vertical-align: top;" width="132"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">administrator</font></span></p></td><td style="vertical-align: top;" width="168"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">administrator</font></span></p></td></tr><tr><td style="vertical-align: top;" width="132"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">[company_name]</font></span></p></td><td style="vertical-align: top;" width="168"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">[company_name]</font></span></p></td></tr><tr><td style="vertical-align: top;" width="132"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">admin</font></span></p></td><td style="vertical-align: top;" width="168"><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">admin</font></span></p></td></tr></tbody></table><p style="margin-left: 18pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Times New Roman';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">If password guessing brings no results, attacker can try </font></span><span style="font-family: 'Calibri';"><font size="3">dictionary attack which uses pre-computed lists of thousands of combination of words such as usernames and passwords to try to authenticate on the web application</font></span><span style="font-family: 'Calibri';"><font size="3">. A brute force attack is a technique of trying large number of </font></span><span style="font-family: 'Calibri';"><font size="3">possibilities. An important measure to stop such brute force and dictionary attack could be by adding random content e.g. image with alpha-numeric character on the login page.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><img src="http://docs.google.com/File?id=dctg84bx_11fcq8t3c8_b" alt="" width="285" border="0" height="239"></p><p style="margin-left: 18pt; margin-right: 0pt;"><span style="font-family: 'Times New Roman';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><b><i><u><font size="3">Fig. Authentication hacking prevention</font></u></i></b></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Times New Roman';"><font size="3">. </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">The security of your web application depends on how securely stored and complex the passwords are and ease to reach server.</font></span></p><h2 style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Cambria';"><b><i><font size="4">Cross Site Scripting (XSS/CSS)</font></i></b></span></h2><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Cross site scripting means e</font></span><span style="font-family: 'Calibri';"><font size="3">xecution of script which is not a part of web site being accessed</font></span><span style="font-family: 'Calibri';"><font size="3">. This is one of the most common </font></span><span style="font-family: 'Calibri';"><font size="3">techniques</font></span><span style="font-family: 'Calibri';"><font size="3"> used by hackers</font></span><span style="font-family: 'Calibri';"><font size="3">. Hackers may embed JavaScript, VBScript, ActiveX, HTML or Flash into a vulnerable web page to fool the user, executing the script on his machine in order to gather </font></span><span style="font-family: 'Calibri';"><font size="3">information</font></span><span style="font-family: 'Calibri';"><font size="3">. A dynamic web page that passes parameter to database </font></span><span style="font-family: 'Calibri';"><font size="3">is</font></span><span style="font-family: 'Calibri';"><font size="3"> vulnerable to XSS.</font></span><span style="font-family: 'Calibri';"><font size="3"> Web applications like</font></span> <span style="font-family: 'Calibri';"><font size="3">s</font></span><span style="font-family: 'Calibri';"><font size="3">hopping cart </font></span><span style="font-family: 'Calibri';"><font size="3">are</font></span><span style="font-family: 'Calibri';"><font size="3"> vulnerable to XSS.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">A simple example could be of a</font></span><span style="font-family: 'Calibri';"><font size="3"> product</font></span><span style="font-family: 'Calibri';"><font size="3"> comment box.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><img src="http://docs.google.com/File?id=dctg84bx_12f55fwqht_b" alt="" width="477" border="0" height="171"></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><b><i><u><font size="3">Fig. Comment box on vulnerable web site</font></u></i></b></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><b><i><font size="3"> </font></i></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">In the above page an attacker has inserted custom JavaScript code which is intended to steel cookie’s of every users visiting the page. </font></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><b><i><font size="3"> </font></i></b></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><img src="http://docs.google.com/File?id=dctg84bx_13dkdn6cdh_b" alt="" width="485" border="0" height="107"></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><b><i><u><font size="3">Fig. Comment </font></u></i></b></span><span style="font-family: 'Calibri';"><b><i><u><font size="3">displayed to valid users</font></u></i></b></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">For other valid user logging into the same site, it would look that web site is behaving normally, but in real sense there cookie is being stolen by the attacker.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">XSS </font></span><span style="font-family: 'Calibri';"><font size="3">can be</font></span><span style="font-family: 'Calibri';"><font size="3"> used for stealing cookies for session hijacking or executing malicious code on end user machine.</font></span> </p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 36pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><h2 style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Cambria';"><b><i><font size="4">SQL Injection</font></i></b></span></h2><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">In SQL Injection an attacker u</font></span><span style="font-family: 'Calibri';"><font size="3">s</font></span><span style="font-family: 'Calibri';"><font size="3">es</font></span><span style="font-family: 'Calibri';"><font size="3"> SQL queries on HTML form to gain access over the web site.</font></span><span style="font-family: 'Calibri';"><font size="3"> Victims to this type of attacks are mostly login forms or</font></span><span style="font-family: 'Calibri';"><font size="3"> pages from</font></span><span style="font-family: 'Calibri';"><font size="3"> shopping chart</font></span><span style="font-family: 'Calibri';"><font size="3"> application</font></span><span style="font-family: 'Calibri';"><font size="3">. The idea is to pass SQL command to database </font></span><span style="font-family: 'Calibri';"><font size="3">through web application</font></span><span style="font-family: 'Calibri';"><font size="3">. This attack is made possible due to improper coding.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">A simple example could be</font></span><span style="font-family: 'Calibri';"><font size="3"> of a login page where user can input username and password.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><img src="http://docs.google.com/File?id=dctg84bx_14d9vtjnfv_b" alt="" width="280" border="0" height="116"></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><b><font size="3">(i)</font></b></span> <span style="font-family: 'Calibri';"><b><i><u><font size="3">Login Form</font></u></i></b></span><span style="font-family: 'Calibri';"><b><i><u><font size="3"> on vulnerable page</font></u></i></b></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Suppose</font></span><span style="font-family: 'Calibri';"><font size="3"> we are using following query in database directly from this</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">select id from USERS_TABLE where email=’</font></span><span style="font-family: 'Calibri';"><font size="3">${param.email}</font></span><span style="font-family: 'Calibri';"><font size="3">’ and password=’</font></span><span style="font-family: 'Calibri';"><font size="3">${param.password}</font></span><span style="font-family: 'Calibri';"><font size="3">’</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">If the variable email and password are requested directly from the login form the security of the web application can easily be compromised. </font></span><span style="font-family: 'Calibri';"><font size="3">Let’s</font></span><span style="font-family: 'Calibri';"><font size="3"> say</font></span><span style="font-family: 'Calibri';"><font size="3"> hacker inputs </font></span><span style="font-family: 'Calibri';"><font size="3">following</font></span><span style="font-family: 'Calibri';"><font size="3"> information in the login form. </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><img src="http://docs.google.com/File?id=dctg84bx_15fbtjnqd3_b" alt="" width="280" border="0" height="116"></p><p style="margin-left: 0pt; margin-right: 0pt; text-align: center;"><span style="font-family: 'Calibri';"><b><font size="3">(ii) </font></b></span><span style="font-family: 'Calibri';"><b><i><u><font size="3">SQL injection</font></u></i></b></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">The</font></span><span style="font-family: 'Calibri';"><font size="3"> database query becomes</font></span> </p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">select id from USERS_TABLE where email=’</font></span><span style="font-family: 'Calibri';"><b><i><font size="3">hacker@test.com</font></i></b></span><span style="font-family: 'Calibri';"><font size="3">’ and password=’</font></span><span style="font-family: 'Calibri';"><b><i><font size="3">anything’</font></i></b></span> <span style="font-family: 'Calibri';"><b><i><font size="3">or ‘x’=’x</font></i></b></span><span style="font-family: 'Calibri';"><font size="3">’</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">The ‘x’=’x’ part of the SQL query guarantees that the query always </font></span><span style="font-family: 'Calibri';"><font size="3">return true</font></span><span style="font-family: 'Calibri';"><font size="3">.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">This can allow the attacker to bypass the login form without actually knowing a valid username/password combination.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">End users and Web administrators need to worry about the confidentiality of data transmitted across the Web.</font></span> <span style="font-family: 'Calibri';"><font size="3">TCP/IP protocol was not designed with required security in mind</font></span><span style="font-family: 'Calibri';"><font size="3">. Hence,</font></span><span style="font-family: 'Calibri';"><font size="3"> it is possible</font></span><span style="font-family: 'Calibri';"><font size="3"> that</font></span> <span style="font-family: 'Calibri';"><font size="3">when</font></span> <span style="font-family: 'Calibri';"><font size="3">data is being transmitted between web server and browser, someone may be listening in.</font></span><span style="font-family: 'Calibri';"><font size="3"> The fixing should be done on the application </font></span><span style="font-family: 'Calibri';"><font size="3">level</font></span><span style="font-family: 'Calibri';"><font size="3">.</font></span><span style="font-family: 'Calibri';"><font size="3"> We need to f</font></span><span style="font-family: 'Calibri';"><font size="3">ilter and check all</font></span> <span style="font-family: 'Calibri';"><font size="3">u</font></span><span style="font-family: 'Calibri';"><font size="3">ser input</font></span><span style="font-family: 'Calibri';"><font size="3"> before processing any browser request</font></span><span style="font-family: 'Calibri';"><font size="3">. </font></span><span style="font-family: 'Calibri';"><font size="3">Problems like </font></span><span style="font-family: 'Calibri';"><font size="3">SQL injection</font></span><span style="font-family: 'Calibri';"><font size="3"> and cross site scripting</font></span><span style="font-family: 'Calibri';"><font size="3"> shou</font></span><span style="font-family: 'Calibri';"><font size="3">ld be dealt with</font></span><span style="font-family: 'Calibri';"><font size="3">. Also, users should be made aware of the risk involved in internet browsing.</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3">Reference:</font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><a href="http://www.w3.org/Security/"><span style="color: rgb(0, 0, 255); font-family: 'Calibri';"><u><font size="3">http://www.w3.org/Security/</font></u></span></a></p><p style="margin-left: 0pt; margin-right: 0pt;"><a href="http://www.acunetix.com/"><span style="color: rgb(0, 0, 255); font-family: 'Calibri';"><u><font size="3">http://www.acunetix.com/</font></u></span></a></p><p style="margin-left: 0pt; margin-right: 0pt;"><a href="http://www.virtualforge.de/"><span style="color: rgb(0, 0, 255); font-family: 'Calibri';"><u><font size="3">http://www.virtualforge.de/</font></u></span></a> </p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p><p style="margin-left: 0pt; margin-right: 0pt;"><span style="font-family: 'Calibri';"><font size="3"> </font></span></p></div><br>Ritesh Khttp://www.blogger.com/profile/11042671952049565139noreply@blogger.com4