Monday, June 13, 2011

Agile Software/Web Development

Agile software development is a group of software development methodologies based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. In fact it is a framework that promotes development iterations throughout the life-cycle of a project. It minimizes risk by developing software in short amounts of time. Developments accomplished in one unit of time (generally up to four weeks) is called an iteration. Each iteration is a project with analysis, design, coding, testing and also documentation All the required functionality may not be covered in one iteration for releasing the project. But it will be covered in multiple iterations. The idea is to have a defect free release available at the end of each iteration.
Being agile is critical if you are to succeed in today‟s competitive world. More and more people are achieving greater productivity and success by applying agile methodology to their work. Organizations of all sizes are achieving greater success by adopting the Agile Method, replacing rigid and inflexible processes with our dynamic and iterative approach.
The Agile Manifesto introduced the term in 2001. Agile Manifesto reads, in its entirety, as follows:
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.

Twelve principles underlie the Agile Manifesto, including:
  • Customer satisfaction by rapid delivery of useful software
  • Welcome changing requirements, even late in development
  • Working software is delivered frequently (weeks rather than months)
  • Working software is the principal measure of progress
  • Sustainable development, able to maintain a constant pace
  • Close, daily co-operation between business people and developers
  • Face-to-face conversation is the best form of communication (co-location)
  • Projects are built around motivated individuals, who should be trusted
  • Continuous attention to technical excellence and good design
  • Simplicity
  • Self-organizing teams
  • Regular adaptation to changing circumstances
Characteristics
There are many specific agile development methods. Most promote development, teamwork, collaboration, and process adaptability throughout the life-cycle of the project.
Agile methods break tasks into small increments with minimal planning, and do not directly involve long-term planning. Iterations are short time frames that typically last from one to four weeks. Each iteration involves a team working through a full software development cycle including planning, requirements analysis, design, coding, unit testing, and acceptance testing when a working product is demonstrated to stakeholders.
Team composition in an agile project is usually cross-functional and self-organizing without consideration for any existing corporate hierarchy or the corporate roles of team members. Team members normally take responsibility for tasks that deliver the functionality iteration requires.
Agile methods emphasize face-to-face communication over written documents when the team is all in the same location. Most agile teams work in a single open office, which facilitates such communication
No matter what development disciplines are required, each agile team will contain a customer representative. This person is appointed by stakeholders to act on their behalf and makes a personal commitment to being available for developers to answer mid-iteration problem-domain questions.
Most agile implementations use a routine and formal daily face-to-face communication among team members.
Agile development emphasizes working software as the primary measure of progress.

Industry Analysis – Software Developments of 2010

With the end of 2010, it is time to summarize the most significant developments in 2010 in the software development community. It is difficult to judge the importance of events in spaces one is not familiar with, so I tend to favor areas that I do know and am able to make some educated conclusions about their significance.
Thus below are the top major events occurred in the industry.

Java EE 6
Java EE 6 was technically finalized in late 2009, but 2010 has been its year of implementation and adoption. There has been significant enthusiasm for Java EE 6. The question is whether Java EE 6 can lure even more developers away from the Spring Framework and other common alternatives.

.NET Framework 4 and Visual Studio 2010
Roughly 2 1/2 years after the release of .NET 3.5 and Visual Studio 2008, .NET 4 and Visual Studio 2010 were released in April of 2010. .NET Framework 4 offers numerous new features including support for covariance and contra variance for generics, simpler property syntax in VB.NET, optional method parameters in C#, late/dynamic binding in C#, security improvements, improved ability to measure performance diagnostics, background garbage collection as a replacement for concurrent garbage collection, code contracts, and built-in Tuple support.

Oracle/Google Dispute over Android
For those of us who identify ourselves as members of the Java community, this Oracle lawsuit over Android and Java is a big deal because one of the attractive aspects of Android development is the ability to use language syntax we are familiar with to develop applications for mobile devices that run on the Android platform.

The Rise of HTML5
Web developers have been frustrated with HTML/CSS/DOM/JavaScript behavior across major web browsers (particularly the most popular web browser) for years. Developers doubt to some extent regarding adoption of HTML5 at a level that would make it truly viable. Although it's certainly "not there yet," HTML5 finally seems to be gaining the traction it needs among the major browsers and among web developers and authors to be worth paying attention to. In particular, market-leading browsers Google Chrome, Firefox 4 (beta), and Microsoft Internet Explorer 9 (beta) have or are advertised to have significant greater HTML5 support. As important as it is that the desktop web browsers provide consistent HTML5 support to make it more attractive to use, it seems that the mobile device arena is already pushing HTML5 features heavily. Many of the HTML5 features, such as the web forms features, are more useful and more interesting on mobile device browsers, more granular HTML forms controls are truly appreciable.

Cloud Computing
Some developers still have some lingering doubts about cloud computing as a long-term widely applicable concept. Others still question whether it's something a majority of developers will ever really need to deal with as-is, but at this point it's obvious that at least some significant portion of developers will and already are dealing with development for the cloud. With all the major vendors want a piece of the action, there are at least short-term gains associated with that action. IBM, Oracle, and Microsoft have all expressed commitment to cloud computing. Although it's normal for vendors to chase anything new because it's easier to sell products and services for new rather than for familiar. That type of sales pressure often leads to acceptance.

Thursday, April 14, 2011

Optimize: Liferay Performance


Goal: Once you have your portal up and running, you may find a need to tune it for performance, especially if your site winds up generating more traffic than you'd anticipated. There are some definite steps you can take with regard to improving Liferay's performance. The aim is to bring together all the tuning tips and configuration at a single location for reference.
  1. Liferay Configuration
    1. ##Lucene Search
      #Set the following to true if you want to index your entire library 
      of files on startup.
       
      index.on.startup=false
    2. system.properties
       # The layout cache filter will cache pages to speed up page rendering for# guest users. See  ehcache.xml to modify the cache expiration time to live.
      com.liferay.portal.servlet.filters.layoutcache.LayoutCacheFilter=true
    3. Disable unneeded filters
      Liferay comes by default with 15 servlet filters enabled and running. It is likely that for your installation, you don't need them all. Two filters that you can disable without any impact are the Compression Filter and the Strip Filter. These filters are responsible for shrinking the size of the response (to save bandwidth). The Strip Filter removes whitespace from the response object, and the Compression Filter compresses it. This obviously requires some processing, and so disabling these two filters can enhance performance.
      To disable a servlet filter, simply comment it out of your web.xml file.
      If there is a feature supported by a servlet filter that you know you are not using, you can comment it out as well to achieve some performance gains. For example, if you are not using CAS for single sign-on, comment out the CAS Filter. If you are not using NTLM for single sign-ons, comment out the Ntlm Filter. If you are not using the Virtual Hosting for Communities feature, comment out the Virtual Host Filter. The fewer servlet filters you are running, the less processing power is needed for each request.

      There is a known optimilisation for LR 5.0+ Compression Filter
      <filter>
              <filter-name>Cache Filter - Resource CSS JSP</filter-name>
              <filter-class>com.liferay.portal.servlet.filters.cache.CacheFilter</filter-class>
              <init-param>
                  <param-name>url-regex-pattern</param-name>
                  <param-value>.+/(barebone|css|everything)\.jsp</param-value>
              </init-param>
              <init-param>
                  <param-name>pattern</param-name>
                  <param-value>2</param-value>
              </init-param>
          </filter>   
    4. HTML : Saves some 50Kb on every page but portlet look-feel modification is not possible for all (including (Omni)Admin)
      ## Portlet CSS Portlet
       # Set this to true to enable the ability to modify portlet CSS at runtime
       # via the Look and Feel icon. Disabling it can speed up performance.
      portlet.css.enabled=false

      #
      # Set this to false if the system does not use allow users to modify the
      # look and feel.
      #
      look.and.feel.modifiable=true
    5. Javascript: Not needed scripts could be expunged here. But the fattest of them all jQuery is needed almost always
      ## JavaScript
       # Set a list of JavaScript files that will be loaded programmatically in
       # /html/common/themes/top_js.jsp.
       #
       # The ordering of the JavaScript files is important. Specifically, all
       # JQuery scripts should go first.
       #
       # The Liferay scripts are grouped in such a way, that the first grouping
       # denotes utility scripts that are used by the second and third groups. The
       # second grouping denotes utility classes that rely on the first group, but
       # does not rely on the second or third group. The third grouping denotes
       # modules that rely on the first and second group.
       #
       javascript.files= .....
      Setting this will improve download time, but tweaks above are probably unused
       ## JavaScript
       # Set this property to true to load the combined JavaScript files from the
       # property "javascript.files" into one compacted file for faster loading for
       # production. Set this property to false for easier debugging for
       # development. You can also disable fast loading by setting the URL
       # parameter "js_fast_load" to "0".
       javascript.fast.load=true
    6. CSS: Set this property to true to load the theme's merged CSS files for faster loading for production.
      theme.css.fast.load=true
    7. Resources: Get your images and other resources from your personalised theme or even an HTTP server alias like www.liferay.org/resources/ Resources uploaded in Liferay are being served-up from database and will always be slower than using this strategy. especialy for recurring enterprise logo's and all.
    8. Themes: If you need a high performing landing-page and other pages you could consider creating a special theme for these pages.
    9. Velocity Caching: Set this to true in production so that VM templates are cached
      velocity.engine.resource.manager.cache.enabled=true
    10. CSS: Hack removing ALL CSS
      edit templates\portal_normal.vm;
       <head>
           #if ( $is_signed_in )
                #css ($css_main_file) 
           #end
       </head>
  2. Tomcat Configuration
  3. OS settings
  4. MySQL: Links to useful references:
        * A good sample my.cnf: http://www.theadminzone.com/forums/showthread.php?t=8150
        * Optmization, understanding mysql: http://www.mysqlperformanceblog.com/files/presentations/UC2005-Advanced-MySQL-Performance-Optimization.pdf
        * MySQL Performance Tuning Primer Script: http://day32.com/MySQL/
  5.  Memory:
    Memory is one of the first things to look at when you want to optimize performance. If you have any disk swapping, that will have a serious impact on performance. Make sure that your server has an optimal amount of memory and that your JVM is tuned to use it.
    There are three JVM command switches that control the amount of memory it will use.
    -Xms
    -Xmx
    -XX:MaxPermSize
    These three settings control the amount of memory available to the JVM initially, the maximum amount of memory into which the JVM can grow, and the separate area of the heap called Permanent Generation space. 
    Issues with PermGen space can also affect performance. PermGen space contains long-lived classes, anonymous classes and interned Strings. Hibernate, in particular—which Liferay uses extensively—has been known to make use of PermGen space. If you increase the amount of memory available to the JVM, you may want to increase the amount of PermGen space accordingly. 
  6. Portlets: Liferay comes pre-bundled with many portlets which contain a lot of functionality, but not every web site that is running on Liferay needs to use them all. In portlet.xml and liferay-portlet.xml, comment out the ones you are not using. While having a loan calculator, analog clock, or game of hangman available for your users to add to pages is nice, those portlets may be taking up resources that are needed by custom portlets you have written for your site. If you are having performance problems, commenting out some of the unused portlets may give you the performance boost you need.
  7. References/Source
    1. http://www.liferay.com/community/wiki/-/wiki/Main/Performance
    2. http://www.liferay.com/documentation/liferay-portal/5.1/administration/-/ai/performance-tuning;jsessionid=F9EDDE895FF685955600AF21B25C5D43.node-1

      But be careful, these settings need a powerful Application Server.
      Improvement: Approximately 50% faster
      Probably this works also with other Application Servers like Tomcat..
       

Wednesday, April 06, 2011

Liferay Facebook Portlet

http://code.google.com/p/liferay-facebook-portlet/

Liferay Cache

To use liferay cache their is a very good article available at :
http://rutvijshah.wordpress.com/2010/02/27/liferay-cache/