<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-23078113</id><updated>2011-10-03T16:26:47.239-07:00</updated><category term='HowTo: JasperReports framework. Deployment to Tomcat'/><category term='Thousands of convicted sex offenders evicted from MySpace'/><category term='Flexible reporting with JasperReports and iBATIS'/><category term='Napkin Look and Feel'/><category term='Secrets Of The Masters: Core Java Job Interview Questions'/><category term='My Favorite Firefox Extensions'/><category term='50 Common Web Design Mistakes'/><category term='BPO in the A’pura backwoods'/><category term='Open Source Java Reporting with JasperReports and iReport'/><category term='The Ultimate Remote Control'/><category term='Generating Huge reports in JasperReports'/><category term='Five Things Web Developers Should Stop Doing'/><category term='An evening with Google&apos;s Marissa Mayer'/><category term='Gadgets &apos;threaten energy savings&apos;'/><category term='Nowhere To Hide: The Battle For Fallujah'/><category term='Reinventing the Foot Soldier'/><category term='Fighting the OutOfMemoryError'/><category term='Programming and Managing : Can you do both?'/><category term='Java Performance Tuning'/><category term='Native file locks in java'/><category term='Single Sign On'/><category term='JavaSpecialists Issue 146 - The Secrets of Concurrency (Part 1)'/><category term='Care your eyes'/><category term='Annoying NetBeans 6.0 Facelets Support Issue on Tomcat'/><category term='Design Patterns Quick Reference'/><category term='NetBeans 6 M7 released. There are some cool features available and cool modules in UC.'/><category term='Secuirty problem casts doubt on E-passports'/><category term='Consumer memo: Google tests health record service'/><category term='Hibernate dynamic mapping and Dom4J enabled sessions'/><category term='One chip does three memory jobs'/><category term='Open Source Software in Java(tm) Links'/><category term='Using Jasper Reports with Visual Web Pack'/><category term='How to call Stored Procedures from JasperReports'/><category term='Move to create less clumsy robots'/><category term='Java problem -- Too many open files'/><category term='Useful windows RUN Commands ...'/><category term='Resources for the professional web designer'/><category term='Sri Lanka under fire over Internet censorship'/><category term='To all Sri Lankan on working late.'/><category term='Tomcat'/><category term='Technology for Country Folk'/><category term='Researchers Find Way to Steal Encrypted Data'/><category term='Comparison of OpenDocument and Office Open XML formats'/><category term='Top 10 Firefox Business Extensions'/><category term='Google Analytics collaborates with Roche Diagnostics Corporation and their Accu-Chek branded Web sites.'/><category term='Code Smart: Solution to classpath too long (aka input line too long) problem in Windows'/><category term='What Is Quartz'/><category term='Using Hibernate queries with JasperReports'/><category term='Wikipedia: Our virtual Middle Ages'/><category term='Struts and a database'/><category term='Sri Lanka ranks no.2 of the software piracy in Asia'/><category term='LTTE a trend setter in cyber terrorism'/><category term='Common Web Design Mistakes Prevent Google From Indexing Your Site'/><category term='Dynamic PDF generation with JasperReports'/><category term='Reporting Made Easy with JasperReports and Hibernate'/><category term='Don&apos;t Use Mobile Phone During Storms'/><category term='The Latest Java Innovation : JavaFX'/><category term='Creating a common lexicon for software development in your organization'/><category term='Log4j'/><category term='Most popular free/open source IDEs and Editors'/><category term='Flex and Java – A perfect technological marriage'/><category term='WHY EMPLOYEES LEAVE ORGANISATIONS ?'/><category term='Wireless in the World'/><category term='Job Scheduling in Java'/><category term='Success of Google - Running the business in Buddhist way'/><category term='Top 10+ source code search engines'/><category term='Wicket'/><category term='MOZILLA FIREFOX CHEAT SHEET'/><category term='Top 10 Eclipse Hotkeys'/><category term='and NetBeans IDE'/><category term='IPTV- Sri Lanka'/><category term='Comparing FOP and JasperReports'/><category term='Ten things every Java developer should know about UNIX'/><category term='5 Regular Expressions Every Web Programmer Should Know'/><category term='Essential firefox add-ons for web programmers'/><category term='The Future of Shopping'/><category term='A comparison between the Google&apos;s GWT (Google Web Toolkit) and Adobe&apos;s Flex2'/><category term='A Future With Nowhere to Hide?'/><category term='Web 2.0 - The power shift'/><category term='Warn Doctors'/><category term='Wasted time or ego boost?'/><category term='World&apos;s fastest supercomputers (Blue gene/L)'/><category term='Spring on Code organization for large projects'/><category term='What is Defensive Copying'/><category term='Life of a software engineer'/><category term='All Things Bloggable by Brian and Stephanie ReindelThe top ten questions every programmer should ask on a job interview'/><category term='Wisdom of the masses'/><category term='Programming Can Ruin Your Life'/><category term='Gadgets threaten energy savings’77'/><category term='Sri Lanka&apos;s youth programmers battle for Microsoft recognition'/><category term='Good advice for creating XML'/><category term='Programming Handbooks and Cheatsheets'/><category term='USAID Partners with Microsoft to Unleash Lanka’s ‘Unlimited Potential’ in IT'/><category term='PaperClips'/><category term='Your Next Computer'/><category term='The Top 50 Proprietary Programs that Drive You Crazy — and Their Open Source Alternatives'/><category term='AJAX: The veins of Web 2.0'/><category term='Export Swing components to PDF'/><title type='text'>Make IT Simple</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default?start-index=101&amp;max-results=100'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>198</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23078113.post-1289671335441956083</id><published>2008-03-10T22:26:00.000-07:00</published><updated>2008-03-10T22:30:59.510-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source Software in Java(tm) Links'/><title type='text'>Open Source Software in Java(tm) Links</title><content type='html'>Open Source Ajax Frameworks&lt;br /&gt;&lt;br /&gt;    * ThinWire - ThinWire is an development framework that allows you to easily build applications for the web that have responsive, expressive and interactive user interfaces without the complexity of the alternatives. While virtually any web application can be built with ThinWire, when it comes to enterprise applications, the framework excels with its highly interactive and rich user interface components.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Ajax Frameworks&lt;br /&gt;&lt;br /&gt;Open Source Aspect-Oriented Frameworks in Java&lt;br /&gt;&lt;br /&gt;    * AspectJ - AspectJ is a seamless aspect-oriented extension to the Java programming language, Java platform compatible and easy to learn and use. AspectJ enables the clean modularization of crosscutting concerns such as: error checking and handling, synchronization, context-sensitive behavior, performance optimizations, monitoring and logging, debugging support, multi-object protocols.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Aspect-Oriented Frameworks in Java&lt;br /&gt;&lt;br /&gt;Open Source Bloggers in Java&lt;br /&gt;&lt;br /&gt;    * The Roller Weblogger - A server-based weblogging software &amp; a web application that is designed to support multiple simultaneous weblog users and visitors. Roller supports all of the latest-and-greatest weblogging features such as comments, WYSIWYG HTML editing, page templates, RSS syndication, trackback, blogroll management, and provides an XML-RPC interface for blogging clients such as w:bloggar and nntp//rss.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Bloggers in Java&lt;br /&gt;&lt;br /&gt;Open Source Build Systems in Java&lt;br /&gt;&lt;br /&gt;    * Maven - Maven is a Java project management and project comprehension tool. Maven is based on the concept of a project object model (POM) in that all the artifacts produced by Maven are a result of consulting a well defined model for your project. Builds, documentation, source metrics, and source cross-references are all controlled by your POM. Look here to see the full list of Maven's features.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Build Systems in Java&lt;br /&gt;&lt;br /&gt;Open Source ByteCode Libraries in Java&lt;br /&gt;&lt;br /&gt;    * BCEL - The Byte Code Engineering Library is intended to give users a convenient possibility to analyze, create, and manipulate (binary) Java class files (those ending with .class). Classes are represented by objects which contain all the symbolic information of the given class: methods, fields and byte code instructions, in particular.&lt;br /&gt;&lt;br /&gt;    * See all Open Source ByteCode Libraries in Java&lt;br /&gt;&lt;br /&gt;Open Source Content Management Systems (CMS) in Java&lt;br /&gt;&lt;br /&gt;    * Apache Lenya - Apache Lenya is a Java-based Open-Source Content Management System. It is based on open standards such as XML and XSLT. One of its core components is Cocoon from the Apache Software Foundation.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Content Management Systems (CMS) in Java&lt;br /&gt;&lt;br /&gt;Open Source Cache Solutions in Java&lt;br /&gt;&lt;br /&gt;    * EHCache - EHCache is a pure Java, in-process cache with the following features: Fast,Simple, Acts as a pluggable cache for Hibernate 2.1., with Small foot print, Minimal dependencies, Fully documented and Production tested.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Cache Solutions in Java&lt;br /&gt;&lt;br /&gt;Open Source Charting &amp; Reporting Tools in Java&lt;br /&gt;&lt;br /&gt;    * JFreeChart - JFreeChart is a free Java class library for generating charts, including:&lt;br /&gt;&lt;br /&gt;       * pie charts (2D and 3D)&lt;br /&gt;       * bar charts (regular and stacked, with an optional 3D effect)&lt;br /&gt;       * line and area charts&lt;br /&gt;       * scatter plots and bubble charts&lt;br /&gt;       * time series, high/low/open/close charts and candle stick charts&lt;br /&gt;       * combination charts&lt;br /&gt;       * Pareto charts&lt;br /&gt;       * Gantt charts&lt;br /&gt;       * wind plots, meter charts and symbol charts&lt;br /&gt;       * wafer map charts&lt;br /&gt;&lt;br /&gt;    * See all Open Source Charting &amp; Reporting Tools in Java&lt;br /&gt;&lt;br /&gt;Open Source Chat Servers in Java&lt;br /&gt;&lt;br /&gt;    * GujChat - GujChat is a new Chat System capable of managing multiple chat servers, each one serving different rooms and options for its users. One single installation delivers webmasters different templates, rooms, languages and configurations&lt;br /&gt;&lt;br /&gt;    * See all Open Source Chat Servers in Java&lt;br /&gt;&lt;br /&gt;Open Source Code Analyzers in Java&lt;br /&gt;&lt;br /&gt;    * PMD - PMD scans Java source code and looks for potential problems like:&lt;br /&gt;&lt;br /&gt;       * Unused local variables&lt;br /&gt;       * Empty catch blocks&lt;br /&gt;       * Unused parameters&lt;br /&gt;       * Empty 'if' statements&lt;br /&gt;       * Duplicate import statements&lt;br /&gt;       * Unused private methods&lt;br /&gt;       * Classes which could be Singletons&lt;br /&gt;       * Short/long variable and method names&lt;br /&gt;&lt;br /&gt;    * See all Open Source Code Analyzers in Java&lt;br /&gt;&lt;br /&gt;Open Source Code Beautifiers&lt;br /&gt;&lt;br /&gt;    * Jalopy - Jalopy is a source code formatter for the Sun Java programming language. It layouts any valid Java source code according to some widely configurable rules; to meet a certain coding style without putting a formatting burden on individual developers.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Code Beautifiers&lt;br /&gt;&lt;br /&gt;Open Source Code Coverage Tools in Java&lt;br /&gt;&lt;br /&gt;    * Cobertura - Cobertura is a free Java tool that calculates the percentage of code accessed by tests. It can be used to identify which parts of your Java program are lacking test coverage. It is based on jcoverage. Features of Cobertura:&lt;br /&gt;&lt;br /&gt;       * Can be executed from ant or from the command line.&lt;br /&gt;       * Instruments Java bytecode after it has been compiled.&lt;br /&gt;       * Can generate reports in HTML or XML.&lt;br /&gt;       * Shows the percentage of lines and branches covered for each class, each package, and for the overall project.&lt;br /&gt;       * Shows the McCabe cyclomatic code complexity of each class, and the average cyclomatic code complexity for each package, and for the overall product.&lt;br /&gt;       * Can sort HTML results by class name, percent of lines covered, percent of branches covered, etc. And can sort in ascending or decending order.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Code Coverage Tools in Java&lt;br /&gt;&lt;br /&gt;Open Source Collections Libraries in Java&lt;br /&gt;&lt;br /&gt;    * Commons Collections - Commons-Collections seek to build upon the JDK classes by providing new interfaces, implementations and utilities. There are many features, including:&lt;br /&gt;&lt;br /&gt;       * Bag interface for collections that have a number of copies of each object&lt;br /&gt;       * Buffer interface for collections that have a well defined removal order, like FIFOs&lt;br /&gt;       * BidiMap interface for maps that can be looked up from value to key as well and key to value&lt;br /&gt;       * MapIterator interface to provide simple and quick iteration over maps&lt;br /&gt;       * Type checking decorators to ensure that only instances of a certain type can be added&lt;br /&gt;       * Transforming decorators that alter each object as it is added to the collection&lt;br /&gt;       * Composite collections that make multiple collections look like one&lt;br /&gt;       * Ordered maps and sets that retain the order elements are added in, including an LRU based map&lt;br /&gt;       * Identity map that compares objects based on their identity (==) instead of the equals method&lt;br /&gt;       * Reference map that allows keys and/or values to be garbage collected under close control&lt;br /&gt;       * Many comparator implementations&lt;br /&gt;       * Many iterator implementations&lt;br /&gt;       * Adapter classes from array and enumerations to collections&lt;br /&gt;       * Utilities to test or create typical set-theory properties of collections such as union, intersection, and closure&lt;br /&gt;&lt;br /&gt;    * See all Open Source Collections Libraries in Java&lt;br /&gt;&lt;br /&gt;Open Source Command Line Interpreters in Java&lt;br /&gt;&lt;br /&gt;    * Jakarta Commons CLI - The Apache Commons CLI library provides an API for processing command line interfaces. There are three stages to command line processing. They are the definition, parsing and interrogation stages.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Command Line Interpreters in Java&lt;br /&gt;&lt;br /&gt;Open Source Database Connection Pools&lt;br /&gt;&lt;br /&gt;    * Jakarta DBCP - DBCP is a database connection pool that relies on code in the Jakarta commons-pool package to provide the underlying object pool mechanisms that it utilizes. Applications can use the DBCP component directly or through the existing interface of their container / supporting framework.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Database Connection Pools&lt;br /&gt;&lt;br /&gt;Open Source Crawlers in Java&lt;br /&gt;&lt;br /&gt;    * Heritrix - Heritrix is the Internet Archive's open-source, extensible, web-scale, archival-quality web crawler project.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Crawlers in Java&lt;br /&gt;&lt;br /&gt;Open Source Database Engines in Java&lt;br /&gt;&lt;br /&gt;    * Apache Derby - Derby is a Java RDBMS undergoing incubation at Apache Software Foundation. It is a fully functioned standards based JDBC &amp; SQL RDBMS with tables, indexes, views, triggers, sub-queries, procedures, functions, transactions, isolation levels, encryption, etc. Derby is the open sourcing of the IBM Cloudscape technology.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Database Engines in Java&lt;br /&gt;&lt;br /&gt;Open Source EJB Servers&lt;br /&gt;&lt;br /&gt;    * JBoss - JBoss is advanced middleware with a full J2EE based personality that IT departments look for. But that is not all, the OEM and ISV community embraced JBoss as a highly flexible service oriented architecture on which to build their own products.&lt;br /&gt;&lt;br /&gt;    * See all Open Source EJB Servers&lt;br /&gt;&lt;br /&gt;Open Source ERP &amp; CRM Software&lt;br /&gt;&lt;br /&gt;    * Apache OFBiz (Apache Open For Business Project) - The Apache Open For Business Project is an open source enterprise automation software project. By open source enterprise automation we mean: Open Source ERP, Open Source CRM, Open Source E-Business / E-Commerce, Open Source SCM, Open Source MRP, Open Source CMMS/EAM, and so on.&lt;br /&gt;&lt;br /&gt;    * See all Open Source ERP &amp; CRM Software&lt;br /&gt;&lt;br /&gt;Open Source Enterprise Service Bus in Java&lt;br /&gt;&lt;br /&gt;    * Mule - Mule is a light-weight messaging framework. It is a highly distributable object broker that can seamlessly handle interactions with other applications using disparate technologies, transports and protocols. The Mule framework provides a highly scalable environment in which you can deploy your business components. Mule manages all the interactions between components transparently whether they exist in the same VM or over the internet and regardless of the underlying transport used. Mule was designed around the Enterprise Service Bus architecture, which stipulates that different components or applications communicate through a common messaging bus, usually implemented using Jms or some other messaging server. Mule goes a lot further by abstracting Jms and any other transport technology away from the business objects used to receive messages from the bus.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Enterprise Service Bus in Java&lt;br /&gt;&lt;br /&gt;Open Source Eclipse Plugins&lt;br /&gt;&lt;br /&gt;    * Spring IDE - Spring IDE is a graphical user interface for the configuration files used by the Spring Framework. Spring IDE provides the following features:&lt;br /&gt;&lt;br /&gt;       * Project nature which supports a list of Spring bean config files and sets of bean config files (aka beans config sets)&lt;br /&gt;       * Incremental builder which validates all modified Spring bean config files defined in a Spring project&lt;br /&gt;       * View which displays a tree with all Spring projects and their Spring bean config files&lt;br /&gt;       * Image decorator which decorates all Spring projects, their bean config files and all Java classes which are used as bean classes&lt;br /&gt;       * Graph which shows all beans (and their relationships) defined in a single config file or a config set&lt;br /&gt;       * XML editor for Spring beans configuration files&lt;br /&gt;       * Extension of Eclipse's search facility to search for beans defined in the BeansCoreModel&lt;br /&gt;       * Wizard for creating a new Spring project&lt;br /&gt;       * Content contribution to Eclipse's ProjectExplorer with Spring artefacts&lt;br /&gt;&lt;br /&gt;    * See all Open Source Eclipse Plugins&lt;br /&gt;&lt;br /&gt;Open Source Expression Languages in Java&lt;br /&gt;&lt;br /&gt;    * Jakarta JXPath - JXPath defines a simple interpreter of an expression language called XPath. JXPath applies XPath expressions to graphs of objects of all kinds: JavaBeans, Maps, Servlet contexts, DOM etc, including mixtures thereof.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Expression Languages in Java&lt;br /&gt;&lt;br /&gt;Open Source Financial Software in Java&lt;br /&gt;&lt;br /&gt;    * JMoney - JMoney is a personal finance manager. It supports multiple accounts in different currencies, double entry banking, income/expense categories, various reports and Quicken file (QIF) exchange. It is built using the Eclipse RCP and can be extended using plug-ins.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Financial Software in Java&lt;br /&gt;&lt;br /&gt;Open Source Forum Software in Java&lt;br /&gt;&lt;br /&gt;    * JForum - JForum is a powerful and robust discussion board system implemented in Javatm. It provides an attractive interface, an efficient forum engine, an easy to use administrative panel, an advanced permission control system and much more.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Forum Software in Java&lt;br /&gt;&lt;br /&gt;Open Source General Purpose Libraries in Java&lt;br /&gt;&lt;br /&gt;    * Ostermiller Utils - Libraries for common tasks such as CSV, Base64, Circular Buffers, MD5, and Significant Figures.&lt;br /&gt;&lt;br /&gt;    * See all Open Source General Purpose Libraries in Java&lt;br /&gt;&lt;br /&gt;Open Source Geospacial Software in Java&lt;br /&gt;&lt;br /&gt;    * deegree - deegree is a Java Framework offering the main building blocks for Spatial Data Infrastructures. Its entire architecture is developed using standards of the Open Geospatial Consortium (OGC) and ISO/TC 211 (ISO Technical Committee 211 -- Geographic Information/Geomatics). deegree encompasses OGC Web Services as well as Clients and security components.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Geospacial Software in Java&lt;br /&gt;&lt;br /&gt;Open Source Groupware Software in Java&lt;br /&gt;&lt;br /&gt;    * CHEF - The CompreHensive collaborativE Framework (CHEF) initiative has as its goal, the development of a flexible environment for supporting distance learning and collaborative work.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Groupware Software in Java&lt;br /&gt;&lt;br /&gt;Open Source HTML Parsers in Java&lt;br /&gt;&lt;br /&gt;    * JTidy - JTidy is a Java port of HTML Tidy , a HTML syntax checker and pretty printer. Like its non-Java cousin, JTidy can be used as a tool for cleaning up malformed and faulty HTML. In addition, JTidy provides a DOM interface to the document that is being processed, which effectively makes you able to use JTidy as a DOM parser for real-world HTML.&lt;br /&gt;&lt;br /&gt;    * See all Open Source HTML Parsers in Java&lt;br /&gt;&lt;br /&gt;Open Source IDEs in Java&lt;br /&gt;&lt;br /&gt;    * Eclipse - Eclipse is a kind of universal tool platform - an open extensible IDE for anything and nothing in particular.&lt;br /&gt;&lt;br /&gt;    * See all Open Source IDEs in Java&lt;br /&gt;&lt;br /&gt;Open Source Installers Generators in Java&lt;br /&gt;&lt;br /&gt;    * JSmooth - JSmooth is a Java Executable Wrapper that makes a standard Windows executable binary (.exe) from a jar file. It makes java deployment much smoother and user-friendly, as it is able to find a Java VM by itself. When no VM is available, it provides feed-back to the users, and can launch the default web browser to an URL that explains how to download a Java VM. Note: NOT COMPLETELY WRITTEN IN JAVA&lt;br /&gt;&lt;br /&gt;    * See all Open Source Installers Generators in Java&lt;br /&gt;&lt;br /&gt;Open Source Inversion of Control Containers&lt;br /&gt;&lt;br /&gt;    * Excalibur - Excalibur is an open source software project of The Apache Software Foundation that contains a lightweight, embeddable Inversion of Control container named Fortress that is written in java.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Inversion of Control Containers&lt;br /&gt;&lt;br /&gt;Open Source Issue Tracking Software in Java&lt;br /&gt;&lt;br /&gt;    * Scarab - The goal of the Scarab project is to build an Artifact tracking system that has the following features:&lt;br /&gt;&lt;br /&gt;       * A full feature set similar to those found in other Artifact tracking systems: data entry, queries, reports, notifications to interested parties, collaborative accumulation of comments, dependency tracking&lt;br /&gt;       * In addition to the standard features, Scarab has fully customizable and unlimited numbers of Modules (your various projects), Artifact types (Defect, Enhancement, Requirement, etc), Attributes (Operating System, Status, Priority, etc), Attribute options (P1, P2, P3) which can all be defined on a per Module basis so that each of your modules is configured for your specific tracking requirements.&lt;br /&gt;       * Built using Java Servlet technology for speed, scalability, maintainability, and ease of installation.&lt;br /&gt;       * Import/Export ability via XML allowing for easy migration from other systems (e.g. Bugzilla).&lt;br /&gt;       * Modular code design that allows manageable modifications of existing and new features over time.&lt;br /&gt;       * Fully customizable through a set of administrative pages.&lt;br /&gt;       * Easily modified UI look and feel.&lt;br /&gt;       * Can be integrated into larger systems by re-implementing key interfaces.&lt;br /&gt;       * Is a ready to use issue management system&lt;br /&gt;&lt;br /&gt;    * See all Open Source Issue Tracking Software in Java&lt;br /&gt;&lt;br /&gt;Open Source J2EE Frameworks&lt;br /&gt;&lt;br /&gt;    * Spring - Spring is a layered Java/J2EE application framework, based on code published in Expert One-on-One J2EE Design and Development&lt;br /&gt;&lt;br /&gt;    * See all Open Source J2EE Frameworks&lt;br /&gt;&lt;br /&gt;Open Source JDBC Drivers&lt;br /&gt;&lt;br /&gt;    * jTDS - jTDS is an open source 100% pure Java (type 4) JDBC 3.0 driver for Microsoft SQL Server (6.5, 7, 2000 and 2005) and Sybase (10, 11, 12). jTDS is based on the work of the FreeTDS project and is currently the fastest complete JDBC driver for SQL Server and Sybase. Starting with release 0.7.1 jTDS is 100% JDBC 2.1 compatible, supporting forward-only and scrollable/updateable ResultSets, multiple concurrent (completely independent) Statements per Connection and implementing all of the DatabaseMetaData and ResultSetMetaData methods. As of version 0.9 most of the JDBC 3.0 features are also implemented. Quite a few of the commercial JDBC drivers out there are based on jTDS (or FreeTDS), even if they no longer acknowledge this. jTDS has been tested with virtually all of the available JDBC-based database management tools and is the driver of choice for most of these (DataDino and Aqua Data Studio even contain it). jTDS is also becoming a common choice for enterprise-level applications: starting with release 0.8-rc1 jTDS passes the Hibernate test suite, making it the driver of choice for SQL Server.&lt;br /&gt;&lt;br /&gt;    * See all Open Source JDBC Drivers&lt;br /&gt;&lt;br /&gt;Open Source JMS&lt;br /&gt;&lt;br /&gt;    * OpenJMS - OpenJMS is an open source implementation of Sun Microsystems's Java Message Service API 1.0.2 Specification. Features include:&lt;br /&gt;&lt;br /&gt;       * Point-to-Point and publish-subscribe messaging models&lt;br /&gt;       * Guaranteed delivery of messages&lt;br /&gt;       * Synchronous and asynchronous message delivery&lt;br /&gt;       * Persistence using JDBC&lt;br /&gt;       * Local transactions&lt;br /&gt;       * Message filtering using SQL92-like selectors&lt;br /&gt;       * Authentication&lt;br /&gt;       * Administration GUI&lt;br /&gt;       * XML-based configuration files&lt;br /&gt;       * In-memory and database garbage collection&lt;br /&gt;       * Automatic client disconnection detection&lt;br /&gt;       * Applet support&lt;br /&gt;       * Integrates with Servlet containers such as Jakarta Tomcat&lt;br /&gt;       * Support for RMI, TCP, HTTP and SSL protocol stacks&lt;br /&gt;       * Support for large numbers of destinations and subscribers&lt;br /&gt;&lt;br /&gt;    * See all Open Source JMS&lt;br /&gt;&lt;br /&gt;Open Source JMX Tools&lt;br /&gt;&lt;br /&gt;    * MX4J - MX4J is a project to build an Open Source implementation of the Java(TM) Management Extensions (JMX) and of the JMX Remote API (JSR 160) specifications, and to build tools relating to JMX.&lt;br /&gt;&lt;br /&gt;    * See all Open Source JMX Tools&lt;br /&gt;&lt;br /&gt;Open Source JSP Tag Libraries&lt;br /&gt;&lt;br /&gt;    * pack:tag - pack:tag is a JSP Taglib that compresses static resources like JavaScript or Cascading Style Sheets. The Taglib caches the resources, once they are compressed, in memory or to file. When caching to memory, the output is additionally gzipped. Compressing-algorithms could be exchanged per resourcetype, and are extendable by usage of the strategy-pattern. Resources can also be combined to reduce requests.&lt;br /&gt;&lt;br /&gt;    * See all Open Source JSP Tag Libraries&lt;br /&gt;&lt;br /&gt;Open Source Job Schedulers in Java&lt;br /&gt;&lt;br /&gt;    * Quartz - Quartz is an open source job scheduling system that can be integrated with, or used along side virtually any J2EE or J2SE application. Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs; jobs whose tasks are defined as standard Java components or EJBs.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Job Schedulers in Java&lt;br /&gt;&lt;br /&gt;Open Source Localization &amp; Internationalization Tools&lt;br /&gt;&lt;br /&gt;    * ICU4J - ICU4J is a java libraries providing Unicode and Globalization support for software applications. Here are a few highlights of the services provided by ICU:&lt;br /&gt;&lt;br /&gt;       * Code Page Conversion: Convert text data to or from Unicode and nearly any other character set or encoding. ICU's conversion tables are based on charset data collected by IBM over the course of many decades, and is the most complete available anywhere.&lt;br /&gt;       * Collation: Compare strings according to the conventions and standards of a particular language, region or country. ICU's collation is based on the Unicode Collation Algorithm plus locale-specific comparison rules from the Common Locale Data Repository, a comprehensive source for this sort of data.&lt;br /&gt;       * Formatting: Format numbers, dates, times and currency amounts according the conventions of a chosen locale. This includes translating month and day names into the selected language, choosing appropriate abbreviations, ordering fields correctly, etc. Again, ICU uses data from the Common Locale Data Repository.&lt;br /&gt;       * Unicode Support: ICU closely tracks the Unicode standard, providing easy access to all of the many Unicode character properties, Unicode Normalization, Case Folding and other fundamental operations as specified by the Unicode Standard.&lt;br /&gt;       * Regular Expression: ICU's regular expressions fully support Unicode while providing very competitive performance.&lt;br /&gt;       * Bidi: support for handling text containing a mixture of left to right (English) and right to left (Arabic or Hebrew) data.&lt;br /&gt;       * Text Boundaries: Locate the positions of words, sentences, paragraphs within a range of text, or identify locations that would be suitable for line wrapping when displaying the text.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Localization &amp; Internationalization Tools&lt;br /&gt;&lt;br /&gt;Open Source Logging Tools in Java&lt;br /&gt;&lt;br /&gt;    * Log4j - Log4j is a logging tool that allows you to log at runtime without modifying the application binary. The log4j package is designed so that logging statements can remain in shipped code without incurring a heavy performance cost. Logging behavior can be controlled by editing a configuration file, without touching the application binary.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Logging Tools in Java&lt;br /&gt;&lt;br /&gt;Open Source Mail Clients in Java&lt;br /&gt;&lt;br /&gt;    * Grendel - Grendel is a mail/news reader entirely written in Java. Its goal is to be a true cross-platform application with a feature set that satisfies the poweruser.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Mail Clients in Java&lt;br /&gt;&lt;br /&gt;Open Source Network Clients in Java&lt;br /&gt;&lt;br /&gt;    * Jakarta Commons HttpClient - HttpClient provides an efficient, up-to-date, and feature-rich package implementing the client side of the most recent HTTP standards and recommendations.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Network Clients in Java&lt;br /&gt;&lt;br /&gt;Open Source Network Servers in Java&lt;br /&gt;&lt;br /&gt;    * Apache James - The Apache JAMES Project delivers a rich set of open source solutions, written in Java, related to internet mail and news. JAMES is organized into subprojects with JAMES Server and the Mailet API as their core. Apache JAMES is a project of The Apache Software Foundation (ASF) which encourages a collaborative, consensus-based development process under an open software license. The ASF maintains other Java projects which may also be of interest. These are detailed on the ASF Projects page. We recommended that users of JAMES products subscribe to the JAMES users mailing list.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Network Servers in Java&lt;br /&gt;&lt;br /&gt;Open Source Obfuscators in Java&lt;br /&gt;&lt;br /&gt;    * ProGuard - ProGuard is a free Java class file shrinker and obfuscator. It can detect and remove unused classes, fields, methods, and attributes. It can then rename the remaining classes, fields, and methods using short meaningless names. The resulting jars are smaller and harder to reverse-engineer.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Obfuscators in Java&lt;br /&gt;&lt;br /&gt;Open Source PDF Libraries in Java&lt;br /&gt;&lt;br /&gt;    * FOP - FOP is an XSL formatter written in Java. It is used in conjunction with an XSLT transformation engine to format XML documents into PDF.&lt;br /&gt;&lt;br /&gt;    * See all Open Source PDF Libraries in Java&lt;br /&gt;&lt;br /&gt;Open Source Parser Generators in Java&lt;br /&gt;&lt;br /&gt;    * ANTLR - ANother Tool for Language Recognition, (formerly PCCTS) is a language tool that provides a framework for constructing recognizers, compilers, and translators from grammatical descriptions containing Java, C#, or C++ actions. ANTLR provides excellent support for tree construction, tree walking, and translation.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Parser Generators in Java&lt;br /&gt;&lt;br /&gt;Open Source Persistence Frameworks in Java&lt;br /&gt;&lt;br /&gt;    * Hibernate - Hibernate is a powerful, ultra-high performance object/relational persistence and query service for Java. Hibernate lets you develop persistent objects following common Java idiom - including association, inheritance, polymorphism, composition and the Java collections framework. Extremely fine-grained, richly typed object models are possible. The Hibernate Query Language, designed as a "minimal" object-oriented extension to SQL, provides an elegant bridge between the object and relational worlds. Hibernate is now the most popular ORM solution for Java.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Persistence Frameworks in Java&lt;br /&gt;&lt;br /&gt;Open Source Portals in Java&lt;br /&gt;&lt;br /&gt;    * Liferay - Liferay is a portal designed to deploy portlets that adhere to the Portlet API (JSR 168). Many useful portlets are bundled with the portal (Mail, Document Library, Calendar, Message Boards, etc)&lt;br /&gt;&lt;br /&gt;    * See all Open Source Portals in Java&lt;br /&gt;&lt;br /&gt;Open Source Profilers in Java&lt;br /&gt;&lt;br /&gt;    * NetBeans Profiler - NetBeans Profiler is a project to integrate the JFluid profiling technology, which is being developed by Sun, into the NetBeans IDE. The aim of this project is to provide a powerful and flexible profiling solution that is tightly integrated into the IDE workflow. As the size and complexity of Java applications grow, keeping their performance at the required level becomes progressively difficult. That is why we believe profiling should become a natural part of the development work cycle. To achieve that, we would like to make profiling easy-to-use and as unobtrusive as possible - and the JFluid technology that we use, with dynamic bytecode instrumentation at its heart, suits this goal perfectly.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Profilers in Java&lt;br /&gt;&lt;br /&gt;Open Source Project Management Tools in Java&lt;br /&gt;&lt;br /&gt;    * XPlanner - XPlanner is a web-based project planning and tracking tool for agile development teams&lt;br /&gt;&lt;br /&gt;    * See all Open Source Project Management Tools in Java&lt;br /&gt;&lt;br /&gt;Open Source RSS &amp; RDF Tools in Java&lt;br /&gt;&lt;br /&gt;    * Jena - Jena is a Java framework for building Semantic Web applications. It provides a programmatic environment for RDF, RDFS and OWL, including a rule-based inference engine.&lt;br /&gt;&lt;br /&gt;    * See all Open Source RSS &amp; RDF Tools in Java&lt;br /&gt;&lt;br /&gt;Open Source Rule Engines in Java&lt;br /&gt;&lt;br /&gt;    * SweetRules - SweetRules is a uniquely powerful integrated set of tools for semantic web rules and ontologies, revolving around the RuleML (Rule Markup/Modeling Language) emerging standard for semantic web rules, and supporting also the closely related SWRL (Semantic Web Rule Language), along with the OWL standard for semantic web ontologies, which in turn use XML and, optionally, RDF. (SWRL rules are essentially an expressive subset of RuleML rules.) SweetRules supports the powerful Situated Courteous Logic Programs extension of RuleML, including prioritized conflict handling and procedural attachments for actions and tests. SweetRules' capabilities include semantics-preserving translation and interoperability between a variety of rule and ontology languages (including XSB Prolog, Jess production rules, HP Jena-2, and IBM CommonRules), highly scaleable backward and forward inferencing, and merging of rulebases/ontologies. Procedural attachments can even be WSDL Web Services. SweetRules' pluggability and composition capabilities enable new components to be added relatively quickly. Implemented in Java, SweetRules has a compact codebase (~40K lines of code total for several dozen tools). The SweetRules project is an international, multi-institutional effort, originated and coordinated by the SweetRules group at MIT Sloan led by Benjamin Grosof, and its creation was funded largely by the DAML (DARPA Agent Markup Language) research program which co-pioneered the Semantic Web. SWEET ("Semantic WEb Enabling Technology") is an overall set of tools that Benjamin Grosof's group (with collaborators) has been developing since 2001. Other components in it include the SweetDeal e-contracting system approach and prototype, and the SweetPH system for business process ontologies drawn from the Process Handbook. Hundreds of users have already downloaded SweetRules, inspired in part by its well-received demonstrations in detailed presentations at the DAML Principal Investigators Meeting and the International Semantic Web Conference tutorial program.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Rule Engines in Java&lt;br /&gt;&lt;br /&gt;Open Source SQL Clients in Java&lt;br /&gt;&lt;br /&gt;    * SQuirreL SQL Client - SQuirreL SQL Client is a graphical Java program that will allow you to view the structure of a JDBC compliant database, browse the data in tables, issue SQL commands etc. The minimum version of Java supported is 1.3&lt;br /&gt;&lt;br /&gt;    * See all Open Source SQL Clients in Java&lt;br /&gt;&lt;br /&gt;Open Source Scripting Languages in Java&lt;br /&gt;&lt;br /&gt;    * Groovy - Groovy is a new agile dynamic language for the JVM combining lots of great features from languages like Python, Ruby and Smalltalk and making them available to the Java developers using a Java-like syntax. Groovy is designed to help you get things done on the Java platform in a quicker, more concise and fun way - bringing the power of Python and Ruby inside the Java platform. Groovy can be used as an alternative compiler to javac to generate standard Java bytecode to be used by any Java project or it can be used dynamically as an alternative language such as for scripting Java objects, templating or writing unit test cases.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Scripting Languages in Java&lt;br /&gt;&lt;br /&gt;Open Source Search Engines in Java&lt;br /&gt;&lt;br /&gt;    * Lucene - Jakarta Lucene is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly any application that requires full-text search, especially cross-platform.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Search Engines in Java&lt;br /&gt;&lt;br /&gt;Open Source Security &amp; Cryptography Tools in Java&lt;br /&gt;&lt;br /&gt;    * Bouncy Castle Crypto - The Bouncy Castle Crypto APIs is a lightweight cryptography API in Java with a provider for the JCE and JCA, a clean room implementation of the JCE 1.2.1, a library for reading and writing encoded ASN.1 objects and generator for:&lt;br /&gt;&lt;br /&gt;       * Version 1 and Version 3 X.509 certificates and PKCS12 files.&lt;br /&gt;       * Version 2 X.509 attribute certificates.&lt;br /&gt;       * S/MIME and CMS (PKCS7).&lt;br /&gt;       * OCSP (RFC 2560).&lt;br /&gt;       * TSP (RFC 3161).&lt;br /&gt;       * OpenPGP (RFC 2440). The lightweight API works with everything from the J2ME to the JDK 1.5&lt;br /&gt;&lt;br /&gt;    * See all Open Source Security &amp; Cryptography Tools in Java&lt;br /&gt;&lt;br /&gt;Source Control Tools in Java&lt;br /&gt;&lt;br /&gt;    * jCVS - JCVS is a CVS client package written entirely in Java. JCVS provides a complete CVS client/server protocol package that allows any Java program to implement the complete suite of CVS operations. JCVS also provides a Swing based client that provides a commercial quality GUI client for CVS. Finally, jCVS provides a Servlet that allows any Servlet enabled web server to present any CVS repository on the internet for browsing and download.&lt;br /&gt;&lt;br /&gt;    * See all Source Control Tools in Java&lt;br /&gt;&lt;br /&gt;Open Source Swing Frameworks &amp; Components&lt;br /&gt;&lt;br /&gt;    * JGoodies Binding - The JGoodies Binding synchronizes object properties with Swing components. And it helps you represent the state and behavior of a presentation independently of the GUI components used in the interface.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Swing Frameworks &amp; Components&lt;br /&gt;&lt;br /&gt;Open Source Template Engines in Java&lt;br /&gt;&lt;br /&gt;    * Velocity - Velocity is a Java-based template engine. It permits web page designers to reference methods defined in Java code. Velocity can be used to generate web pages, SQL, PostScript and other output from templates. It can be used either as a standalone utility for generating source code and reports, or as an integrated component of other systems&lt;br /&gt;&lt;br /&gt;    * See all Open Source Template Engines in Java&lt;br /&gt;&lt;br /&gt;Open Source Testing Tools in Java&lt;br /&gt;&lt;br /&gt;    * JUnit - JUnit is a regression testing framework written by Erich Gamma and Kent Beck. It is used by the developer who implements unit tests in Java.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Testing Tools in Java&lt;br /&gt;&lt;br /&gt;Open Source Text Processing Tools&lt;br /&gt;&lt;br /&gt;    * Jakarta ORO - The Jakarta-ORO Java classes are a set of text-processing Java classes that provide Perl5 compatible regular expressions, AWK-like regular expressions, glob expressions, and utility classes for performing substitutions, splits, filtering filenames, etc. This library is the successor to the OROMatcher, AwkTools, PerlTools, and TextTools libraries originally from ORO, Inc. Despite little activity in the form of new development initiatives, issue reports, questions, and suggestions are responded to quickly.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Text Processing Tools&lt;br /&gt;&lt;br /&gt;Open Source UML &amp; Modeling in Java&lt;br /&gt;&lt;br /&gt;    * ArgoUML - ArgoUML is a powerful yet easy-to-use interactive, graphical software design environment that supports the design, development and documentation of object-oriented software applications.&lt;br /&gt;&lt;br /&gt;    * See all Open Source UML &amp; Modeling in Java&lt;br /&gt;&lt;br /&gt;Open Source Validation Frameworks&lt;br /&gt;&lt;br /&gt;    * Commons Validator - Commons Validator provides the building blocks for both client side validation and server side data validation. It may be used standalone or with a framework like Struts.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Validation Frameworks&lt;br /&gt;&lt;br /&gt;Open Source Web Frameworks in Java&lt;br /&gt;&lt;br /&gt;    * Struts - The core of the Struts framework is a flexible control layer based on standard technologies like Java Servlets, JavaBeans, ResourceBundles, and XML, as well as various Jakarta Commons packages. Struts encourages application architectures based on the Model 2 approach, a variation of the classic Model-View-Controller (MVC) design paradigm.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Web Frameworks in Java&lt;br /&gt;&lt;br /&gt;Open Source Web Mail Clients in Java&lt;br /&gt;&lt;br /&gt;    * GatorMail - GatorMail is a servlet-based Webmail built on the Struts framework. It was originally developed to meet the needs of the University of Florida. Efficient interaction with the mail store along with a low support overhead are the goals of the project.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Web Mail Clients in Java&lt;br /&gt;&lt;br /&gt;Open Source Web Servers in Java&lt;br /&gt;&lt;br /&gt;    * Jigsaw - Jigsaw is W3C's leading-edge Web server platform, providing a sample HTTP 1.1 implementation and a variety of other features on top of an advanced architecture implemented in Java.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Web Servers in Java&lt;br /&gt;&lt;br /&gt;Open Source Web Services Tools in Java&lt;br /&gt;&lt;br /&gt;    * Axis - Axis is the third generation of Apache SOAP (which began at IBM as "SOAP4J"). It also includes:&lt;br /&gt;&lt;br /&gt;       * a simple stand-alone server,&lt;br /&gt;       * a server which plugs into servlet engines such as Tomcat,&lt;br /&gt;       * extensive support for the Web Service Description Language (WSDL),&lt;br /&gt;       * emitter tooling that generates Java classes from WSDL.&lt;br /&gt;       * some sample programs, and&lt;br /&gt;       * a tool for monitoring TCP/IP packets.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Web Services Tools in Java&lt;br /&gt;&lt;br /&gt;Open Source Web Testing Tools in Java&lt;br /&gt;&lt;br /&gt;    * MaxQ - MaxQ is a free web functional testing tool. It includes an HTTP proxy that records your test script, and a command line utility that can be used to playback tests. The proxy recorder automatically stores variables posted to forms, so you don't have to write that stuff by hand.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Web Testing Tools in Java&lt;br /&gt;&lt;br /&gt;Open Source Wiki Engines in Java&lt;br /&gt;&lt;br /&gt;    * JSPWiki - A WikiWiki web clone written using JSPs and Servlets&lt;br /&gt;&lt;br /&gt;    * See all Open Source Wiki Engines in Java&lt;br /&gt;&lt;br /&gt;Open Source Workflow Engines in Java&lt;br /&gt;&lt;br /&gt;    * Apache ODE - Apache ODE (Orchestration Director Engine) executes business processes written following the WS-BPEL standard. It talks to web services, sending and receiving messages, handling data manipulation and error recovery as described by your process definition. It supports both long and short living process executions to orchestrate all the services that are part of your application.&lt;br /&gt;&lt;br /&gt;    * See all Open Source Workflow Engines in Java&lt;br /&gt;&lt;br /&gt;Open Source XML Parsers in Java&lt;br /&gt;&lt;br /&gt;    * Xerces - The Xerces Java Parser 1.4.4 supports the XML 1.0 recommendation and contains advanced parser functionality, such as support for the W3C's XML Schema recommendation version 1.0, DOM Level 2 version 1.0, and SAX Version 2, in addition to supporting the industry-standard DOM Level 1 and SAX version 1 APIs.&lt;br /&gt;&lt;br /&gt;    * See all Open Source XML Parsers in Java&lt;br /&gt;&lt;br /&gt;Open Source XML UI Toolkits in Java&lt;br /&gt;&lt;br /&gt;    * Laszlo - Laszlo is an open source platform for the development and delivery of rich Internet applications on the World Wide Web. It is released under the OSI-certified Common Public License. The Laszlo platform consists of the LZX language and the Laszlo Presentation Server. LZX is an XML and JavaScript description language similar in spirit to XUL and XAML. LZX enables a declarative, text-based development process that supports rapid prototyping and software development best practices. The Laszlo Presentation Server (LPS) is a Java servlet that compiles LZX applications into executable binaries for targeted run-time environments. Laszlo currently targets the Flash Player. The LPS compiles LZX applications into SWF bytecode for the Flash Player, serves and caches these compiled applications to any Web browser enabled with Flash 5 or later, and proxies application requests for back-end XML data sources and web services.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Link : http://java-source.net/&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-1289671335441956083?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/1289671335441956083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=1289671335441956083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1289671335441956083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1289671335441956083'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/03/open-source-software-in-javatm-links.html' title='Open Source Software in Java(tm) Links'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-8752300093796803708</id><published>2008-03-10T22:25:00.000-07:00</published><updated>2008-03-10T22:26:15.138-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PaperClips'/><title type='text'>PaperClips</title><content type='html'>Welcome to PaperClips: a simple, light weight, extensible Java printing plug-in for SWT. PaperClips hides the complexity of laying out and rendering documents on the printer, helping you focus on what to print instead of how to print it.&lt;br /&gt;&lt;br /&gt;In a nutshell, PaperClips provides an assortment of document "building blocks," which you can tweak and combine to form a custom document. The assembled document is then sent toPaperClips for printing. PaperClips includes support for printing text, images, borders, headers and footers, column layouts and grid layouts, to name a few. It can also be extended with your own printable classes.&lt;br /&gt;&lt;br /&gt;With PaperClips you do not have to track cursors, calculate line breaking, fool around with font metrics, or manage system resources--it's all handled internally. And unlike report-generation tools, you are not constrained to a predefined document structure (like report bands). Every document is custom and the layout is up to you.&lt;br /&gt;&lt;br /&gt;Requirements:&lt;br /&gt;&lt;br /&gt;    * Java 1.4 or later.&lt;br /&gt;    * SWT 3.2 or later. SWT may be downloaded at http://www.eclipse.org/swt/.&lt;br /&gt;&lt;br /&gt;PaperClips can be used as an Eclipse plug-in or as a regular Jar (provided the SWT libraries are on the classpath).&lt;br /&gt;closeclose otherseditpermalinkreferencesjump&lt;br /&gt;News&lt;br /&gt;MatthewHall, 3 November 2007 (created 4 April 2006)&lt;br /&gt;2 November 2007 -- PaperClips 1.0.2 released&lt;br /&gt;&lt;br /&gt;    * Bugs fixed:&lt;br /&gt;          o Clipping problems on Mac OS X.&lt;br /&gt;          o PrintPreview.getPageCount() returns 0 before pages are first drawn.&lt;br /&gt;          o PrintPreview spits out a blank page on Linux when the window is closed.&lt;br /&gt;          o Changed ImageCaptureExample.java to capture JPG since PNG was not fully supported until SWT version 3.3 (PaperClips is developed against 3.2).&lt;br /&gt;          o BorderPrint sometimes showed an open bottom border even though the target was completely shown.&lt;br /&gt;          o PrintViewer performance improvements when print document is vertically greedy.&lt;br /&gt;    * New Features:&lt;br /&gt;          o GridPrint.setCellClippingEnabled() controls whether grid cells may be broken across pages. See GridPrintCellClippingExample.java.&lt;br /&gt;          o DefaultGridLook.setCellPadding()&lt;br /&gt;          o PrintPreview.setHorizontalPageCount() and setVerticalPageCount() controls how many pages are shown on screen.&lt;br /&gt;          o Experimental PaperClips.setDebug() API helps troubleshoot documents that won't lay out properly ("Unable to layout on page X" errors).&lt;br /&gt;          o BasicGridLookPainter simplifies implementing custom GridLooks.&lt;br /&gt;          o StyledTextPrint for mixing text with different font sizes, styles, colors and decorations. Other printable objects such as ImagePrint may be embedded inline with the text.&lt;br /&gt;          o TextPrint and StyledTextPrint support underline and strikeout text.&lt;br /&gt;          o TextPrint.setWordSplitting() controls whether words may be split between rows. This feature only applies when space is very limited.&lt;br /&gt;          o Unified error reporting to PaperClips.error() methods. Custom Print implementations should use these methods to act uniformly with the rest of the library. &lt;br /&gt;    * Enhanced print preview snippet (Snippet7):&lt;br /&gt;          o Support scrolling with the mouse wheel (horizontally with Shift+Wheel)&lt;br /&gt;          o Support zooming with Ctrl+Wheel&lt;br /&gt;&lt;br /&gt;8 March 2007 -- PaperClips 1.0.1 released&lt;br /&gt;This is a maintenance release to address printing issues on Mac OS X. Many thanks to the all the Mac users at EclipseCon who graciously provided assistance in fixing this problem.&lt;br /&gt;&lt;br /&gt;    * Resolved printing problems on Mac OS X.&lt;br /&gt;    * Added public accessor APIs for all Print classes.&lt;br /&gt;&lt;br /&gt;Download PaperClips 1.0.1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-8752300093796803708?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/8752300093796803708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=8752300093796803708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8752300093796803708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8752300093796803708'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/03/paperclips.html' title='PaperClips'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-5724192891288319343</id><published>2008-03-10T22:23:00.000-07:00</published><updated>2008-03-10T22:24:56.209-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MOZILLA FIREFOX CHEAT SHEET'/><title type='text'>MOZILLA FIREFOX CHEAT SHEET</title><content type='html'>BASIC&lt;br /&gt;Home:&lt;br /&gt;http://www.mozilla.com/firefox/&lt;br /&gt;Extensions &amp; Themes:&lt;br /&gt;https://addons.mozilla.org/&lt;br /&gt;Support Forum:&lt;br /&gt;http://forums.mozillazine.org/&lt;br /&gt;GENERAL KEYBOARD SHORTCUTS&lt;br /&gt;Add Bookmarks  Ctrl + D&lt;br /&gt;Bookmarks  Ctrl + B&lt;br /&gt;DOM Inspector  Ctrl + Shift + I&lt;br /&gt;Downloads  Ctrl + J&lt;br /&gt;Full Screen View  F11&lt;br /&gt;Help  F1&lt;br /&gt;History  Ctrl + H&lt;br /&gt;Page Source  Ctrl + U&lt;br /&gt;Print  Ctrl + P&lt;br /&gt;Refresh Page  F5&lt;br /&gt;Refresh Page &amp; Cache  Ctrl + F5&lt;br /&gt;Save Page As  Ctrl + S&lt;br /&gt;NAVIGATION KEYBOARD SHORTCUTS&lt;br /&gt;Back  Alt + Left Arrow&lt;br /&gt;Down One Line  Down&lt;br /&gt;Down One Page  PageDown&lt;br /&gt;File Open  Ctrl + O&lt;br /&gt;Forward  Alt + Right Arrow&lt;br /&gt;Frame Next  F6&lt;br /&gt;Frame Previous  Shift + F6&lt;br /&gt;Home Page  Alt + Home&lt;br /&gt;Jump to Address Bar  Ctrl + L&lt;br /&gt;Jump to Search Bar  Ctrl + K&lt;br /&gt;Page Bottom  End&lt;br /&gt;Page Top  Home&lt;br /&gt;Stop  Esc&lt;br /&gt;Tab Close  Ctrl + W&lt;br /&gt;Tab New  Ctrl + T&lt;br /&gt;Tab Next  Ctrl + Tab&lt;br /&gt;Tab Previous  Ctrl + Shift + Tab&lt;br /&gt;Tab Select  Ctrl + [1 - 9]&lt;br /&gt;Up One Line  Up&lt;br /&gt;Up One Page  PageUp&lt;br /&gt;Window Close  Alt + F4&lt;br /&gt;Window New  Ctrl + N&lt;br /&gt;TEXT KEYBOARD SHORTCUTS&lt;br /&gt;Copy  Ctrl + C&lt;br /&gt;Cut  Ctrl + X&lt;br /&gt;Delete  Del&lt;br /&gt;Text Size Decrease  Ctrl + -&lt;br /&gt;Text Size Increase  Ctrl + +&lt;br /&gt;Text Size Default  Ctrl + 0&lt;br /&gt;Undo  Ctrl + Z&lt;br /&gt;SEARCH KEYBOARD SHORTCUTS&lt;br /&gt;Find Again  F3&lt;br /&gt;Find as You Type Link  '&lt;br /&gt;Find as You Type Text  /&lt;br /&gt;Find in This Page  Ctrl + F&lt;br /&gt;Find Previous  Shift + F3&lt;br /&gt;MOUSE SHORTCUTS&lt;br /&gt;Back  Shift + Scroll Down&lt;br /&gt;Forward  Shift + Scroll Up&lt;br /&gt;Open Link in Background Tab  Ctrl + Left Click or Middle Click&lt;br /&gt;Open Link in Foreground Tab  Ctrl + Shift + Left Click&lt;br /&gt;Open Link in New Window  Shift + Left Click&lt;br /&gt;Scroll Line by Line  Alt + Scroll&lt;br /&gt;Tab Close  Middle Click on Tab&lt;br /&gt;Tab New  Double Click on Tab Bar&lt;br /&gt;Text Size Decrease  Ctrl + Scroll UP&lt;br /&gt;Text Size Increase  Ctrl + Scroll Down&lt;br /&gt;LOCATIONS&lt;br /&gt;Cached Elements&lt;br /&gt;C:\Documents and Settings\[username]\Local Settings\Application Data\Mozilla\Firefox\Profiles\[profilename]\Cache\&lt;br /&gt;Profile Manager&lt;br /&gt;Close Firefox. From the "Start" menu, select "Run", type "firefox.exe -p"&lt;br /&gt;User Profile Folder&lt;br /&gt;C:\Documents and Settings\[username]\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.default\&lt;br /&gt;Advanced Configuration&lt;br /&gt;Address Bar: about:config&lt;br /&gt;Cache Info&lt;br /&gt;Address Bar: about:cache&lt;br /&gt;Plugin Info&lt;br /&gt;Address Bar: about:plugins&lt;br /&gt;TIPS/TRICKS&lt;br /&gt;Block Popup Windows&lt;br /&gt;Tools -&gt; Options -&gt; Web Features&lt;br /&gt;Customize Toolbars&lt;br /&gt;Right click on a toolbar and chose customize toolbar. To add icons drag and drop them on the toolbar. To subtract icons drag them from the toolbar to the "Customize Toolbar" window.&lt;br /&gt;Desktop Shortcut to Current Page&lt;br /&gt;Drag the icon in the address bar to the desktop&lt;br /&gt;Make Firefox Default Browser&lt;br /&gt;Tools -&gt; Options -&gt; General -&gt; Set Firefox As Default Browser&lt;br /&gt;Manage Cache, Cookies, History and Passwords&lt;br /&gt;Tools -&gt; Options -&gt; Privacy&lt;br /&gt;Set Home Page&lt;br /&gt;Tools -&gt; Options -&gt; General -&gt; Home Page&lt;br /&gt;Tabbed Browsing Options&lt;br /&gt;Tools -&gt; Options -&gt; Advanced -&gt; Tabbed Browsing&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-5724192891288319343?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/5724192891288319343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=5724192891288319343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5724192891288319343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5724192891288319343'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/03/mozilla-firefox-cheat-sheet.html' title='MOZILLA FIREFOX CHEAT SHEET'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-3747482183667444828</id><published>2008-03-05T21:14:00.000-08:00</published><updated>2008-03-05T21:27:18.857-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Warn Doctors'/><category scheme='http://www.blogger.com/atom/ns#' term='Don&apos;t Use Mobile Phone During Storms'/><title type='text'>Don't Use Mobile Phone During Storms, Warn Doctors</title><content type='html'>They describe the case of a 15 year old girl who was witnessed being struck by lightning while using her mobile phone in a large park in London during stormy weather. She was successfully resuscitated, but one year later she suffered complex physical, cognitive, and emotional problems.&lt;br /&gt;&lt;br /&gt;If someone is struck by lightning, the high resistance of human skin results in lightning being conducted over the skin without entering the body, explain the authors. This is known as flashover and has a low death rate. Conductive materials such as liquids or metallic objects disrupt the flashover and result in internal injury with greater death rates.&lt;br /&gt;&lt;br /&gt;To their knowledge, no similar cases have been reported in the medical literature. They found three cases reported in newspapers in China, Korea, and Malaysia, all resulting in death.&lt;br /&gt;&lt;br /&gt;"This rare phenomenon is a public health issue, and education is necessary to highlight the risk of using mobile phones outdoors during stormy weather to prevent future fatal consequences from lightning strike injuries related to mobile phones," say the authors.&lt;br /&gt;&lt;br /&gt;"The Australian Lightning Protection Standard recommends that metallic objects, including cordless or mobile phones, should not be used (or carried) outdoors during a thunderstorm," they add. "We could not find any advice from British telecommunication companies."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-3747482183667444828?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/3747482183667444828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=3747482183667444828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3747482183667444828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3747482183667444828'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/03/dont-use-mobile-phone-during-storms.html' title='Don&apos;t Use Mobile Phone During Storms, Warn Doctors'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-8503769047107749181</id><published>2008-03-05T21:13:00.001-08:00</published><updated>2008-03-05T21:13:53.524-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Secrets Of The Masters: Core Java Job Interview Questions'/><title type='text'>Secrets Of The Masters: Core Java Job Interview Questions</title><content type='html'>JDJ's Enterprise Editor, Yakov Fain (pictured) writes: If you are planning to hit the job market,  you may need to refresh some of the Java basic terms and techniques to prepare yourself for a technical interview. Let me offer you some of the core Java questions that you might expect during the interviews. &lt;br /&gt;&lt;br /&gt;For  most questions  I’ve provided only  short  answers to encourage further research.  I have included only  questions for mid (*) and senior level (**) Java developers. These sample questions could also become handy for people who need to interview Java developers (see also the article "Interviewing Enterprise Java Developers").&lt;br /&gt;30 Java Interview Questions&lt;br /&gt;* Q1. How could Java classes direct program messages to the system console, but error messages, say to a file?&lt;br /&gt;&lt;br /&gt;A. The class System has a variable out that represents the standard output, and the variable err that represents the standard error device. By default, they both point at the system console. This how the standard output could be re-directed:&lt;br /&gt;&lt;br /&gt;Stream st = new Stream(new FileOutputStream("output.txt")); System.setErr(st); System.setOut(st); &lt;br /&gt;&lt;br /&gt;* Q2. What's the difference between an interface and an abstract class?&lt;br /&gt;&lt;br /&gt;A. An abstract class may contain code in method bodies, which is not allowed in an interface. With abstract classes, you have to inherit your class from it and Java does not allow multiple inheritance. On the other hand, you can implement multiple interfaces in your class.&lt;br /&gt;&lt;br /&gt;* Q3. Why would you use a synchronized block vs. synchronized method?&lt;br /&gt;&lt;br /&gt;A. Synchronized blocks place locks for shorter periods than synchronized methods.&lt;br /&gt;&lt;br /&gt;* Q4. Explain the usage of the keyword transient?&lt;br /&gt;&lt;br /&gt;A. This keyword indicates that the value of this member variable does not have to be serialized with the object. When the class will be de-serialized, this variable will be initialized with a default value of its data type (i.e. zero for integers).&lt;br /&gt;&lt;br /&gt;* Q5. How can you force garbage collection?&lt;br /&gt;&lt;br /&gt;A. You can't force GC, but could request it by calling System.gc(). JVM does not guarantee that GC will be started immediately.&lt;br /&gt;&lt;br /&gt;* Q6. How do you know if an explicit object casting is needed?&lt;br /&gt;&lt;br /&gt;A. If you assign a superclass object to a variable of a subclass's data type, you need to do explicit casting. For example:&lt;br /&gt;&lt;br /&gt;Object a; Customer b; b = (Customer) a;&lt;br /&gt;&lt;br /&gt;When you assign a subclass to a variable having a supeclass type, the casting is performed automatically. &lt;br /&gt;&lt;br /&gt;* Q7. What's the difference between the methods sleep() and wait()&lt;br /&gt;&lt;br /&gt;A. The code sleep(1000); puts thread aside for exactly one second. The code wait(1000), causes a wait of up to one second. A thread could stop waiting earlier if it receives the notify() or notifyAll() call. The method wait() is defined in the class Object and the method sleep() is defined in the class Thread.&lt;br /&gt;&lt;br /&gt;* Q8. Can you write a Java class that could be used both as an applet as well as an application?&lt;br /&gt;&lt;br /&gt;A. Yes. Add a main() method to the applet.&lt;br /&gt;&lt;br /&gt;* Q9. What's the difference between constructors and other methods?&lt;br /&gt;&lt;br /&gt;A. Constructors must have the same name as the class and can not return a value. They are only called once while regular methods could be called many times.&lt;br /&gt;&lt;br /&gt;* Q10. Can you call one constructor from another if a class has multiple constructors&lt;br /&gt;&lt;br /&gt;A. Yes. Use this() syntax.&lt;br /&gt;&lt;br /&gt;* Q11. Explain the usage of Java packages.&lt;br /&gt;&lt;br /&gt;A. This is a way to organize files when a project consists of multiple modules. It also helps resolve naming conflicts when different packages have classes with the same names. Packages access level also allows you to protect data from being used by the non-authorized classes.&lt;br /&gt;&lt;br /&gt;* Q12. If a class is located in a package, what do you need to change in the OS environment to be able to use it?&lt;br /&gt;&lt;br /&gt;A. You need to add a directory or a jar file that contains the package directories to the CLASSPATH environment variable. Let's say a class Employee belongs to a package com.xyz.hr; and is located in the file c:\dev\com\xyz\hr\Employee.java. In this case, you'd need to add c:\dev to the variable CLASSPATH. If this class contains the method main(), you could test it from a command prompt window as follows:&lt;br /&gt;&lt;br /&gt;c:\&gt;java com.xyz.hr.Employee&lt;br /&gt; &lt;br /&gt;* Q13. What's the difference between J2SDK 1.5 and J2SDK 5.0?&lt;br /&gt;&lt;br /&gt;A.There's no difference, Sun Microsystems just re-branded this version.&lt;br /&gt;&lt;br /&gt;* Q14. What would you use to compare two String variables - the operator == or the method equals()?&lt;br /&gt;&lt;br /&gt;A. I'd use the method equals() to compare the values of the Strings and the == to check if two variables point at the same instance of a String object.&lt;br /&gt;&lt;br /&gt;* Q15. Does it matter in what order catch statements for FileNotFoundException and IOExceptipon are written?&lt;br /&gt;&lt;br /&gt;A. Yes, it does. The FileNoFoundException is inherited from the IOException. Exception's subclasses have to be caught first.&lt;br /&gt;&lt;br /&gt;* Q16. Can an inner class declared inside of a method access local variables of this method?&lt;br /&gt;&lt;br /&gt;A. It's possible if these variables are final.&lt;br /&gt;&lt;br /&gt;* Q17. What can go wrong if you replace &amp;&amp; with &amp; in the following code:&lt;br /&gt;&lt;br /&gt;String a=null; if (a!=null &amp;&amp; a.length()&gt;10) {...}&lt;br /&gt;&lt;br /&gt;A. A single ampersand here would lead to a NullPointerException.&lt;br /&gt;&lt;br /&gt;* Q18. What's the main difference between a Vector and an ArrayList&lt;br /&gt;&lt;br /&gt;A. Java Vector class is internally synchronized and ArrayList is not.&lt;br /&gt;&lt;br /&gt;* Q19. When should the method invokeLater()be used?&lt;br /&gt;&lt;br /&gt;A. This method is used to ensure that Swing components are updated through the event-dispatching thread.&lt;br /&gt;&lt;br /&gt;* Q20. How can a subclass call a method or a constructor defined in a superclass?&lt;br /&gt;&lt;br /&gt;A. Use the following syntax: super.myMethod(); To call a constructor of the superclass, just write super(); in the first line of the subclass's constructor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-8503769047107749181?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/8503769047107749181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=8503769047107749181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8503769047107749181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8503769047107749181'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/03/secrets-of-masters-core-java-job.html' title='Secrets Of The Masters: Core Java Job Interview Questions'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-764115355375341448</id><published>2008-03-05T21:10:00.000-08:00</published><updated>2008-03-05T21:11:49.217-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Creating a common lexicon for software development in your organization'/><title type='text'>Creating a common lexicon for software development in your organization</title><content type='html'>While at lunch with a buddy of mine the other day he shared that he came to a startling revelation. He was listening to a presentation on Services Oriented Architecture (SOA) the day before and realized that much of his job was terms definition. Simple things like, what does the word "Enable" mean to you. What is an Enterprise Network Bus?&lt;br /&gt;&lt;br /&gt;In software development we often use terms with one another which are poorly defined and have different meanings to different members of the team. We assume that when we say "factory pattern" the person on the other end understands us the same way they understand us when we say "cat."  This is, however, rarely the case.&lt;br /&gt;&lt;br /&gt;In this article, we'll explore the need for a common lexicon (see the dictionary.com definition for details) for your software development team and look at what you need to do to create it.&lt;br /&gt;&lt;br /&gt;The Tower of Babel&lt;br /&gt;"The LORD said, 'If as one people speaking the same language they have begun to do this, then nothing they plan to do will be impossible for them. Come, let us go down and confuse their language so they will not understand each other.'" The Holy Bible, New International Version, Genesis Chapter 11, verses 5-7&lt;br /&gt;&lt;br /&gt;When people speak with one language, one understanding of each other, they are able to accomplish almost anything. The more that we are able to speak, hear, and understand each other the less time is wasted on stupid mistakes and misunderstandings.&lt;br /&gt;&lt;br /&gt;Most people have had situations where we've given direction to someone and come back only to find that the direction we gave wasn't clear to the recipient. Or at the very least we've taken some direction from someone and when we demonstrated what we had done they indicated they were expecting something different. (This still happens when my wife asks me to do something.)&lt;br /&gt;&lt;br /&gt;It's annoying but in software development it's costly. Estimates vary but the general consensus is that over 40 percent of a project's budget may be consumed by rework. If you consider that most of this rework isn't because of poor understanding of how the technology works, but in because of poor communication, you can see a great potential for improvement in the performance of your team by communicating better and reducing rework.&lt;br /&gt;&lt;br /&gt;The foundation for creating less rework is in developing a common language that you can use to communicate as clearly as possible. It will never be perfect, but having the same understanding of a word will radically improve your chances of fully understanding what someone else is communicating.&lt;br /&gt;&lt;br /&gt;Relearning existing vocabulary&lt;br /&gt;One of the challenges with meeting the call to develop your own lexicon, your own language, with your developers is building common experience and common understanding of the things that you already believe that you know. You may believe that you know what the other person means but in reality you probably believe something slightly different.&lt;br /&gt;&lt;br /&gt;Take for instance, when I said "cat" above. You may have thought I was talking about "Fluffy" the white haired Persian cat that you had as a child. Or perhaps you were thinking of the Calico cat you have today. I was, however, actually, referring to one of the Bengal tigers that I recently saw. Should I have pointed out that I was speaking of a "big cat"? Probably, and if I was giving direction I would have. However, even big cat isn't specific. Would I be referring to a leopard, a lion, or a tiger?&lt;br /&gt;&lt;br /&gt;The point of all of this is that we all share a vocabulary but we each define the words slightly differently. The trick is to pull the definitions of a group of people together as much as possible so that you can use words and know what they will mean to your team members.&lt;br /&gt;&lt;br /&gt;One technique for doing this is finding examples of articles, white papers, etc. that defines the term and expands upon it's meaning. For instance, Services Oriented Architecture is a difficult thing for most people to define. However, you can bring folks to a common understanding by asking or encouraging them to read the same article on SOA as the rest of the team. While everyone may not agree on every specific point about SOA raised in the article it creates a reference point that can be used to anchor a definition that everyone on the team agrees upon.&lt;br /&gt;&lt;br /&gt;That anchored definition allows you to define other terms in relationship to it, and to other terms, and helps to strengthen the continuity of understanding between team members. However, even well understood, anchored terms may not be enough.&lt;br /&gt;&lt;br /&gt;Creating new vocabulary&lt;br /&gt;Your existing vocabulary is a good start. With seasoned practitioners there's a wide variety of words and phrases that have – or can have – a specific meaning. However, there are times when the existing vocabulary just won't cut it. When you're trying to describe your own techniques, processes, or methodologies, you may find that the existing vocabulary just doesn't cover it.&lt;br /&gt;&lt;br /&gt;A former coworker of mine, David Feinberg, has a dream. He wants to get a new word added to the dictionary. It's a great dream, and I wish him luck. Of course, whether he does or doesn't succeed in his goals, he's good at introducing new words into his organization. The beauty of these words is that they mean a specific thing to everyone in the organization – and there is little chance of anyone outside the organization having a different definition.&lt;br /&gt;&lt;br /&gt;Although it may seem like having others not know the word would not be a good thing – it can be. It's good because there's a low chance that the word will be misinterpreted. Because there are no other context clues as to the meaning of the word, it's likely that the only definition that the team will develop is the one that is intended.&lt;br /&gt;&lt;br /&gt;The most difficult problems to troubleshoot, diagnose, and fix are those which are not clear and repeatable. The same goes with communications. If you can't see that it's a problem, and if it's not a problem all the time, you will probably have a hard time getting people on the same page. A new vocabulary item has the benefit of being understood or not understood, but with a very low probability of being understood incorrectly.&lt;br /&gt;&lt;br /&gt;Culture of precision&lt;br /&gt;One of the great benefits that I get out of having different professional editors looking at more than 80 percent of everything that I write is that they have encouraged me to be more specific in my writing. I can't just say things happen – I have to be more specific about what, when, for how long, etc. We all speak in somewhat general terms when we are speaking. It's less formal and we're thinking on our feet, however, the general way that we approach speaking leads to a certain amount of ambiguity and imprecision. The most frequent situation that illuminates the lack of precision is when we ask someone a question via email. We indicate the question but rarely do we actually indicate a deadline for the response. We leave ambiguity in how long the person has to respond to our inquiry.&lt;br /&gt;&lt;br /&gt;The impact of a culture of precision in speaking and writing is subtle. It is subtle because you can develop your own lexicon for developers without it; however, it's like a catalyst. It can accelerate the process. By making the team hunger for precision in their communications they will seek out the most precise words they can find to express their ideas. Instead of just being satisfied with the idea that a data entry screen is necessary, they'll begin to explore which of the standard operations they need. Instead of data entry screens you'll get something like. "We need an edit screen for the customer list capable of adding, reading, editing, and disabling a customer. We never delete customers so that isn't necessary."&lt;br /&gt;&lt;br /&gt;Perhaps it takes a few more words to communicate like this, perhaps even a minute's worth of time is "wasted" by this precise way of communicating, but that certainly takes less time than coding a delete feature into a screen that will never be used because the business process doesn't allow customers to be deleted.&lt;br /&gt;&lt;br /&gt;Culture of refinement&lt;br /&gt;A culture of precision is not only about speaking and writing in precise terms but is also about learning how to hear with precision. In other words, communicating in precise terms also requires that the listener verify the meaning that they attribute to the words that the speaker used. A culture of refinement is one where listeners are encouraged to challenge their understanding of what the speaker said by echoing back the understanding – and not the words. This leads to an automatic refinement of the message which makes it even more precise.&lt;br /&gt;&lt;br /&gt;The Humanist approach to psychology is based upon the idea that you tell the person what you just heard. The technique is both validating to the patient and illuminating to the counselor. The patient feels like they're being truly heard and has an opportunity to expand upon the details of the situation or how they feel. The counselor verifies their understanding of the patient and in return understands better.&lt;br /&gt;&lt;br /&gt;The basic format is the speaker saying something like "I believe we need a SOA-based approach to this problem." The recipient (or one of the recipients in a group setting) says something like "I understand that you believe Web services are the right way to go with this project." The response doesn't use the same words that the speaker used. It uses a slightly different construction and in this case with a slightly different meaning. The result should be the speaker responding with "Yes, but I believe we need to address queuing and the transactional nature of what we're doing. I also believe that we have to focus on maintaining loose coupling." This interchange has illuminated that the speaker believes that queuing (asynchronous operation), transactional processing, and loose coupling are important components of the solution. Without this reflection of meaning back to the speaker this information would have never been shared.&lt;br /&gt;&lt;br /&gt;This culture of refinement, where everyone is trying to refine their understanding of what is being said can be a bit overwhelming at first as it initially increases communications, however, it has the potential to substantially reduce rework.&lt;br /&gt;&lt;br /&gt;The world at large&lt;br /&gt;One of the challenges that occur when you create your own lexicon for communication is that the world creeps in around you. You're overwhelmed by messages from the rest of the world which may have a different definition of your terms than the group defines. That's one of the reasons why it's important to find your own vocabulary so that you don't have to battle a different meaning in the world at large. Prefixing terms with 'OurCo' such as in OurCo-SOA can help to keep the distinction even when the world has a slightly different or less refined meaning.&lt;br /&gt;&lt;br /&gt;Ultimately there is one major caution with your lexicon. That is not to make it conflict with the meaning of the world at large. So you wouldn't, for instance, want to define a Web service as a Web site that users use on top of existing mainframe applications. The definition would be substantially inconsistent with the definition used by the rest of the world and would simply lead to problems of misunderstandings when you try to bring in new people, communicate with your peers, or even get consultants "up to speed" as they come in.&lt;br /&gt;&lt;br /&gt;The best way to view your lexicon is a dialect. Something that resembles the way the outside world communicates, but has special and unique meaning to the team – a meaning that makes it easier and more productive to communicate.&lt;br /&gt;&lt;br /&gt;The mind&lt;br /&gt;You may not need to create a whole new language or learn some obscure language like Klingon but you should consider how you communicate with your team and how you can create your own lexicon for communicating back and forth with one another.&lt;br /&gt;&lt;br /&gt;Learn to anchor your key terms and apply your own definitions to new words to form a stronger bond between the meaning behind the communication in the mind of the speaker and the meaning behind the communication in the mind of the listener.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-764115355375341448?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/764115355375341448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=764115355375341448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/764115355375341448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/764115355375341448'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/03/creating-common-lexicon-for-software.html' title='Creating a common lexicon for software development in your organization'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-5749472518833169202</id><published>2008-03-05T21:04:00.000-08:00</published><updated>2008-03-05T21:10:08.139-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ten things every Java developer should know about UNIX'/><title type='text'>Ten things every Java developer should know about UNIX</title><content type='html'>One of the great things about Java is how multi-platform it really is. While cross platform glitches do occur, they are not really all that common. But since the law of unintended consequences is all pervasive, we now have the common sight of teams of developers building Java programs meant to run on Unix boxes on Windows.Developing code meant for Unix on Windows does work reasonably well. The trouble is, many those coders slaving away in front of XP have a very limited understanding of their target platform. If that describes you, this following list is meant for you. Without further ado, here are the ten things you really need to know about Unix, in reverse David Letterman order:&lt;br /&gt;&lt;br /&gt;10) You need to be special to use some ports&lt;br /&gt;&lt;br /&gt;On Unix machines, programs run by ordinary mortals cannot use network ports less than 1024. Only the special root user can use these ports. If you do decide that you need to run your server as root, be very careful since a program running as root is all powerful on a Unix machine.&lt;br /&gt;&lt;br /&gt;9) There is no magic file locking&lt;br /&gt;&lt;br /&gt;Windows has this magic file locking mechanism that prevents people from removing a file while it is open. Thus, on a Windows box the call to delete() in the following code is pretty much sure to fail:InputStream is = new FileInputStream(”foo.txt”);(new File(”foo.txt”)).delete();int ch;while( (ch = is.read()) &gt; 0 )System.out.println( “char: ” + (char)ch );is.close();The delete will fail because someone (our program in fact) has the file open. After we get done printing out its contents, foo.txt will still be there. The kicker is, the delete() will work just fine on any Unix box. Under Unix, the call to delete() will delete the entry for foo.txt out from the file system, but since someone (our program) still has the file open, the bytes will live on, to be read and printed out. Only when we close the stream will the contents of foo.txt follow its name into oblivion.In exactly the same way, on a Unix box, someone can delete a program’s current directory right out from underneath it.&lt;br /&gt;&lt;br /&gt;8 ) Sometimes there is no GUI&lt;br /&gt;&lt;br /&gt;People who are used to Windows are sometimes surprised to find their programs running on a Unix box that has no GUI at all. None. Zilch. Nada. In Unix, the GUI is an add on component and it is completely optional. The machine will run fine without it and servers commonly do. Be very careful making calls to those handy java.awt methods — some of them will fail on a machine with no GUI.While you are at it, you may want to rethink what you are writing out with System.out. Many severs not only lack a GUI, they are completely headless: no keyboard, no mouse, no screen. If you are deploying into this kind of environment, the log file is your friend, because your program’s cries for help are unlikely to be heard anywhere else.&lt;br /&gt;&lt;br /&gt;7) In Unix, there is no registry……&lt;br /&gt;&lt;br /&gt;but if there was, it would be a plain text file. Unix systems have no central place like the Windows registry for storing configuration information. Instead, Unix configuration is spread over a fair number of different files. Many of these files live in a directory called /etc : the list of users is in a file called /etc/passwd, while the name of the machine is typically found in /etc/host.I guess if you are a Windows user that is the bad news. Here is the good news: most, if not all of the configuration files are plain text files. You can look at them with any old text editor. A further bit of good news is that all modern Unix like systems come with GUIs to edit the configuration files.&lt;br /&gt;&lt;br /&gt;6) Forward slashes are your friend&lt;br /&gt;&lt;br /&gt;This one is really more about Java on Windows than it is about Unix, but useful anyway. Just about everyone knows that Unix uses forward slashes to separate the bits of a path: /etc/passwd, while Windows uses backslashes: c:\Program Files\Windows. What a disturbing number of folks don’t realize is that forward slashes work just fine on in Java on Windows too. On a Windows box, Java is smart enough to translate /a/b/c/foo.txt to something like C:\a\b\c\foo.txt.Should you rely on this for production? No. If you are really coding cross platform Java, you need know about File.pathSeparator and the various File constructors. But if you are coding stuff that is only meant for Unix, and you just want to test it on your windows box, knowing that the forward slashes work in both places can save a lot of agony.&lt;br /&gt;&lt;br /&gt;5) Our services are just programs&lt;br /&gt;&lt;br /&gt;In Windows, system services are special programs, written to a particular service API. On Unix, services are provided by pretty ordinary programs that do service like things.Typically, a Unix service consists of the useful program and a script which starts the program in the background when the system starts up and may shut it down again when the system is halting. Many Unix systems keep these scripts in the /etc/init.d directory.&lt;br /&gt;&lt;br /&gt;4) Environment variables are hard to change&lt;br /&gt;&lt;br /&gt;Windows programmers sometimes cook up little batch files that set the environment variables they want. Perhaps you need to roll back to an old version of Java and Ant. You might write a batch file that looks something like:set JAVA_HOME=C:\java1.4.1_05set ANT_HOME=C:\apache-ant-1.6.1They can then run the batch file:c:\&gt; setenv.batand have the environment that you need. If you try to translate this directly into Unix-land, you get a script that looks not too different:#!/bin/shJAVA_HOME=/usr/java1.4.1_05export JAVA_HOMEANT_HOME=/usr/apache-ant-1.6.1export ANT_HOMESo you try out your new script…$ setenv.sh…and it does nothing. The trouble is that the Unix shell runs scripts by creating a copy of itself and running the script in the new shell. This new shell will read in the script, set all the environment variables and then exit, leaving the original shell and its environment unchanged. I hate when that happens. Changing directories works pretty much the same way: if you do a cd in an ordinary shell script, it will change the directory for that second shell, which may or may not be what you want.If what you want is to change things in your current shell, you need to have the current shell read in the script directly, without starting a new shell to do the job. You can do this with by using the dot command:. setenv.shLife will be good as your environment variables change.I should mention that there are several different shells available in Unix. Which one you use is mostly a matter of taste, either yours or the person who set up your account. The commands above will work with many of the common Unix shells, but if you happen to be running the C shell (note the pun), then your little script will need to look something like:setenv JAVA_HOME /usr/java1.4.1_05setenv ANT_HOME /usr/apache-ant-1.6.1You also need a different command to read the script in:source setenv.csh&lt;br /&gt;&lt;br /&gt;3) We don’t like spaces in our file names&lt;br /&gt;&lt;br /&gt;Okay, this one probably has more to do with Unix users and sys admins than the OS itself, but the fact is, we don’t like spaces in our paths. Oh it is perfectly possibly to have spaces in Unix file names. In fact you can put darn near anything in a Unix file name: /tmp/:a,*b%c is actually the name of a directory on the system that I am using to write this.But can and should are two different things. Unix users spend much of their time using the command line and Unix command line utilities are not crazy about paths with stars, question marks and especially spaces. The Unix guy can always find a way, but if you insist on putting strange characters like spaces in your file names, you are just finding a way to annoy your local Unix guy.&lt;br /&gt;&lt;br /&gt;2) There is no carriage to return&lt;br /&gt;&lt;br /&gt;If I had just one magic lighting bolt to hurl at one person, I think I would pick the guy who decided to use different line terminating characters on the two major OS’s. I suspect we would have hyper intelligent computers by now were it not for all the time wasted trying to figure out why my file looks funny on your OS.In a plain text file, Windows typically uses a carriage return followed by a newline character to mark the end of a line. Unix dispenses with the carriage return and makes due with the single newline character. Although the tools are getting better, Unix style files may show up as one long line in Windows — not a single carriage return/newline pair in that file, must be a single line. Likewise, Windows style files will sometimes show up on Unix with garbage characters at the end of a line — that extra carriage return is meaningless under the Unix convention.This doesn’t matter much for Java files — it’s all white space to the Java compiler. But some native Unix programs care passionately about those funny characters at the end of a line. In particular if you use a Windows based tool to edit a Unix script and your tool adds carriage returns to the script file, you have screwed it up. The script will no longer run. Worse, since many Unix editors do now handle the carriage returns, you could look at the broken script and see nothing wrong.&lt;br /&gt;&lt;br /&gt;1) You need a Linux box&lt;br /&gt;&lt;br /&gt;If you are doing significant development for Unix, you owe it to yourself and your customers to know something about Unix. If all else fails, get yourself an old PC and some of that free Linux. Or get yourself one of the many bootable Linux-on-a-CD distributions and try it out on any machine. Java is nearly platform independent, but not quite. It is up to you to make up the difference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-5749472518833169202?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/5749472518833169202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=5749472518833169202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5749472518833169202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5749472518833169202'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/03/ten-things-every-java-developer-should.html' title='Ten things every Java developer should know about UNIX'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-7457653263123506816</id><published>2008-02-29T03:30:00.000-08:00</published><updated>2008-02-29T03:44:26.142-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source Java Reporting with JasperReports and iReport'/><title type='text'>Open Source Java Reporting with JasperReports and iReport</title><content type='html'>asperReports, a powerful, flexible open-source reporting engine, is easy to integrate into Java enterprise applications, but it lacks an integrated visual report editor. So, if you want to use JasperReports directly, you need to manipulate its XML report structureâ€”a relatively technical activity with a high learning curve, to say the least. &lt;br /&gt;&lt;br /&gt;In fact, writing a full JasperReport from scratch using only the XML format is a long, painful, and unrewarding task. &lt;br /&gt;Luckily, some available alternatives are much easier. The first and foremost of which is to use a visual editor to design, compile, and test your reports. &lt;br /&gt;&lt;br /&gt;One of the most useful visual editors you can use is iReport. This article demonstrates how to use iReport to leverage the full power of JasperReports without getting entangled in complexities of the JasperReports native XML format. &lt;br /&gt;&lt;br /&gt;Getting Started&lt;br /&gt;&lt;br /&gt;The first thing to do is download and install iReport. It is a Java application, so you will need a JDK on your machine (JDK 1.4 or higher). This tutorial uses JDK 1.5.0: &lt;br /&gt;&lt;br /&gt;Download iReport from ireport.sourceforge.net. &lt;br /&gt;Decompress the iReport archive. &lt;br /&gt;Run the startup script (bin\startup.bat or ./bin/startup.sh).&lt;br /&gt; &lt;br /&gt;The iReport download comes with its own JasperReports package (the latest version to date, 0.5.1, supports the recently released JasperReports 1.0.1). &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GJWEaji4mN0/R8fv32EagEI/AAAAAAAAAGA/ZcMiHA_zJJg/s1600-h/13888.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_GJWEaji4mN0/R8fv32EagEI/AAAAAAAAAGA/ZcMiHA_zJJg/s400/13888.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5172366439744176194" /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;Figure 1. The Tutorial's Employee Database Schema &lt;br /&gt;&lt;br /&gt;Once you have iReport running, you can start designing your reports! &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Example Database&lt;br /&gt;This tutorial uses a very simple database (see Figure 1) for demonstration. To follow along step-by-step, either download the scripts for setting up this database with MySQL and set it up on your machine, or use a similar database and translate the techniques to your situation. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GJWEaji4mN0/R8fvcGEagDI/AAAAAAAAAF4/LdO7Q9-Nd1o/s1600-h/13889.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_GJWEaji4mN0/R8fvcGEagDI/AAAAAAAAAF4/LdO7Q9-Nd1o/s400/13889.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5172365963002806322" /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;Figure 2. Adding a New Database Connection &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Adding a New Database Connection&lt;br /&gt;First, add a new connection to your database. Use the "Datasource -&gt; Connections/Datasources" menu to set up a new database connection (see Figure 2). If you chose the JDBC driver in the list (the example chooses MySQL), enter the server address and the database name, and then click on the 'Wizard' button. iReport should provide you with a correct JDBC URL for your particular database. &lt;br /&gt;Now that you have a datasource, it's time to do something with it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-7457653263123506816?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/7457653263123506816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=7457653263123506816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7457653263123506816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7457653263123506816'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/open-source-java-reporting-with.html' title='Open Source Java Reporting with JasperReports and iReport'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_GJWEaji4mN0/R8fv32EagEI/AAAAAAAAAGA/ZcMiHA_zJJg/s72-c/13888.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-6223166222118804899</id><published>2008-02-29T03:04:00.000-08:00</published><updated>2008-02-29T03:19:14.851-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Generating Huge reports in JasperReports'/><title type='text'>Generating Huge reports in JasperReports</title><content type='html'>There are certain things to care while implementing the Jasper Reports for huge dataset to handle the memory efficiently, so that the appliacation does not go out of memory. &lt;br /&gt;&lt;br /&gt;They are: &lt;br /&gt;&lt;br /&gt;1) Pagination of the data and use of JRDataSource, &lt;br /&gt;&lt;br /&gt;2) Viruatization of the report. &lt;br /&gt;&lt;br /&gt;When there is a huge dataset, it is not a good idea to retrieve all the data at one time.The application will hog up the memory and you're application will go out of memory even before coming to the jasper report engine to fill up the data.To avoid that, the service layer/Db layer should return the data in pages and you gather the data in chunks and return the records in the chunks using JRDataSource interface, when the records are over in the current chunk, get the next chunk untilall the chunks gets over.When I meant JRDataSource, do not go for the Collection datasources, you implement the JRDataSource interface and provide the data through next() and getFieldValue()To provide an example, I just took the "virtualizer" example from the jasperReports sampleand modified a bit to demonstrate for this article.To know how to implement the JRDataSource, Have a look at the inner class "InnerDS" in the example. &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;Even after returning the data in chunks, finally the report has to be a single file.Jasper engine build the JasperPrint object for this. To avoid the piling up of memory at this stage, JasperReports provided a really cool feature called Virtualizer. Virtualizer basically serializes and writes the pages into file system to avoid the out of memory condition. There are 3 types of Virtualizer out there as of now. They are JRFileVirtualizer, JRSwapFileVirtualizer, and JRGzipVirtualizer.JRFileVirtualizer is a really simple virtualizer, where you need to mention the number of pages to keep in memory and the directory in which the Jasper Engine can swap the excess pages into files. Disadvantage with this Virtualizer is file handling overhead. This Virtualizer creates so many files during the process of virtualization and finally produces the required report file from those files.If the dataset is not that large, then you can go far JRFileVirtualizer.The second Virtualizer is JRSwapFileVirtualizer, which overcomes the disadvantage of JRFileVirtualizer. JRSwapFileVirtualizer creates only one swap file,which can be extended based on the size you specify. You have to specify the directory to swap, initial file size in number of blocks and the extension size for the JRSwapFile. Then while creating the JRSwapFileVirtualizer, provide the JRSwapFile as a parameter, and the number of pages to keep in memory. This Virtualizer is the best fit for the huge dataset.The Third Virtualizer is a special virtualizer which does not write the data into files, instead it compresses the jasper print object using the Gzip algorithm and reduces the memory consumption in the heap memory.The Ultimate Guide of JasperReports says that JRGzipVirtualizer can reduce the memory consumption by 1/10th. If you are dataset is not that big for sure and if you want to avoid the file I/O, you can go for JRGzipVirtualizer. &lt;br /&gt;&lt;br /&gt;Check the sample to know more about the coding part. To keep it simple, I have reused the "virtualizer" sample and added the JRDataSource implementation with paging.I ran the sample that I have attached here for four scenarios. To tighten the limits to get the real effects, I ran the application with 10 MB as the max heap size (-Xmx10M). &lt;br /&gt;&lt;br /&gt;1a) No Virtualizer, which ended up in out of memory with 10MB max heap size limit. &lt;br /&gt;&lt;br /&gt;export:&lt;br /&gt;     [java] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;     [java] Java Result: 1 &lt;br /&gt;&lt;br /&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GJWEaji4mN0/R8foKWEaf9I/AAAAAAAAAFI/88iKjzMoQjg/s1600-h/225288186.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_GJWEaji4mN0/R8foKWEaf9I/AAAAAAAAAFI/88iKjzMoQjg/s400/225288186.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5172357961478733778" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;1b) No Virtualizer with default heap size limit (64M) &lt;br /&gt;&lt;br /&gt;export2:&lt;br /&gt;     [java] null&lt;br /&gt;     [java] Filling time : 44547&lt;br /&gt;     [java] PDF creation time : 22109&lt;br /&gt;     [java] XML creation time : 10157&lt;br /&gt;     [java] HTML creation time : 12281&lt;br /&gt;     [java] CSV creation time : 2078&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GJWEaji4mN0/R8fomGEaf-I/AAAAAAAAAFQ/QSCWkMq-s8Q/s1600-h/225288187.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_GJWEaji4mN0/R8fomGEaf-I/AAAAAAAAAFQ/QSCWkMq-s8Q/s400/225288187.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5172358438220103650" /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;2) 2) With JRFileVirtualizer &lt;br /&gt;exportFV:&lt;br /&gt;     [java] Filling time : 161170&lt;br /&gt;     [java] PDF creation time : 38355&lt;br /&gt;     [java] XML creation time : 14483&lt;br /&gt;     [java] HTML creation time : 17935&lt;br /&gt;     [java] CSV creation time : 5812 &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GJWEaji4mN0/R8fo6GEaf_I/AAAAAAAAAFY/mrm__g8J-q0/s1600-h/225288189.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_GJWEaji4mN0/R8fo6GEaf_I/AAAAAAAAAFY/mrm__g8J-q0/s400/225288189.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5172358781817487346" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;3) With JRSwapFileVirtualizer&lt;br /&gt;exportSFV:&lt;br /&gt;     [java] Filling time : 51879&lt;br /&gt;     [java] PDF creation time : 32501&lt;br /&gt;     [java] XML creation time : 14405&lt;br /&gt;     [java] HTML creation time : 16579&lt;br /&gt;     [java] CSV creation time : 5365&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GJWEaji4mN0/R8fpRmEagAI/AAAAAAAAAFg/DxLhEtWOh50/s1600-h/225288190.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_GJWEaji4mN0/R8fpRmEagAI/AAAAAAAAAFg/DxLhEtWOh50/s400/225288190.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5172359185544413186" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;4a) With GZipVirtualizer with lots of GC&lt;br /&gt;exportGZV:&lt;br /&gt;     [java] Filling time : 84062&lt;br /&gt;     [java] Exception in thread "RMI TCP Connection(22)-127.0.0.1" java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;     [java] Exception in thread "RMI TCP Connection(24)-127.0.0.1" java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;     [java] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;     [java] Exception in thread "RMI TCP Connection(25)-127.0.0.1" java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;     [java] Exception in thread "RMI TCP Connection(27)-127.0.0.1" java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;     [java] Java Result: 1&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GJWEaji4mN0/R8fphWEagBI/AAAAAAAAAFo/ay9KsLLz61E/s1600-h/225288191.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_GJWEaji4mN0/R8fphWEagBI/AAAAAAAAAFo/ay9KsLLz61E/s400/225288191.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5172359456127352850" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;4b) With GZipVirtualizer (max: 13MB)&lt;br /&gt;exportGZV2:&lt;br /&gt;     [java] Filling time : 59297&lt;br /&gt;     [java] PDF creation time : 35594&lt;br /&gt;     [java] XML creation time : 16969&lt;br /&gt;     [java] HTML creation time : 19468&lt;br /&gt;     [java] CSV creation time : 10313 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GJWEaji4mN0/R8fpvmEagCI/AAAAAAAAAFw/LgV78xz6Xo4/s1600-h/225288191.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_GJWEaji4mN0/R8fpvmEagCI/AAAAAAAAAFw/LgV78xz6Xo4/s400/225288191.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5172359700940488738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have shared the updated virtualizer sample files at Updated Virtualizer Sample files&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-6223166222118804899?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/6223166222118804899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=6223166222118804899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6223166222118804899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6223166222118804899'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/generating-huge-reports-in.html' title='Generating Huge reports in JasperReports'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_GJWEaji4mN0/R8foKWEaf9I/AAAAAAAAAFI/88iKjzMoQjg/s72-c/225288186.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-2547268352786618867</id><published>2008-02-29T02:54:00.000-08:00</published><updated>2008-02-29T02:55:35.182-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Using Jasper Reports with Visual Web Pack'/><title type='text'>Using Jasper Reports with Visual Web Pack</title><content type='html'>This tutorial illustrates the use of Jasper Reports with a Visual Web Pack application.&lt;br /&gt;Register Jasper Reports library&lt;br /&gt;Use the NetBeans Library Manager to create a library for the Jasper Reports class libraries. You need at least the following files from the distribution:&lt;br /&gt;• dist/jasperreports-&lt;version&gt;.jar&lt;br /&gt;• lib/commons-beanutils-1.7.jar&lt;br /&gt;• lib/commons-collections-2.1.jar&lt;br /&gt;• lib/commons-digester-1.7.jar&lt;br /&gt;• lib/commons-logging-1.0.2.jar&lt;br /&gt;• lib/itext-1.3.1.jar&lt;br /&gt;Register Jasper Reports image servlet&lt;br /&gt;The image servlet is needed if you want html rendered reports (also without any graphical elements, because report placeholders uses images from this servlet). So you must register it in the web.xml configuration file. You can use the NetBeans web.xml editor to do so.&lt;br /&gt;Servlet name  : ImageServlet&lt;br /&gt;Servlet class : net.sf.jasperreports.j2ee.servlets.ImageServlet&lt;br /&gt;URL           : /image&lt;br /&gt;Insert methods for report output to application bean&lt;br /&gt;The following methods in the application bean can be used to output a precompiled report as html or pdf. In this sample a collection of java objects is used as data source. For other data sources see the Jasper Reports documentation.&lt;br /&gt;/**&lt;br /&gt; * Output Jasper Report&lt;br /&gt; *&lt;br /&gt; * @param filename Precompiled report filename&lt;br /&gt; * @param type Content type of report ("application/pdf" or "text/html")&lt;br /&gt; * @param data Collection of value objects&lt;br /&gt; */&lt;br /&gt;public void jasperReport( String filename, String type, Collection data ) {&lt;br /&gt;  jasperReport( filename, type, data, new HashMap() );&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;/**&lt;br /&gt; * Output Jasper Report&lt;br /&gt; *&lt;br /&gt; * @param filename Precompiled report filename&lt;br /&gt; * @param type Type of report ("application/pdf" or "text/html")&lt;br /&gt; * @param data Collection of value objects&lt;br /&gt; * @param params Map with parameters&lt;br /&gt; */&lt;br /&gt;public void jasperReport( String filename, String type, Collection data, Map params ) {&lt;br /&gt;  final String[] VALID_TYPES = { "text/html", "application/pdf" };&lt;br /&gt;  // First check if type is supported&lt;br /&gt;  boolean found = false;&lt;br /&gt;  for ( int i = 0; i &amp;lt; VALID_TYPES.length; i++ ) {&lt;br /&gt;    if ( VALID_TYPES[i].equals( type ) ) {&lt;br /&gt;      found = true;&lt;br /&gt;      break;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  if ( !found ) {&lt;br /&gt;    throw new IllegalArgumentException( "Report type '" + type + "' not supported." );&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  // InputStream for compiled report&lt;br /&gt;  ExternalContext econtext = getExternalContext();&lt;br /&gt;  InputStream stream = econtext.getResourceAsStream( filename );&lt;br /&gt; &lt;br /&gt;  if ( stream == null ) {&lt;br /&gt;    throw new IllegalArgumentException( "Report '" + filename + "' could not be opened." );&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  // Use collection as data source&lt;br /&gt;  JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource( data );&lt;br /&gt;  JasperPrint jasperPrint = null;&lt;br /&gt; &lt;br /&gt;  try {&lt;br /&gt;    jasperPrint = JasperFillManager.fillReport( stream, params, ds );&lt;br /&gt;  } catch ( RuntimeException e ) {&lt;br /&gt;    throw e;&lt;br /&gt;  } catch ( Exception e ) {&lt;br /&gt;    throw new FacesException( e );&lt;br /&gt;  } finally {&lt;br /&gt;    try {&lt;br /&gt;      stream.close();&lt;br /&gt;    } catch ( IOException e ) {&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  // Configure exporter and set parameters&lt;br /&gt;  JRExporter exporter = null;&lt;br /&gt;  HttpServletResponse response = (HttpServletResponse) econtext.getResponse();&lt;br /&gt;  FacesContext fcontext = FacesContext.getCurrentInstance();&lt;br /&gt; &lt;br /&gt;  try {&lt;br /&gt;    response.setContentType( type );&lt;br /&gt; &lt;br /&gt;    if ( "application/pdf".equals( type ) ) {&lt;br /&gt;      exporter = new JRPdfExporter();&lt;br /&gt;      exporter.setParameter( JRExporterParameter.JASPER_PRINT, jasperPrint );&lt;br /&gt;      exporter.setParameter( JRExporterParameter.OUTPUT_STREAM,&lt;br /&gt;        response.getOutputStream() );&lt;br /&gt;    } else if ( "text/html".equals( type ) ) {&lt;br /&gt;      exporter = new JRHtmlExporter();&lt;br /&gt;      exporter.setParameter( JRExporterParameter.JASPER_PRINT, jasperPrint );&lt;br /&gt;      exporter.setParameter( JRExporterParameter.OUTPUT_WRITER, response.getWriter() );&lt;br /&gt;      HttpServletRequest request = (HttpServletRequest)&lt;br /&gt;        fcontext.getExternalContext().getRequest();&lt;br /&gt;      request.getSession().setAttribute(&lt;br /&gt;        ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint );&lt;br /&gt;      exporter.setParameter( JRHtmlExporterParameter.IMAGES_MAP, new HashMap() );&lt;br /&gt;      exporter.setParameter(&lt;br /&gt;        JRHtmlExporterParameter.IMAGES_URI,&lt;br /&gt;        request.getContextPath() + "/image?image=" );&lt;br /&gt;    }&lt;br /&gt;  } catch ( RuntimeException e ) {&lt;br /&gt;    throw e;&lt;br /&gt;  } catch ( Exception e ) {&lt;br /&gt;    throw new FacesException( e );&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  // Export report&lt;br /&gt;  try {&lt;br /&gt;    exporter.exportReport();&lt;br /&gt;  } catch ( RuntimeException e ) {&lt;br /&gt;    throw e;&lt;br /&gt;  } catch ( Exception e ) {&lt;br /&gt;    throw new FacesException( e );&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  // Tell JavaServer faces that no more processing is necessary&lt;br /&gt;  fcontext.responseComplete();&lt;br /&gt;}&lt;br /&gt;Start report output from page bean&lt;br /&gt;The output of a report can initiated from a ActionEvent with the following code:&lt;br /&gt;try {&lt;br /&gt;  getApplicationBean().jasperReport(&lt;br /&gt;    "/reports/report.jasper",&lt;br /&gt;    "application/pdf",&lt;br /&gt;    getSessionBean().getSuchergebnisDataProvider().getList() );&lt;br /&gt;} catch ( Exception e ) {&lt;br /&gt;  Logger.getLogger(getClass().getName()).severe( e.getMessage() );&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-2547268352786618867?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/2547268352786618867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=2547268352786618867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2547268352786618867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2547268352786618867'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/using-jasper-reports-with-visual-web.html' title='Using Jasper Reports with Visual Web Pack'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-2644033125822333785</id><published>2008-02-29T02:45:00.000-08:00</published><updated>2008-02-29T02:48:36.513-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Using Hibernate queries with JasperReports'/><title type='text'>Using Hibernate queries with JasperReports</title><content type='html'>Introduction&lt;br /&gt;In the article, we examine a performance-optimised approach for using Hibernate queries to generate reports with JasperReports. &lt;br /&gt;&lt;br /&gt;JasperReports is a powerful and flexible Open Source reporting tool. Combined with the graphical design tool iReport, for example, you get a complete Java Open Source reporting solution. In this article, we will investigate how you can integrate JasperReports reporting with Hibernate data sources in an optimal manner, without sacrificing ease-of-use or performance. &lt;br /&gt;&lt;br /&gt;Basic Hibernate/JasperReports integration&lt;br /&gt;To integrate Hibernate and JasperReports, you have to define a JasperReports data source. One simple and intuitive approach is to use the JRBeanCollectionDataSource data source (This approach is presented here) : &lt;br /&gt;&lt;br /&gt;    List results = session.find("from com.acme.Sale");&lt;br /&gt;&lt;br /&gt;    Map parameters = new HashMap();&lt;br /&gt;    parameters.put("Title", "Sales Report");&lt;br /&gt;&lt;br /&gt;    InputStream reportStream&lt;br /&gt;                    = this.class.getResourceAsStream("/sales-report.xml");&lt;br /&gt;    JasperDesign jasperDesign = JasperManager.loadXmlDesign(reportStream);&lt;br /&gt;    JasperReport jasperReport = JasperManager.compileReport(jasperDesign);&lt;br /&gt;&lt;br /&gt;    JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(results);&lt;br /&gt;    JasperPrint jasperPrint = JasperManager.fillReport(jasperReport,&lt;br /&gt;                                                       parameters,&lt;br /&gt;                                                       ds);&lt;br /&gt;&lt;br /&gt;    JasperExportManager.exportReportToPdfFile(jasperPrint, "sales-report.pdf");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This approach will work well for small lists. However, for reports involving tens or hundreds of thousands of lines, it is inefficiant, memory-consuming, and slow. Indeed, experience shows that, when running on a standard Tomcat configuration, a list returning as few as 10000 business objects can cause OutOfMemory exceptions. It also wastes time building a bulky list of objects before processing them, and pollutes the Hibernate session (and possibly second-level caches with temporary objects. &lt;br /&gt;&lt;br /&gt;Optimised Hibernate/JasperReports integration&lt;br /&gt;We need a way to efficiently read and process Hibernate queries, without creating too many unnecessary temporary objects in memory. One possible way to do this is the following :&lt;br /&gt;&lt;br /&gt;Define an optimised layer for executing Hibernate queries efficiently &lt;br /&gt;Define an abstraction layer for these classes which is compatible with JasperReports &lt;br /&gt;Wrap this data access layer in a JasperReports class that can be directly plugged into JasperReports &lt;br /&gt;The Hibernate Data Access Layer : The QueryProvider interface and its implementations&lt;br /&gt;We start with the optimised Hibernate data access. (you may note that this layer is not actually Hibernate-specific, so other implementations could implement other types of data access without impacting the design). &lt;br /&gt;&lt;br /&gt;This layer contains two principal classes :&lt;br /&gt;&lt;br /&gt;The CriteriaSet class &lt;br /&gt;The QueryProvider interface &lt;br /&gt;A CriteriaSet is simply a JavaBean which contains parameters which may be passed to the Hibernate query. It is simply a generic way of encapsulating a set of parameters. A QueryProvider provides a generic way of returning an arbitrary subset of the query results set. The essential point is that query results are read in small chunks, not all at once. This allows more efficient memory handling and better performance.&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * A QueryProvidor provides a generic way of fetching a set of objects.&lt;br /&gt;     */&lt;br /&gt;    public interface QueryProvider  {&lt;br /&gt;&lt;br /&gt;        /**&lt;br /&gt;         * Return a set of objects based on a given criteria set.&lt;br /&gt;         * @param firstResult the first result to be returned&lt;br /&gt;         * @param maxResults the maximum number of results to be returned&lt;br /&gt;         * @return a list of objects&lt;br /&gt;         */&lt;br /&gt;        List getObjects(CriteriaSet criteria,&lt;br /&gt;                        int firstResult,&lt;br /&gt;                        int maxResults) throws HibernateException;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;A typical implementation of this class simply builds a Hibernate query using the specified criteria set and returns the requested subset of results. For example : &lt;br /&gt;&lt;br /&gt;   public class ProductQueryProvider implements QueryProvider {&lt;br /&gt;&lt;br /&gt;       public List getObjects(CriteriaSet criteria,&lt;br /&gt;                              int firstResult,&lt;br /&gt;                              int maxResults)&lt;br /&gt;               throws HibernateException {&lt;br /&gt;           //&lt;br /&gt;           // Build query criteria&lt;br /&gt;           //&lt;br /&gt;           Session sess = SessionManager.currentSession();&lt;br /&gt;           ProductCriteriaSet productCriteria&lt;br /&gt;                                 = (ProductCriteriaSet) criteria;&lt;br /&gt;           Query query = session.find("from com.acme.Product p "&lt;br /&gt;                       + "where p.categoryCode = :categoryCode ");&lt;br /&gt;&lt;br /&gt;           query.setParameter("categoryCode",&lt;br /&gt;                              productCriteria.getCategoryCode();&lt;br /&gt;           return query.setCacheable(true)&lt;br /&gt;                       .setFirstResult(firstResult)&lt;br /&gt;                       .setMaxResults(maxResults)&lt;br /&gt;                       .setFetchSize(100)&lt;br /&gt;                       .list();&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A more sophisticated implementation is helpful for dynamic queries. We define an abstract BaseQueryProvider class which can be used for dynamic query generation. This is typically useful when the report has to be generated using several parameters, some of which are optionnal.. Each derived class overrides the buildCriteria() method. This method builds a Hibernate Criteria object using the specified Criteria set as appropriate : &lt;br /&gt;&lt;br /&gt;   public abstract class BaseQueryProvider implements QueryProvider {&lt;br /&gt;&lt;br /&gt;       public List getObjects(CriteriaSet criteria, int firstResult, int maxResults)&lt;br /&gt;               throws HibernateException {&lt;br /&gt;&lt;br /&gt;               Session sess = SessionManager.currentSession();&lt;br /&gt;               Criteria queryCriteria = buildCriteria(criteria, sess);&lt;br /&gt;               return queryCriteria.setCacheable(true)&lt;br /&gt;                            .setFirstResult(firstResult)&lt;br /&gt;                            .setMaxResults(maxResults)&lt;br /&gt;                            .setFetchSize(100)&lt;br /&gt;                            .list();&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       protected abstract Criteria buildCriteria(CriteriaSet criteria, Session sess);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;A typical implementation is shown here : &lt;br /&gt;&lt;br /&gt;   public class SalesQueryProvider extends BaseQueryProvider {&lt;br /&gt;&lt;br /&gt;       protected Criteria buildCriteria(CriteriaSet criteria,&lt;br /&gt;                                        Session sess) {&lt;br /&gt;           //&lt;br /&gt;           // Build query criteria&lt;br /&gt;           //&lt;br /&gt;           SalesCriteriaSet salesCriteria&lt;br /&gt;                             = (SalesCriteriaSet) criteria;&lt;br /&gt;&lt;br /&gt;           Criteria queryCriteria&lt;br /&gt;                             = sess.createCriteria(Sale.class);&lt;br /&gt;&lt;br /&gt;           if (salesCriteria.getStartDate() != null) {&lt;br /&gt;               queryCriteria.add(&lt;br /&gt;                       Expression.eq("getStartDate",&lt;br /&gt;                                     salesCriteria.getStartDate()));&lt;br /&gt;           }&lt;br /&gt;           // etc...&lt;br /&gt;&lt;br /&gt;           return queryCriteria;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note that a QueryProvider does not need to return Hibernate-persisted objects. Large-volume queries can sometimes be more efficiently implemented by returning custom-made JavaBeans containing just the required columns. HQL allows you to to this quite easily : &lt;br /&gt;&lt;br /&gt;   public class CityQueryProvider implements QueryProvider {&lt;br /&gt;&lt;br /&gt;       public List getObjects(CriteriaSet criteria,&lt;br /&gt;                              int firstResult,&lt;br /&gt;                              int maxResults)&lt;br /&gt;               throws HibernateException {&lt;br /&gt;           //&lt;br /&gt;           // Build query criteria&lt;br /&gt;           //&lt;br /&gt;           Session sess = SessionManager.currentSession();&lt;br /&gt;           Query query&lt;br /&gt;                  = session.find(&lt;br /&gt;                        "select new CityItem(city.id, "&lt;br /&gt;                      + "                    city.name, "&lt;br /&gt;                      + "              city.electrityCompany.name) "&lt;br /&gt;                      + " from City city "&lt;br /&gt;                      + " left join city.electrityCompany");&lt;br /&gt;&lt;br /&gt;           return query.setCacheable(true)&lt;br /&gt;                       .setFirstResult(firstResult)&lt;br /&gt;                       .setMaxResults(maxResults)&lt;br /&gt;                       .setFetchSize(100)&lt;br /&gt;                       .list();&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hibernate data access abstraction : the ReportDataSource interface&lt;br /&gt;Next, we define a level of abstraction between the Hibernate querying and the JasperReport classes. The ReportDataSource does this :&lt;br /&gt;&lt;br /&gt;   public interface ReportDataSource extends Serializable {&lt;br /&gt;       Object getObject(int index);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;The standard implementation of this interface reads Hibernate objects using a given QueryProvider and returns them to JasperReports one by one. Here is the source code of this class (getters, setters, logging code and error-handling code have been removed for clarty) : &lt;br /&gt;&lt;br /&gt;   public class ReportDataSourceImpl implements ReportDataSource {&lt;br /&gt;&lt;br /&gt;       private CriteriaSet criteriaSet;&lt;br /&gt;       private QueryProvider queryProvider;&lt;br /&gt;       private List resultPage;&lt;br /&gt;       private int pageStart = Integer.MAX_VALUE;&lt;br /&gt;       private int pageEnd = Integer.MIN_VALUE;&lt;br /&gt;       private static final int PAGE_SIZE = 50;&lt;br /&gt;&lt;br /&gt;       //&lt;br /&gt;       // Getters and setters for criteriaSet and queryProvider&lt;br /&gt;       //&lt;br /&gt;       ...&lt;br /&gt;&lt;br /&gt;       public List getObjects(int firstResult,&lt;br /&gt;                              int maxResults) {&lt;br /&gt;&lt;br /&gt;            List queryResults = getQueryProvider()&lt;br /&gt;                                   .getObjects(getCriteriaSet(),&lt;br /&gt;                                               firstResult,&lt;br /&gt;                                               maxResults);&lt;br /&gt;            if (resultPage == null) {&lt;br /&gt;                resultPage = new ArrayList(queryResults.size());&lt;br /&gt;            }&lt;br /&gt;            resultPage.clear();&lt;br /&gt;            for(int i = 0; i &lt; queryResults.size(); i++) {&lt;br /&gt;                resultPage.add(queryResults.get(i));&lt;br /&gt;            }&lt;br /&gt;            pageStart = firstResult;&lt;br /&gt;            pageEnd = firstResult + queryResults.size() - 1;&lt;br /&gt;            return resultPage;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       public final Object getObject(int index) {&lt;br /&gt;           if ((resultPage == null)&lt;br /&gt;               || (index &lt; pageStart)&lt;br /&gt;               || (index &gt; pageEnd)) {&lt;br /&gt;               resultPage = getObjects(index, PAGE_SIZE);&lt;br /&gt;           }&lt;br /&gt;           Object result = null;&lt;br /&gt;           int pos = index - pageStart;&lt;br /&gt;           if ((resultPage != null)&lt;br /&gt;                &amp;&amp; (resultPage.size() &gt; pos)) {&lt;br /&gt;               result = resultPage.get(pos);&lt;br /&gt;           }&lt;br /&gt;           return result;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally, we have to be able to call the Hibernate data source from JasperReports. To do so, we start by looking at the JasperManager fillReport() method, which takes a JRDataSource object as its third parameter and uses it to generate the report : &lt;br /&gt;&lt;br /&gt;    JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parameters, ds);&lt;br /&gt;&lt;br /&gt;To implement our own optimised JRDataSource, we extended the JRAbstractBeanDataSource class. This class is presented here (logging and error-handling code has been removed for clarty). &lt;br /&gt;&lt;br /&gt;   public class ReportSource extends JRAbstractBeanDataSource {&lt;br /&gt;&lt;br /&gt;       private ReportDataSource dataSource;&lt;br /&gt;       protected int index = 0;&lt;br /&gt;       protected Object bean;&lt;br /&gt;       private static Map fieldNameMap = new HashMap();&lt;br /&gt;&lt;br /&gt;       public ReportSource(ReportDataSource dataSource) {&lt;br /&gt;           super(true);&lt;br /&gt;         this.dataSource = dataSource;&lt;br /&gt;         index = 0;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;       public boolean next() throws JRException {&lt;br /&gt;           bean = dataSource.getObject(index++);&lt;br /&gt;           return (bean != null);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;       public void moveFirst() throws JRException {&lt;br /&gt;           index = 0;&lt;br /&gt;           bean = dataSource.getObject(index);&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;      public Object getFieldValue(JRField field) throws JRException {&lt;br /&gt;           String nameField = getFieldName(field.getName());&lt;br /&gt;           return PropertyUtils.getProperty(bean, nameField);&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       /**&lt;br /&gt;        * Replace the character "_" by a ".".&lt;br /&gt;        *&lt;br /&gt;        * @param fieldName the name of the field&lt;br /&gt;        * @return the value in the cache or make&lt;br /&gt;        * the replacement and return this value&lt;br /&gt;        */&lt;br /&gt;       private String getFieldName(String fieldName) {&lt;br /&gt;         String filteredFieldName&lt;br /&gt;                = (String) fieldNameMap.get(fieldName);&lt;br /&gt;         if (filteredFieldName == null) {&lt;br /&gt;               filteredFieldName = fieldName.replace('_','.');&lt;br /&gt;               fieldNameMap.put(fieldName,filteredFieldName);&lt;br /&gt;         }&lt;br /&gt;           return filteredFieldName;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This class is basically just a proxy between JasperReports and the Hibernate data source object. The only tricky bit is field name handling. For some reason, JasperReports does not accept field names containing dots (ex. "product.code"). However, when you retrieve a set of Hibernate-persisted business objects, you often need to access object attributes. To get around this, we replace the "." by a "_" in the JasperReport template (ex. "product_code" instead of "product.code"), and convert back to a conventional JavaBean format in the getFieldName() method. &lt;br /&gt;&lt;br /&gt;Putting it all together&lt;br /&gt;So, when you put it all together, you get something like this : &lt;br /&gt;&lt;br /&gt;    List results = session.find("from com.acme.Sale");&lt;br /&gt;&lt;br /&gt;    Map parameters = new HashMap();&lt;br /&gt;    parameters.put("Title", "Sales Report");&lt;br /&gt;&lt;br /&gt;    InputStream reportStream&lt;br /&gt;                 = this.class.getResourceAsStream("/sales-report.xml");&lt;br /&gt;    JasperDesign jasperDesign&lt;br /&gt;                 = JasperManager.loadXmlDesign(reportStream);&lt;br /&gt;    JasperReport jasperReport&lt;br /&gt;                 = JasperManager.compileReport(jasperDesign);&lt;br /&gt;    &lt;br /&gt;    ReportDataSource hibernateDataSource&lt;br /&gt;                 = new ReportDataSourceImpl();&lt;br /&gt;    hibernateDataSource.setQueryProvider(new SalesQueryProvider());&lt;br /&gt;    hibernateDataSource.setCriteriaSet(salesCriteria);&lt;br /&gt;    ReportSource rs = new ReportSource(hibernateDataSource);&lt;br /&gt;    &lt;br /&gt;    JasperPrint jasperPrint&lt;br /&gt;                    = JasperManager.fillReport(jasperReport,&lt;br /&gt;                                               parameters,&lt;br /&gt;                                               rs);&lt;br /&gt;    JasperExportManager.exportReportTsoPdfFile(jasperPrint,&lt;br /&gt;                                               "sales-report.pdf");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Further JasperReports optimisations&lt;br /&gt;&lt;br /&gt;Compiled Report caching&lt;br /&gt;In the previous code, the JasperReport is loaded and compiled before it is run. In a serverside application, for optimal performance, the reports should be loaded and compiled once and then cached. This will save several seconds on each query generation. &lt;br /&gt;&lt;br /&gt;Optimising Hibernate Queries&lt;br /&gt;The first cause of slow report generation is sub-optimal querying. Hibernate is a high-performance persistence library which gives excellent results when correctly used. So you should treate any report which takes an excessive time to generate as suspicious. Common Hibernate optimisation strategies include :&lt;br /&gt;&lt;br /&gt;Correct use of joins &lt;br /&gt;Correct use of lazy associations &lt;br /&gt;Reading a subset of columns rather than whole Hibernate-persisted objects &lt;br /&gt;Some Hibernate query optimisation techniques are discussed here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-2644033125822333785?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/2644033125822333785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=2644033125822333785' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2644033125822333785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2644033125822333785'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/using-hibernate-queries-with.html' title='Using Hibernate queries with JasperReports'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-3715220339250668014</id><published>2008-02-29T02:28:00.000-08:00</published><updated>2008-02-29T02:44:36.499-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Made Easy with JasperReports and Hibernate'/><title type='text'>Reporting Made Easy with JasperReports and Hibernate</title><content type='html'>JasperReports and Hibernate in Web applications&lt;br /&gt;&lt;br /&gt;JasperReports is a valuable and viable reporting solution for Java Web applications. It simplifies report generation through the use of XML report templates that are then compiled using the JasperReports engine for use in reporting modules. These compiled report templates can be filled by data received from a variety of sources including relational databases. JasperReports can be integrated into Web applications and create reports in several file formats including PDF and XLS. &lt;br /&gt;&lt;br /&gt; Reporting in Java Applications&lt;br /&gt;Often reporting modules increase in complexity and size during the course of application development. Clients tend to demand more information from report modules when they become aware of the benefits reports offer. The reporting module developed as something of an afterthought in such environments suddenly becomes a much more integral part of the application. Reporting modules often seem to be tacked on to developed applications, rather than being considered and implemented during initial application development.&lt;br /&gt;&lt;br /&gt;Recently while working on some applications that made extensive use of report extraction to XLS files using the Apache POI library, it became apparent that these report modules tied up lots of valuable development resources for extended periods of time. When the client requested PDF extraction, initial iText API research led me to discover JasperReports. JasperReports was to change our team approach to report development dramatically.&lt;br /&gt;&lt;br /&gt;Prior to implementing JasperReports each report creation required the development of a custom report class using the Apache POI library. This approach expended valuable development time creating aspects of the report such as cell specific formats, styles, and population methods. JasperReports offered our team the ability to get back this valuable development time, while producing the same report because of its embedded use of the Apache POI library.&lt;br /&gt;&lt;br /&gt;One of the benefits offered by the introduction of JasperReports is that a single report template implementation can produce reports in a number of formats. This means that templates created for XLS format extraction can also be used to produce PDF files and even CSV, HTML or XML. &lt;br /&gt;&lt;br /&gt;How Can JasperReports Help Developers?&lt;br /&gt;JasperReports gives developers the ability to create reports quickly and easily that can be extracted to numerous formats. Developers can also use the JasperReports engine to compile report templates at design or runtime - allowing dynamic report formats. Developers can also inject data into these reports from a number of data sources. Developer time no longer has to be spent creating custom report classes using the Apache POI or iText libraries for formatting and stylizing reports, allowing the code writers to focus on the data retrieval aspect of the report. As a result developers gain valuable flexibility and time savings using JasperReports in application development.&lt;br /&gt;&lt;br /&gt;The XML report templates used by JasperReports provide the layout and presentation information required to format the resulting report as well as field, variable, and parameter references. Non-development staff can create these templates using a third-party GUI such as iReport with minimal developer collaboration, so developers don't have to involve themselves in the layout and presentation aspect of report generation.&lt;br /&gt;&lt;br /&gt;JasperReports enables developers to concentrate their efforts on the parts of the reporting module where they are required, while relieving them of having to write custom report generation code. A developer's role in the report module can be reduced to template compilation, data source implementation, and actual report creation. &lt;br /&gt;&lt;br /&gt;Creating and Compiling an XML Report Template&lt;br /&gt;JasperReports requires a report design defining the layout, presentation, and data fields. This design can be built using the net.sf.jasperreports.engine.design.JasperDesign object, so developers can create report designs dynamically, or by creating a net.sf.jasperreports.engine.design.JasperDesign instance from an XML report template. Unless an application specifically requires a dynamic layout a compiled XML report template is the recommended method. This XML template is usually saved with a .jrxml file extension and compiled using the net.sf.jasperreports.engine.JasperCompileManager.&lt;br /&gt;&lt;br /&gt;The JasperReports XML template includes elements for title, pageHeader, columnHeader, pageFooter, columnFooter, and the main data &lt;detail&gt; element. Each of these elements has a variety of sub-elements as can be seen in sampleReport.jrxml (see Listing 1).&lt;br /&gt;&lt;br /&gt;You can download the code samples used in this article at jdj.sys-con.com. As can be seen in sampleReport.jrxml some elements such as &lt;band&gt; and &lt;reportElement&gt; contain layout information, while others such as &lt;textElement&gt; and font contain presentation information. The XML templates also contain &lt;parameter&gt;, &lt;field&gt;, and &lt;variable&gt; elements used to include data in the report.&lt;br /&gt;&lt;br /&gt;The &lt;parameter&gt; elements allow non-data source information to be passed into a report, such as a dynamic title; &lt;field&gt; elements are the only way to map report fields to the data source fields, while variables are values generated at runtime for use in the report. The complete Document Type Definition (DTD) for the JasperReports XML report template can be found in the JasperReports Ultimate Guide.&lt;br /&gt;&lt;br /&gt;Compilation of the XML template can be done either at runtime or build time as part of an Ant build using the JasperReports Ant task.&lt;br /&gt;&lt;br /&gt;Compiling the report at runtime entails loading the report into a JasperDesign object and using the created instance as the parameter to the JasperCompileManager.compileReport(JasperDesign design) method, which returns a JasperReport instance. Alternatively the XML template can be passed into the JasperCompileManager.compileToFileReport(String sourceFileName, which creates a compiled report file (.jasper) available throughout the application.&lt;br /&gt;&lt;br /&gt;Compiling the report at build time using the JasperReports Ant task requires the addition of the task definition to the build.xml file and a target making use of this task as seen in Listing 2, which is an extract from the source code build.xml. Using the Ant task results in the creation of a compiled (.jasper) file in the destdir task and offers the opportunity to save the Java source file by passing the keepjava attribute of the target a true value. A more thorough example of how to use the Ant task is included in the sample applications provided in the JasperReports download bundle. &lt;br /&gt;&lt;br /&gt;Using Data Sources to Fill JasperReports&lt;br /&gt;Most reports use a database as the data source, but JasperReports can use any available data source. These data sources are passed to a net.sf.jasperreports.engine.JasperFillManager fillReportXXX() method. Two types of data source are provided for by these methods - net.sf.jasperreports.engine.JRDataSource and java.sql.Connection. The source code for this article contains examples of both a static data source that extends the JRDataSource and a JDBC connection data source implementation.&lt;br /&gt;&lt;br /&gt;The StaticDataSource class implementation provided implements the net.sf.jasperreports.engine.JRDataSource interface enabling it to fill the report data by calling the JasperFillManager.fillReport(JaperReport report, Map parameters, JRDataSource dataSource) method. The two required methods getFieldValue(JRField jrField) and next() of the JRDataSource interface present in StaticDataSource handle the data passing from the data source into the JasperReport. The data source used by StaticDataSource is a static simple two-dimensional array of bowlers containing their names and scores over three games (see Listing 3). When the fillReport() method containing this data source is processed and a detail section is encountered in the report a call will be made to the next() method. The implementation of this method in StaticDataSource (see Listing 4) returns true if there's another element in the data array, or false if there is no more data. If this method returns true then field elements encountered in the detail section will result in a call to the getFieldValue(JRField jrField) method in StaticDataSource. The implementation of this method in StaticDataSource (see Listing 5) returns the value of the mapped data field name for the current index of the data array. When the end of the detail section is encountered, the next() method is called again and the process repeats until the next() method returns false.&lt;br /&gt;&lt;br /&gt;The JDBCDataSourceExample (see Listing 6) implements a fillReport() method that accepts a java.sql.Connection parameter. Through the addition of a &lt;queryString&gt; element into the XML report template (jdbcSampleReport.jrxml) this fillReport() method enables data to be extracted from a relational database. The &lt;queryString&gt; element returns the data fields for use in the report data mapping. In this case the query simply returns all records in the sample_data table. A java.sql.ResultSet can be used instead of implementing the &lt;queryString&gt; element in the report template, allowing dynamic query implementation. &lt;br /&gt;&lt;br /&gt;Using Hibernate with JasperReports&lt;br /&gt;Hibernate is one of the most popular ORM tools in use at the moment. Using Hibernate as a data source for JasperReports can be very simple when a collection of objects is returned from a Hibernate query, but when a tuple of objects is returned then a custom JRDataSource implementation is required.&lt;br /&gt;&lt;br /&gt;When a Hibernate query returns a collection of objects, a net.sf.jasperreports.engine.data.JRBeanCollection-DataSource can be used to map the Hibernate POJO instance fields to the report fields. All that's required for this simple solution is to use the JRBeanCollectionDataSource(java.util.Collection beanCollection) constructor, passing it the Hibernate Query result set as implemented in SimpleHibernateExample (see Listing 7). In this example the simple Hibernate query used (session.createQuery("from SampleData").list()) is equivalent to that found in the JDBCDataSourceExample. JRBeanCollectionDataSource implements JRDataSource like StaticDataSource but its getFieldValue(JRField jrField) method implementation maps the report template field names to the query result bean properties.&lt;br /&gt;&lt;br /&gt;When a Hibernate query returns a tuple of objects it's necessary to write a custom implementation of the JRDataSource similar to HibernateDataSource (see Listing 8). The implementation of the required next() method in this class returns true if there is another list item in the Hibernate query result set, while putting the current list item in a currentValue holder for use in the getFieldValue(JRField jrField) method. The getFieldValue() method implementation gets the field index in the currentValue object via a call to the getFieldIndex(String field) method. This method iterates through the mapped field names passed to the HibernateDataSource constructor until it finds the field name it was passed and then returns the index of this field in the currentValue information. The getFieldValue() method then returns the value at this index in the currentValue result object.&lt;br /&gt;&lt;br /&gt;More extensive solutions to using Hibernate with JasperReports, including the use of reflection instead of the name mapping method used in HibernateDataSource, can be found on the Hibernate Web site www.hibernate.org/79.html. Also of interest in this area is the report optimization implementation advocated by John Ferguson Smart in his article "Hibernate Querying 103: Using Hibernate Queries with JasperReports" (see Resources). &lt;br /&gt;&lt;br /&gt;Exporting Reports to PDF and XLS Formats in Web Applications&lt;br /&gt;After compiling and filling a JasperReport report exporting it is a fairly simple and straightforward process using the net.sf.jasperreports.engine.JRExporter interface implementations provided. JasperReports can export data to PDF, XLS, CSV, RTF, HTML, and XML from the same report design using the appropriate implementation of the JRExporter interface. The PDF and XLS formats are two of the most common export formats and examples of exporting to these formats from within a Web application can be found in the source code for this article. PrintServlet exports to PDF, while DataExtractServlet exports the same data to an XLS format file.&lt;br /&gt;&lt;br /&gt;PrintServlet (see Listing 9) is a an example servlet implementation class using JasperReports to export a report to PDF format. JasperReports makes use of the Open Source iText PDF creation library (see Resources) to generate PDF format files. Once the report is compiled in PrintServlet, the PDF is created and streamed to the Web browser ready for printing using the runReportToPdfStream(InputStream inputStream, OutputStream outputStream, Parameters params, Connection connection) method implemented by the JasperRunManager facade class.&lt;br /&gt;&lt;br /&gt;DataExtractServlet (see Listing 10) is an example servlet implementation class using JasperReports to export a report to the XLS format. JasperReports makes use of the Apache POI library (see Resources) to generate XLS format files. Once the report is compiled in DataExtractServlet the XLS file is created in memory and a save dialog is displayed to the user. The servlet uses net.sf.jasperReports.engine.export.JRXlsExporter, one of the concrete implementations of the JRExporter interface provided by JasperReports to export the report. The parameters for exporting the report are initialized using JRXlsExporterParameter variables to set the filled report (JRXlsExporterParameter.JASPER_PRINT) and the output stream (JRXlsExporterParameter.OUTPUT_STREAM) - which is the response object that has had its content type and header set so that the file will be made available to the user for saving rather than displayed as in the PrintServlet example when exportReport() is called.&lt;br /&gt;&lt;br /&gt;Useful Hint: By default JasperReport puts page headings at the top of every 'page' of data. When exporting to an XLS format this breaks up the continuous data in a worksheet that contains more than a single 'page' of data. Data continuity can be maintained by passing the type of output format as a parameter to a report template combined with a &lt;printExpression&gt; element based on the passed parameter placed in the &lt;pageHeader&gt; element. The &lt;printExpression&gt; below will result in only the page headings being output to a 'page' if the report is processing the first page when the output format isn't PDF and on every 'page' for PDF output formats. &lt;br /&gt;&lt;br /&gt;&lt;printWhenExpression&gt;&lt;br /&gt;&lt;![CDATA[$V{PAGE_NUMBER}.intValue() == 1&lt;br /&gt;|| $P{REPORT_TYPE}.equals("PDF")&lt;br /&gt;? Boolean.TRUE : Boolean.FALSE]]&gt;&lt;br /&gt;&lt;/printWhenExpression&gt; &lt;br /&gt;&lt;br /&gt;Creating Reports Is Easy and Fun with JasperReports&lt;br /&gt;Hopefully this article has whetted your appetite for exploring the world of report generation using JasperReports, or if you've already discovered JasperReports, that it's provided some ideas on how to delve into creating custom data sources or using new export formats. Understanding and mastering the implementation of the required JRDataSource methods next() and getFieldValue(JRField jrField) opens up any data source for use in generating reports with JasperReports.&lt;br /&gt;&lt;br /&gt;Creating reports with JasperReports is made even simpler by some useful tools. iReport (see Resources), an excellent JasperReports template creation tool that allows visual report designs in a GUI application can be used by non-developers to create the JasperReport designs. It also offers substantial developer-focused functionality such as data source connectivity to create report previews outside of an application. JasperAssistant (see Resources), while not Open Source has the advantage of being an Eclipse plug-in for developing JasperReport templates in a similar GUI manner, albeit more developer-oriented. Both offer the benefit of being able to prepare a report design, which can then be provided to a developer for filling, relieving him of the tedious presentation aspect of report generation.&lt;br /&gt;&lt;br /&gt;This article has barely scratched the surface of JasperReports' extensive use and functionality but hopefully it's introduced some developers to an extremely useful tool in any Java developer's arsenal. JasperReports can even produce charts and graphs, as well as including images in reports that increase the richness and presentation of an applications reporting system. JasperReports is a powerful API that can take a reporting system to the next level.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-3715220339250668014?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/3715220339250668014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=3715220339250668014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3715220339250668014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3715220339250668014'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/reporting-made-easy-with-jasperreports.html' title='Reporting Made Easy with JasperReports and Hibernate'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-5318269021092758806</id><published>2008-02-29T02:26:00.000-08:00</published><updated>2008-02-29T02:28:48.410-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HowTo: JasperReports framework. Deployment to Tomcat'/><title type='text'>HowTo: JasperReports framework. Deployment to Tomcat</title><content type='html'>JasperReports framework does not ship report engine WAR file - you have to build it yourself. &lt;br /&gt;&lt;br /&gt;Building JasperReports report engine WAR file&lt;br /&gt;&lt;br /&gt;1. Download jasperreports-1.2.6-project.zip, unzip it to directory jasper. &lt;br /&gt;&lt;br /&gt;2. Create Eclipse project: New-&gt;Project-&gt;General-&gt;Project. Location should point to jasper directory. &lt;br /&gt;&lt;br /&gt;3. In the Eclipse Navigatior, select jasperreports-1.2.6\demo\samples\webapp\build.xml, open it, select war target, right-click-&gt;RunAs-&gt;Ant Build. The jasper-webapp.war file is built in jasperreports-1.2.6\demo\samples\webapp\ directory. &lt;br /&gt;&lt;br /&gt;Deploying JasperReports report engine WAR file to Tomcat&lt;br /&gt;&lt;br /&gt;1. Copy jasper-webapp.war file to tomcat\webapps directory. Start Tomcat, it will unzip the WAR file. &lt;br /&gt;&lt;br /&gt;Deploying JasperReports report to Tomcat&lt;br /&gt;&lt;br /&gt;For each report, you should have one file with .jasper extension (compiled report definition). &lt;br /&gt;1. Copy the report file to jasper-webapp\reports directory. &lt;br /&gt;&lt;br /&gt;2. Copy JDBC driver, required by your report, to jasper-webapp\WEB-INF\lib directory. &lt;br /&gt;&lt;br /&gt;3. Modify jasper-webapp\jsp\html.jsp JSP file to load .jasper file, open database connection and render the report as HTML: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;%@ page errorPage="error.jsp" %&gt;&lt;br /&gt;&lt;%@ page import="datasource.*" %&gt;&lt;br /&gt;&lt;%@ page import="net.sf.jasperreports.engine.*" %&gt;&lt;br /&gt;&lt;%@ page import="net.sf.jasperreports.engine.util.*" %&gt;&lt;br /&gt;&lt;%@ page import="net.sf.jasperreports.engine.export.*" %&gt;&lt;br /&gt;&lt;%@ page import="net.sf.jasperreports.j2ee.servlets.*" %&gt;&lt;br /&gt;&lt;%@ page import="java.util.*" %&gt;&lt;br /&gt;&lt;%@ page import="java.io.*" %&gt;&lt;br /&gt;&lt;%@ page import="java.sql.*" %&gt;&lt;br /&gt;&lt;br /&gt;&lt;%&lt;br /&gt; File reportFile = new File(application.getRealPath("/reports/MyReport.jasper"));&lt;br /&gt;   if (!reportFile.exists())&lt;br /&gt;  throw new JRRuntimeException("File WebappReport.jasper not found. The report design must be compiled first.");&lt;br /&gt;&lt;br /&gt; JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());&lt;br /&gt;&lt;br /&gt; Map parameters = new HashMap();&lt;br /&gt; parameters.put("ReportTitle", "Address Report");&lt;br /&gt; parameters.put("BaseDir", reportFile.getParentFile());&lt;br /&gt; &lt;br /&gt; Class.forName ("com.mysql.jdbc.Driver");&lt;br /&gt; Connection connection = DriverManager.getConnection ("jdbc:mysql://XX.XX.XX.XX/world", "userId", "password"); &lt;br /&gt;    &lt;br /&gt; JasperPrint jasperPrint = &lt;br /&gt;  JasperFillManager.fillReport(&lt;br /&gt;   jasperReport, &lt;br /&gt;   parameters, &lt;br /&gt;   connection&lt;br /&gt;   );&lt;br /&gt;&lt;br /&gt; connection.close();&lt;br /&gt;    &lt;br /&gt; JRHtmlExporter exporter = new JRHtmlExporter();&lt;br /&gt;&lt;br /&gt; exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);&lt;br /&gt; exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);&lt;br /&gt; exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image=");&lt;br /&gt; &lt;br /&gt; exporter.exportReport();&lt;br /&gt;%&gt;&lt;br /&gt;4. Restart Tomcat. &lt;br /&gt;&lt;br /&gt;5. Invoke your report, using URL like: "http://localhost:8080/jasper-webapp/jsp/html.jsp".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-5318269021092758806?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/5318269021092758806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=5318269021092758806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5318269021092758806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5318269021092758806'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/howto-jasperreports-framework.html' title='HowTo: JasperReports framework. Deployment to Tomcat'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-6742465446554051915</id><published>2008-02-29T02:20:00.000-08:00</published><updated>2008-02-29T02:26:36.101-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How to call Stored Procedures from JasperReports'/><title type='text'>How to call Stored Procedures from JasperReports</title><content type='html'>Jasper Reports is unable to call Oracle stored procedures directly, because procedures do not return standard result sets. As a solution, in Oracle, you can use a stored function to retrieve the results of a stored procedure. There are a few more steps to do this than if you were able to use a stored procedure, but it currently is the only option, if the query you need to do can’t be done with a standard SQL query.&lt;br /&gt;&lt;br /&gt;In order to to use stored functions to retrieve the result set of a stored procedure, you will need to use a temp table to hold the results, and then return the results using types and tables of types.&lt;br /&gt;&lt;br /&gt;Note: In this example, I have kept the function very limited. This particular query would not need to be done with a stored procedure and function, as a standard select query would be best, but is only used to demonstrated how to do it, should the need arise.&lt;br /&gt;&lt;br /&gt;I have provided all the sql used in this demo, in this file.&lt;br /&gt;&lt;br /&gt;Setup&lt;br /&gt;For this example, the table Presidents will be used. Sample data will also need to be loaded into the table. You can use the file I provided above, with all the example’s sql to create the table and load it with sample data.&lt;br /&gt;&lt;br /&gt;Now that there is a base table and data to work with, creation of the objects needed for the stored function can begin.&lt;br /&gt;&lt;br /&gt;Step 1: Create a Temp Table&lt;br /&gt;First, create a temp table to temporarily hold the results from the stored procedure, so the Jasper Report can query it via the stored function, with a standard select query. To create the temp table, use this sql:&lt;br /&gt;&lt;br /&gt;CREATE GLOBAL TEMPORARY TABLE “TEMP_PRESIDENTS” (&lt;br /&gt;     ID NUMBER(10) not null,&lt;br /&gt;     NAME VARCHAR(32) not null,&lt;br /&gt;     BIRTHDATE DATE not null,&lt;br /&gt;     PARTY char(1) not null&lt;br /&gt;) ON COMMIT PRESERVE ROWSStep 2: Create the Stored Procedure&lt;br /&gt;Next, create the stored procedure which will perform the needed data gathering. In this simple example, the query will select all rows based on the party passed (R for republican, D for democrat).&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE “LOAD_TEMP_PRESIDENTS” (&lt;br /&gt;partyParam CHAR )&lt;br /&gt;as&lt;br /&gt;begin&lt;br /&gt;     EXECUTE IMMEDIATE ‘TRUNCATE TABLE TEMP_PRESIDENTS’;&lt;br /&gt;     COMMIT;&lt;br /&gt;&lt;br /&gt;     INSERT INTO TEMP_PRESIDENTS&lt;br /&gt;     SELECT ID, NAME, BIRTHDATE, PARTY FROM PRESIDENTS WHERE PARTY = partyParam;&lt;br /&gt;     COMMIT;&lt;br /&gt;end;Step 3: Test the Stored Procedure&lt;br /&gt;Before proceeding any further, call the stored procedure and then check the temp table to be sure it behaves properly (sql below). You should get a result of all the Democrat Presidents, four of them. If not, you will need to retrace your steps.&lt;br /&gt;&lt;br /&gt;call LOAD_TEMP_PRESIDENTS(‘D’);&lt;br /&gt;select * from TEMP_PRESIDENTS;Step 4: Create the Return Type&lt;br /&gt;This step creates the type that will be used to return the results from the temp table. This type should describe the result set you are expecting in the Jasper Report.&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE TYPE “PRESIDENT_TYPE” AS OBJECT (&lt;br /&gt;     ID NUMBER(10),&lt;br /&gt;     NAME VARCHAR2(32),&lt;br /&gt;     BIRTHDATE DATE,&lt;br /&gt;     PARTY CHAR(1)&lt;br /&gt;)Step 5: Create a Table of the Type&lt;br /&gt;In this step we create a table of the type we created in the previous step. This “table” is what we will be selecting from in the Jasper Report. It is not a real table, but instead a type or object representing the structure of the table that we will funnel the stored procedures results through.&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE TYPE “PRESIDENT_TYPE_TABLE” AS TABLE OF “PRESIDENT_TYPE”Step 6: Create the Stored Function&lt;br /&gt;The next step is to create the stored function with the following code, to retrieve all the presidents for the party you select (R or D).&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION “PRESIDENTS_FUNC” (&lt;br /&gt;partyParam CHAR&lt;br /&gt;)&lt;br /&gt;return PRESIDENT_TYPE_TABLE pipelined&lt;br /&gt;is&lt;br /&gt;PRAGMA AUTONOMOUS_TRANSACTION;&lt;br /&gt;&lt;br /&gt;TYPE ref0 is REF CURSOR;&lt;br /&gt;myCursor ref0;&lt;br /&gt;out_rec PRESIDENT_TYPE := PRESIDENT_TYPE(0, null, null, null);&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;LOAD_TEMP_PRESIDENTS(partyParam);&lt;br /&gt;&lt;br /&gt;open myCursor for&lt;br /&gt;select id,&lt;br /&gt;name,&lt;br /&gt;birthdate,&lt;br /&gt;party&lt;br /&gt;from TEMP_PRESIDENTS;&lt;br /&gt;&lt;br /&gt;LOOP FETCH myCursor into&lt;br /&gt;out_rec.ID,&lt;br /&gt;out_rec.NAME,&lt;br /&gt;out_rec.BIRTHDATE,&lt;br /&gt;out_rec.PARTY;&lt;br /&gt;&lt;br /&gt;EXIT WHEN myCursor%NOTFOUND;&lt;br /&gt;PIPE ROW(out_rec);&lt;br /&gt;END LOOP;&lt;br /&gt;CLOSE myCursor;&lt;br /&gt;&lt;br /&gt;RETURN;&lt;br /&gt;END;Step 7: Testing and Using the Stored Function&lt;br /&gt;In order to use the stored function you execute the code below:&lt;br /&gt;&lt;br /&gt;select * from table(PRESIDENTS_FUNC(‘D’))This code can now be used within a Jasper Report, as you have turned a stored procedure into a stored function accessible with a standard select. To the Jasper Report you are merely issuing a standard query.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-6742465446554051915?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/6742465446554051915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=6742465446554051915' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6742465446554051915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6742465446554051915'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/how-to-call-stored-procedures-from.html' title='How to call Stored Procedures from JasperReports'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-6423550611766406973</id><published>2008-02-29T02:16:00.000-08:00</published><updated>2008-02-29T02:20:06.519-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flexible reporting with JasperReports and iBATIS'/><title type='text'>Flexible reporting with JasperReports and iBATIS</title><content type='html'>Integrate JasperReports with your existing iBATIS implementation &lt;br /&gt;&lt;br /&gt;The core task of many Java applications is to retrieve data and display it, sometimes in sophisticated print- or Web-based reports. Luckily for Java developers, two popular open source solutions work especially well together to help you accomplish this task. The iBATIS Data Mapper framework provides a simple XML-based mechanism for linking Java objects to a data repository. JasperReports is a full featured Java reporting library that you can embed in your applications. Put the two together and you have a winning combination for producing scalable, easy-to-maintain reports. &lt;br /&gt;&lt;br /&gt;JasperReports is an open source Java reporting library that is quickly gaining popularity as a viable alternative to costly proprietary reporting solutions. With any reporting solution, getting the data to the reporting engine is the most basic implementation concern. Unfortunately, Jasper poses a small problem in this area. &lt;br /&gt;&lt;br /&gt;Most Java applications use some type of data-fetching framework for data mapping and dynamic SQL generation, such as the iBatis Data Mapper Framework. Jasper's default mechanism for retrieving and managing data isn't flexible enough to leverage existing data mapping frameworks, however. Instead, you pass the Jasper engine a connection to your database, and it uses SQL queries embedded in an XML-based report template to populate the report. &lt;br /&gt;&lt;br /&gt;Although simple to implement, this mechanism ties you to the Jasper template's embedded SQL. Besides, who wants to add yet another moving piece to an already complex application? You would be better off leveraging the existing data framework and just letting Jasper handle report generation. &lt;br /&gt;&lt;br /&gt;In this article you'll learn how to integrate JasperReports and the iBATIS Data Mapper Framework for just such a solution. I'll walk through two simple scenarios where the goal is to integrate Jasper and iBATIS for report generation. The first scenario applies to iBATIS implementations that use iBATIS's data capabilities to return a list of Java beans. This scenario doesn't require you to write any custom code. The Jasper framework contains supporting classes that allow the data returned from iBATIS to fill a Jasper report. &lt;br /&gt;&lt;br /&gt;For the second scenario -- a more basic uses of iBATIS that returns a list of java.util.Map objects -- you'll create a custom Jasper data source to feed a Jasper report. In addition to working with the Jasper framework classes, for both exercises you'll use the iReport report designer, which eases and accelerates the process of creating template files in Jasper. &lt;br /&gt;&lt;br /&gt;Running the examples&lt;br /&gt;This article's example code generates a simple monthly sales report for each type of implementation I cover. The data for the reports is retrieved from an embedded Apache Derby database via the iBATIS Data Mapper framework. The examples are built into a JSF/Spring-based Web application that runs in the same JVM as Derby. I've provided an Ant script for building that WAR file -- just execute the buildWar task to compile content and build it. You'll need Tomcat 5.5x to deploy and run the examples. You'll also need the Abode Acrobat Reader Web browser plug-in to view the report output. &lt;br /&gt;&lt;br /&gt;Getting the iBATIS data into Jasper&lt;br /&gt;Using iBATIS to return a list of a specific type of Java beans (I'll call this a return list) is much tidier than using the framework to return a list of java.util.Map objects. Most developers using iBATIS take this approach to data mapping, and it happens to make integration with Jasper a snap. &lt;br /&gt;&lt;br /&gt;The Jasper framework provides a JRDataSource implementation that your application can use to fill a report template with data from an iBATIS return list. The JRBeanCollectionDataSource class is constructed from a collection of Java beans and knows how to loop through the collection and access the beans' properties. Listing 1 shows how you can pass an instance of a JRBeanCollectionDataSource when calling on the Jasper engine to populate a report. &lt;br /&gt;&lt;br /&gt;Listing 1. Populating a report with JRBeanCollectionDataSource&lt;br /&gt;                        /* Helper method to create a fully populated JasperPrint object from an list of Java beans */&lt;br /&gt;private JasperPrint fillReport (List dataList) throws JRException {&lt;br /&gt;   &lt;br /&gt;    // this map could be filled with parameters defined in the report&lt;br /&gt;    Map parameters = new HashMap();&lt;br /&gt;   &lt;br /&gt;    // make sure the .jasper file (a compiled version of the .jrxml template file) exists&lt;br /&gt;    String localPath = this.servlet.getServletContext().getRealPath("/");&lt;br /&gt;      &lt;br /&gt;    File reportFile = new File(localPath + "WEB-INF" + File.separator + "monthySales.jasper");&lt;br /&gt;      &lt;br /&gt;    if (!reportFile.exists()) {&lt;br /&gt;        throw new JRRuntimeException("monthySales.jasper file not found.");&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    // load up the report&lt;br /&gt;    JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile);&lt;br /&gt;   &lt;br /&gt;    // pass JRBeanCollectionDataSource (which is populated with iBATIS list) to fillReport method&lt;br /&gt;    return JasperFillManager.fillReport (jasperReport, parameters,&lt;br /&gt;         new JRBeanCollectionDataSource (dataList));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;                     &lt;br /&gt;In Listing 1, you first define the parameters map, which is the mechanism for passing parameter values to the report at runtime. For example, you could define a parameter named REPORT_TITLE in the report template and pass the value for this parameter to the report by simply adding the key/value pair to the map (e.g., Key=REPORT_TITLE, Value=Sale Report). The parameters map is passed to the fillReport method. The next portion of code loads a compiled Jasper template (.jasper) file. Finally, the static fillReport method is called. It does the actual work of building the report and returns a JasperPrint object, which is passed to a specific type of Jasper exporter to write out the report. The example code for this article uses a JRPdfExporter to write the report to PDF format (see the PdfServlet.java class). &lt;br /&gt;&lt;br /&gt;Although this mechanism lets the Jasper framework link with iBATIS, you might need to modify the Java beans that iBATIS populates, depending on your report's requirements. Jasper's field objects know how to work with the common JDBC mapping types. For example, Jasper stores an Oracle numeric field type as a java.math.BigDecimal object. Any of the iBATIS bean properties that you plan to use in a report must map to one of Jasper's defined field types. You should select your report field types carefully, because the formatting and expression capabilities are better in some types than in others. For example, a BigDecimal type is more convenient to work with than a String when you're trying to apply a currency format.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-6423550611766406973?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/6423550611766406973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=6423550611766406973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6423550611766406973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6423550611766406973'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/flexible-reporting-with-jasperreports.html' title='Flexible reporting with JasperReports and iBATIS'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-8047575626560264346</id><published>2008-02-29T02:13:00.000-08:00</published><updated>2008-02-29T02:16:17.117-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Export Swing components to PDF'/><title type='text'>Export Swing components to PDF</title><content type='html'>Use JFreeChart and iText to draw charts&lt;br /&gt;&lt;br /&gt;Suppose you've written an application with a GUI using Swing components such as JTable or JTextPane. All these components are derived from the abstract class javax.swing.JComponent, which includes the print(Graphics g) method: You can use this method to let the Swing component print itself to iText's PdfGraphics2D object. &lt;br /&gt;&lt;br /&gt;(Note: This article excerpts Chapter 12, "Drawing to Java Graphics2D," from iText in Action, Bruno Lowagie (Manning Publications, December 2006; ISBN: 1932394796): http://www.manning.com/lowagie.) &lt;br /&gt;&lt;br /&gt;Figure 1 shows a simple Java application with a JFrame. It contains a JTable found in Sun's Java tutorial on Swing components. If you click the first button, the contents of the table are added to a PDF using createGraphicsShapes() (the upper PDF in the screenshot). If you click the second button, the table is added using createGraphics() (the lower PDF, using the standard Type 1 font Helvetica). Notice the subtle differences between the fonts used for both variants. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 1. A Swing application with a JTable that is printed to PDF two different ways. Click on thumbnail to view full-sized image.&lt;br /&gt;&lt;br /&gt;If you run this example, try changing the content of the JTable; the changes are reflected in the PDF. If you select a row, the background of the row is shown in a different color in the Java applications as well as in the PDF. &lt;br /&gt;&lt;br /&gt;The code to achieve this is amazingly simple:&lt;br /&gt;&lt;br /&gt;                         /* chapter12/MyJTable.java */&lt;br /&gt;public void createPdf(boolean shapes) {&lt;br /&gt;   Document document = new Document();&lt;br /&gt;   try {&lt;br /&gt;      PdfWriter writer;&lt;br /&gt;      if (shapes)&lt;br /&gt;         writer = PdfWriter.getInstance(document,&lt;br /&gt;            new FileOutputStream("my_jtable_shapes.pdf"));&lt;br /&gt;      else&lt;br /&gt;         writer = PdfWriter.getInstance(document,&lt;br /&gt;            new FileOutputStream("my_jtable_fonts.pdf"));&lt;br /&gt;      document.open();&lt;br /&gt;      PdfContentByte cb = writer.getDirectContent();&lt;br /&gt;      PdfTemplate tp = cb.createTemplate(500, 500);&lt;br /&gt;      Graphics2D g2;&lt;br /&gt;      if (shapes)&lt;br /&gt;         g2 = tp.createGraphicsShapes(500, 500);&lt;br /&gt;      else&lt;br /&gt;         g2 = tp.createGraphics(500, 500);&lt;br /&gt;      table.print(g2);&lt;br /&gt;      g2.dispose();&lt;br /&gt;      cb.addTemplate(tp, 30, 300);&lt;br /&gt;      } catch (Exception e) {&lt;br /&gt;      System.err.println(e.getMessage());&lt;br /&gt;   }&lt;br /&gt;   document.close();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;                     &lt;br /&gt;The next example was posted to the iText mailing list by Bill Ensley (bearprinting.com), one of the more experienced iText users on the mailing list. It's a simple text editor that allows you to write text in a JTextPane and print it to PDF. &lt;br /&gt;&lt;br /&gt;Figure 2 shows this application in action.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 2. A simple editor with a JTextPane that is drawn onto a PDF file. Click on thumbnail to view full-sized image.&lt;br /&gt;&lt;br /&gt;The code is a bit more complex than the JTable example. This example performs an affine transformation before the content of the JTextPane is painted: &lt;br /&gt;&lt;br /&gt;                         /* chapter12/JTextPaneToPdf.java */&lt;br /&gt;Graphics2D g2 = cb.createGraphics(612, 792, mapper, true, .95f);&lt;br /&gt;AffineTransform at = new AffineTransform();&lt;br /&gt;at.translate(convertToPixels(20), convertToPixels(20));&lt;br /&gt;at.scale(pixelToPoint, pixelToPoint);&lt;br /&gt;g2.transform(at);&lt;br /&gt;g2.setColor(Color.WHITE);&lt;br /&gt;g2.fill(ta.getBounds());&lt;br /&gt;Rectangle alloc = getVisibleEditorRect(ta);&lt;br /&gt;ta.getUI().getRootView(ta).paint(g2, alloc);&lt;br /&gt;g2.setColor(Color.BLACK);&lt;br /&gt;g2.draw(ta.getBounds());&lt;br /&gt;g2.dispose();&lt;br /&gt;&lt;br /&gt;                     &lt;br /&gt;Numerous applications use iText this way. Let me pick two examples; one free/open source software (FOSS) product and one proprietary product: &lt;br /&gt;&lt;br /&gt;JasperReports, a free Java reporting tool from JasperSoft, allows you to deliver content onto the screen; to the printer; or into PDF, HTML, XLS, CSV, and XML files. If you choose to generate PDF, iText's PdfGraphics2D object is used behind the scenes. &lt;br /&gt;ICEbrowser is a product from ICEsoft. ICEbrowser parses and lays out advanced Web content (XML/HTML/CSS/JS); PDF is generated by rendering the parsed documents to the PdfGraphics2D object. &lt;br /&gt;It's not my intention to make a complete list of products that use iText. The main purpose of these two examples is to answer the following question: Can I build iText into my commercial product? Lots of people think open source is the opposite of commercial, but that's a misunderstanding. It's not because iText is FOSS that it can only be used in other free products. It's not because iText is free that it isn't a "commercial" product. As long as you respect the license, you can use iText in your closed-source or proprietary software. &lt;br /&gt;&lt;br /&gt;Another useful aspect of iText's Graphics2D functionality is that it opens the door to using iText in combination with other libraries with graphical output—for instance, Apache Batik, a library that is able to parse SVG; or JFreeChart, a library that will be introduced in the next section. &lt;br /&gt;&lt;br /&gt;Drawing charts with JFreeChart&lt;br /&gt;Suppose you need to make charts showing demographic information. You take the student population of the Technological University of Foobar and graph the number of students per continent. &lt;br /&gt;&lt;br /&gt;To make these charts, you'll combine iText with JFreeChart, an interesting library developed by David Gilbert and Thomas Morgner. The Website jfree.org explains that JFreeChart is "a free Java class library for generating charts, including pie charts (2D and 3D), bar charts (regular and stacked, with an optional 3D effect), line and area charts, scatter plots and bubble charts, time series, high/low/open/close charts and candle stick charts, combination charts, Pareto charts, Gantt charts, wind plots, meter charts and symbol charts, and wafer map charts." &lt;br /&gt;&lt;br /&gt;These charts can be rendered on an AWT (Abstract Window Toolkit) or Swing component, they can be exported to JPEG or PNG, and you can combine JFreeChart with Apache Batik to produce SVG or with iText to produce PDF. &lt;br /&gt;&lt;br /&gt;Figure 3 shows PDFs with a pie chart and a bar chart created using JFreeChart and iText. In JFreeChart, you construct a JFreeChart object using the ChartFactory. One of the parameters passed to one of the methods to create the chart is a dataset object. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 3. Foobar statistics represented in a pie chart and a bar chart. Click on thumbnail to view full-sized image.&lt;br /&gt;&lt;br /&gt;The code to create the charts shown in Figure 3 is simple:&lt;br /&gt;&lt;br /&gt;                         /* chapter12/FoobarCharts.java */&lt;br /&gt;public static JFreeChart getBarChart() {&lt;br /&gt;   DefaultCategoryDataset dataset = new DefaultCategoryDataset();&lt;br /&gt;   dataset.setValue(57, "students", "Asia");&lt;br /&gt;   dataset.setValue(36, "students", "Africa");&lt;br /&gt;   dataset.setValue(29, "students", "S-America");&lt;br /&gt;   dataset.setValue(17, "students", "N-America");&lt;br /&gt;   dataset.setValue(12, "students", "Australia");&lt;br /&gt;   return ChartFactory.createBarChart("T.U.F. Students",&lt;br /&gt;      "continent", "number of students", dataset,&lt;br /&gt;      PlotOrientation.VERTICAL, false, true, false);&lt;br /&gt;}&lt;br /&gt;public static JFreeChart getPieChart() {&lt;br /&gt;   DefaultPieDataset dataset = new DefaultPieDataset();&lt;br /&gt;   dataset.setValue("Europe", 302);&lt;br /&gt;   dataset.setValue("Asia", 57);&lt;br /&gt;   dataset.setValue("Africa", 17);&lt;br /&gt;   dataset.setValue("S-America", 29);&lt;br /&gt;   dataset.setValue("N-America", 17);&lt;br /&gt;   dataset.setValue("Australia", 12);&lt;br /&gt;   return ChartFactory.createPieChart("Students per continent",&lt;br /&gt;      dataset, true, true, false);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;                     &lt;br /&gt;The previous code snippet creates two JFreeChart objects. The following code snippet shows how to create a PDF file per chart: &lt;br /&gt;&lt;br /&gt;                         /* chapter12/FoobarCharts.java */&lt;br /&gt;public static void convertToPdf(JFreeChart chart,&lt;br /&gt;   int width, int height, String filename) {&lt;br /&gt;   Document document = new Document(new Rectangle(width, height));&lt;br /&gt;   try {&lt;br /&gt;      PdfWriter writer;&lt;br /&gt;      writer = PdfWriter.getInstance(document, new FileOutputStream(filename));&lt;br /&gt;      document.open();&lt;br /&gt;      PdfContentByte cb = writer.getDirectContent();&lt;br /&gt;      PdfTemplate tp = cb.createTemplate(width, height);&lt;br /&gt;      Graphics2D g2d = tp.createGraphics(width, height, new DefaultFontMapper());&lt;br /&gt;      Rectangle2D r2d = new Rectangle2D.Double(0, 0, width, height);&lt;br /&gt;      chart.draw(g2d, r2d);&lt;br /&gt;      g2d.dispose();&lt;br /&gt;      cb.addTemplate(tp, 0, 0);&lt;br /&gt;   }&lt;br /&gt;   catch(Exception e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;   }&lt;br /&gt;   document.close();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;                     &lt;br /&gt;The chart is drawn on a PdfTemplate. This object can easily be wrapped in an iText Image object if you want to add it to the PDF with document.add().&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-8047575626560264346?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/8047575626560264346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=8047575626560264346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8047575626560264346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8047575626560264346'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/export-swing-components-to-pdf.html' title='Export Swing components to PDF'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-724937172294408727</id><published>2008-02-29T02:08:00.000-08:00</published><updated>2008-02-29T02:13:02.321-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamic PDF generation with JasperReports'/><category scheme='http://www.blogger.com/atom/ns#' term='Struts and a database'/><title type='text'>Dynamic PDF generation with JasperReports, Struts and a database</title><content type='html'>A requirement appeared recently as part of a Purchase Ordering application to allow a user to dynamically generate a PDF copy of the final Purchase Order to send to the supplier. Taking a look around I stumbled rather fortunately upon an API called JasperReports (JR). JasperReports is a powerful open source Java reporting tool that has the ability to deliver rich content onto the screen, to the printer or into PDF, HTML, XLS, CSV and XML files. This tutorial is aimed at the beginner JR user who is happy with J2EE web application development. It will show you how JR was used to deliver the requirement described and should convince you that it is a truly fantastic piece of kit.&lt;br /&gt;&lt;br /&gt;What we will be doing in 1 sentence&lt;br /&gt;&lt;br /&gt;You will define a report template using JR’s XML syntax and then bind data from a database into it and get a PDF sent back to a web browser.&lt;br /&gt;&lt;br /&gt;What will I need&lt;br /&gt;&lt;br /&gt;OK, you need a few bits of kit. Firstly, I hate to break it to you but I kind of cheated with defining the report template. See, thing is, you can write this manually, but I didn’t have time to learn the ins and outs of JR’s XML syntax, so I got hold of JasperAssistant, a brilliant Eclipse IDE plugin that allows a developer to visually draw their report for JR. If like me you use Eclipse, or indeed you just want to use this method for creating your report template, grab Eclipse and JasperAssistant. There is also another tool called iReport that does a similar thing without Eclipse but you’ll need to look at that yourself. So, you will need&lt;br /&gt;&lt;br /&gt;JasperReports - head to the Download section &lt;br /&gt;Either JasperAssistant, iReports OR a willingness to learn the JR XML syntax for which there are many examples with the JR distribution. Whichever method you chose, I leave it to you to configure the environment - full instructions are available on each site. &lt;br /&gt;A knowledge of J2EE web application development. In this tutorial I shall be using Struts but only in the slightest way to illustrate how to send the PDF back to the web user. You can do the same stuff with a plain old Servlet. &lt;br /&gt;Creating the report template&lt;br /&gt;&lt;br /&gt;First of all, you need to think about what data your report needs to show. In my scenario, we are talking about a Purchase Ordering application. In this application is the master object called PurchaseOrder. A PurchaseOrder has at least one or more LineItem stored in a list collection. Each of these 2 objects have other attributes that reveal information, e.g the PuchaseOrder has a createdDate and orderId whereas a LineItem has a description and unitCost. These objects are persisted to a database. It is not really important how, it may be via a series of SQL statements or it may be via some Object Relational Mapping API such as Hibernate (which for the record, is how I have done it), but what matters is that you have code in place to save and fetch your particular application objects/data. Now, my report layout requires that the header contain master detail such as the created date and order id and then to list all the line items in a table below. Finally, some more master detail such as delivery address is required at the foot. JR divides up a report into a series of stacked bands from top to bottom, e.g title, header, detail and footer are names of some bands. In my case, I chose to use the header, detail and footer bands for the areas I have just mentioned.&lt;br /&gt;&lt;br /&gt;Parameters, fields and static text&lt;br /&gt;&lt;br /&gt;Using JasperAssistant, I was able to draw my report layout using guides and properties boxes. You may do the same or do it manually, but the main elements that I had to use were parameters, fields and static text. JR has a mechanism for binding a Map of data to a report. This is referred to as a parameter map. The idea being that the map element’s key is used for binding the map element’s value to the parameter defined in the report. For example, if I have an empty report with a parameter declaration orderId as follows:&lt;br /&gt;&lt;br /&gt;l version="1.0" encoding="UTF-8–&gt;http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;then I would need a corresponding Map&lt;br /&gt;&lt;br /&gt;Map map = new HashMap(); map.put(orderId, “12345″);&lt;br /&gt;I will show how you can bind this to the report later. In addition to the parameter map mechanism, you can also use something called a DataSource. You musn’t think a DataSource is a database necessarily like it is with an application server. A DataSource is an object that provides methods that can be called by the report in obtaining rows of data. For my purposes if you remember, I have a collection of LineItem elements inside my PurchaseOrder and I need to loop through them outputting to a table in my report. The way I achieved this was by implementing JR’s DataSource interface JRDataSource. This interface requires an implementation provide methods;&lt;br /&gt;&lt;br /&gt;public boolean next() throws JRException;&lt;br /&gt;public Object getFieldValue(JRField field) throws JRException;&lt;br /&gt;In your report, you must define fields in the detail band. When the report is run together with the custom implementation, JR will automatically keep calling next and then attempt to bind each field in the detail band to a call to getFieldValue(JRField field).&lt;br /&gt;&lt;br /&gt;Since my implementation of JRDataSource will return operation on a collection of LineItem I have named my DataSource LineItemDataSource. It has 2 class variables; private List data; private int index; Which is an internal data List to use (which I will populate with LineItem objects later), and the index allows us to know at which position we are in iteration of the List. That’s why you need to use List, because it is indexed and has methods for getting elements at certain indexes.&lt;br /&gt;&lt;br /&gt;I also have an add(LineItem lineItem) for adding LineItem objects. Now, the implementation of next is quite simple:&lt;br /&gt;&lt;br /&gt;public boolean next() throws JRException {&lt;br /&gt;  index++;&lt;br /&gt;  return (index &lt; data.size());&lt;br /&gt;}&lt;br /&gt;I increase the index by 1, and then return a boolean as to whether the index is still within the List’s bounds. JR will use this to determine if any more binding to fields in the detail band is required. Finally, the implementation of getFieldValue. First, let’s show you how to define iterating fields in your report template. You need to define fields in your detail band like this:&lt;br /&gt;&lt;br /&gt;&lt; ![CDATA[$F{getItemName}]]&gt; &lt; ![CDATA[$F{getItemCost}]]&gt;&lt;br /&gt;The detail band is iterated over using the custom DataSource implementation which I will show you in a moment. What is important is that you declare your textField elements along with their child textFieldExpression elements. The textFieldExpression tells the JR binding process what fields (by name) to look for in the DataSource. You can call these whatever you like, but as you can see in my case, I have decided to call them getXXX like a traditional bean accessor. Why have I done this? Well, because my LineItem object has matching accessor methods. So now let’s return to the custom DataSource implementation of getFieldValue. Here is the full listing:&lt;br /&gt;&lt;br /&gt;public Object getFieldValue(JRField field) throws JRException {&lt;br /&gt;  LineItem lineItem = (LineItem) data.get(index);&lt;br /&gt;  Object value = null;&lt;br /&gt;  try {&lt;br /&gt;    Object[] args = {};&lt;br /&gt;    Class[] paramTypes = {};&lt;br /&gt;    Class lineItemClass = lineItem.getClass();&lt;br /&gt;    Method getMethod = lineItemClass.getDeclaredMethod(field.getName(), paramTypes);&lt;br /&gt;    value = “” + getMethod.invoke(lineItem, args);&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;    throw new JRException(e.getMessage());&lt;br /&gt;  }&lt;br /&gt;  return value;&lt;br /&gt;}&lt;br /&gt;Clever huh? You don’t have to do it like this, but I have decided to use Java Reflection in order to dynamically call the appropriate LineItem method for the JRField parameter. That is why I named my textFieldExpression elements with getXXX. So, now if I were ever to add a new attribute to LineItem that I wanted in my report, I only need add it to LineItem with the accessors, and then into the report. I can leave my custom DataSource alone. One last note, I have defined all my fields as String even through my LineItem has attributes of float, int, Calendar. I am not really bothered that the report uses correct data types, but you can do that if you want, just set it up with your fields.&lt;br /&gt;&lt;br /&gt;Putting it all together&lt;br /&gt;&lt;br /&gt;So, you have hopefully got an idea about how JR works, particularly for my Purchase Order scenario. You should understand that a report template is defined by you either manually or using an editor like JasperAssistant. You will also appreciate 2 ways in which you can bind data to this report through parameters and fields. Furthermore, you have seen a clever way to use both methods in binding a master object with internal collection of elements to a report template. So now you probably want to see how to get the PDF back to the user. Well, remember that I am using a web application here but you don’t necessarily need to. First of all, I need to load my PurchaseOrder with it’s collection. You can do this however you like. In my case, I use Hibernate to load the object out of the database. PurchaseOrder po = poDAO.load(id); Now, I need to setup a parameter map for the master details&lt;br /&gt;&lt;br /&gt;Map parameterMap = new HashMap();&lt;br /&gt;parameterMap.put(“orderId”, po.getOrderId());&lt;br /&gt;parameterMap.put(“createdDate”, convertToDateString(po.getCreated()));&lt;br /&gt;parameterMap.put(“deliveryAddress”, po.getDeliveryAddress());&lt;br /&gt;There are a lot more! But this will do. Finally, I need to add my LineItem collection to my custom DataSource LineItemDataSource&lt;br /&gt;&lt;br /&gt;LineItemDataSource lineItemDataSource = new LineItemDataSource(po.getLineItems());&lt;br /&gt;And last of all, let’s setup the response to the browser, and bind the parameter map and custom DataSource.&lt;br /&gt;&lt;br /&gt;response.setContentType(“application/pdf”);&lt;br /&gt;response.addHeader(&lt;br /&gt;  “Content-Disposition”,&lt;br /&gt;  “attachment; filename=PO - “ + po.getReference() + “.pdf”); &lt;br /&gt;try {&lt;br /&gt;  JasperRunManager.runReportToPdfStream( getClass().getClassLoader().getResourceAsStream( “com/mycomp/po/pof.jasper”), response.getOutputStream(), parameters, lineItemDataSource );&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;  e.printStackTrace(System.out);&lt;br /&gt;  logger.error(e);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Right, so I have used just one of the many ways in which you can bind to the report. You will of course need to find out how to compile your report template. When you author your template it is in .jrxml format and this needs to be compiled into a .jasper file which you can do either automatically with JasperAssistant, or manually with bundled tools with JR. In my example here, the compiled report is located in the class struture and I dynamically load it as an InputStream as required by the runReportToPdfStream method.&lt;br /&gt;&lt;br /&gt;You should examine the JR API for all the other alternatives including running PDFs to file and even doing HTML output rather than PDF. In an application you would need to use slightly different calls that can be found in the JR API also. Some of you have asked how to send the result direct to the browser. Well, that’s easy - the code above forces a Save to Disk for the PDF by using the content-disposition header, so just comment out the response.addHeader call&lt;br /&gt;&lt;br /&gt;/* comment the save to disk feature out so that the pdf goes straight to the browser response.addHeader("Content-Disposition", "attachment; filename=PO - " + po.getReference() + ".pdf"); */&lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;This tutorial has covered some specific aspects of the fantastic JasperReports API that may or may not be suitable for your own projects. I hope if nothing else, it provides an insight into one way of using the API or grounds you in the basics. There is so much more to JR that I have not used myself so take time once you get the idea to look at the bundled examples and API to make sure you are making the right choices.&lt;br /&gt;&lt;br /&gt;JasperAssistant was an invaluable piece of kit for this job. It is quite tough getting to grips with the report template XML syntax, especially when your report needs pixel perfect alignment and so fourth. I did not go into a great deal of depth with layout elements like boxes and lines, but I have used them to draw the table boundaries around my detail LineItem band. Good luck, and if this article was helpful or not, leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-724937172294408727?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/724937172294408727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=724937172294408727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/724937172294408727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/724937172294408727'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/dynamic-pdf-generation-with.html' title='Dynamic PDF generation with JasperReports, Struts and a database'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-5648517502977451522</id><published>2008-02-29T02:07:00.000-08:00</published><updated>2008-02-29T02:08:54.758-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Comparing FOP and JasperReports'/><title type='text'>Comparing FOP and JasperReports</title><content type='html'>Anybody looking for OSS reporting solutions in Java usually has to make a choice between Apache FOP and Jasper Reports*. While having somewhat different feature sets and addressing distinct reporting solutions, the two APIs boil down to the same basic thing : generate a report from an XML file (or stream/string/whatever). FOP has a clear advantage of standardization (based on XSL-Formatting Objects) while Jasper plays more in the pragmatic field of obtaining those 80% results with a minimum of effort and uses a proprietary XML format.&lt;br /&gt;&lt;br /&gt;But FOP is not a standalone reporting solution : it's just a way of transforming XSL-FO files into a report. In order to fill the report with the necessary data, the obvious choice is a templating engine such as Jakarta Velocity. Thus a FOP report creation is a two-step operation :&lt;br /&gt;&lt;br /&gt;create the XML report via Velocity &lt;br /&gt;feed the XML stream to FOP &lt;br /&gt;Jasper alleviates this problem by including its own binding engine, the only restriction being that input data should support some constraints (such as putting your 'rows' inside a JRDataSource).&lt;br /&gt;&lt;br /&gt;Both Jasper and FOP allow inclusion of graphic files inside, usual formats (GIF, JPEG) are supported, however FOP has a nice bonus of rendering SVG inside reports. Unfortunately, this comes with the price of using Batik SVG Toolkit, which is a bulky (close to 2MB) and rather slow API. While processing your dynamic charts as XML files (Velocity again) is a seducing idea, the abysmal performance of SVG rendering will make you give up in no time. Unfortunately, I speak from experience. &lt;br /&gt;&lt;br /&gt;At first sight, FOP has a lot more options for output format, compared to Jasper Reports. Of course there's PDF and direct printing via AWT, but also Postscript, PCL, MIF as well as SVG. These choices are quite intriguing, since Postscript and PCL are printing formats (easily obtained by redirecting the specific printer queue into a file), MIF is a rather obscure Adobe format (for Framemaker) and SVG … well, a SVG report is too darn slow to be useable (yes, I was foolish enough to try this, too). Jasper makes again a pragmatic choice by allowing really useful output formats such as HTML, CSV and XSL (never underestimate the power of Excel); and of course: direct printing via AWT and PDF.&lt;br /&gt;While FOP's latest version (0.20.5) was released almost a year ago (summer 2003), Jasper Reports is bubbling with activity - Teodor releases a minor version each one or two months (latest being 0.5.3 at 18.05.2004).&lt;br /&gt;&lt;br /&gt;I've decided to use as a 'lab rat' one of the apps developed during my 'startup days': the client GUI is written in Swing and features a few mildly complex reports generated using Velocity+FOP. FOP version is 0.20.4 (the current version back in Q1-2003, when we had to quit dreaming about the 'next financing round' and development halted) but as I already told you FOP has evolved little since then. Though, it's perfectly reasonable to use this implementation as a witness for comparison with Jasper (on the opposite, Jasper has evolved a great deal since Q1-2003).&lt;br /&gt;&lt;br /&gt;Back then, the report development cycle was quite simplistic. In fact, the XSL-FO templates were written by hand inside a text editor and the application code was run (via a Junit testcase and some necessary configuration and business data mocking) in order to generate a PDF report. In the case of errors, we had feedback by examining the error traces. Visual feedback was given by the PDF output. While simple to perform, this cycle was extremely tiresome after a while as there was an important overhead : start a new JVM, initialize FOP, fire Acrobat Reader (plus we were using some crappy - even by the standards of 2003 - 1GHz machines w 256/512MB RAM). A WYSIWYG editor would have been nice, so one of my coworkers has made some research and the only solution he found was XMLSpy (Stylevision not available back then) - but, at 800USD/seat this was 'a bit' pricey** for us (only the Enterprise flavor covers FO WYSIWYG editing !?). Another interesting idea was to use one of the conversion tools (from RTF to FOP) such as Jfor, XMLMind or rtf2fo (of these products, only Jfor is free, but feature-poor). What stopped us from doing it was that the generated FO was overly complex : we needed comprehensible cut_the_crap files because we were going to integrate inside Velocity templates. And when you have tens of tags and blocks inside blocks and not the slightest idea which one is a row, which one is a column and which one is a transparent dumbass artefact, it's a gruesome trial-and-error task to integrate even simple VTL loops. And you'd have to do this each time you change something in the report : yikes ! Conclusion : the report development cycle was primitive for FOP and there was no way we could change it.&lt;br /&gt;&lt;br /&gt;Things are quite different for Jasper Report : there are a lot of available report designers, and some of them are free. While the complete list is on Jasper Report site, I'd like to note at least three of them :&lt;br /&gt;&lt;br /&gt;iReport is a Swing editor and very interesting because it's not only covering the basic Jasper functionality but also supplementary features such as barcode support (which is admittedly as easy as embedding a barcode font in Jasper with two lines of XML, but much easier to make it via a mouse click). iReport is free, which is excellent, but is a standalone app without IDE integration, and as any complex Swing app is quite slow and a memory hog. &lt;br /&gt;if you are a developer using Eclipse, you'd appreciate two graphical editors based on Eclipse GEF, available as Eclipse plugins : JasperAssistant and SunshineReports. None of them is free and, at least on paper, the functionality seem identical, but SunshineReports has only the older 1.1 version downloadable, which is free but does NOT work with recent builds of Eclipse 3. How the heck am I supposed to test it ? On the contrary, Assistant has a much more relaxed attitude allowing the download of a free trial for the latest version of their product. Maybe too relaxed, though, because - even if (theoretically) limited in number of usages - you can use the trial as much as you want to***. But if you are serious about doing Jasper in Eclipse you should probably buy Assistant, available for a rather decent 59USD price tag. I am currently using it and it's a good tool. &lt;br /&gt;So much for the tools, let's get the job done. The bad part : if you're experienced with FO templates, don't expect to be immediately proficient with Jasper, even with a GUI editor. The structure of an FO document has powerful analogies with HTML : you have tables, rows, cells, stuff like that, inside special constructs called blocks. It's relatively easy to use a language such as VTL in order to create nested tables, alternating colors and other data layout tricks. You can even render a tree-organized data via a recursive VTL macro, and everything is smooth and easy to understand. Jasper is completely different and at first sight you'll be shocked by its apparent lack of functionality : only rectangles, lines, ellipses, images, boilerplate text and fields (variable text). Each one of this elements has an extensive set of properties about when the element should be displayed, stretch type, associated expression for value and so on. Basically, you'd have to write Java code instead of Velocity macros and call this code from the corresponding properties of various report elements. If at the beginning it feels a little awkward, after a while it comes quite natural and simple. As for nesting and other advanced layouts, there is a powerful concept of 'subreport'. And yes I've managed to render a tree using a recursive subreport, but given the poor performance the final choice was to flatten the data into a vector then feed it into a simple Jasper report. So pay attention to the depth of 'subreporting'. &lt;br /&gt;&lt;br /&gt;Once the reports were completely migrated, I've benchmarked a simple one (without SVG, charts, barcodes or other 'exotic' characteristics). The test machine is a 2.4GHz P4 w 512MB Toshiba Satellite laptop. In the case of FOP, the compiled velocity template and the FOP Driver are cached between successive runs. In the case of Jasper, the report is precompiled and loaded only on first run, then refilled with new data before each generation. The lazy loading and caching of reporting engines is the cause of important time differences between the generation of the first report and the subsequent reports. Delta memory is measured after garbage collection. The values presented are median for 10 runs of the 'benchmark report'.&lt;br /&gt;&lt;br /&gt;  First run Subsequent runs Delta memory &lt;br /&gt;Velocity + FOP 10365ms 381ms 850KB &lt;br /&gt;Jasper Reports 1322ms 82ms 1012KB &lt;br /&gt;&lt;br /&gt;While I am totally pro-Jasper after this short experiment, it is important to note that commercial and well-maintained FO rendering engines such as RenderX XEP claim improved performance upon FOP. Depending on your requirements, environment and reporting legacy apps, an FO-based solution might be better, especially when report generation is only on server-side.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-5648517502977451522?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/5648517502977451522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=5648517502977451522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5648517502977451522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5648517502977451522'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/comparing-fop-and-jasperreports.html' title='Comparing FOP and JasperReports'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-8747713262811895873</id><published>2008-02-29T00:51:00.000-08:00</published><updated>2008-02-29T00:55:11.687-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Good advice for creating XML'/><title type='text'>Good advice for creating XML</title><content type='html'>The use of XML has become widespread, but much of it is not well formed. When it is well formed, it's often of poor design, which makes processing and maintenance very difficult. And much of the infrastructure for serving XML can compound these problems. In response, there has been some public discussion of XML best practices, such as Henri Sivonen's document, "HOWTO Avoid Being Called a Bozo When Producing XML." Uche Ogbuji frequently discusses XML best practices on IBM developerWorks, and in this column, he gives you his opinion about the main points discussed in such articles.&lt;br /&gt;&lt;br /&gt;I have been discussing XML best practices in this column and in other series for years. Others, such as fellow columnist Elliotte Rusty Harold, have covered it as well. The more XML experts that join the discussion of XML design principles, the better, so the community can converge on solid advice for developers at all levels of XML adoption. In this article, using a recent document and a classic one, you learn more details about XML best practices.&lt;br /&gt;&lt;br /&gt;Enter the no bozo zone&lt;br /&gt;&lt;br /&gt;Henri Sivonen wrote a useful article, "HOWTO Avoid Being Called a Bozo When Producing XML" (see Resources). Adopting the perspective of XML-based Web feed formats, such as RSS and Atom, he goes over his Dos and Don'ts for producing well-formed XML with namespaces. As he says in his introduction:&lt;br /&gt;&lt;br /&gt;    There seem to be developers who think that well-formedness is awfully hard -- if not impossible -- to get right when producing XML programmatically and developers who can get it right and wonder why the others are so incompetent. I assume no one wants to appear incompetent or to be called names. Therefore, I hope the following list of Dos and Don'ts helps developers to move from the first group to the latter. &lt;br /&gt;&lt;br /&gt;The first bit of advice Henri gives is, "Don't think of XML as a text format." I think this is dangerous advice. Certainly his main point is valid -- you cannot be as careless in producing or editing XML as you would a simple text document, but this applies to all text formats with any structure. However, saying that XML is not text is denying one of the most important characteristics of XML, one that is enshrined in the very definition of XML in the specification. ("A textual object is a well-formed XML document [if it conforms to this specification.]") Henri's statement is also confusing because there is a technical definition of text in XML that is essentially the sequence of characters interpreted as XML. Text is not merely what goes within leaf elements or within attributes -- technically called character data. Text is the fundamental fabric of all XML entities, so to say that XML is not text is a contradiction. I think it's more useful to highlight the specific ways in which XML differs from text formats with which developers might already be familiar.&lt;br /&gt;&lt;br /&gt;This comment is an example of how Henri's advice is colored by his interest in the problem of generating well-formed Web feeds. He is right to warn people that carelessly slapping strings together and hoping they are well formed is a dangerous course. I too have written articles advising people to use mature XML toolkits rather than simple text tools when generating XML (see Resources). My concern is that the way in which Henri couches this advice is a bit confusing and could be misconstrued in the broader context of XML processing. He reiterates his advice in the sections, "Don't use text-based templates" and "Don't print". I think this should be summarized as: "Do not use mechanisms that you're not sure will result in well-formed XML." That's very important advice indeed. One approach to safe XML generation is sending SAX events, as Henri suggests in, "Use a tree or a stack (or an XML parser)." If you do so, however, do not assume you are home free. The SAX tools you use might not do all the necessary well-formedness checking. For example, some Unicode characters are not allowed in XML. You may need an additional level of checking to account for such issues.&lt;br /&gt;&lt;br /&gt;Henri rightly suggests that users not try to manage namespaces by hand. As I've discussed on developerWorks, XML namespaces require a great deal of care. His suggestion that developers only think in terms of universal name [namespace Uniform Resource Identifier (URI) plus local name] is generally sound, but sometimes a developer cannot avoid dealing with prefixes or XML declarations. In specifications, such as XSLT, a QName (prefix/local name combination) can be used within attribute values, and the prefix is supposed to be interpreted according to in-scope namespace declarations. This kind of pattern is called a QName in context. In this case, the developer must have control over the declared prefix or the resulting XML processing will fail. When developers do manage their own namespace declarations, the result is often messy because of the complexities of XML namespaces.&lt;br /&gt;&lt;br /&gt;One way to clean up namespace syntax that might become messy while passing through a pipeline of XML processing is to insert a canonicalization step to the end of the pipeline. XML canonicalization eliminates the syntactic variations permitted by XML 1.0 and XML namespaces, including different namespace declaration patterns. Canonicalization will not eliminate all the issues that make namespace declarations treacherous to developers. Canonicalization does not help with QNames in context problems since it does not change the prefixes used in a document, but it does reduce the mess of namespace declarations to the point where you can easily spot problems or even write code to automatically fix them. The GenX library, which is one of the XML generation options Henri suggests, automatically generates canonical XML, and many other toolkits provide canonicalization as an option.&lt;br /&gt;&lt;br /&gt;Henri's advice about Unicode and character handling is almost completely sound. However, in "Avoid adding pretty-printing white space in character data," I think the case is a bit overstated. Pretty-printing XML is safe in most cases between elements, rather than within elements with character data. As Henri says, if you have the XML in Listing 1, it is usually not safe to render it as in Listing 2.&lt;br /&gt;&lt;br /&gt;Listing 1. XML sample&lt;br /&gt;&lt;br /&gt;&lt;foo&gt;bar&lt;/foo&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Listing 2. XML sample with white space added to character data&lt;br /&gt;&lt;br /&gt;&lt;foo&gt;&lt;br /&gt;  bar&lt;br /&gt;&lt;/foo&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But it is usually safe to pretty-print the XML in Listing 3, so that the output is as in Listing 4.&lt;br /&gt;&lt;br /&gt;Listing 3. Another XML sample&lt;br /&gt;&lt;br /&gt;&lt;doc&gt;&lt;foo&gt;bar&lt;/foo&gt;&lt;/doc&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Listing 4. XML sample in Listing 3 with white space added to character data&lt;br /&gt;&lt;br /&gt;&lt;doc&gt;&lt;br /&gt;  &lt;foo&gt;bar&lt;/foo&gt;&lt;br /&gt;&lt;/doc&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Many XML serializer tools understand this distinction between relatively safe and relatively unsafe pretty-printing. It is important to understand that the form of pretty-printing shown in Listings 3 and 4 can cause distortion if white space is added to mixed content. Such problems can be avoided if the serialization is guided by a schema. In practice, though, most vocabularies that use mixed content are not so sensitive to white space normalization, so don't worry too much about pretty-printing. You should be knowledgeable of the issues, and be sure there is an option to turn pretty-printing off (preferably the default should be to not pretty-print). Henri recommends a pretty-printing practice as in Listing 5, but I disagree because I think it makes for ugly markup that's not friendly to manipulation by people.&lt;br /&gt;&lt;br /&gt;Listing 5. Pretty-printing convention suggested by Henri Sivonen but not recommended by this author&lt;br /&gt;&lt;br /&gt;&lt;foo&lt;br /&gt;    &gt;bar&lt;/foo&lt;br /&gt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From the monastery&lt;br /&gt;&lt;br /&gt;Switching to a very different speed, the second resource I shall explore in this article is Simon St. Laurent's "Monastic XML" (see Resources). This is a collection of brief essays with advice on how to process and even think about XML for maximum effect. Simon uses the metaphors of monasticism and asceticism to suggest that it is dangerous to load XML too heavily with baggage that does not suit its simple, textual roots. In "Marking-up at the foundation," he discusses the fundamental roles of character data and markup (elements and attributes). In "Naming things and reading names," he explains why the generic identifier (also called the element type name) is an important concept and how it should be the sole primary key to the structure of the marked-up information. Realistically, if you're using XML namespaces, the primary key is the universal name (namespace URI plus local name), and this complication is one of the reasons Simon urges caution in "Namespaces as opportunity." "Accepting the discipline of trees" calls out one of XML's dirty secrets: Even though it seems that XML's hierarchical structure could be easily extended to graph structure, in practice, the modeling of graphs in XML has proven a bit difficult. But by far the most important lesson on the "Monastic XML" site is found in "Optimizing markup for processing is always premature." XML is a declarative technology, and therein lies its strengths, as well as its frustrations, for many developers. Developers who try to pull XML design too close to the details of processing generally end up making that processing more difficult in the long term. The key to success with XML is to focus on the nature of the information that needs to be represented in the abstract separately from the technical design of the systems that need to process that information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-8747713262811895873?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/8747713262811895873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=8747713262811895873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8747713262811895873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8747713262811895873'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/good-advice-for-creating-xml.html' title='Good advice for creating XML'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-4570828576100115877</id><published>2008-02-29T00:50:00.000-08:00</published><updated>2008-02-29T00:51:20.915-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Top 10 Eclipse Hotkeys'/><title type='text'>Top 10 Eclipse Hotkeys</title><content type='html'>Eclipse has lots and lots of hotkeys, but for daily work you need only a small subset. This are the hotkeys I consider to be the most important time savers:&lt;br /&gt;&lt;br /&gt;Moving around&lt;br /&gt;&lt;br /&gt;    * Ctrl+J — Incremental Search&lt;br /&gt;    * Ctrl+Shift+T — Search a type, with search on typing. You can use only the upcase letters (e.g. type “MIL” to find MouseInputListener)&lt;br /&gt;    * Ctrl+F6 — Switch between last used files&lt;br /&gt;    * F3 — Open declaration&lt;br /&gt;    * Ctrl+Alt+H — Open Call Hierarchy&lt;br /&gt;&lt;br /&gt;Editing&lt;br /&gt;&lt;br /&gt;    * Ctrl+1 — Quick Fix: press while cursor is positioned at member variable, parameter, selection, warnings, errors, …&lt;br /&gt;    * Ctrl+Space — Context Assist: press after a ., or to use macros (for, while, sysout, …). Press in class-scope to automatically create method declarations.&lt;br /&gt;    * Ctrl+Shift+O — Organize Imports&lt;br /&gt;    * Ctrl+Shift+F — Reformat source&lt;br /&gt;    * Alt+Shift+T — Show Refactor Quick Menu&lt;br /&gt;&lt;br /&gt;In case these hotkeys are not enough or you have forgotten which hotkey does what, you can always press Ctrl+Shift+L to get a nice list of all the hotkeys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-4570828576100115877?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/4570828576100115877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=4570828576100115877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/4570828576100115877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/4570828576100115877'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/top-10-eclipse-hotkeys.html' title='Top 10 Eclipse Hotkeys'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-8831914668178028562</id><published>2008-02-29T00:38:00.000-08:00</published><updated>2008-02-29T00:49:09.817-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Useful windows RUN Commands ...'/><title type='text'>Useful windows RUN Commands ...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GJWEaji4mN0/R8fG6mEaf8I/AAAAAAAAAFA/DwFNwaz7a1Q/s1600-h/282kcv9.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_GJWEaji4mN0/R8fG6mEaf8I/AAAAAAAAAFA/DwFNwaz7a1Q/s400/282kcv9.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5172321407012077506" /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;To Access…. - Run Command&lt;br /&gt;Accessibility Controls - access.cpl &lt;br /&gt;Add Hardware Wizard - hdwwiz.cpl &lt;br /&gt;Add/Remove Programs - appwiz.cpl &lt;br /&gt;Administrative Tools - control admintools &lt;br /&gt;Automatic Updates - wuaucpl.cpl &lt;br /&gt;Bluetooth Transfer Wizard - fsquirt &lt;br /&gt;Calculator - calc &lt;br /&gt;Certificate Manager - certmgr.msc &lt;br /&gt;Character Map - charmap &lt;br /&gt;Check Disk Utility - chkdsk &lt;br /&gt;Clipboard Viewer - clipbrd &lt;br /&gt;Command Prompt - cmd &lt;br /&gt;Component Services - dcomcnfg &lt;br /&gt;Computer Management - compmgmt.msc &lt;br /&gt;Date and Time Properties - timedate.cpl &lt;br /&gt;DDE Shares - ddeshare &lt;br /&gt;Device Manager - devmgmt.msc &lt;br /&gt;Direct X Control Panel (If Installed)* - directx.cpl &lt;br /&gt;Direct X Troubleshooter - dxdiag &lt;br /&gt;Disk Cleanup Utility - cleanmgr &lt;br /&gt;Disk Defragment - dfrg.msc &lt;br /&gt;Disk Management - diskmgmt.msc &lt;br /&gt;Disk Partition Manager - diskpart &lt;br /&gt;Display Properties - control desktop &lt;br /&gt;Display Properties - desk.cpl &lt;br /&gt;Display Properties (w/Appearance Tab Preselected) - control color &lt;br /&gt;Dr. Watson System Troubleshooting Utility - drwtsn32 &lt;br /&gt;Driver Verifier Utility - verifier &lt;br /&gt;Event Viewer - eventvwr.msc &lt;br /&gt;File Signature Verification Tool - sigverif &lt;br /&gt;Findfast - findfast.cpl &lt;br /&gt;Folders Properties - control folders &lt;br /&gt;Fonts - control fonts &lt;br /&gt;Fonts Folder - fonts &lt;br /&gt;Free Cell Card Game - freecell &lt;br /&gt;Game Controllers - joy.cpl &lt;br /&gt;Group Policy Editor (XP Prof) - gpedit.msc &lt;br /&gt;Hearts Card Game - mshearts &lt;br /&gt;Iexpress Wizard - iexpress &lt;br /&gt;Indexing Service - ciadv.msc &lt;br /&gt;Internet Properties - inetcpl.cpl &lt;br /&gt;IP Configuration (Display Connection Configuration) - ipconfig /all &lt;br /&gt;IP Configuration (Display DNS Cache Contents) - ipconfig /displaydns &lt;br /&gt;IP Configuration (Delete DNS Cache Contents) - ipconfig /flushdns &lt;br /&gt;IP Configuration (Release All Connections) - ipconfig /release &lt;br /&gt;IP Configuration (Renew All Connections) - ipconfig /renew &lt;br /&gt;IP Configuration (Refreshes DHCP &amp; Re - Registers DNS) - ipconfig /registerdns &lt;br /&gt;IP Configuration (Display DHCP Class ID) - ipconfig /showclassid &lt;br /&gt;IP Configuration (Modifies DHCP Class ID) - ipconfig /setclassid &lt;br /&gt;Java Control Panel (If Installed) - jpicpl32.cpl &lt;br /&gt;Java Control Panel (If Installed) - javaws &lt;br /&gt;Keyboard Properties - control keyboard &lt;br /&gt;Local Security Settings - secpol.msc &lt;br /&gt;Local Users and Groups - lusrmgr.msc &lt;br /&gt;Logs You Out Of Windows - logoff &lt;br /&gt;Microsoft Chat - winchat &lt;br /&gt;Minesweeper Game - winmine &lt;br /&gt;Mouse Properties - control mouse &lt;br /&gt;Mouse Properties - main.cpl &lt;br /&gt;Network Connections - control netconnections &lt;br /&gt;Network Connections - ncpa.cpl &lt;br /&gt;Network Setup Wizard - netsetup.cpl &lt;br /&gt;Notepad - notepad &lt;br /&gt;Nview Desktop Manager (If Installed) - nvtuicpl.cpl &lt;br /&gt;Object Packager - packager &lt;br /&gt;ODBC Data Source Administrator - odbccp32.cpl &lt;br /&gt;On Screen Keyboard - osk &lt;br /&gt;Opens AC3 Filter (If Installed) - ac3filter.cpl &lt;br /&gt;Password Properties - password.cpl &lt;br /&gt;Performance Monitor - perfmon.msc &lt;br /&gt;Performance Monitor - perfmon &lt;br /&gt;Phone and Modem Options - telephon.cpl &lt;br /&gt;Power Configuration - powercfg.cpl &lt;br /&gt;Printers and Faxes - control printers &lt;br /&gt;Printers Folder - printers &lt;br /&gt;Private Character Editor - eudcedit &lt;br /&gt;Quicktime (If Installed) - QuickTime.cpl &lt;br /&gt;Regional Settings - intl.cpl &lt;br /&gt;Registry Editor - regedit &lt;br /&gt;Registry Editor - regedit32 &lt;br /&gt;Remote Desktop - mstsc &lt;br /&gt;Removable Storage - ntmsmgr.msc &lt;br /&gt;Removable Storage Operator Requests - ntmsoprq.msc &lt;br /&gt;Resultant Set of Policy (XP Prof) - rsop.msc &lt;br /&gt;Scanners and Cameras - sticpl.cpl &lt;br /&gt;Scheduled Tasks - control schedtasks &lt;br /&gt;Security Center - wscui.cpl &lt;br /&gt;Services - services.msc &lt;br /&gt;Shared Folders - fsmgmt.msc &lt;br /&gt;Shuts Down Windows - shutdown &lt;br /&gt;Sounds and Audio - mmsys.cpl &lt;br /&gt;Spider Solitare Card Game - spider &lt;br /&gt;SQL Client Configuration - cliconfg &lt;br /&gt;System Configuration Editor - sysedit &lt;br /&gt;System Configuration Utility - msconfig &lt;br /&gt;System File Checker Utility (Scan Immediately) - sfc /scannow &lt;br /&gt;System File Checker Utility (Scan Once At Next Boot) - sfc /scanonce &lt;br /&gt;System File Checker Utility (Scan On Every Boot) - sfc /scanboot &lt;br /&gt;System File Checker Utility (Return to Default Setting) - sfc /revert &lt;br /&gt;System File Checker Utility (Purge File Cache) - sfc /purgecache &lt;br /&gt;System File Checker Utility (Set Cache Size to size x) - sfc /cachesize=x &lt;br /&gt;System Properties - sysdm.cpl &lt;br /&gt;Task Manager - taskmgr &lt;br /&gt;Telnet Client - telnet &lt;br /&gt;User Account Management - nusrmgr.cpl &lt;br /&gt;Utility Manager - utilman &lt;br /&gt;Windows Firewall - firewall.cpl &lt;br /&gt;Windows Magnifier - magnify &lt;br /&gt;Windows Management Infrastructure - wmimgmt.msc&lt;br /&gt;Windows System Security Tool - syskey &lt;br /&gt;Windows Update Launches - wupdmgr &lt;br /&gt;Windows XP Tour Wizard - tourstart &lt;br /&gt;Wordpad - write&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-8831914668178028562?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/8831914668178028562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=8831914668178028562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8831914668178028562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8831914668178028562'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/useful-windows-run-commands.html' title='Useful windows RUN Commands ...'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_GJWEaji4mN0/R8fG6mEaf8I/AAAAAAAAAFA/DwFNwaz7a1Q/s72-c/282kcv9.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-5085143907946515448</id><published>2008-02-29T00:36:00.000-08:00</published><updated>2008-02-29T00:37:47.064-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java Performance Tuning'/><title type='text'>Java Performance Tuning</title><content type='html'>I Love Binary Search (Page last updated June 2006, Added 2006-06-29, Author Tim Bray, Publisher Tim Bray). Tips:&lt;br /&gt;&lt;br /&gt;    * Binary search is O(log2(N)). This means that a 1 ms search of a million items, will take 1.05ms to search 2 million, 1.10ms to search 4 million, and a whole 1.301ms when you get up to 64 million!&lt;br /&gt;    * In absolute terms, a simple O(log2(N)) routine is often faster than a more complex O(1) routine up to any usable size of structure.&lt;br /&gt;    * With tree structures you can potentially search really large data sets, too large to fit into memory, using persistent on-disk structures.&lt;br /&gt;    * Binary search has minimal memory requirements.&lt;br /&gt;    * Binary search is simple enough that you can implement specialized searches that directly reference internal structures (which can avoid unecessary access overheads, though a JIT might eliminate those anyway)&lt;br /&gt;    * Memory is cheap, virtual memory mapping is efficient and pages in data, so memory mapping a file could be an efficient way to access a huge data structure.&lt;br /&gt;    * You can write a bunch of complicated code to manage the on-disk vs. in-memory parts of your data, or you can pretend it's all in memory and use memory mapped files to take care of the details - and any increase in RAM transparently improves performance. &lt;br /&gt;&lt;br /&gt;http://weblogs.java.net/blog/jfarcand/archive/2006/05/tricks_and_tips_1.html&lt;br /&gt;Why you must handle NIO OP_WRITE (Page last updated May 2006, Added 2006-06-29, Author Jean-Francois Arcand, Publisher java.net). Tips:&lt;br /&gt;&lt;br /&gt;    * When the write buffer is full, SocketChannel.write will return 0, and this needs to be handled in such a way that avoids CPU cycling.&lt;br /&gt;    * Obtaining a globally pooled object seems to be quicker than getting a thread local one.&lt;br /&gt;    * Checking select to see if a channel is writable in a separate thread can be more efficient than merging the select to the main select call then spinning off to a write thread (and maintaining the writable data accessible across threads) when it is writable - assuming clients are not normally slow consumers.&lt;br /&gt;    * Check for 0 (slow client) and -1 (disconnected client) from Selector.select() calls to handle slow/bad clients.&lt;br /&gt;    * Time 0 returns (slow client) and check for -1 (disconnected client) from Channel.read - if too many 0's, then maybe explicitly close the client as it is too slow producing data, and is consuming resources. &lt;br /&gt;&lt;br /&gt;http://weblogs.java.net/blog/jfarcand/archive/2006/06/tricks_and_tips.html&lt;br /&gt;Why SelectionKey.attach() is evil (Page last updated June 2006, Added 2006-06-29, Author Jean-Francois Arcand, Publisher java.net). Tips:&lt;br /&gt;&lt;br /&gt;    * Under load you might end up with 10 000 connections, so 10 000 active SelectionKeys. If they all have a ByteBuffer or other attachment, then a lot of memory will be consumed, reducing your scalability and having fun eating all your memory.&lt;br /&gt;    * Use SelectionKey.channel() to retrieve the SocketChannel, rather than having separate support in your framework.&lt;br /&gt;    * Leave a socket read on its own thread for a configurable length of time, assuming (optimistically) that the read will complete soon enough and allow you to avoid moving the data across to the generic selector thread.&lt;br /&gt;    * If a socket read is taking too long to get all the data, you can move the data (ByteBuffer) across to the generic selector thread (e.g. attached to the selector). In tests with Grizzly, on slow a network, with broken clients, etc., blocking read Threads scale better than moving a dormant ByteBuffer to the main selector thread.&lt;br /&gt;    * Aim to have one ByteBuffer per Thread, not per selector - this significantly improves scalability by not overloading the VM with dormant ByteBuffers. &lt;br /&gt;&lt;br /&gt;http://www.ddj.com/dept/java/188700760&lt;br /&gt;Java 5 &amp; 6 features (Page last updated June 2006, Added 2006-06-29, Author Matt Love, Publisher DrDobbs). Tips:&lt;br /&gt;&lt;br /&gt;    * The String concatenator operator (+, +=) should be avoided.&lt;br /&gt;    * StringBuilder is faster than StringBuffer, but not synchronized.&lt;br /&gt;    * Autoboxing imposes an order of magnitude overhead.&lt;br /&gt;    * Java 6 provides useful speedups, especially if escape analysis optimizes away object creation. &lt;br /&gt;&lt;br /&gt;http://www.javaworld.com/javaworld/jw-06-2006/jw-0619-tuning.html&lt;br /&gt;Common Java EE performance problems (Page last updated June 2006, Added 2006-06-29, Author Steven Haines, Publisher Javaworld). Tips:&lt;br /&gt;&lt;br /&gt;    * If the garbage collector cannot free enough memory to hold the new object, then it throws an OutOfMemoryError.&lt;br /&gt;    * Out-of-memory errors are associated with: application server crashes; Degraded performance; or seemingly endless repeated garbage collections that nearly halts processing and usually leads to an application server crash.&lt;br /&gt;    * A Java memory leak is the result of maintaining a lingering reference to an unused object: you are finished using an object, but because one or more other objects still reference that object, so the garbage collector cannot reclaim its memory.&lt;br /&gt;    * The following settings are recommended for monitoring garbage collection in a Sun JVM: -verbose:gc -xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps. Sun reports the overhead for this level of logging at approximately 5 percent.&lt;br /&gt;    * To determine the cause of a memory leak, run your application in a memory profiler and: Execute the use-case; Take a snapshot of the heap; Execute the use-case again; Take another snapshot of the heap; Compare the two heap snapshots and look for objects that should not remain in the heap after executing the use-case&lt;br /&gt;    * Wait until your application reaches this steady state prior to performing any trend analysis on the heap.&lt;br /&gt;    * Memory leaks from Web requests usually come from sessions. Look at: Page scope; Request scope; Session scope; Application scope; Static variables; Long-lived class variables; the HttpServletRequest object; the servlet init() method.&lt;br /&gt;    * Page- or request-scoped variables are automatically cleaned up before a web request completes.&lt;br /&gt;    * A workaround for large sessions is to increase the heap or decrease the session time-out.&lt;br /&gt;    * Store the minimum information in session-scoped variables.&lt;br /&gt;    * Explicitly invalidate sessions when users log out.&lt;br /&gt;    * Tune session time-out.&lt;br /&gt;    * Classes are loaded into Perm Space, and if this fills up, a full GC is triggered. With -noclassgc, no classes will be deleted from Perm space. This can lead to continual full GCs for no apparent reason.&lt;br /&gt;    * Perm space of 128m is reasonable, 256m reasonable if you have a particularly large number of (generated) classes. 512m suggests an architectural problem.&lt;br /&gt;    * After tuning memory, the tuning option with the biggest impact in an application server is the size of the execution thread pool.&lt;br /&gt;    * Too small a thread pool will leave requests waiting in the queue for processing; too large and the CPU could spend too much time context switching.&lt;br /&gt;    * Tune the thread pool size by looking at CPU utilization, the thread pool utilization and the number of pending requests (queue depth).&lt;br /&gt;    * The recommendation for a starting point when tuning thread pool size is between 50 and 75 threads per CPU.&lt;br /&gt;    * Garbage collection causes CPU spikes, while saturated thread pools (thread pool size too large) cause consistently high CPU utilization.&lt;br /&gt;    * A saturated CPU results in abysmal performance across the board, and performance is better if a request arrives, waits in a queue, and then is processed optimally. Aim for CPU between 75 and 85 percent utilized during normal user load.&lt;br /&gt;    * If an application is using too much CPU after thread pool tuning, you need to either tune the application code with a code profiler, or add additional hardware.&lt;br /&gt;    * Tune database connection pool so that utilization is running at 70 to 80 percent during average load and threads are rarely observed waiting for a connection. But avoid overloading the database.&lt;br /&gt;    * Make sure the prepared statement cache in the database is sufficiently large to cache all plans.&lt;br /&gt;    * Tune your cache sizes to optimize successful cache hits. Avoid cache thrashing - a low ratio of hits to miss on the cache.&lt;br /&gt;    * Minimize the number of transaction rollbacks. &lt;br /&gt;&lt;br /&gt;http://www.developer.com/java/other/article.php/3609776&lt;br /&gt;Using the Full-Screen Exclusive Mode API in Java (Page last updated May 2006, Added 2006-06-29, Author Richard G. Baldwin, Publisher developer.com). Tips:&lt;br /&gt;&lt;br /&gt;    * The Full-Screen Exclusive Mode API allows you to write Java programs that take over the entire screen.&lt;br /&gt;    * Active rendering is more responsive than passive rendering, and is usually used with full screen mode applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-5085143907946515448?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/5085143907946515448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=5085143907946515448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5085143907946515448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5085143907946515448'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/java-performance-tuning.html' title='Java Performance Tuning'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-1003708992149170267</id><published>2008-02-29T00:31:00.000-08:00</published><updated>2008-02-29T00:36:07.281-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Native file locks in java'/><title type='text'>Native file locks in java</title><content type='html'>Java 1.4 introduced the native io layer into the JDK. One of the nice things you can do with it is to execute a native file lock that gets acknowledged by both “fcntl”- and “flock”-style locking. This is tremendously helpful if you need to share resources with native programs. So what is in C&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  int fd = open("/path/to/file", O_RDWR);&lt;br /&gt;&lt;br /&gt;  if (flock(fd,LOCK_EX) != 0 ) { ... }&lt;br /&gt;&lt;br /&gt;  printf("locked file\\npress return");&lt;br /&gt;  char c = getchar();&lt;br /&gt;&lt;br /&gt;  if (flock(fd,LOCK_UN) != 0 ) { ... }&lt;br /&gt;&lt;br /&gt;  printf("released file\\n");&lt;br /&gt;  close(fd);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  int fd = open("/path/to/file", O_RDWR);&lt;br /&gt;&lt;br /&gt;  struct flock lock;&lt;br /&gt;  lock.l_type = F_WRLCK;&lt;br /&gt;  lock.l_whence = SEEK_SET;&lt;br /&gt;  lock.l_start = 0;&lt;br /&gt;  lock.l_len = 0;&lt;br /&gt;  lock.l_pid = 0;&lt;br /&gt;&lt;br /&gt;  if (fcntl(fd, F_SETLK, &amp;lock) == -1) { ... }&lt;br /&gt;&lt;br /&gt;  printf("locked file\\npress return");&lt;br /&gt;  char c = getchar();&lt;br /&gt;&lt;br /&gt;  lock.l_type = F_UNLCK;&lt;br /&gt;&lt;br /&gt;  if (fcntl(fd, F_SETLK, &amp;lock) == -1) { ... }&lt;br /&gt;&lt;br /&gt;  printf("released file\\n");&lt;br /&gt;  close(fd);&lt;br /&gt;&lt;br /&gt;becomes this in java&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;File file = new File("/path/to/file");&lt;br /&gt;FileChannel channel = new RandomAccessFile(file, "rw").getChannel();&lt;br /&gt;FileLock lock = channel.lock();&lt;br /&gt;&lt;br /&gt;System.out.println("locked file\\npress return");&lt;br /&gt;System.in.read();&lt;br /&gt;&lt;br /&gt;lock.release();&lt;br /&gt;System.out.println("released file\\n");&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-1003708992149170267?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/1003708992149170267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=1003708992149170267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1003708992149170267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1003708992149170267'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/native-file-locks-in-java.html' title='Native file locks in java'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-1274818584158823541</id><published>2008-02-29T00:25:00.000-08:00</published><updated>2008-02-29T00:30:39.785-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='World&apos;s fastest supercomputers (Blue gene/L)'/><title type='text'>World's fastest supercomputers (Blue gene/L)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GJWEaji4mN0/R8fCSmEaf6I/AAAAAAAAAEw/fuWQlZHq8mk/s1600-h/%21cid_000701c87770%242476d830%244e64a8c0%40gehan.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GJWEaji4mN0/R8fCSmEaf6I/AAAAAAAAAEw/fuWQlZHq8mk/s400/%21cid_000701c87770%242476d830%244e64a8c0%40gehan.jpg" alt="" id="BLOGGER_PHOTO_ID_5172316321770799010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GJWEaji4mN0/R8fBzGEaf3I/AAAAAAAAAEY/eOLgt-oFeK0/s1600-h/%21cid_000401c87770%2424746730%244e64a8c0%40gehan.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_GJWEaji4mN0/R8fBzGEaf3I/AAAAAAAAAEY/eOLgt-oFeK0/s400/%21cid_000401c87770%2424746730%244e64a8c0%40gehan.jpg" alt="" id="BLOGGER_PHOTO_ID_5172315780604919666" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GJWEaji4mN0/R8fCK2Eaf5I/AAAAAAAAAEo/-1JGt8Avn-E/s1600-h/%21cid_000601c87770%242476d830%244e64a8c0%40gehan.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_GJWEaji4mN0/R8fCK2Eaf5I/AAAAAAAAAEo/-1JGt8Avn-E/s400/%21cid_000601c87770%242476d830%244e64a8c0%40gehan.jpg" alt="" id="BLOGGER_PHOTO_ID_5172316188626812818" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GJWEaji4mN0/R8fB6WEaf4I/AAAAAAAAAEg/PlPAiTNBcOY/s1600-h/%21cid_000501c87770%242476d830%244e64a8c0%40gehan.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GJWEaji4mN0/R8fB6WEaf4I/AAAAAAAAAEg/PlPAiTNBcOY/s400/%21cid_000501c87770%242476d830%244e64a8c0%40gehan.jpg" alt="" id="BLOGGER_PHOTO_ID_5172315905158971266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GJWEaji4mN0/R8fCZ2Eaf7I/AAAAAAAAAE4/GZJZ8YmHNvQ/s1600-h/%21cid_000801c87770%242476d830%244e64a8c0%40gehan.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_GJWEaji4mN0/R8fCZ2Eaf7I/AAAAAAAAAE4/GZJZ8YmHNvQ/s400/%21cid_000801c87770%242476d830%244e64a8c0%40gehan.jpg" alt="" id="BLOGGER_PHOTO_ID_5172316446324850610" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-1274818584158823541?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/1274818584158823541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=1274818584158823541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1274818584158823541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1274818584158823541'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/worlds-fastest-supercomputers-blue.html' title='World&apos;s fastest supercomputers (Blue gene/L)'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_GJWEaji4mN0/R8fCSmEaf6I/AAAAAAAAAEw/fuWQlZHq8mk/s72-c/%21cid_000701c87770%242476d830%244e64a8c0%40gehan.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-3319637629490267825</id><published>2008-02-29T00:22:00.000-08:00</published><updated>2008-02-29T00:25:11.329-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Secuirty problem casts doubt on E-passports'/><title type='text'>Secuirty problem casts doubt on E-passports</title><content type='html'>&lt;table align="center" border="0" cellpadding="0" cellspacing="0" width="50%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td height="10"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;/tr&gt;                 &lt;/tbody&gt;&lt;/table&gt;                                                         &lt;p&gt;&lt;span id="Zoom"&gt;                          &lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;table style="width: 223px; height: 202px;" align="left" border="0" cellpadding="0" cellspacing="0" height="202" width="223"&gt;   &lt;tbody&gt;   &lt;tr&gt;     &lt;td&gt;&lt;img style="width: 283px; height: 213px;" alt="A recent demonstration shows that the hi-tech biometric E-passports could be hacked and information embedded could be copied and transferred to another device, which threw in doubt the passport-upgrading scheme used by the U.S., UK and other countries." src="http://news.xinhuanet.com/english/2006-08/07/xinsrc_2720803071026312245952.jpg" border="0" hspace="0" /&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;&lt;span style="color: rgb(0, 0, 128);font-size:85%;" &gt;A sample of E-passport reader. (File        Photo)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="Zoom"&gt;    BEIJING, Aug. 7 (Xinhuanet) -- A  demonstration showed the hi-tech biometric E-passports could  be hacked and information embedded could be copied and transferred to another  device.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="Zoom"&gt;    This threw in doubt the passport-upgrading scheme  used by the U.S., UK and other countries.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="Zoom"&gt;    Speaking Sunday at the Defcon security conference in  Las Vegas, Lukas Grunwald, a consultant with a German security company, said he  had discovered a method for cloning the information stored in the new  passports.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="Zoom"&gt;    Data can be transferred onto blank chips, which could then  be implanted in fake passports, a flaw which he said undermined the project.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="Zoom"&gt;    But the findings do not mean that all biometric  information could be faked or altered by criminals. Although the data held on a  passport chip is not encrypted, it is not yet possible to change the cloned data  without alerting the authorities.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="Zoom"&gt;    Grunwald said his discovery was made within two weeks  of first attempting to copy the data, and the equipment used cost 200 U.S.  dollors. It is believed the hacking principle could be applied to any new  passport issued in Britain, the US and other countries. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="Zoom"&gt;    It is the latest research to raise concerns about the  growing use of RFID, short for radio-frequency identification, a technology that  allows everyday objects such as store merchandise, livestock and security  documents to beam electronic data to computers equipped with special  antennas.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span id="Zoom"&gt;    Germany already used RFID in passports to help border  officials guard against forgeries and automate the processing of international  visitors. U.S. officials plan to start embedding RFID in passports in October.  Since March anyone applying for a UK passport has been issued with a biometric  version, which contains physical identification information. Enditem  &lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-3319637629490267825?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/3319637629490267825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=3319637629490267825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3319637629490267825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3319637629490267825'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/secuirty-problem-casts-doubt-on-e.html' title='Secuirty problem casts doubt on E-passports'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-5636423593387264274</id><published>2008-02-29T00:19:00.000-08:00</published><updated>2008-02-29T00:22:01.985-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='What is Defensive Copying'/><title type='text'>What is Defensive Copying</title><content type='html'>I was wondering what to blog about and then I saw the term defensive copying. I have heard this term mentioned a few times but wasn't sure quite what it was. So I thought it was time for a bit of investigation.&lt;br /&gt;&lt;br /&gt;So what is defensive copying, also sometime known as object copy. &lt;br /&gt;&lt;br /&gt;Defensive copying is concerned with protecting mutable objects e.g. objects who's state can be modified by the user. If you were pass back the reference of an object any changes a user made to that copy of the object would effect your object because you are only passes a reference to the object and not the actual object itself. This is known as a shallow copy.&lt;br /&gt;&lt;br /&gt;To avoid users being able to change the values of your object you can pass back a defensive copy. This means that instead of passing back a reference to your object it passes back a new object but with the same values. This means that any changes the user makes to that copy of the object doesn't change the value/state of your object.&lt;br /&gt;&lt;br /&gt;It's an interesting idea but I can't think of a use for this at the moment but I'm sure one day this will come in useful.&lt;br /&gt;&lt;br /&gt;Here are a couple of links to some probably better explanations with an example&lt;br /&gt;&lt;a href="http://www.javapractices.com/Topic15.cjp"&gt;&lt;br /&gt;http://www.javapractices.com/Topic15.cjp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Defensive_copy"&gt;http://en.wikipedia.org/wiki/Defensive_copy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first site Java practices has lots of useful articles and well worth checking out&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-5636423593387264274?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/5636423593387264274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=5636423593387264274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5636423593387264274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5636423593387264274'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/what-is-defensive-copying.html' title='What is Defensive Copying'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-7164651315627174335</id><published>2008-02-29T00:12:00.000-08:00</published><updated>2008-02-29T00:16:43.888-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Consumer memo: Google tests health record service'/><title type='text'>Consumer memo: Google tests health record service</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;span class="subhead"&gt;Health records test&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Google&lt;/strong&gt; will begin storing medical records of thousands of people as it tests a long-awaited health service that is likely to raise more concerns about the volume of sensitive information entrusted to the Internet search leader.&lt;/p&gt;&lt;p&gt;The pilot project, announced Thursday, will involve 1,500 to 10,000 patients at the &lt;strong&gt;Cleveland Clinic &lt;/strong&gt;who volunteered for an electronic transfer of their health records so they could be retrieved through Google’s new service, which won’t be open to the general public.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span class="subhead"&gt;GM, Toyota inquiry&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;General Motors Corp.&lt;/strong&gt;’s Pontiac Vibe sport wagon and &lt;strong&gt;Toyota Motor Corp.&lt;/strong&gt;’s Matrix wagon and Corolla sedan are under investigation by U.S. regulators after motorists’ complained that power windows got stuck and, in some cases, shattered.&lt;/p&gt;&lt;p&gt;The investigation may affect vehicles from the 2003-04 model years.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span class="subhead"&gt;Detecting bad beef&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DuPont &lt;/strong&gt;said it would team up with the &lt;strong&gt;U.S. Department of Agriculture &lt;/strong&gt;to develop improved methods for detecting E. coli bacteria in beef.&lt;/p&gt;&lt;p&gt;Researchers from the &lt;strong&gt;U.S. Meat Animal Research Center &lt;/strong&gt;in Nebraska will cooperate with company scientists to develop a new test for a bacteria that led to more than 30 million pounds of beef being recalled last year.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span class="subhead"&gt;AOL retools kids’ site&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;AOL&lt;/strong&gt;, facing a drop in subscribers who pay for Internet access, retooled its children’s Web site KOL by partnering with &lt;strong&gt;National Geographic &lt;/strong&gt;and &lt;strong&gt;GirlSense&lt;/strong&gt; to offer interactive games and activities.&lt;/p&gt;&lt;p&gt;The Web site is designed for children younger than 12. The retooled version lets children customize Web pages, receive e-mail and play more than 100 games.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span class="subhead"&gt;In brief&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;•&lt;strong&gt;Microsoft &lt;/strong&gt;plans to introduce the sequel to its “Gears of War” video game in November.&lt;/p&gt;&lt;p&gt;•Federal regulators Thursday approved a &lt;strong&gt;Wyeth&lt;/strong&gt; drug to prevent and control bleeding in patients with a rare blood-clotting disorder.&lt;/p&gt;&lt;p&gt;The &lt;strong&gt;Food and Drug Administration &lt;/strong&gt;cleared Xyntha for the treatment of hemophilia.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span class="subhead"&gt;Product recalls&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;•About 152,000 portable electric heaters, distributed by &lt;strong&gt;Aloha Housewares Inc&lt;/strong&gt;., because they can overheat and their plastic parts can melt. Details: 800-295-4448.&lt;/p&gt;•About 25,000 “Louisville/Davidson” and “Michigan” brand fiberglass extension ladders, made by &lt;strong&gt;Louisville Ladder Inc.&lt;/strong&gt;, because the extension or “fly” section can fail to lock.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-7164651315627174335?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/7164651315627174335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=7164651315627174335' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7164651315627174335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7164651315627174335'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/consumer-memo-google-tests-health.html' title='Consumer memo: Google tests health record service'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-2122232060424356380</id><published>2008-02-29T00:07:00.000-08:00</published><updated>2008-02-29T00:12:49.447-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Researchers Find Way to Steal Encrypted Data'/><title type='text'>Researchers Find Way to Steal Encrypted Data</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GJWEaji4mN0/R8e-WmEaf2I/AAAAAAAAAEQ/38-Ylq8rjQw/s1600-h/chip.600.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 606px; height: 281px;" src="http://bp1.blogger.com/_GJWEaji4mN0/R8e-WmEaf2I/AAAAAAAAAEQ/38-Ylq8rjQw/s400/chip.600.jpg" alt="" id="BLOGGER_PHOTO_ID_5172311992443764578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;img src="file:///D:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;img src="file:///D:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot-1.jpg" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;A group led by a &lt;a href="http://topics.nytimes.com/top/reference/timestopics/organizations/p/princeton_university/index.html?inline=nyt-org" title="More articles about Princeton University."&gt;Princeton University&lt;/a&gt; computer security researcher has developed a simple method to steal encrypted information stored on computer hard disks.        &lt;p&gt;The technique, which could undermine security software protecting critical data on computers, is as easy as chilling a computer memory chip with a blast of frigid air from a can of dust remover. Encryption software is widely used by companies and government agencies, notably in portable computers that are especially susceptible to theft.&lt;/p&gt;&lt;p&gt;The development, which was described on the &lt;a href="http://citp.princeton.edu/memory/"&gt;group’s Web site&lt;/a&gt; Thursday, could also have implications for the protection of encrypted personal data from prosecutors. &lt;/p&gt;&lt;p&gt;The move, which cannot be carried out remotely, exploits a little-known vulnerability of the dynamic random access, or DRAM, chip. Those chips temporarily hold data, including the keys to modern data-scrambling algorithms. When the computer’s electrical power is shut off, the data, including the keys, is supposed to disappear. &lt;/p&gt;&lt;p&gt;In a &lt;a href="http://citp.princeton.edu.nyud.net/pub/coldboot.pdf"&gt;technical paper&lt;/a&gt; that was published Thursday on the Web site of Princeton’s Center for Information Technology Policy, the group demonstrated that standard memory chips actually retain their data for seconds or even minutes after power is cut off.&lt;/p&gt;&lt;p&gt;When the chips were chilled using an inexpensive can of air, the data was frozen in place, permitting the researchers to easily read the keys — long strings of ones and zeros — out of the chip’s memory.&lt;/p&gt;&lt;p&gt; “Cool the chips in liquid nitrogen (-196 °C) and they hold their state for hours at least, without any power,” &lt;a href="http://topics.nytimes.com/top/reference/timestopics/people/f/edward_w_felten/index.html?inline=nyt-per" title="More articles about Edward W. Felten."&gt;Edward W.  Felten&lt;/a&gt;, a Princeton computer scientist, wrote in a Web posting. “Just put the chips back into a machine and you can read out their contents.”&lt;/p&gt;&lt;p&gt;The researchers used special pattern-recognition software of their own to identify security keys among the millions or even billions of pieces of data on the memory chip.&lt;/p&gt;&lt;p&gt;“We think this is pretty serious to the extent people are relying on file protection,” Mr. Felten said.&lt;/p&gt;&lt;p&gt;The team, which included five graduate students led by Mr. Felten and three independent technical experts, said they did not know if such an attack capability would compromise government computer information because details of how classified computer data is protected are not publicly available.&lt;/p&gt;&lt;p&gt;Officials at the &lt;a href="http://topics.nytimes.com/top/reference/timestopics/organizations/h/homeland_security_department/index.html?inline=nyt-org" title="More articles about the Homeland Security Department."&gt;Department of Homeland Security&lt;/a&gt;, which paid for a portion of the research, did not return repeated calls for comment.&lt;/p&gt;&lt;p&gt;The researchers also said they had not explored disk encryption protection systems as now built into some commercial disk drives.&lt;/p&gt;&lt;p&gt;But they said they had proved that so-called Trusted Computing hardware, an industry standard approach that has been heralded as significantly increasing the security of modern personal computers, does not appear to stop the potential attacks. &lt;/p&gt;&lt;p&gt;A number of computer security experts said the research results were an indication that assertions of robust computer security should be regarded with caution.&lt;/p&gt;&lt;p&gt;“This is just another example of how things aren’t quite what they seem when people tell you things are secure,” said Peter Neumann, a security researcher at SRI International in Menlo Park, Calif. &lt;/p&gt;&lt;p&gt;The Princeton researchers wrote that they were able to compromise encrypted information stored using special utilities in the Windows, Macintosh and Linux operating systems. &lt;/p&gt;&lt;p&gt;&lt;a href="http://topics.nytimes.com/top/news/business/companies/apple_computer_inc/index.html?inline=nyt-org" title="More information about Apple Inc."&gt;Apple&lt;/a&gt; has had a FileVault disk encryption feature as an option in its OS X operating system since 2003. &lt;a href="http://topics.nytimes.com/top/news/business/companies/microsoft_corporation/index.html?inline=nyt-org" title="More information about Microsoft Corporation"&gt;Microsoft&lt;/a&gt; added file encryption last year with BitLocker features in its Windows Vista operating system. The programs both use the federal government’s certified Advanced Encryption System algorithm to scramble data as it is read from and written to a computer hard disk. But both programs leave the keys in computer memory in an unencrypted form. &lt;/p&gt;&lt;p&gt;“The software world tends not to think about these issues,” said Matt Blaze, an associate professor of computer and information science at the &lt;a href="http://topics.nytimes.com/top/reference/timestopics/organizations/u/university_of_pennsylvania/index.html?inline=nyt-org" title="More articles about University of Pennsylvania"&gt;University of Pennsylvania&lt;/a&gt;. “We tend to make assumptions about the hardware. When we find out that those assumptions are wrong, we’re in trouble.”&lt;/p&gt;&lt;p&gt;Both of the software publishers said they ship their operating systems with the file encryption turned off. It is then up to the customer to turn on the feature.&lt;/p&gt;&lt;p&gt;Executives of Microsoft said BitLocker has a range of protection options that they referred to as “good, better and best.” &lt;/p&gt;&lt;p&gt;Austin Wilson, director of Windows product management security at Microsoft, said the company recommended that BitLocker be used in some cases with additional hardware security. That might include either a special U.S.B. hardware key, or a secure identification card that generates an additional key string. &lt;/p&gt;&lt;p&gt;The Princeton researchers acknowledged that in these advanced modes, BitLocker encrypted data could not be accessed using the vulnerability they discovered.&lt;/p&gt;&lt;p&gt;An Apple spokeswoman said that the security of the FileVault system could also be enhanced by using a secure card to add to the strength of the key.&lt;/p&gt;&lt;p&gt;The researchers said they began exploring the utilities for vulnerabilities last fall after seeing a reference to the persistence of data in memory in a &lt;a href="http://usenix.org/events/sec05/tech/full_papers/chow/chow.pdf"&gt;technical paper&lt;/a&gt; written by computer scientists at Stanford in 2005. &lt;/p&gt;&lt;p&gt;The Princeton group included Seth D. Schoen of the Electronic Frontier Foundation, William Paul of &lt;a href="http://www.nytimes.com/mem/MWredirect.html?MW=http://custom.marketwatch.com/custom/nyt-com/html-companyprofile.asp&amp;amp;symb=WIND" title="Wind River Systems"&gt;Wind River Systems&lt;/a&gt;  and Jacob Appelbaum, an independent computer security researcher.&lt;/p&gt;&lt;p&gt;The issue of protecting information with disk encryption technology became prominent recently in a criminal case involving a Canadian citizen who late in 2006 was stopped by United States customs agents who said they had found child pornography on his computer. &lt;/p&gt;&lt;p&gt;When the agents tried to examine the machine later, they discovered that the data was protected by encryption. The suspect has refused to divulge his password. A federal agent testified in court that the only way to determine the password otherwise would be with a password guessing program, which could take years.&lt;/p&gt;&lt;p&gt;A federal magistrate ruled recently that forcing the suspect to disclose the password would be unconstitutional. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-2122232060424356380?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/2122232060424356380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=2122232060424356380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2122232060424356380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2122232060424356380'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/researchers-find-way-to-steal-encrypted.html' title='Researchers Find Way to Steal Encrypted Data'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_GJWEaji4mN0/R8e-WmEaf2I/AAAAAAAAAEQ/38-Ylq8rjQw/s72-c/chip.600.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-3146446557529330082</id><published>2008-02-29T00:05:00.000-08:00</published><updated>2008-02-29T00:06:44.537-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='The Top 50 Proprietary Programs that Drive You Crazy — and Their Open Source Alternatives'/><title type='text'>The Top 50 Proprietary Programs that Drive You Crazy — and Their Open Source Alternatives</title><content type='html'>Not every proprietary program can drive a person crazy, right? Some, like Norton Ghost, are superb tools for anyone to use. But, the fact that these tools are proprietary can drive open source fanatics up a wall. It’s not the price of the software that makes the real difference (although it’s a reason to migrate from one software to another for many people); it’s the idea that proprietary software comes with boundaries that keeps the user experience confined to…well, being the user. That’s enough to drive any developer crazy. &lt;p&gt;The following fifty proprietary programs are listed in no particular order within broad categories along with their open source alternatives. In some cases you could probably write your own book on frustrations with the proprietary programs shown here. In other cases, you’ll discover that the open source alternative isn’t quite up to snuff yet. And, in other cases still, you’ll learn that some proprietary programs are real gems, but that the open source advocate can replace those gems with equally shiny objects from the open source repertoire.&lt;/p&gt; &lt;h2&gt;Basics&lt;/h2&gt; &lt;ol&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/windows/products/windowsvista/default.mspx" target="_blank"&gt;Windows      Vista&lt;/a&gt; OS to &lt;a href="http://www.ubuntu.com/" target="_blank"&gt;Ubuntu&lt;/a&gt; OS: &lt;/strong&gt;This      is Microsoft’s operating system (OS), and even Microsoft fans have become      &lt;a href="http://badvista.fsf.org/what-s-wrong-with-microsoft-windows-vista" target="_blank"&gt;disillusioned&lt;/a&gt;      with this product. Open source OS alternatives &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_open_source_operating_systems" target="_blank"&gt;have      expanded&lt;/a&gt;; but these OS often are difficult for the average user to install,      learn, and operate. Why deal with it when &lt;a href="http://www.ubuntu.com/" target="_blank"&gt;Ubuntu&lt;/a&gt; has become so easy to use that even the most computer illiterate can jump into this operating system with very little time spent on a learning curve? In fact, users can purchase a &lt;a href="http://www.dell.com/content/topics/segtopic.aspx/ubuntu?c=us&amp;amp;cs=19&amp;amp;l=en&amp;amp;s=dhs&amp;amp;dgc=IR&amp;amp;cid=11973&amp;amp;lid=471885" target="_blank"&gt;Dell&lt;/a&gt; computer with Ubuntu already installed. Remember, however, that when it comes to using open source software that the open source community often focuses on applications that can be used through Windows, Mac, Linux, or Unix with the majority seemingly devoted to Windows.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx" target="_blank"&gt;Internet      Explorer&lt;/a&gt; Browser to &lt;a href="http://www.mozilla.com/en-US/firefox/" target="_blank"&gt;Firefox&lt;/a&gt;      Browser&lt;/strong&gt;: Sure, Internet Explorer (IE) is free; but, that’s because it comes packaged with Windows’ operating systems. Free is far different from open source software, where users have more control over how that software works. While you might feel more comfortable with a proprietary operating system, you can still use an open source browser like Mozilla’s &lt;a href="http://www.mozilla.com/en-US/firefox/" target="_blank"&gt;Firefox&lt;/a&gt;,      an exceptional product that expands its use with ‘&lt;a href="https://addons.mozilla.org/en-US/firefox/" target="_blank"&gt;add-ons&lt;/a&gt;‘      created by avid users.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Office Suites&lt;/h2&gt; &lt;ol start="3"&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://office.microsoft.com/en-us/default.aspx" target="_blank"&gt;Microsoft      Office&lt;/a&gt; to &lt;a href="http://www.openoffice.org/" target="_blank"&gt;OpenOffice&lt;/a&gt;&lt;/strong&gt;: If the price makes you feel that Microsoft has worked you over, then switch! If you compare Microsoft’s Office with other products, then you’re looking for something that includes an email client, a word processor, a spreadsheet tool, and a multimedia presentation application. The only product that provides a competitive edge against Microsoft is &lt;a href="http://www.google.com/" target="_blank"&gt;Google&lt;/a&gt; (that includes Gmail, Google Docs, Google Presentation and more). But, some would argue that Google isn’t truly open source. So, the next best bet alternative would be &lt;a href="http://www.openoffice.org/" target="_blank"&gt;OpenOffice&lt;/a&gt;, an open source      project that includes everything you’d find in Microsoft Office except the      email client.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/mac/default.mspx" target="_blank"&gt;Mactopia&lt;/a&gt;      to &lt;a href="http://www.neooffice.org/neojava/en/index.php" target="_blank"&gt;NeoOffice&lt;/a&gt;&lt;/strong&gt;:      Another Microsoft office suite, but this time meant for MacIntosh computers.      Try &lt;a href="http://www.neooffice.org/neojava/en/index.php" target="_blank"&gt;NeoOffice&lt;/a&gt; instead. NeoOffice® is a full-featured set of office applications, including word processing, spreadsheet, presentation, drawing, and database programs for Mac OS X. This suite is based on the OpenOffice.org office suite, but it has integrated dozens of native Mac features and can import, edit, and exchange files with other popular office programs such as Microsoft Office.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Office Tools&lt;/h2&gt; &lt;ol start="5"&gt;&lt;li&gt;&lt;a href="http://www.mathworks.com/products/matlab/" target="_blank"&gt;&lt;strong&gt;MathWorks MATLAB&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://www.scilab.org/" target="_blank"&gt;Scilab&lt;/a&gt;&lt;/strong&gt;: MATLAB is a highly used application for numerical computing. It provides a programming language that allows users to work with numbers in any possible way imaginable through visualization. Scilab is the open source alternative to MATLAB, and it provides visualization of numerical data just as MATLAB does. Scilab is partly compatible with MATLAB, and both tools are suited for Windows, Linux, and UNIX.&lt;/li&gt;&lt;li&gt;&lt;a href="http://office.microsoft.com/en-us/access/default.aspx" target="_blank"&gt;&lt;strong&gt;Microsoft      Access&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to &lt;a href="http://www.kexi-project.org/" target="_blank"&gt;Kexi&lt;/a&gt;&lt;/strong&gt;: Microsoft Access is a versatile tool for creating database-driven applications and to maintain office or personal data. Access contains an embedded database engine, but it also connects to other databases through ODBC. On the other hand, &lt;a href="http://www.kexi-project.org/" target="_blank"&gt;Kexi&lt;/a&gt; allows users to design forms to gain access to and to create data, just like Access. Kexi also contains an embedded database engine and it can import data to Microsoft Access databases. Plus - Kexi is open source, whereas Access belongs to Microsoft.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Microsoft_Word" target="_blank"&gt;Microsoft      Word&lt;/a&gt; to &lt;a href="http://www.openoffice.org/product/writer.html" target="_blank"&gt;OpenOffice      Writer&lt;/a&gt;&lt;/strong&gt;: If you want to break that office suite down and begin to replace the suite item by item, then you can start with this product first. &lt;a href="http://www.openoffice.org/product/writer.html" target="_blank"&gt;Writer&lt;/a&gt; is the word processor component of the OpenOffice.org software package that is similar to Microsoft Word, and with a roughly equivalent range of features. Writer can be used across a variety of platforms, including Mac OS X, Microsoft Windows, Linux, FreeBSD and Solaris. Writer also includes the ability to export Portable Document Format (PDF) files with no additional software, and can also function as a WYSIWYG editor for creating and editing web pages. One plus over Word is that Writer carries functions and number formats in its tables from &lt;a href="http://www.openoffice.org/product/calc.html" target="_blank"&gt;Calc&lt;/a&gt;,      OpenOffice’s spreadsheet application.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://office.microsoft.com/en-us/excel/default.aspx" target="_blank"&gt;Microsoft      Excel&lt;/a&gt; to &lt;a href="http://www.openoffice.org/product/calc.html" target="_blank"&gt;OpenOffice      Calc&lt;/a&gt;&lt;/strong&gt;: Another Microsoft product, Excel still carries its productivity pluses as a spreadsheet, but it no longer carries an air of absolute necessity. Google’s Docs can bring an online, sharing atmosphere to your spreadsheets now. As for a truly open source product that can replace Excel, try OpenOffice.org &lt;a href="http://www.openoffice.org/product/calc.html" target="_blank"&gt;Calc&lt;/a&gt;. This tool provides full spreadsheet functionality incl. a huge number of statistical and scientific functions, pivot tables and charts.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://office.microsoft.com/en-us/visio/default.aspx" target="_blank"&gt;Microsoft      Visio&lt;/a&gt; to &lt;a href="http://live.gnome.org/Dia" target="_blank"&gt;Dia&lt;/a&gt;&lt;/strong&gt;: Visio actually is a great application that allows users to go from complicated text and tables that are hard to understand to diagrams that communicate information at a glance. The only thing that spoils the context is the fact that this software is that it’s not open source. Instead, use &lt;a href="http://live.gnome.org/Dia" target="_blank"&gt;Dia&lt;/a&gt;, a GTK+ based diagram creation program for Linux, Unix and Windows released under the GPL license. Dia was ‘roughly’ inspired by Visio, which should make this tool easy for transition.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Productivity&lt;/h2&gt; &lt;ol start="10"&gt;&lt;li&gt;&lt;a href="http://www.blackboard.com/us/index.Bb" target="_blank"&gt;&lt;strong&gt;Blackboard&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://moodle.org/" target="_blank"&gt;Moodle&lt;/a&gt;&lt;/strong&gt;: Blackboard has been the CMS (Course Management System) ‘industry standard’ for educational purposes for many years. This program allows instructors to build courses, manage student workloads, and more. But &lt;a href="http://moodle.org/" target="_blank"&gt;Moodle&lt;/a&gt; has gained significant ground as an open source alternative to Blackboard, as it helps educators to create effective online learning communities in a scalable package that costs nothing to use.&lt;/li&gt;&lt;li&gt;&lt;a href="http://secure.box.net/backup.html?gclid=CLqIuqz9oJECFSF4lgodxFgnOA" target="_blank"&gt;&lt;strong&gt;Box&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://cabos.sourceforge.jp/" target="_blank"&gt;Cabos&lt;/a&gt;&lt;/strong&gt;: If you’re into      file sharing, you’ve probably heard of &lt;a href="http://box.net/" target="_blank"&gt;Box.net&lt;/a&gt;, if not used them. Not only can you share files, Box allows you to store your files securely online, allowing you to access them from any computer, phone or mobile device for a fee. &lt;a href="http://cabos.sourceforge.jp/" target="_blank"&gt;Cabos&lt;/a&gt;, another file sharing program that’s open source, provides simple sidebar user interface, firewall to firewall transfers, proxy transfers, Universal Plug and Play, iTunes + iPod integration, “What’s New?” searches, international searches, and more. All you need is Windows 2000 or later. Mac OS X 10.2.8 or later. Mac OS 8.6 or later. Granted, you don’t have the file storage capacity, but at least you can share files with Cabos without that extra storage capacity.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://office.microsoft.com/en-us/project/FX100487771033.aspx" target="_blank"&gt;Microsoft      Project&lt;/a&gt; to &lt;a href="http://www.openworkbench.org/" target="_blank"&gt;Open Workbench&lt;/a&gt;&lt;/strong&gt;: Microsoft allows users to control project work, schedule, and finances, and effectively communicate project data to other users. But, it costs to do that with Microsoft. Instead, use open source &lt;a href="http://www.openworkbench.org/" target="_blank"&gt;Open      Workbench&lt;/a&gt; to accomplish exactly the same project details for free. When users need to move beyond desktop scheduling to a workgroup, division or enterprise-wide solution, they can upgrade to &lt;a href="http://ca.com/us/press/release.aspx?cid=78007" target="_blank"&gt;CA’s      Clarity™ system&lt;/a&gt;, a project and portfolio management system that      offers bidirectional integration with Open Workbench.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.mindjet.com/us/" target="_blank"&gt;Mindjet&lt;/a&gt; to &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page" target="_blank"&gt;FreeMind&lt;/a&gt;&lt;/strong&gt;: Mindmapping is a way to share ideas among individuals and groups for productivity. This type of activity takes time, but it saves time. So why should you pay for a product when you can save money by using &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page" target="_blank"&gt;FreeMind&lt;/a&gt;? This latter product will accomplish all the Mindjet does and more. That “more” is the fact that FreeMind is open source.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Graphic Programs&lt;/h2&gt; &lt;ol start="14"&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.adobe.com/products/illustrator/" target="_blank"&gt;&lt;strong&gt;Adobe      Illustrator&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to &lt;a href="http://www.inkscape.org/" target="_blank"&gt;Inkscape&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;: Adobe’s vector drawing system is one of the best in the industry. However, like Photoshop, the price can be prohibitive for some designers and artists. Try &lt;a href="http://www.inkscape.org/" target="_blank"&gt;Inkscape&lt;/a&gt; instead, an open source vector graphics editor similar to Illustrator, CorelDraw, or Xara X. Inkscape uses the W3C standard Scalable Vector Graphics (SVG) file format and it supports many advanced SVG features (markers, clones, alpha blending, etc.). Finally, the streamlined interface is easy to use to edit nodes, perform complex path operations, trace bitmaps and much more.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.adobe.com/products/photoshop/index.html" target="_blank"&gt;Adobe      PhotoShop&lt;/a&gt; to &lt;a href="http://www.gimp.org/" target="_blank"&gt;GIMP&lt;/a&gt;&lt;/strong&gt;: Even if you’re paying for upgrades instead of the original package, the price for Adobe’s Photoshop can be prohibitive for some photographers and graphic designers. Try &lt;a href="http://www.gimp.org/" target="_blank"&gt;GIMP&lt;/a&gt; to see if this open source tool can’t provide you with all the power you need for your photography and graphic design needs. GIMP stands for Gnu Image Manipulation Program, and it’s the solution that comes closest to emulating the Photoshop environment.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.adobe.com/products/premiere/" target="_blank"&gt;&lt;strong&gt;Adobe Premiere&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://avidemux.sourceforge.net/" target="_blank"&gt;Avidemux&lt;/a&gt;&lt;/strong&gt;: Premier is state of the art real-time non-linear video editing for any format including High Definition (HD). Supports 16-bit color resolution, GPU accelerated rendering for faster effects and even advanced DVD authoring. On the other hand, &lt;a href="http://avidemux.sourceforge.net/" target="_blank"&gt;Avidemux&lt;/a&gt; provides Windows, Mac, and Linux users with an easy-to-use open source tool for DVD/DivX converting and editing. Avidemux also has scripting support for automation and even offers DVD authoring with the addition of the open source software, &lt;a href="http://dvdauthor.sourceforge.net/" target="_blank"&gt;dvdauthor&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&amp;amp;id=2704278" target="_blank"&gt;&lt;strong&gt;AutoCAD&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://archimedes.incubadora.fapesp.br/portal" target="_blank"&gt;Archimedes&lt;/a&gt;&lt;/strong&gt;:      AutoCAD is an AutoDesk tool used by any designer who creates design drafts      - mostly architects. &lt;a href="http://archimedes.incubadora.fapesp.br/portal" target="_blank"&gt;Archimedes&lt;/a&gt; is an open source computer aided design (CAD) alternative that focuses primarily on architectural design. AutoCAD definitely has the winning score thus far, but Archimedes shows promise. The latter program contains all the drawing features a designer would need, but its interoperability is weak. Designers still can export scalable vector graphics, so there’s a real market for this open source tool (this opinion isn’t based upon Archimedes’ newest release).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://office.microsoft.com/en-us/powerpoint/default.aspx" target="_blank"&gt;Microsoft      PowerPoint&lt;/a&gt; to &lt;a href="http://www.openoffice.org/product/impress.html" target="_blank"&gt;OpenOffice      Impress&lt;/a&gt;&lt;/strong&gt;: You can make a move away from this Microsoft tool with      the use of Google’s Presentation or with OpenOffice’s &lt;a href="http://www.openoffice.org/product/impress.html" target="_blank"&gt;Impress&lt;/a&gt;. Both tools represent full-featured presentation applications that allow users to create and modify diagrams and pictures right within the application.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.fayette.k12.il.us/99/paint/paint.htm" target="_blank"&gt;Microsoft      Paint&lt;/a&gt; to &lt;a href="http://www.tuxpaint.org/" target="_blank"&gt;Tux Paint&lt;/a&gt;&lt;/strong&gt;: While      not a serious graphics program, it is widely used by many computer users,      mostly children Try &lt;a href="http://www.tuxpaint.org/" target="_blank"&gt;Tux Paint&lt;/a&gt; instead of Paint, as this open source product stands apart from typical graphics people edit software (such as GIMP or Photoshop) in that it was designed to be usable by children as young as 16 months of age. The user interface is meant to be intuitive, and utilizes icons, audible feedback and textual hints to help explain how the software works.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.caligari.com/" target="_blank"&gt;&lt;strong&gt;TruSpace&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://www.blender.org/download/get-blender/" target="_blank"&gt;Blender&lt;/a&gt;&lt;/strong&gt;:      Caligari offers a range of products that enable designers and artists to produce      3D images - at a hefty price. &lt;a href="http://www.blender.org/" target="_blank"&gt;Blender&lt;/a&gt;, on the other hand, provides one tool that provides full multiresolution sculpting capabilities with 2D bitmap/3D procedural brushes (Paint, Smooth, Pinch, Inflate, Grab) supporting symmetry. And, that’s just the beginning of Blender’s capabilities. This open source software is free to download and use.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Web Editors&lt;/h2&gt; &lt;ol start="21"&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.adobe.com/products/golive/index.html" target="_blank"&gt;Adobe      GoLive CS2&lt;/a&gt; to &lt;a href="http://www.seamonkey-project.org/" target="_blank"&gt;Mozilla SeaMonkey&lt;/a&gt;&lt;/strong&gt;: GoLive is an integral part of the Adobe Creative Suites products, so it works with your InDesign documents and allows those documents to be converted to Web pages. But, you might want to try Mozilla’s &lt;a href="http://www.seamonkey-project.org/" target="_blank"&gt;SeaMonkey&lt;/a&gt; before you commit to the total Adobe suite option. The Mozilla SeaMonkey project includes a Web-browser, email and newsgroup client, HTML authoring program and IRC chat client. The Composer is simple but it handles tables, CSS, positioned layers and more without sweat. Add-ons currently include &lt;a href="http://www.scribefire.com/" target="_blank"&gt;Scribefire&lt;/a&gt;,      the blog blog editor that integrates with your browser and lets you easily      post to your blog.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.adobe.com/products/dreamweaver/" target="_blank"&gt;Adobe Dreamweaver&lt;/a&gt;      to &lt;a href="http://www.nvu.com/" target="_blank"&gt;NVU&lt;/a&gt;&lt;/strong&gt;: While this tool is a powerful WYSIWYG (What You See Is What You Get) HTML editor, other options exist that can save money. &lt;a href="http://www.nvu.com/" target="_blank"&gt;NVU&lt;/a&gt; (pronounced N-view, for a “new view”) is a complete Web Authoring System for Linux Desktop users as well as Microsoft Windows users to rival programs like FrontPage and Dreamweaver. Use NVU to create Web pages and manage a Website with no technical expertise or knowledge of HTML.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.adobe.com/products/flash/" target="_blank"&gt;Macromedia Flash      Professional&lt;/a&gt; to &lt;a href="http://www.openlaszlo.org/" target="_blank"&gt;OpenLaszlo&lt;/a&gt;&lt;/strong&gt;: Developers use Flash to create multimedia events on the Web. Since the program utilizes vector-based graphics, it provides a venue that goes beyond the Web. As an open source product, &lt;a href="http://www.openlaszlo.org/" target="_blank"&gt;OpenLaszlo&lt;/a&gt; provides developers with a platform to create zero-install Web applications with user interface capabilities of desktop client software. In other words, OpenLaszlo applications developed on one machine will run on all leading Web browsers on all leading desktop OS. These applications, like Flash, provide animation, layout, data binding, server communication and more.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/products/info/product.aspx?view=22&amp;amp;pcid=57bccce5-f934-422d-a11a-2afd0c0014db&amp;amp;type=ovr" target="_blank"&gt;Microsoft      Frontpage&lt;/a&gt; to &lt;a href="http://www.roseindia.net/opensource/html-editor-open-source.shtml" target="_blank"&gt;Bluefish&lt;/a&gt;&lt;/strong&gt;: While not as powerful as Dreamweaver, Front Page is a widely used proprietary application used to create Web pages. Take a gander at &lt;a href="http://www.roseindia.net/opensource/html-editor-open-source.shtml" target="_blank"&gt;this      list&lt;/a&gt; to understand your many open source options for HTML editors. Try      &lt;a href="http://www.roseindia.net/opensource/html-editor-open-source.shtml" target="_blank"&gt;Bluefish&lt;/a&gt;      as one option that can save you money and, possibly, time.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.notepad.org/" target="_blank"&gt;&lt;strong&gt;Windows Notepad&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://www.context.cx/" target="_blank"&gt;ConTEXT&lt;/a&gt;&lt;/strong&gt;: Yes, you can get the world’s most versatile HTML editing tool absolutely FREE when you purchase Windows version 2.0 and above. But, why would you want to do that when you can work with open source &lt;a href="http://www.context.cx/" target="_blank"&gt;ConTEXT&lt;/a&gt;? This application is a small, fast and powerful freeware programmers text editor, developed to serve as a secondary tool for software developers.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.altova.com/products/xmlspy/xml_editor.html" target="_blank"&gt;&lt;strong&gt;Altova      XMLSpy&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to&lt;a href="http://xml-copy-editor.sourceforge.net/" target="_blank"&gt;      XML Copy Editor&lt;/a&gt;&lt;/strong&gt;: XMLSpy is one of the most popular XML editors on the market today. Its editing features and support for both schema and DTD development along with XSLT, XQuery and XPath development make it an ultimate XML tool. As an open source alternative, &lt;a href="http://xml-copy-editor.sourceforge.net/" target="_blank"&gt;XML      Copy Editor&lt;/a&gt; is a versatile XML editor primarily focused on text editing with XML files. However, XML Copy Editor provides many other features including validation of DTD and XML schemas - as well as XSLT and XPath with tag-free editing. Both tools are Windows applications.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Publishing&lt;/h2&gt; &lt;ol start="27"&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://createpdf.adobe.com/" target="_blank"&gt;Adobe Acrobat&lt;/a&gt; to &lt;a href="http://sourceforge.net/projects/pdfcreator/" target="_blank"&gt;PDFCreator&lt;/a&gt;&lt;/strong&gt;:      Yes, you have a free trial to create a PDF through Adobe. However, this &lt;a href="http://sourceforge.net/projects/pdfcreator/" target="_blank"&gt;PDFCreator&lt;/a&gt; easily creates PDFs from any Windows program. Use it like a printer in Word, StarCalc or any other Windows application.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.adobe.com/products/framemaker/index.html" target="_blank"&gt;&lt;strong&gt;Adobe      Framemaker&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to &lt;a href="http://docbook.org/" target="_blank"&gt;DocBook&lt;/a&gt;&lt;/strong&gt;: Adobe Framemaker software represents a powerful authoring and publishing solution for technical communicators who want to author and publish technical documentation in multiple languages. While this software is reliable, so is &lt;a href="http://docbook.org/" target="_blank"&gt;DocBook&lt;/a&gt;, an open source publishing tool. Additionally, you have access to all the free wikis and documentation that shows how to install, use, and customize the tools and stylesheets.&lt;/li&gt;&lt;li&gt;&lt;a href="http://when%20it%20comes%20to%20desktop%20publishing%20%28dtp%29%20microsoft%20offers%20publisher.%20it%20provides%20more%20control%20over%20document%20elements%20than%20microsoft%20word%20through%20a%20dtp%20oriented%20approach.%20is%20by%20many%20considered%20an%20entry-level%20dtp%20application%20eventhough%20it%20has%20a%20good%20microsoft%20user-interface%20and%20has%20many%20of%20the%20advanced%20features%20of%20its%20competitors.%20microsoft%20publisher%20is%20part%20of%20the%20microsoft%20office%20package./" target="_blank"&gt;&lt;strong&gt;Microsoft      Publishe&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;r to &lt;a href="http://www.scribus.net/" target="_blank"&gt;Scribus&lt;/a&gt;&lt;/strong&gt;: When it comes to Desktop Publishing (DTP) Microsoft’s Publisher provides more control over document elements than Microsoft Word through a DTP-oriented approach. However, professional users still consider this program an entry-level application. Since it’s part of the Microsoft Office Package, many users will find its costs negligible as well. With that said, &lt;a href="http://www.scribus.net/" target="_blank"&gt;Scribus&lt;/a&gt; offers an open source DTP alternative. Scribus brings award-winning professional page layout to Linux/Unix, MacOS X, OS/2 and Windows desktops with a combination of “press-ready” output and new approaches to page layout. Scribus supports professional publishing features, such as CMYK color, separations, ICC color management and versatile PDF creation.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Communications&lt;/h2&gt; &lt;ol start="30"&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://dashboard.aim.com/aim" target="_blank"&gt;AIM&lt;/a&gt; to &lt;a href="http://pidgin.im/" target="_blank"&gt;Pidgin&lt;/a&gt;&lt;/strong&gt;:      Give it up. AIM, AOL’s Instant Messenger, no longer rules. The open source      alternative is &lt;a href="http://pidgin.im/" target="_blank"&gt;Pidgin&lt;/a&gt;, a multi-protocol Instant Messaging client that allows you to use all of your IM accounts at once. Let’s break that down: No matter if you use Windows, Linux, BSD, and other Unixes. You can talk to your friends using AIM, ICQ, Jabber/XMPP, MSN Messenger, Yahoo!, Bonjour, Gadu-Gadu, IRC, Novell GroupWise Messenger, QQ, Lotus Sametime, SILC, SIMPLE, MySpaceIM, and Zephyr. Can AIM do that? No? Well, then.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.newsgator.com/Individuals/FeedDemon/" target="_blank"&gt;&lt;strong&gt;FeedDemon&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://www.rssbandit.org/" target="_blank"&gt;RSS Bandit&lt;/a&gt;&lt;/strong&gt;: FeedDemon for Windows constantly searches through feed search engines with keyword-generated searches as well as generalized searches. It also allows offline reading as it ‘prefetches’ your subscribed feeds. NewsGator also synchronizes with FeedDemon so you can gain access to news without your computer. Except for the fact that FeedDemon isn’t open source, it’s an ideal, robust reader. But, for open source fanatics, &lt;a href="http://www.rssbandit.org/" target="_blank"&gt;RSS Bandit&lt;/a&gt; provides an equally robust alternative RSS and Atom reader that allows you to keep track of all of the news feeds you follow. Its newspaper view can be customized and the templates are compatible with those used in FeedDemon. Plus, RSS Bandit allows you to synchronize everything with NewsGator online. Finally, RSS Bandit also provides access to news on news servers (similar to Google Groups) - it uses NNTP to read and post to newsgroups anywhere on the net. It integrates to Google Groups by linking to posts on their website.&lt;/li&gt;&lt;li&gt;&lt;a href="http://get.live.com/messenger/overview" target="_blank"&gt;&lt;strong&gt;Microsoft MSN Messenger&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://www.adiumx.com/" target="_blank"&gt;aMSN&lt;/a&gt;&lt;/strong&gt;: Microsoft offers MSN Messenger to the masses as freeware on Windows, and it’s grown from a simple IM application into a trendsetter in a competitive market. Features include voice and video chatting, gaming, remote support - on top of that it allows connection through mobile devices when you are not near a computer. &lt;a href="http://www.adiumx.com/" target="_blank"&gt;aMSN&lt;/a&gt;, the open source Windows alternative to MSN, aims to mimic its proprietary competitor as much as possible. Most of its extra features are added through plug-ins. You can add, at your leisure, POP3 email support and translation, voice clips, Webcam support, Chat logs, Conferencing support and more.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://office.microsoft.com/en-us/outlook/default.aspx" target="_blank"&gt;Microsoft      Outlook&lt;/a&gt; to &lt;a href="http://www.mozilla.com/en-US/thunderbird/" target="_blank"&gt;Thunderbird&lt;/a&gt;&lt;/strong&gt;: Say that you decided to switch to OpenOffice, but you need an email client to replace Microsoft’s Outlook. Try Mozilla’s &lt;a href="http://www.mozilla.com/en-US/thunderbird/" target="_blank"&gt;Thunderbird&lt;/a&gt;,      an application that carries a similar interface and that is easy to use. Additionally,      you can use &lt;a href="http://www.mozilla.org/projects/calendar/lightning/" target="_blank"&gt;Lightning&lt;/a&gt;      to integrate Mozilla’s &lt;a href="http://www.mozilla.org/projects/calendar/sunbird/" target="_blank"&gt;Sunbird&lt;/a&gt;      calendar application with Thunderbird.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.skype.com/" target="_blank"&gt;Skype&lt;/a&gt; to &lt;a href="http://www.openwengo.org/" target="_blank"&gt;Wengophone&lt;/a&gt;&lt;/strong&gt;: Skype is a very strong freeware internet VoIP (Voice over IP) product in the telecommunications industry. It started with a simple and free PC-to-PC telephony, but today offers full integration with existing telephone systems. Skype today also offers voicemail, video conversations and sending SMSs. Its open source alternative, &lt;a href="http://www.openwengo.org/" target="_blank"&gt;WengoPhone&lt;/a&gt;, also provides free PC-to-PC calls as well as chat and video conferencing. Created by Wengo, this phone also can provide SMS and call-out features that allow users to communicate with any phone at reasonable prices.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Media&lt;/h2&gt; &lt;ol start="35"&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.apple.com/itunes/" target="_blank"&gt;iTunes&lt;/a&gt; to &lt;a href="http://www.songbirdnest.com/" target="_blank"&gt;Songbird&lt;/a&gt;&lt;/strong&gt;: If you’re accustomed to the equation where “Apple + iPod + iTunes” equals a ton of money, then you might consider a switch to &lt;a href="http://www.songbirdnest.com/" target="_blank"&gt;Songbird&lt;/a&gt;. Songbird is an open source player and a platform committed to “playing the music you want + from the sites you want + on the devices you want.” Songbird thereby challenges the conventions of discovery, purchase, consumption and organization of music on the Internet.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nero.com/enu/nero8-introduction.html?NeroSID=374bb15824578fc5aeae6061f59aba58" target="_blank"&gt;&lt;strong&gt;Nero      Burning Rom&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to &lt;a href="http://www.k3b.org/" target="_blank"&gt;K3b&lt;/a&gt;&lt;/strong&gt;: Nero Burning Rom is a popular tool to burn CDs, DVDs and Blu-ray discs. This software includes backup, cd copying, audio features and more, and it’s easy to use. But, it’s not open source like &lt;a href="http://www.k3b.org/" target="_blank"&gt;K3b&lt;/a&gt; (Windows). This latter program creates and burns CDs and DVDs, including ripping with DivX/XviD encoding, DVD copy, ISO burning, Video CD (VCD) creation, Audio CD creation for almost any audio file, CD-TEXT support for audio CDs, support for DVD-RW and DVD+RW and much more. Oh, and did we add that it was easy to use?&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.apple.com/quicktime/download/" target="_blank"&gt;&lt;strong&gt;Quicktime&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://developer.apple.com/opensource/server/streaming/index.html" target="_blank"&gt;Darwin      Streaming Server&lt;/a&gt;&lt;/strong&gt;: Apple’s QuickTime 7 Pro is good for everything from creating podcasts to transcoding media in more than a dozen formats. And, the software isn’t that expensive when compared to other products. But, why not use an open source application that shares the same code base as Quicktime Streaming Server? &lt;a href="http://developer.apple.com/opensource/server/streaming/index.html" target="_blank"&gt;Darwin      Streaming Server&lt;/a&gt; is an open source project that’s perfect for developers who need to stream QuickTime and MPEG-4 media on platforms such as Windows, Linux, and Solaris.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.tivo.com/mytivo/domore/tivotogo/index.html" target="_blank"&gt;      TiVo Desktop&lt;/a&gt; to &lt;a href="http://galleon.tv/" target="_blank"&gt;Galleon.tv&lt;/a&gt;&lt;/strong&gt;:      Tivo-to-Go users were disappointed to discover that their Tivo software &lt;a href="http://www.downloadsquad.com/2007/08/03/what-to-do-until-tivo-desktop-works-on-vista/" target="_blank"&gt;wouldn’t      work&lt;/a&gt; with Windows Vista. Some answers to this problem included spending more time and money on various solutions that might work to restore that software’s functionality. One solution included using the open source software, &lt;a href="http://galleon.tv/" target="_blank"&gt;Galleon&lt;/a&gt;, instead of trying to “fix” Tivo or Windows Vista. Galleon is a free open source media server for the TiVo® DVR which allows you to enjoy many kinds of content and interactive applications right on your TV. The server runs on your home computer and organizes your media collection so that they can be viewed on your home network. Galleon also brings Internet content and applications to your TV.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/windows/windowsmedia/default.mspx" target="_blank"&gt;Windows      Media Player&lt;/a&gt; to &lt;a href="http://www.getmiro.com/" target="_blank"&gt;Miro&lt;/a&gt;&lt;/strong&gt;: This application seems ubiquitous…no matter what you try to open, Windows Media Player is in your face, right? Well, replace that in-your-face attitude with &lt;a href="http://www.getmiro.com/" target="_blank"&gt;Miro&lt;/a&gt;, an open source program that turns your computer into an internet TV. Miro has 2,500 unrestricted channels with a huge selection of HD content. Plus, you have access to any publisher with video RSS feeds, including anyone on YouTube, Revver, Blip, and many, many more.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Utilities&lt;/h2&gt; &lt;ol start="40"&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.cuteftp.com/" target="_blank"&gt;CuteFTP&lt;/a&gt; to &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=21558" target="_blank"&gt;Filezilla&lt;/a&gt;&lt;/strong&gt;: Sure, CuteFTO is cute, but it’s not free. Sure, it’s reliable, but so are many other File Transfer Protocol applications. Try &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=21558" target="_blank"&gt;Filezilla&lt;/a&gt;, a fast FTP and SFTP client for Windows with tons of features - easy to install, easy to use, very reliable, secure, and open source.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.ibackup.com/" target="_blank"&gt;iBackup&lt;/a&gt; to &lt;a href="http://amanda.zmanda.com/" target="_blank"&gt;ZManda&lt;/a&gt;&lt;/strong&gt;: Who can you trust with your backup files? It’s difficult to decide, as price alone means nothing. You want safe, reliable servers or tools that can keep your backups available and intact. iBackup has proven to be worthy of that task, but you might want to look at &lt;a href="http://amanda.zmanda.com/" target="_blank"&gt;ZManda&lt;/a&gt; as well. This open source solution protects more than half a million of servers and desktops running various versions of Linux, UNIX, BSD, Mac OS-X and Microsoft Windows operating systems worldwide. Not only do they backup information, they’re into recovery as well.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.symantec.com/norton/products/overview.jsp?pcid=br&amp;amp;pvid=ghost12" target="_blank"&gt;&lt;strong&gt;Norton      Ghost&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to &lt;a href="http://www.partimage.org/Main_Page" target="_blank"&gt;Partition      Image&lt;/a&gt;&lt;/strong&gt;: Norton Ghost isn’t a shabby backup system, as it’s a complete tool that backs up everything but the kitchen sink. If you have a complete disk failure, Norton Ghost can bring it back to life on a new hard disk (although you don’t need to make a complete backup every time). You can take this backup to external drives, CDs or DVDs. If you’re an open source advocate, however, Norton Ghost doesn’t cut the cake. You’ll want something like &lt;a href="http://www.partimage.org/Main_Page" target="_blank"&gt;Partition      Image&lt;/a&gt; (for Linux) or &lt;a href="http://www.feyrer.de/g4u/" target="_blank"&gt;Ghost for Unix&lt;/a&gt; (G4U) for Windows or Unix users. Both tools are disk cloners that act differently, but they’re as robust as Norton Ghost. Read more at their respective Web sites before you make the jump. (For a complete rescue disk including Partition Image see &lt;a href="http://www.sysresccd.org/Main_Page" target="_blank"&gt;SystemRescueCd&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;&lt;a href="http://www-306.ibm.com/software/awdtools/purify/" target="_blank"&gt;&lt;strong&gt;Rational      Purify&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to &lt;a href="http://valgrind.org/" target="_blank"&gt;Valgrind&lt;/a&gt;&lt;/strong&gt;: IBM’s Purify is a well respected and much used debugging tool. It uses topnotch memory corruption and memory leak detection to keep hard-to-find bugs from any application. As an open source alternative, Valgrind also detects leaks and other memory related programming errors. But, it also detects threading bugs and includes a call-graph profiler that detects bottlenecks in code. as well as threading bugs. A user might say that Valgrind is better than Purify, even if it is open source.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.winzip.com/index.htm" target="_blank"&gt;WinZip&lt;/a&gt; to &lt;a href="http://www.7-zip.org/" target="_blank"&gt;7-Zip&lt;/a&gt;&lt;/strong&gt;: Some of us grew up with WinZip, so it’s sad to say goodbye. But, we all gotta leave home at some point, and when the open source &lt;a href="http://www.7-zip.org/" target="_blank"&gt;7-Zip&lt;/a&gt;      beckons, maybe you should heed the call…&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Security&lt;/h2&gt; &lt;ol start="45"&gt;&lt;li&gt;&lt;a href="http://www.kaspersky.com/personal" target="_blank"&gt;&lt;strong&gt;Kaspersky Anti-Virus      Personal&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to &lt;a href="http://winpooch.free.fr/page/home.php?lang=en&amp;amp;page=home" target="_blank"&gt;Winpooch&lt;/a&gt;&lt;/strong&gt;: Kaspersky Anti-Virus probably is among the top products on the market for Windows-based anti-virus tools, mainly because it’s well known for its outstanding detection rates. It commits to multiple tasks as it protects against viruses, script viruses, checks file archives (such as zip files) and removes viruses from mail. It also provides protection against spyware as well as adware. As an open source alternative, however, &lt;a href="http://winpooch.free.fr/page/home.php?lang=en&amp;amp;page=home" target="_blank"&gt;Winpooch&lt;/a&gt; also scans files on your computer, detects malware, and prevents all the viruses, trojan horses and other problems that Kaspersky hunts down as well. Winpooch, by the way, adds a real-time scanning capability that ClamWin (noted below) lacks.&lt;/li&gt;&lt;li&gt;&lt;a href="http://us.mcafee.com/" target="_blank"&gt;&lt;strong&gt;McAfee VirusScan&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;      to &lt;a href="http://www.clamwin.com/" target="_blank"&gt;ClamWin&lt;/a&gt;&lt;/strong&gt;: McAfee is well known as one of the oldest companies in the anti-virus market. Many individuals need to deal with this software company, as its tools come packaged with many new Windows OS computer systems. The plus side to McAfee is that it is reliable and that it offers 24/7 support. The downside is that it’s not open source. &lt;a href="http://www.clamwin.com/" target="_blank"&gt;ClamWin&lt;/a&gt;, on the other hand, is a free Antivirus for Microsoft Windows 98/Me/2000/XP/2003. It features high detection rates, scheduler, automatic download of virus database updates and a plug-in for Microsoft Outlook. As noted above, ClamWin doesn’t provide on access realtime scanning, but when combined with WinPooch, this capability is added.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.symantec.com/norton/products/overview.jsp?pcid=is&amp;amp;pvid=nis2008" target="_blank"&gt;&lt;strong&gt;Norton      Personal Firewall&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to &lt;a href="http://wipfw.sourceforge.net/" target="_blank"&gt;WIPFW&lt;/a&gt;&lt;/strong&gt;: Many people could work with Norton in their sleep, as this company has been around that long. The Norton Personal Firewall for Windows will monitor and check all Internet traffic and it will reject any attack or intrusion attempt. Ubiquitous popups and permissions are part of the game, as it seems that each new Website carries its own set of Norton no-nos. As an alternative, &lt;a href="http://wipfw.sourceforge.net/" target="_blank"&gt;WIPFW&lt;/a&gt; is a firewall for Windows based on IPFW for FreeBSD UNIX. It provides virtually the same features, functionality, and user interface as Norton Personal Firewall. The big difference? WIPFW is open source.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Financial&lt;/h2&gt; &lt;ol start="48"&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.authorize.net/solutions/merchantsolutions/merchantservices/sslcertificates/" target="_blank"&gt;Authorize.net&lt;/a&gt;      to &lt;a href="http://www.openssl.org/" target="_blank"&gt;OpenSSL&lt;/a&gt;&lt;/strong&gt;: Granted, Authorize.Net’s preferred payment gateway connection, Advanced Integration Menthod (AIM), provides the highest level of customization and security to merchants for submitting transactions online. But, why pay for a secure SSL when you can get an open source product for free? The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. A worldwide community of volunteers uses the Internet to communicate, plan, and develop the &lt;a href="http://www.openssl.org/" target="_blank"&gt;OpenSSL&lt;/a&gt; toolkit      and its related documentation manages the project.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/money/default.mspx" target="_blank"&gt;&lt;strong&gt;Microsoft      Money (Plus)&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to &lt;a href="http://www.turbocash-usa.com/" target="_blank"&gt;TurboCash&lt;/a&gt;&lt;/strong&gt;:      While Microsfot Money Plus is much more than a personal accounting software,      &lt;a href="http://www.turbocash-usa.com/" target="_blank"&gt;Turbocash&lt;/a&gt; can boast that claim plus more. Turbocash is open source and free to use. In fact, you might compare TurboCash more to Quickbooks than to Microsoft Money. However, as a personal finance tool, TurboCash is much more user-friendly to the average home budgeter than Compiere.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://quickbooks.intuit.com/" target="_blank"&gt;Quickbooks&lt;/a&gt; to &lt;a href="http://www.compiere.com/" target="_blank"&gt;Compiere&lt;/a&gt;&lt;/strong&gt;: Few people are unfamiliar with Quickbooks, as this software has made its way into many a small business computer. If you feel that few opportunities exist to switch, think again. &lt;a href="http://www.compiere.com/" target="_blank"&gt;Compiere&lt;/a&gt;, produced      by &lt;a href="http://www.globalera.net/" target="_blank"&gt;Global Era&lt;/a&gt;, provides one solution to open source ERP (Enterprise Resource Planning) and CRM (Customer Relationship Management) solutions for any small to large business. Compiere 3.0 marks the introduction of Compiere Professional Edition, a new premium offering targeted at larger organizations that require more advanced services and commercial licensing from Compiere.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-3146446557529330082?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/3146446557529330082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=3146446557529330082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3146446557529330082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3146446557529330082'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/02/top-50-proprietary-programs-that-drive.html' title='The Top 50 Proprietary Programs that Drive You Crazy — and Their Open Source Alternatives'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-1047441222447656959</id><published>2008-01-30T19:57:00.001-08:00</published><updated>2008-01-30T19:57:51.455-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Annoying NetBeans 6.0 Facelets Support Issue on Tomcat'/><title type='text'>Annoying NetBeans 6.0 Facelets Support Issue on Tomcat</title><content type='html'>&lt;p&gt;Yesterday i got a call from a good friend of mine who has been dipping his fingers into JSF a bit. He’d decided to jump ship to using JSF on XHTML files, a technology known as Facelets. So he goes to download NetBeans 6.0 Facelets support plugin and installs it.&lt;/p&gt; &lt;p&gt;After developing a simple facelets page, he decides to deploy it to Tomcat 6.0.14 only to get BIG FAT class loader exceptions. What better way to treat a sceptic who is just getting into the game of web development in Java. These are the kind of things that can be so annoying about doing something in Java. Being a Seam advocate and user, I didn’t immediately realise what could have been the problem, since my Seam applications run fine using the jars from Seam.&lt;/p&gt; &lt;p&gt;After doodling around and making some changes to jars that came with the Facelets support, i just decided to ditch the jars from Facelets support and use my own. I picked the jars that come with Seam and VOILA! Problem solved. Makes me wonder if the guys who developed the plugin didn’t try to deploy it themselves AT LEAST to Tomcat before putting it out there. Anyways i just felt like putting up the solution to this simple but very annoying problem here for the sake of those who might try an introduction to Facelets.&lt;/p&gt; &lt;p&gt;Note that i got these jars from the JBoss Seam 2.0.GA’s lib folder. I can’t tell you where u can get them individually but downloading seam altogether will give you a change to start playing around with it if you haven’t started already.&lt;/p&gt; &lt;p&gt;Simply create a new Library in NetBeans by going to Tools-&gt;Libraries. I gave mine the name Facelets4Tomcat. Here are the jar files you need.&lt;/p&gt; &lt;ul&gt;&lt;li&gt;commons-beanutils.jar&lt;/li&gt;&lt;li&gt;commons-collections.jar&lt;/li&gt;&lt;li&gt;commons-digester.jar&lt;/li&gt;&lt;li&gt;commons-logging.jar&lt;/li&gt;&lt;li&gt;jboss-el.jar&lt;/li&gt;&lt;li&gt;jsf-api.jar&lt;/li&gt;&lt;li&gt;jsf-facelets.jar&lt;/li&gt;&lt;li&gt;jsf-impl.jar&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This goes into your web.xml file.&lt;/p&gt; &lt;p&gt;&lt;context-param&gt;&lt;br /&gt;&lt;param-name&gt;com.sun.faces.validateXml&lt;/param-name&gt;&lt;br /&gt;&lt;param-value&gt;true&lt;/param-value&gt;&lt;br /&gt;&lt;/context-param&gt;&lt;br /&gt;&lt;context-param&gt;&lt;br /&gt;&lt;param-name&gt;javax.faces.DEFAULT_SUFFIX&lt;/param-name&gt;&lt;br /&gt;&lt;param-value&gt;.xhtml&lt;/param-value&gt;&lt;br /&gt;&lt;/context-param&gt;&lt;br /&gt;&lt;context-param&gt;&lt;br /&gt;&lt;param-name&gt;facelets.DEVELOPMENT&lt;/param-name&gt;&lt;br /&gt;&lt;param-value&gt;false&lt;/param-value&gt;&lt;br /&gt;&lt;/context-param&gt;&lt;br /&gt;&lt;context-param&gt;&lt;br /&gt;&lt;param-name&gt;facelets.SKIP_COMMENTS&lt;/param-name&gt;&lt;br /&gt;&lt;param-value&gt;true&lt;/param-value&gt;&lt;br /&gt;&lt;/context-param&gt;&lt;br /&gt;&lt;servlet&gt;&lt;br /&gt;&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;&lt;br /&gt;&lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;&lt;br /&gt;&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;&lt;br /&gt;&lt;/servlet&gt;&lt;/p&gt; &lt;p&gt;&lt;servlet-mapping&gt;&lt;br /&gt;&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;&lt;br /&gt;&lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;&lt;br /&gt;&lt;/servlet-mapping&gt;&lt;br /&gt;&lt;session-config&gt;&lt;br /&gt;&lt;session-timeout&gt;&lt;br /&gt;30&lt;br /&gt;&lt;/session-timeout&gt;&lt;br /&gt;&lt;/session-config&gt;&lt;br /&gt;&lt;welcome-file-list&gt;&lt;br /&gt;&lt;welcome-file&gt;forward.jsp&lt;/welcome-file&gt;&lt;br /&gt;&lt;/welcome-file-list&gt;&lt;/p&gt; &lt;p&gt;If you want to add the Ajaxified RichFaces components then add the following from the same Seam lib folder.&lt;/p&gt; &lt;ul&gt;&lt;li&gt;richfaces-api.jar&lt;/li&gt;&lt;li&gt;richfaces-ui.jar&lt;/li&gt;&lt;li&gt;richfaces-impl.jar&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;And add these to the top of your web.xml file&lt;/p&gt; &lt;p&gt;&lt;filter&gt;&lt;br /&gt;&lt;display-name&gt;RichFaces Filter&lt;/display-name&gt;&lt;br /&gt;&lt;filter-name&gt;richfaces&lt;/filter-name&gt;&lt;br /&gt;&lt;filter-class&gt;org.ajax4jsf.Filter&lt;/filter-class&gt;&lt;br /&gt;&lt;/filter&gt;&lt;br /&gt;&lt;filter-mapping&gt;&lt;br /&gt;&lt;filter-name&gt;richfaces&lt;/filter-name&gt;&lt;br /&gt;&lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;&lt;br /&gt;&lt;/filter-mapping&gt;&lt;br /&gt;&lt;context-param&gt;&lt;br /&gt;&lt;param-name&gt;org.ajax4jsf.SKIN&lt;/param-name&gt;&lt;br /&gt;&lt;param-value&gt;classic&lt;/param-value&gt;&lt;br /&gt;&lt;/context-param&gt;&lt;/p&gt; &lt;p&gt;You may use a different skin if you want. Check out the &lt;a href="http://labs.jboss.com/jbossrichfaces/docs/index.html"&gt;documentation &lt;/a&gt;for details&lt;/p&gt; &lt;p&gt;You may then add the library you created to your project by right clicking your web project and selecting “Properties”. At Libraries, click “Add Library” and selected the library you just created. Make sure that the check box is enabled or else it will not put the jar files in the right location i.e. WEB-INF/lib.&lt;/p&gt; &lt;p&gt;Oh, and MAKE SURE that the Facelets support libraries are unchecked, or else you’ll be back to square 1.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-1047441222447656959?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/1047441222447656959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=1047441222447656959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1047441222447656959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1047441222447656959'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/01/annoying-netbeans-60-facelets-support.html' title='Annoying NetBeans 6.0 Facelets Support Issue on Tomcat'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-2169947393566803357</id><published>2008-01-30T19:56:00.001-08:00</published><updated>2008-01-30T19:56:56.039-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Five Things Web Developers Should Stop Doing'/><title type='text'>Five Things Web Developers Should Stop Doing</title><content type='html'>&lt;p&gt;This may not come as a surprise, but I spend a lot of time on the Internet. Whether it’s browsing around for my own enjoyment or diligently working on a web-based application, I end up seeing both the end result and the inner workings of a lot of other peoples’ development work. And while a large majority of design elements are ultimately a matter of preference, there are certain web development techniques and implementation choices that I find myself shaking my head at, and I’d like to address a few of them here. The following is a list of five things that, in my opinion, web developers should simply stop doing. &lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="font-size: 130%;"&gt;1 – Including application code and HTML in the same file&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;Although many web scripting languages are tailored for alternating between application code and HTML by use of special tags, the failings of this architecture become apparent fairly quickly when developing robust web applications. Not only does this inline scripting method create messy, oftentimes confusing code, but it can discourage effective use of functions and introduce difficulty when delegating the roles of designer and programmer to different people who may not share one another’s skill sets. The answer here is to use a templating system to separate the application code from the HTML presentation. Templating functionality is widely available for any web development language, and is an integral part of pretty much any development framework (e.g. Ruby on Rails, CakePHP, FUSE). &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="font-size: 130%;"&gt;2 – Embedding video with a technology other than Flash Full Motion Video&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;Until Flash FMV became widely available, a common method for video playback on websites involved encoding multiple versions of the same video, then asking the user which player he or she preferred to use (e.g. RealPlayer, Windows Media, or Quicktime). This was always a necessary evil, as developers needed to ensure that the site content was available to all visitors. However, presenting potentially confusing video preference questions to the user can often lead to abandonment, not to mention that encoding, uploading, and linking multiple versions of the same video can be a time consuming process.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;Thanks to the introduction of full motion video capabilities in Adobe Flash, which has shipped alongside the most popular browsers for several years, developers now have some level of certainty that at least one video player will be available to the majority of users. Additionally, Flash FMV prevents the need to spawn an external application for playback, which is another scenario that can lead to abandonment if the site visitor is unsure of how to answer their browser’s security questions. &lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;Although sites such as YouTube have unfortunately given many people the impression that Flash FMV is only capable of low quality videos with poorly synced audio, this is simply not the case. Adobe has even launched a “Flash HD gallery” (available at &lt;a href="http://www.adobe.com/products/hdvideo/hdgallery/"&gt;http://www.adobe.com/products/hdvideo/hdgallery/&lt;/a&gt; ) that showcases Flash’s HD playback abilities. However, most embedded videos (news clips, etc) are short, small clips that download quickly, so even a medium or low quality encode will suffice. If your specific needs dictate that you must leverage the more advanced features of players like Quicktime or Windows Media, then you will have to use what best suits your end goal, but otherwise, stick with Flash.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="font-size: 130%;"&gt;3 – Implementing Flash pieces that introduce custom UI elements&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;Flash is a phenomenal addition to any developer’s toolkit, and well designed Flash pieces can significantly enhance both the aesthetics and functionality of a website or web-based application. However, one thing that many Flash developers fail to steer clear of is overusing Flash where it’s not necessary, to the point of introducing custom user interface elements that can end up hampering usability. As an example, consider something that’s unfortunately fairly common – a Flash-based block of text with a scrollbar that is also implemented within the Flash piece itself. Not only is this an unnecessary use of Flash, since the same effect can be accomplished with fairly simple CSS, but you may be alienating visitors who simply aren’t tech savvy enough to adjust their understanding of the browser’s UI elements on the fly. It may not be apparent to some users that they’re even looking at a scrollbar, especially if the bar is stylized or implemented in such a way that it doesn’t behave like the standard scrollbar. Your visitor is used to the way their browser functions and how they use its features to browse the web, so your best bet is not to alter basic UI elements. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="font-size: 130%;"&gt;4 – Using long query strings where they’re not necessary&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;Most web applications rely on the URI’s query string to bring in relevant data that is acted upon by the application code, but poor design choices often cause the query string to grow to unreasonable, unnecessary lengths. Long query strings can severely hamper the ease with which users can link to particular pages on your site, so you could very well be losing visitors because they didn’t quite get the full query string when a friend copy &amp;amp; pasted it over to them. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;The first thing to do to clean up your query strings is simply to use small identifiers for both variables and values. Try to use numeric IDs instead of long text strings to identify a specific resource, and keep your variable names short. You should also avoid passing data that could easily be extracted from data you already have. For instance, don’t pass both an item name and item id through the query string – you can just pass the item id and pull the name from the database. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;If you want to go a bit further in cleaning up or even eliminating query strings, look into URI rewriting. URI rewriting is a fairly simple process by which the friendly URI the user sees (e.g. /Blog/2008/01) is transparently translated into something more useful on the server side (e.g. blog_list.php?year=2008&amp;amp;month=01). Nearly all Model-View-Controller frameworks (Ruby on Rails, FUSE, CakePHP, etc.) have advanced techniques for rewriting the URI on the fly. &lt;/p&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="font-size: 130%;"&gt;5 – Sizing images by means of the width and height attributes of the img  tag&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;This one should be a no-brainer, but I still see it fairly regularly. While it’s quick and easy to force an image down to certain size by using the &lt;img src="http://jimkeller.blogspot.com/2008/01/five-things-web-developers-should-stop.html" /&gt; tag, you’re doing yourself a disservice in at least two ways by utilizing this technique. The first problem with this method of image sizing is that web browsers aren’t particularly good at shrinking or enlarging images. The browser doesn’t do any kind of resampling, so you often get a pixelated version of your original image, even when shrinking it. The second issue with sizing images by way of the browser is that you may be wasting a lot of bandwidth. An image that’s 1000 pixels by 800 pixels has a much larger filesize than one that’s 200 by 160 pixels, so if you’re forcing it to appear at the smaller size anyway, you’d be transferring a lot of extra data for no reason by resizing it on the client side. To resize images to the size you need, use any of the widely available free tools or websites that allow you to do so. &lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;So there you have it – just a few things I’ve seen during the course of my Web travels that I personally think should be done away with. Especially as development trends continue to shift toward more user-friendly, AJAX-enabled “Web 2.0” applications, it’s important to remember to leave behind techniques that, although familiar, have either been deprecated or were never great ideas in the first place. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-2169947393566803357?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/2169947393566803357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=2169947393566803357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2169947393566803357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2169947393566803357'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/01/five-things-web-developers-should-stop.html' title='Five Things Web Developers Should Stop Doing'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-7577612772842143441</id><published>2008-01-30T19:54:00.000-08:00</published><updated>2008-01-30T19:56:01.573-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex and Java – A perfect technological marriage'/><title type='text'>Flex and Java – A perfect technological marriage</title><content type='html'>o you've been a Java developer for most, if not all, of your career. You've been writing business logic in your Java classes and you've been creating application interfaces using JSP pages. More recently you may have used JSF (Java Server Faces) and/or Struts to improve things. But have you really succeeded? You are still writing JavaScript code to bring more life to your interface and to make it dynamic. JavaScript also helps you load XML data from the server without a round trip (otherwise known as AJAX). But don't you get the feeling that it's all the same, that nothing is better for you, the developer, or for the end user? Well, if you are asking yourself these questions, then you are in the same state of mind as I was back in the summer of 2004.        &lt;p&gt;In the summer of 2004 I started work on a mini-CRM application called Phoenix with specific features for my company. I started creating the application interface using JSP pages, but I found I wasn't delivering a better quality application. So I began looking, and trying a whole bunch of technologies—namely the ones I mentioned above—to improve things. But some things still weren't right: It took too much effort to create reusable parts; the browser was always in the way with its JavaScript issues; and the code still looked in some cases like a plate of spaghetti. That's when I got lucky and got my hands on Adobe Flex. Needless to say, several months later, Phoenix was completed using Flex 1.0 as the basis for the interface. Since then, my company has used Flex on six other projects.&lt;/p&gt;        &lt;p&gt;So why should any Java developer be interested in integrating Flex into an application? There are several reasons, and I will take a look at them one by one in this article.&lt;/p&gt;    &lt;h3&gt;Get started using Flex&lt;/h3&gt;    &lt;h4&gt;Flex 2 (Flex Builder, Free Flex SDK, Flex Data Services) &lt;/h4&gt;    &lt;ul class="link-list compact"&gt;&lt;li class="icon download"&gt;&lt;a href="http://www.adobe.com/go/devcenter_flex_try"&gt;Try&lt;/a&gt;&lt;/li&gt;&lt;li class="icon buy"&gt;&lt;a href="http://www.adobe.com/go/devcenter_flex_buy"&gt;Buy&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;h3&gt;Flex will be familiar to a Java developer&lt;/h3&gt;        &lt;p&gt;One challenge in introducing a developer to a new technology is the learning curve: No one wants to spend hours or days understanding the basics of a new technology. Learning Flex boils down to two things: MXML and ActionScript. If you know JavaScript, and if you know Java, then you know ActionScript. There are minor differences in the syntax, but you won't get stuck. See for example the following ActionScript code:&lt;/p&gt;                 &lt;div class="preWrapper"&gt;&lt;pre&gt;package demo&lt;br /&gt;{&lt;br /&gt;   public class Person&lt;br /&gt;   {&lt;br /&gt;       // class fields&lt;br /&gt;       private var firstName:String;&lt;br /&gt;       private var lastName:String;&lt;br /&gt;      &lt;br /&gt;       /**&lt;br /&gt;        * Constructor with parameters&lt;br /&gt;        */&lt;br /&gt;       public function Person(fn:String, ln:String) {&lt;br /&gt;           firstName = fn;&lt;br /&gt;           lastName = ln;&lt;br /&gt;       }&lt;br /&gt;      &lt;br /&gt;       /**&lt;br /&gt;        * Returns the full name of the person,&lt;br /&gt;        * exposed as a property on the class.&lt;br /&gt;        * @return the full name&lt;br /&gt;        */&lt;br /&gt;       public function get fullName():String {&lt;br /&gt;           return firstName + " " + lastName;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;     &lt;p&gt;With MXML, if you have worked with HTML or any kind of XML document, once again you know MXML. You just have get familiar with the properties of the components; there is great reference documentation for that. I'll let the following example demonstrate the simplicity of MXML:&lt;/p&gt;                 &lt;div class="preWrapper"&gt;&lt;pre&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;br /&gt;&lt;mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"&lt;br /&gt;   width="400" height="300"&gt;&lt;br /&gt;  &lt;br /&gt;   &lt;mx:formitem label="Email"&gt;&lt;br /&gt;       &lt;mx:textinput id="email"&gt;&lt;br /&gt;   &lt;/mx:FormItem&gt;&lt;br /&gt;   &lt;mx:formitem label="Password"&gt;&lt;br /&gt;       &lt;mx:textinput id="password"&gt;&lt;br /&gt;   &lt;/mx:FormItem&gt;&lt;br /&gt;   &lt;mx:formitem label="Re-type Password"&gt;&lt;br /&gt;       &lt;mx:textinput id="password2"&gt;&lt;br /&gt;   &lt;/mx:FormItem&gt;&lt;br /&gt;  &lt;br /&gt;   &lt;mx:controlbar horizontalalign="right"&gt;&lt;br /&gt;       &lt;mx:button label="Register"&gt;&lt;br /&gt;       &lt;mx:button label="Cancel"&gt;&lt;br /&gt;   &lt;/mx:ControlBar&gt;   &lt;br /&gt;&lt;/mx:Panel&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;     &lt;p&gt;From looking at the code, you can see that it's a panel with standard buttons and a form for a typical registration page. Don't forget about CSS! Flex can load and use any CSS file you provide, either at compile-time or runtime.&lt;/p&gt;        &lt;p&gt;The languages that Flex uses will be familiar to anyone coming from a Java background. This way, you don't waste everything you have learned over the years, you are only applying it a little differently. It comes down to the old proverb: &lt;em&gt;Everything old is new again&lt;/em&gt;.&lt;/p&gt;        &lt;h3&gt;The Flex development process: It's a lot like the one you use for Java&lt;/h3&gt;        &lt;p&gt;One of the things that took me a while to realize was that developing in Flex is very similar to developing in Java. In any Java application you create classes: some are classes that encapsulate your business logic, some are utility classes, some are classes that communicate with a database, and much more. This is no different from what you do in Flex. In Flex, you create ActionScript classes that encapsulate your interface logic, utility classes, and classes that communicate with your middleware, which in most cases comprises the Java classes that I just mentioned.&lt;/p&gt;        &lt;p&gt;In the last two Flex-based applications that I created, I found myself, more ever before, writing all the MXML code I needed first—thus defining all the various parts of the interface, to ensure that it fit the specification. Then I spent the rest of the time coding in ActionScript classes. Also, you can apply the J2EE patterns you've learned over the years to Flex. Many Flex developers use an MVC (Model-View-Control) framework called &lt;a href="http://labs.adobe.com/wiki/index.php/Cairngorm" target="_blank"&gt;Cairngorm&lt;/a&gt; that uses many of the J2EE patterns you already know, such as the Value Object Pattern and the Service Locator Pattern. For me, with the architecture similarities, developing in Flex and Java are almost the same.&lt;/p&gt;        &lt;p&gt;Another similarity between Flex and Java is application testing. In Java you write unit tests using JUnit and incorporate those tests into your nightly build script to see the results by morning. For Flex, you can unit test your ActionScript classes using FlexUnit. There is virtually no difference between FlexUnit and JUnit. You create test cases in ActionScript, run them using Ant, and then generate test results in HTML in the same fashion as for your JUnit tests. Basically, with every build, you run the Java and Flex unit tests at the same time, thus fully testing your application and making it as robust as possible.&lt;/p&gt;        &lt;p&gt;I just mentioned the build process and that's the last thing I am going to bring up about similarities between the two technologies. Just like Java, in Flex code the MXML and ActionScript has to be compiled so that you can execute it within a VM (Virtual Machine), or in this case, Flash Player that resides within your user's browser. The great thing is that the Flex compiler resides within a JAR file, so you can execute it from an Ant build script. You can also run it by executing an EXE file in Windows and a shell script for Unix/Linux. Therefore, you can use your Ant build script to compile both the Java and Flex code.&lt;/p&gt;        &lt;h3&gt;Flex is  simple to use and helps you develop code faster&lt;/h3&gt;        &lt;p&gt;Lastly, I'll discuss development speed with Flex. Flex comes with the familiar and basic components (Label, Button, TextInput, and so forth.) and more advanced components, such as the DataGrid, Tree, Charts, and more. Flex optimizes development time because the advanced components provide a lot of functionality (such as sorting, highlighting, and so forth) that there is no need for you to develop that advanced functionality over and over again. For these advanced components, you simply pass the component the data you want, set some properties, and it will render the information for you.&lt;/p&gt;        &lt;p&gt;Secondly, you know how JSP pages look from a coding perspective: They're HTML mixed in with Java code and then some JavaScript sprinkled in here and there. It can get messy fast. Another challenge is that you have to hold lots of data on the server side to track what is happening on the client side; and you have to do many page refreshes to update the display. Some developers might call this technique "hacking things in order to make them work." With Flex there is no such weaving since everything is deployed and run on the client side. You generate the MXML code and put all the logic in ActionScript classes. With clear separation, it is easy for you to maintain and enhance MXML and ActionScript code. Instead, you can spend more time ensuring the product is easy to use and conveying the right information to the user.&lt;/p&gt;        &lt;p&gt;Finally, don't forget what you create when you build a Flex application. It's not a set of pages that are simply connected together, it's an application. In fact it is an application deployed to the web with desktop-like features. It's a responsive, familiar, cross-platform, powerful, and visually pleasing application for your users. Check out &lt;a href="http://www.adobe.com/devnet/flex/?tab:samples=1" target="_blank"&gt;Flex sample applications&lt;/a&gt; on the Flex Developer Center.&lt;/p&gt;        &lt;h3&gt;Some differences between Flex and Java&lt;/h3&gt;        &lt;p&gt;One of the key differences in using Java and Flex in the same project is the changes in the development process. These changes are due to the fact that there now is a distinct and clear separation between the business layer (Java code) and the presentation layer (Flex code).&lt;/p&gt;        &lt;p&gt;During a typical project cycle in our team, one set of developers works on the interface while another set of developers works on the business layer independently. After the initial set of requirements for the project, our team either starts writing the business layer first or the interface first, depending on which developers are available and when. Developing each part is completely independent. The business layer developers design, write unit tests, and then write the business code to satisfy the unit tests. Meanwhile, the development on the presentation layer begins, such as reviews with users, and refining the look and feel. The best part is that the interface will actually be functional and it doesn't even do anything yet! Yes, it is possible because you are creating a pure client-side application. Users will see the interface change states and be able to manipulate data—the application will look like it's working.&lt;/p&gt;        &lt;p&gt;Once both teams complete development and the application passes all of its unit tests, the last step is to plug the interface into the business layer, do one last round of testing, and, you're all done!&lt;/p&gt;        &lt;p&gt;So in the end, what have we learned? First, you know that Flex will be familiar if you're coming from a Java background and that most of your skills and development techniques will carry over. In many cases, parts of the interface will be easier to develop, have more features, will be delivered more quickly, and adjustments will be easier to perform.&lt;/p&gt;        &lt;p&gt;When you really think of it, this is the best marriage of two technologies in recent memory—Java for the business layer and Flex for the presentation layer. Basically, you can use the best technologies in each domain and your products will thrive because of it, especially the interface, which is the part of the application that users see and use. Your users will be impressed; meanwhile, you'll have a smile on your face because you didn't even break a sweat.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-7577612772842143441?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/7577612772842143441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=7577612772842143441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7577612772842143441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7577612772842143441'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/01/flex-and-java-perfect-technological.html' title='Flex and Java – A perfect technological marriage'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-6098808786222132684</id><published>2008-01-30T19:49:00.000-08:00</published><updated>2008-01-30T19:54:02.606-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design Patterns Quick Reference'/><title type='text'>Design Patterns Quick Reference</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GJWEaji4mN0/R6FGCnCGrSI/AAAAAAAAAEA/bLWB3T1FnLA/s1600-h/designpatterns1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_GJWEaji4mN0/R6FGCnCGrSI/AAAAAAAAAEA/bLWB3T1FnLA/s400/designpatterns1.jpg" alt="" id="BLOGGER_PHOTO_ID_5161483658594790690" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GJWEaji4mN0/R6FGRnCGrTI/AAAAAAAAAEI/on-eSVDiv3U/s1600-h/designpatterns2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_GJWEaji4mN0/R6FGRnCGrTI/AAAAAAAAAEI/on-eSVDiv3U/s400/designpatterns2.jpg" alt="" id="BLOGGER_PHOTO_ID_5161483916292828466" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-6098808786222132684?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/6098808786222132684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=6098808786222132684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6098808786222132684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6098808786222132684'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/01/design-patterns-quick-reference.html' title='Design Patterns Quick Reference'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_GJWEaji4mN0/R6FGCnCGrSI/AAAAAAAAAEA/bLWB3T1FnLA/s72-c/designpatterns1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-1733366108236992600</id><published>2008-01-30T19:48:00.000-08:00</published><updated>2008-01-30T19:49:19.801-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Top 10 Firefox Business Extensions'/><title type='text'>Top 10 Firefox Business Extensions</title><content type='html'>&lt;p&gt;&lt;strong&gt;The techies of the world aren't the only people who use Firefox. It can even be adapted to the executives.&lt;/strong&gt;&lt;/p&gt;                                &lt;p&gt;How can executives use Firefox? Easy! Download these top business extensions and you'll turn your Firefox into a business dashboard.&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://www.meebo.com/"&gt;&lt;strong&gt;Meebo&lt;/strong&gt;&lt;/a&gt; (&lt;a href="http://www.dcs-media.com/FirefoxExtension/meebo.aspx"&gt;Review&lt;/a&gt;)&lt;br /&gt;One problem everyone has is the ability to consolidate all of their Instant Messaging accounts into one. If one client is using their favorite IM, you can't talk to them because you use brand x. Meebo is "IM glue" that holds all of your accounts together in one location: your browser. You sign in once and you are logged into all of your IM accounts immediately. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.linkedin.com/static?key=browser_toolbar_download"&gt;LinkedIn Companion&lt;/a&gt; &lt;/strong&gt;(&lt;a href="http://www.dcs-media.com/FirefoxExtension/linkedin-firefox-companion.aspx"&gt;Review&lt;/a&gt;)&lt;br /&gt;If you're a professional networker, you already know about LinkedIn. But for those who don't know what LinkedIn is, LinkedIn is like the six degrees of Kevin Bacon and mySpace (for businesses) thrown together. The extension provides useful shortcuts to the site and allows you to search for people looking for employment, look for jobs (freelance or otherwise), or...just people to network with. &lt;/li&gt;&lt;li&gt;&lt;a href="http://reminderfox.mozdev.org/"&gt;&lt;strong&gt;ReminderFox&lt;/strong&gt;&lt;/a&gt;     (&lt;a href="http://www.dcs-media.com/FirefoxExtension/reminderfox.aspx"&gt;Review&lt;/a&gt;)   &lt;br /&gt;An exceptional utility that keeps a list of reminders for you. You can create your own categories, search through lists, and set priority to each tasks. Great for those busy executives who forget anniversaries and birthdays. :-) &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://peekko.com/"&gt;Peekko&lt;/a&gt;&lt;/strong&gt; (&lt;a href="http://www.dcs-media.com/FirefoxExtension/peekko.aspx"&gt;Review&lt;/a&gt;)&lt;br /&gt;Peekko is a unique extension that allows users to congregate on a particular web page and chat. For freelancers, I could definitely see this as a absolute-must utility for showing progress of web sites to clients while working remotely. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.fingerauth.com/"&gt;FingerAuth Password Manager&lt;/a&gt;&lt;/strong&gt; (&lt;a href="http://www.dcs-media.com/FirefoxExtension/fingerauth.aspx"&gt;Review&lt;/a&gt;)&lt;br /&gt;It seems security is a big thing nowadays and Firefox is doing all it can to help, but there is one extension that is taking it to the next level. The FingerAuth Password Manager extension works with a biometric fingerprint reader for secure web pages. When you arrive at a login page, you can press your finger to the biometric reader, it verifies who you are, and promptly allows you into your secured area. &lt;/li&gt;&lt;li&gt;&lt;a href="http://screenshot-program.com/fireshot/"&gt;&lt;strong&gt;FireShot&lt;/strong&gt;&lt;/a&gt; (&lt;a href="http://www.dcs-media.com/FirefoxExtension/fireshot.aspx"&gt;Review&lt;/a&gt;)&lt;br /&gt;It never fails. A programmer completes a new enhancement and then the boss uses it. Guess what? It breaks, but you need a way to capture the screen to show the programmer the error. FireShot will capture the browser screen and let you annotate your questions right on the image. Then you can send the screenshot to the programmer for fixing. It may not be business-related, but it definitely helps the programmer or project manager. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://pages.ebay.co.uk/firefox/"&gt;eBay Companion for Firefox&lt;/a&gt;&lt;/strong&gt; (&lt;a href="http://www.dcs-media.com/FirefoxExtension/ebay-companion-for-firefox.aspx"&gt;Review&lt;/a&gt;)&lt;br /&gt;You laugh, but more and more businesses are buying hardware through eBay and the merchandise is cheaper than buying new. Just make sure you are buying from a reputable "business." The eBay companion centralizes all of your bids and watched auctions in a sidebar, so you can monitor your business merchandise. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.zotero.org/"&gt;Zotero&lt;/a&gt;&lt;/strong&gt; (&lt;a href="http://www.dcs-media.com/FirefoxExtension/zotero.aspx"&gt;Review&lt;/a&gt;)&lt;br /&gt;Zotero is absolutely fantastic for research users and provides a complete streamlined workflow that allows executives to become organized packrats. Use Zotero to gather the research to make proper business decisions based on industry trends. Take that research and provide that data to the project manager and/or programmers to create one heck of a product.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://gtdinbox.com/"&gt;GTDInbox&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;Everyone needs organized and business executives and freelancers are no exception to the rule. David Allen's best selling book, &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FGetting-Things-Done-Stress-Free-Productivity%2Fdp%2F0142000280&amp;amp;tag=dcsmedia-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;Getting Things Done&lt;/a&gt;&lt;img style="border: medium none  ! important; margin: 0px ! important; display: none;" alt="" src="http://www.assoc-amazon.com/e/ir?t=dcsmedia-20&amp;amp;l=ur2&amp;amp;o=1" border="0" height="1" width="1" /&gt;, is applied to this Firefox extension to turn your GMail account into a Getting Things Done Inbox. Very useful and well written.&lt;br /&gt;    &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://ffdataanalytics.sourceforge.net/"&gt;DataAnalytics&lt;/a&gt;&lt;/strong&gt; (&lt;a href="http://www.dcs-media.com/FirefoxExtension/dataanalytics.aspx"&gt;Review&lt;/a&gt;)&lt;br /&gt;    Take a web page full of data and have someone try to include that in a spreadsheet (Google docs &lt;em&gt;or&lt;/em&gt; Excel). Things may get messy...unless you have DataAnalytics. DataAnalytics extracts the data and allows you perform all types of sorting and filtering on your data to make your executive decisions. &lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-1733366108236992600?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/1733366108236992600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=1733366108236992600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1733366108236992600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1733366108236992600'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/01/top-10-firefox-business-extensions.html' title='Top 10 Firefox Business Extensions'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-1747047173476555990</id><published>2008-01-30T19:47:00.001-08:00</published><updated>2008-01-30T19:47:54.247-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='A comparison between the Google&apos;s GWT (Google Web Toolkit) and Adobe&apos;s Flex2'/><title type='text'>A comparison between the Google's GWT (Google Web Toolkit) and Adobe's Flex2</title><content type='html'>&lt;p&gt;This article would compare Google GWT (Google Web Toolkit) and Adobe Flex 2 and would describe the advantages and disadvantages of each of these technologies.&lt;br /&gt;This two technologies are both Rich Internet Application (RIA) frameworks.&lt;br /&gt;&lt;br /&gt;GWT Advantages:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Doesn't require plug in installation on the client side&lt;/li&gt;&lt;li&gt;GWT doesn't require the user to know JavaScript since the code is written in Java&lt;/li&gt;&lt;li&gt;GWT doesn't cost money since it is Open Source.&lt;/li&gt;&lt;li&gt;Changes in the Client side are immediately shown on the browser by using refresh, no need to restart the server.&lt;/li&gt;&lt;li&gt;GWT can be easily debugged in hosted mode.&lt;/li&gt;&lt;li&gt;There is compatible between different web browsers.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;GWT Disadvantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The html and JavaScript code which GWT generates is pretty heavy and not necessary fully optimized.&lt;/li&gt;&lt;li&gt;GWT doesn't come out of the box with all the possible widgets, there is a need to use extra components&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Flex Advantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The UI looks nicer then plain HTML/JavaScript code, It contains huge amount of animations, widgets etc'&lt;/li&gt;&lt;li&gt;Compatible between different web browsers&lt;/li&gt;&lt;li&gt;Flex 2 SDK and Flex Builder 2 for Education are both free&lt;/li&gt;&lt;li&gt;Google can index SWF files&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Flex Disadvantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It requires plug in installation on the client side , however this may not be disadvantage since Adobe claims that Flash is installed on more then 99% percent of users.&lt;/li&gt;&lt;li&gt;Flex Builder 2 costs some money&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-1747047173476555990?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/1747047173476555990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=1747047173476555990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1747047173476555990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1747047173476555990'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/01/comparison-between-googles-gwt-google.html' title='A comparison between the Google&apos;s GWT (Google Web Toolkit) and Adobe&apos;s Flex2'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-5823980346602545694</id><published>2008-01-30T19:43:00.000-08:00</published><updated>2008-01-30T19:46:50.821-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Care your eyes'/><title type='text'>Care your eyes</title><content type='html'>&lt;span style="font-family:Tahoma;font-size:100%;"&gt;&lt;span style="font-size: 12pt; font-family: Tahoma;"&gt;This info' is sure to help PC users very much.During a recent visit to an  optician, one of my mail friends was told of an exercise for the eyes by a  specialist doctor in the US that he termed as 20-20-20." It is apt for all of  us, who spend long hours at our desks, looking at the computer screen.  &lt;strong&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-family:Tahoma;"&gt;&lt;span style="font-family: Tahoma;"&gt;I Thought I'd  share it with&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-family:Trebuchet MS;"&gt;&lt;span style="font-family: 'Trebuchet MS';"&gt; you.  20-20-20&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/strong&gt;&lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;div&gt; &lt;div&gt; &lt;div style="margin-right: 189.75pt;"&gt; &lt;p class="MsoNormal" style="line-height: 19.2pt; text-align: center;" align="center"&gt;&lt;strong&gt;&lt;b&gt;&lt;span style="font-family:Trebuchet MS;font-size:100%;color:black;"&gt;&lt;span style="font-size: 12pt; color: black; font-family: 'Trebuchet MS';" lang="EN"&gt;Step  I&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/strong&gt;&lt;strong&gt;&lt;b&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span lang="EN"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt; &lt;div style="margin-right: 189.75pt;"&gt; &lt;p class="MsoNormal" style="line-height: 19.2pt; text-align: center;" align="center"&gt;&lt;span style="font-family:Trebuchet MS;font-size:100%;color:black;"&gt;&lt;span style="font-size: 12pt; color: black; font-family: 'Trebuchet MS';" lang="EN"&gt;:-After every  20 minutes of looking into the computer screen, turn your head and try to look  at any object placed at least 20 feet away. This changes the focal length of  your eyes, a must-do for the tired eyes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div style="margin-right: 189.75pt;"&gt; &lt;p class="MsoNormal" style="line-height: 19.2pt; text-align: center;" align="center"&gt;&lt;strong&gt;&lt;b&gt;&lt;span style="font-family:Trebuchet MS;font-size:100%;color:black;"&gt;&lt;span style="font-size: 12pt; color: black; font-family: 'Trebuchet MS';" lang="EN"&gt;Step  II &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt; &lt;div style="margin-right: 189.75pt;"&gt; &lt;p class="MsoNormal" style="line-height: 19.2pt; text-align: center;" align="center"&gt;&lt;span style="font-family:Trebuchet MS;font-size:100%;color:black;"&gt;&lt;span style="font-size: 12pt; color: black; font-family: 'Trebuchet MS';" lang="EN"&gt;:- Try and  blink your eyes for 20 times in succession, to moisten them.  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div style="margin-right: 189.75pt;"&gt; &lt;p class="MsoNormal" style="line-height: 19.2pt; text-align: center;" align="center"&gt;&lt;strong&gt;&lt;b&gt;&lt;span style="font-family:Trebuchet MS;font-size:100%;color:black;"&gt;&lt;span style="font-size: 12pt; color: black; font-family: 'Trebuchet MS';" lang="EN"&gt;Step  III &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt; &lt;div style="margin-right: 189.75pt;"&gt; &lt;p class="MsoNormal" style="line-height: 19.2pt; text-align: center;" align="center"&gt;&lt;span style="font-family:Trebuchet MS;font-size:100%;color:black;"&gt;&lt;span style="font-size: 12pt; color: black; font-family: 'Trebuchet MS';" lang="EN"&gt;:- Time  permitting of course, one should walk 20 paces after every 20 minutes of sitting  in one particular posture. Helps blood circulation for the entire body.  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div style="margin-right: 189.75pt;"&gt; &lt;p class="MsoNormal" style="line-height: 19.2pt; text-align: center;" align="center"&gt;&lt;span style="font-family:Trebuchet MS;font-size:100%;color:black;"&gt;&lt;span style="font-size: 12pt; color: black; font-family: 'Trebuchet MS';" lang="EN"&gt;Circulate  among your friends if you care for them and their eyes. They say that your eyes  r mirror of your soul, so do take care of them, they are  priceless................ &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;div style="margin-right: 189.75pt;"&gt; &lt;p class="MsoNormal" style="line-height: 19.2pt; text-align: center;" align="center"&gt;&lt;strong&gt;&lt;b&gt;&lt;span style="font-family:Trebuchet MS;font-size:100%;color:black;"&gt;&lt;span style="font-size: 12pt; color: black; font-family: 'Trebuchet MS';" lang="EN"&gt;Otherwise our  eye would be like this..... &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GJWEaji4mN0/R6FEZHCGrRI/AAAAAAAAAD4/UKYakUP3MPM/s1600-h/%21cid_004601c85426%2489eed400%244e64a8c0%40gehan.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GJWEaji4mN0/R6FEZHCGrRI/AAAAAAAAAD4/UKYakUP3MPM/s400/%21cid_004601c85426%2489eed400%244e64a8c0%40gehan.jpg" alt="" id="BLOGGER_PHOTO_ID_5161481846118591762" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-5823980346602545694?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/5823980346602545694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=5823980346602545694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5823980346602545694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/5823980346602545694'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/01/care-your-eyes.html' title='Care your eyes'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_GJWEaji4mN0/R6FEZHCGrRI/AAAAAAAAAD4/UKYakUP3MPM/s72-c/%21cid_004601c85426%2489eed400%244e64a8c0%40gehan.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-7390679435090321625</id><published>2008-01-30T19:38:00.001-08:00</published><updated>2008-01-30T19:38:52.792-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WHY EMPLOYEES LEAVE ORGANISATIONS ?'/><title type='text'>WHY EMPLOYEES LEAVE ORGANISATIONS ?</title><content type='html'>Every company faces the problem of people leaving the company for better&lt;br /&gt;pay  or profile.&lt;br /&gt;&lt;br /&gt;Early this year, Mark, a senior software designer, got an  offer from a&lt;br /&gt;prestigious international firm to work in its India  operations&lt;br /&gt;developing specialized software. He was thrilled by the  offer.&lt;br /&gt;&lt;br /&gt;He had heard a lot about the CEO. The salary was great. The  company had&lt;br /&gt;all the right systems in place employee-friendly human resources  (HR)&lt;br /&gt;policies, a spanking new office,and the very best technology,even  a&lt;br /&gt;canteen that served superb food.&lt;br /&gt;&lt;br /&gt;Twice Mark was sent abroad for  training. "My learning curve is the&lt;br /&gt;sharpest it's ever been," he said soon  after he joined.&lt;br /&gt;&lt;br /&gt;Last week, less than eight months after he joined, Mark  walked out of&lt;br /&gt;the job.&lt;br /&gt;&lt;br /&gt;Why did this talented employee leave  ?&lt;br /&gt;&lt;br /&gt;Arun quit for the same reason that drives many good people  away.&lt;br /&gt;&lt;br /&gt;The answer lies in one of the largest studies undertaken by the  Gallup&lt;br /&gt;Organization. The study surveyed over a million employees and  80,000&lt;br /&gt;managers and was published in a book called "First Break All The  Rules".&lt;br /&gt;It came up with this surprising finding:&lt;br /&gt;&lt;br /&gt;If you're losing good  people, look to their immediate boss .Immediate&lt;br /&gt;boss is the reason people  stay and thrive in an organization. And he 's&lt;br /&gt;the reason why people leave.  When people leave they take&lt;br /&gt;knowledge,experience and contacts with them,  straight to the&lt;br /&gt;competition.&lt;br /&gt;&lt;br /&gt;"People leave managers not companies,"  write the authors Marcus&lt;br /&gt;Buckingham and Curt Coffman.&lt;br /&gt;&lt;br /&gt;Mostly manager  drives people away?&lt;br /&gt;&lt;br /&gt;HR experts say that of all the abuses, employees find  humiliation the&lt;br /&gt;most intolerable. The first time, an employee may not  leave,but a&lt;br /&gt;thought has been planted. The second time, that thought  gets&lt;br /&gt;strengthened. The third time, he looks for another job.&lt;br /&gt;&lt;br /&gt;When  people cannot retort openly in anger, they do so by passive&lt;br /&gt;aggression. By  digging their heels in and slowing down. By doing only&lt;br /&gt;what they are told to  do and no more. By omitting to give the boss&lt;br /&gt;crucial information. Dev says:  "If you work for a jerk, you basically&lt;br /&gt;want to get him into trouble. You don  't have your heart and soul in the&lt;br /&gt;job."&lt;br /&gt;&lt;br /&gt;Different managers can stress  out employees in different ways - by being&lt;br /&gt;too controlling, too  suspicious,too pushy, too critical, but they forget&lt;br /&gt;that workers are not  fixed assets, they are free agents. When this goes&lt;br /&gt;on too long, an employee  will quit - often over a trivial issue.&lt;br /&gt;&lt;br /&gt;Talented men leave. Dead wood  doesn't.&lt;br /&gt;&lt;br /&gt;"Jack Welch of GE once said. A company's value lies "between the  ears of&lt;br /&gt;its employees".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-7390679435090321625?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/7390679435090321625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=7390679435090321625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7390679435090321625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7390679435090321625'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2008/01/why-employees-leave-organisations.html' title='WHY EMPLOYEES LEAVE ORGANISATIONS ?'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-7487379603371058720</id><published>2007-12-26T22:51:00.000-08:00</published><updated>2007-12-26T22:55:07.003-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life of a software engineer'/><title type='text'>Life of a software engineer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GJWEaji4mN0/R3NMMW1S8nI/AAAAAAAAADQ/I77rgJykNJo/s1600-h/%21cid_001b01c84850%2459536400%244e64a8c0%40gehan.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 557px; height: 234px;" src="http://bp0.blogger.com/_GJWEaji4mN0/R3NMMW1S8nI/AAAAAAAAADQ/I77rgJykNJo/s400/%21cid_001b01c84850%2459536400%244e64a8c0%40gehan.jpg" alt="" id="BLOGGER_PHOTO_ID_5148542574185869938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GJWEaji4mN0/R3NLy21S8mI/AAAAAAAAADI/NJedkqarmuc/s1600-h/%21cid_001b01c84850%2459536400%244e64a8c0%40gehan.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-7487379603371058720?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/7487379603371058720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=7487379603371058720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7487379603371058720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/7487379603371058720'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/life-of-software-engineer.html' title='Life of a software engineer'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_GJWEaji4mN0/R3NMMW1S8nI/AAAAAAAAADQ/I77rgJykNJo/s72-c/%21cid_001b01c84850%2459536400%244e64a8c0%40gehan.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-4643058814423370072</id><published>2007-12-26T22:40:00.000-08:00</published><updated>2007-12-26T22:41:19.443-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USAID Partners with Microsoft to Unleash Lanka’s ‘Unlimited Potential’ in IT'/><title type='text'>USAID Partners with Microsoft to Unleash Lanka’s ‘Unlimited Potential’ in IT</title><content type='html'>&lt;p&gt;&lt;b&gt;Colombo, 22 November, (Asiantribune.com):&lt;/b&gt; The U.S. Agency for International Development (USAID) is partnering with Microsoft to introduce a new training curriculum developed with the assistance of the American information technology giant for four key sectors of the Sri Lankan economy.&lt;/p&gt; &lt;p&gt;USAID and Microsoft are co-financing the $236,000 project, which will be implemented by InfoShare, a nonprofit firm that develops IT solutions to nonprofit development organizations. Microsoft specially tailored the worldwide curriculum, known as Unlimited Potential, to boost Sri Lanka’s agricultural, apparel, tourism, and media/journalism sectors using IT. &lt;/p&gt; &lt;p&gt;“The forging of such public private partnerships is a cornerstone of USAID’s program here,” said USAID/Sri Lanka Mission Director Rebecca Cohn. “USAID’s goal of working toward a more prosperous and peaceful Sri Lanka cannot be achieved without the support and collaboration with partners dedicated to improving the skills and employability of youth.”&lt;span class="inline right"&gt;&lt;img class="image img_assist_custom" title="USAID Mission Director Rebecca Cohn (left) and Microsoft’s Sriyan de Silva Wijeyeratne sign an agreement to finance a program that will boost IT skills in four key sectors of the Sri Lankan economy.  (Photo: USAID/Zack Taylor)" alt="USAID Mission Director Rebecca Cohn (left) and Microsoft’s Sriyan de Silva Wijeyeratne sign an agreement to finance a program that will boost IT skills in four key sectors of the Sri Lankan economy.  (Photo: USAID/Zack Taylor)" src="http://www.asiantribune.com/files/images/AID-Microsoft.jpg" height="428" width="600" /&gt;&lt;span class="caption" style="width: 598px;"&gt;&lt;strong&gt;USAID Mission Director Rebecca Cohn (left) and Microsoft’s Sriyan de Silva Wijeyeratne sign an agreement to finance a program that will boost IT skills in four key sectors of the Sri Lankan economy. (Photo: USAID/Zack Taylor)&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;The ambitious program will train at least 11,000 people, and provide scholarships to 2,000 needy students, many in the North-Central and Eastern provinces, Ms. Cohn said. In partnership with Microsoft, InfoShare has already begun to train about 110 instructors to teach the courses, which will be offered through various training organizations under the auspices of the Vocational Training Authority and private sector institutions. &lt;/p&gt; &lt;p&gt;“So much has happened in the area of information technology in the region with tremendously positive results,” said Sriyan de Silva Wijeyeratne of Microsoft. “We want to take on a bigger role in helping Sri Lanka access a bigger piece of this extremely beneficial pie.”&lt;/p&gt; &lt;p&gt;Ms. Cohn added that Unlimited Potential represents an important step to ensure Sri Lankan firms become and remain competitive in the international marketplace by ensuring that the workforce has the necessary skills in information technology. &lt;/p&gt; &lt;p&gt;“Modern information and communications technologies provide some enormously powerful tools for small and medium-sized businesses,” said Anuruddha Edirisinghe of InfoShare. “This IT curriculum, tailored to the needs of the four industries, will help them realize the full potential of their workforce and at the same time increase the employability of rural youth.”&lt;/p&gt; &lt;p&gt;The program targets some of its services to the East and North Central provinces, where there is a compelling need to retrain and reintegrate youth who have been previously involved in activities associated with the conflict.&lt;/p&gt; &lt;p&gt;The program is supported in part by the USAID Global Development Alliance (GDA), which supports private-public partnerships to serve as a catalyst to mobilize the ideas, efforts, and resources of the public sector, corporate America and non-governmental organizations in support of shared objectives. “USAID will continue to use the GDA model as an important part of its development strategy in Sri Lanka,” Ms. Cohn said. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-4643058814423370072?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/4643058814423370072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=4643058814423370072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/4643058814423370072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/4643058814423370072'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/usaid-partners-with-microsoft-to.html' title='USAID Partners with Microsoft to Unleash Lanka’s ‘Unlimited Potential’ in IT'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-6098528883589981504</id><published>2007-12-26T22:36:00.001-08:00</published><updated>2007-12-26T22:39:52.458-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IPTV- Sri Lanka'/><title type='text'>IPTV- Sri Lanka</title><content type='html'>&lt;div align="center"&gt;&lt;span style="font-size:6;"&gt;IPTV- Sri Lanka&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt; &lt;/div&gt; &lt;blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color:#6600cc;"&gt;Think of sitting in front of the TV  and getting a more interactive session without just watching what's on but being  &lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color:#009900;"&gt;able to watch the programmes  you want, at the time you want, and getting a message on the screen alerting you  of any phone call or SMS.&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span style="color:#009900;"&gt;&lt;span style="font-size:85%;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;This may sound like something from the  future, but this is coming to Sri Lanka and will be here next year come  February.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Sri Lanka Telecom, the leading national  telecom service provider is provide to giving the consumers with the latest in  television technology with IPTV. The emerging technology that enables the  delivery of broadcast quality TV and on-demand entertainment services over IP  networks. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GJWEaji4mN0/R3NIjG1S8kI/AAAAAAAAAC4/iNDWd7NiuRg/s1600-h/%21cid_02a101c81f6f%2436b45d00%244e64a8c0%40gehan.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_GJWEaji4mN0/R3NIjG1S8kI/AAAAAAAAAC4/iNDWd7NiuRg/s320/%21cid_02a101c81f6f%2436b45d00%244e64a8c0%40gehan.gif" alt="" id="BLOGGER_PHOTO_ID_5148538566981382722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Broadcasting delivery will be carried out over  an ADSL line by SLT that will be providing TV services becoming the clear  competitor for the satellite TV networks already in Sri Lanka.&lt;br /&gt;&lt;br /&gt;Services  will include an over and above what the cable TV providers already have with the  introduction of interactive services, Voice on Demand, time-shifted  TV.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The main target will be residential market providing delivery on  TV with interactive &lt;/b&gt;, SLT's ISP Services Head of Section Irshad Deen said.&lt;br /&gt;&lt;br /&gt;He noted that the content will include broadcast TV with sports,  entertainment and light, educational and serious niche segment as well.&lt;br /&gt;&lt;br /&gt;"This will be a paradigm shift and a giant convergence step from telco  to broadcasting communication," he said.&lt;br /&gt;&lt;br /&gt;The biggest part is the when and  how way in which the customer wants to watch the TV because of interactivity it  helps to bring services to be more interactive-based.&lt;br /&gt;&lt;br /&gt;"We are in the  process of selecting the right platform with a set up Master Control Room to  ensure right quality," Deen explained.&lt;br /&gt;&lt;br /&gt;Security will also be protected  heavily with water marking with AES algorithm which is able to protect the  content over the network, he said.&lt;br /&gt;&lt;br /&gt;Initially SLT will be providing voice  via telephone or mobile, data on broadband internet access and video through  television allowing the customer to have the full use of triple play. But  quadruple play which will involve all of these services along with wireless  service provisions will allow customers sometime later be able to access these  services while on the move.&lt;br /&gt;&lt;br /&gt;From senior citizens to the hip youth and  kids, services will be made available with Cartoon TV, video games, handset  games, music download, ring tone downloads, mobile video games, news, music and  radio, TV and movies, sports news will involve the focus services.&lt;br /&gt;&lt;br /&gt;A  convergence of services via one network will be the best deal that will be up on  offer through this new technological advancement that will hit Colombo initially  and later go to the regions next year.&lt;br /&gt;&lt;br /&gt;This service will prove to be a  win-win solution for all with an estimated US$25 billion CAPEX for IPTV related  infrastructure and content by 2010 which aptly applies for vendors of this  service.&lt;br /&gt;&lt;br /&gt;Broadcasters will be able to deal with professional telco  organizations, have accountability of viewer-ship, ability to offer enhanced  services and increase revenue; while operators will be able to access new  revenue streams, reduced churn and obtain higher valuation for wire line.&lt;br /&gt;&lt;br /&gt;Customers will have a wider choice of reliable and accountable service  providers, digital quality programming and flexibility of subscription packages  in addition to new services such as interactivity, gaming, video call and VoD. &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-6098528883589981504?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/6098528883589981504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=6098528883589981504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6098528883589981504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6098528883589981504'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/iptv-sri-lanka.html' title='IPTV- Sri Lanka'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_GJWEaji4mN0/R3NIjG1S8kI/AAAAAAAAAC4/iNDWd7NiuRg/s72-c/%21cid_02a101c81f6f%2436b45d00%244e64a8c0%40gehan.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-8153237194849007583</id><published>2007-12-26T22:36:00.000-08:00</published><updated>2008-02-29T03:22:02.549-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IPTV- Sri Lanka'/><title type='text'>IPTV- Sri Lanka</title><content type='html'>&lt;div align="center"&gt;&lt;font size="6"&gt;IPTV- Sri Lanka&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt; &lt;/div&gt; &lt;blockquote&gt;&lt;font size="4"&gt;&lt;font color="#6600cc"&gt;Think of sitting in front of the TV  and getting a more interactive session without just watching what's on but being  &lt;/font&gt;&lt;/font&gt;&lt;u&gt;&lt;font size="4"&gt;&lt;font color="#009900"&gt;able to watch the programmes  you want, at the time you want, and getting a message on the screen alerting you  of any phone call or SMS.&lt;/font&gt;&lt;/font&gt;&lt;/u&gt;&lt;u&gt;&lt;font color="#009900"&gt;&lt;font size="2"&gt;  &lt;/font&gt;&lt;/font&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;font size="4"&gt;This may sound like something from the  future, but this is coming to Sri Lanka and will be here next year come  February.&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="2"&gt;Sri Lanka Telecom, the leading national  telecom service provider is provide to giving the consumers with the latest in  television technology with IPTV. The emerging technology that enables the  delivery of broadcast quality TV and on-demand entertainment services over IP  networks. &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Broadcasting delivery will be carried out over  an ADSL line by SLT that will be providing TV services becoming the clear  competitor for the satellite TV networks already in Sri Lanka.&lt;br /&gt;&lt;br /&gt;Services  will include an over and above what the cable TV providers already have with the  introduction of interactive services, Voice on Demand, time-shifted  TV.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The main target will be residential market providing delivery on  TV with interactive &lt;/b&gt;, SLT's ISP Services Head of Section Irshad Deen said. &lt;br /&gt;&lt;br /&gt;He noted that the content will include broadcast TV with sports,  entertainment and light, educational and serious niche segment as well. &lt;br /&gt;&lt;br /&gt;"This will be a paradigm shift and a giant convergence step from telco  to broadcasting communication," he said.&lt;br /&gt;&lt;br /&gt;The biggest part is the when and  how way in which the customer wants to watch the TV because of interactivity it  helps to bring services to be more interactive-based.&lt;br /&gt;&lt;br /&gt;"We are in the  process of selecting the right platform with a set up Master Control Room to  ensure right quality," Deen explained.&lt;br /&gt;&lt;br /&gt;Security will also be protected  heavily with water marking with AES algorithm which is able to protect the  content over the network, he said.&lt;br /&gt;&lt;br /&gt;Initially SLT will be providing voice  via telephone or mobile, data on broadband internet access and video through  television allowing the customer to have the full use of triple play. But  quadruple play which will involve all of these services along with wireless  service provisions will allow customers sometime later be able to access these  services while on the move.&lt;br /&gt;&lt;br /&gt;From senior citizens to the hip youth and  kids, services will be made available with Cartoon TV, video games, handset  games, music download, ring tone downloads, mobile video games, news, music and  radio, TV and movies, sports news will involve the focus services.&lt;br /&gt;&lt;br /&gt;A  convergence of services via one network will be the best deal that will be up on  offer through this new technological advancement that will hit Colombo initially  and later go to the regions next year.&lt;br /&gt;&lt;br /&gt;This service will prove to be a  win-win solution for all with an estimated US$25 billion CAPEX for IPTV related  infrastructure and content by 2010 which aptly applies for vendors of this  service.&lt;br /&gt;&lt;br /&gt;Broadcasters will be able to deal with professional telco  organizations, have accountability of viewer-ship, ability to offer enhanced  services and increase revenue; while operators will be able to access new  revenue streams, reduced churn and obtain higher valuation for wire line. &lt;br /&gt;&lt;br /&gt;Customers will have a wider choice of reliable and accountable service  providers, digital quality programming and flexibility of subscription packages  in addition to new services such as interactivity, gaming, video call and VoD. &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-8153237194849007583?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/8153237194849007583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=8153237194849007583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8153237194849007583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8153237194849007583'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/iptv-sri-lanka_26.html' title='IPTV- Sri Lanka'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-3385278942420269125</id><published>2007-12-26T22:35:00.000-08:00</published><updated>2007-12-26T22:36:38.858-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='To all Sri Lankan on working late.'/><title type='text'>To all Sri Lankan on working late.</title><content type='html'>&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;PLEASE READ &amp;amp; THINK.......&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:purple;"&gt;&lt;span style="color: purple;"&gt;views on staying late in the office&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;&lt;br /&gt;Dear All, &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;&lt;br /&gt;It's half past 8 in the office  but the lights are still on...&lt;br /&gt;PCs still running, coffee machines still  buzzing...&lt;br /&gt;and who's at work? Most of them??? Take a closer look...&lt;br /&gt;All  or most specimens are ??-something male species of the human&lt;br /&gt;race... &lt;br /&gt;Look closer... again all or most of them are&lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt; bachelors&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;...&lt;br /&gt;and why are they sitting  late? Working hard? No way!!!&lt;br /&gt;Any guesses???&lt;br /&gt;Let's ask one of them... &lt;br /&gt;Here's what he says... "What's there 2 do after going home... here we &lt;br /&gt;get to surf, AC, phone, food, coffee.. that is why I am working late... &lt;br /&gt;importantly &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;no bossssssss&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;!!!!!!!!!!!&lt;br /&gt;This is the scene in most research  centers and software companies&lt;/span&gt;&lt;/span&gt; , &lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;and&lt;br /&gt;other off-shore offices.&lt;br /&gt;Bachelors  "time-passing" during late hours in the office just bcoz they&lt;br /&gt;say they've  nothing else to do...&lt;br /&gt;Now what r the consequences... read on... &lt;br /&gt;"Working"(for the record only) late hours &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;soon becomes part&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt; of the&lt;br /&gt;institute or company  &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;culture&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;.&lt;br /&gt;With bosses more than eager to provide support to  those "working" late&lt;br /&gt;in the form of taxi vouchers, food vouchers and of  course good&lt;br /&gt;feedback,(oh, he's a hard worker... goes home only to  change..!!).They aren't helping things too... To hell with bosses who don't  understand the difference between "sitting" late and "working" late!!!&lt;br /&gt;Very  soon, the boss &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;start expecting&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt; all employees to put in extra&lt;br /&gt;working hours.&lt;br /&gt;So,  My dear Bachelors let me tell you, life &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;changes when u get married&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;&lt;br /&gt;and start having a family...  office is no longer a priority, &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;family is&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;...&lt;br /&gt;and that's when the &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;problem starts&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;... becoz u start having commitments  at&lt;br /&gt;home too.&lt;br /&gt;For your boss, the earlier "hardworking" guy suddenly seems  to become a&lt;br /&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;early leaver&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;" even if u leave an hour after regulartime... after  doing&lt;br /&gt;the same amount of work.&lt;br /&gt;People leaving on time after doing their  tasks for the day are labeled&lt;br /&gt;as work-shirkers...&lt;br /&gt;Girls who thankfully  always (its changing nowadays... though) leave on &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;color:#4f4f4f;"&gt;&lt;span style="font-size: 7.5pt; color: rgb(79, 79, 79);"&gt;&lt;br /&gt;time  &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;are labeled as  "not up to it". All the while, the bachelors pat their&lt;br /&gt;own backs and carry  on "working" not realizing that they r spoiling the&lt;br /&gt;work culture at their  own place and never realize that they wuld have to&lt;br /&gt;regret at one point of  time. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;&lt;br /&gt;*  So what's the moral of the story?? *&lt;br /&gt;* Very clear, &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#00ccff;"&gt;&lt;span style="color: rgb(0, 204, 255);"&gt;LEAVE ON TIME&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;!!!&lt;br /&gt;* Never put in extra time "  *unless &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;really  needed&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt; *"&lt;br /&gt;*  Don't stay back un-necessarily and &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;spoil&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt; your company &lt;/span&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&lt;span style="color: fuchsia;"&gt;work culture&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;&lt;br /&gt;which will in turn cause inconvenience to you and  your colleagues.&lt;br /&gt;There are &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#00ccff;"&gt;&lt;span style="color: rgb(0, 204, 255);"&gt;hundred other things to do&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt; in the evening..&lt;br /&gt;Learn music... &lt;br /&gt;Learn a foreign language...&lt;br /&gt;try a sport... TT, cricket......... &lt;br /&gt;importantly Get &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#00ccff;"&gt;&lt;span style="color: rgb(0, 204, 255);"&gt;a girl friend&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt; or gal friend, take him/her around&lt;br /&gt;town...  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;&lt;br /&gt;* And for  heaven's sake net cafe rates have dropped to an all-time low&lt;br /&gt;(plus, no  fire-walls) and try cooking for a change. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#4f4f4f;"&gt;&lt;span style="color: rgb(79, 79, 79);"&gt;&lt;br /&gt;Take a tip from the Smirnoff ad:  *"Life's calling, where are you??"*&lt;br /&gt;Please pass on this message to all those  colleagues And please do it&lt;br /&gt;before leaving time, don't stay back till  midnight to forward this!!! &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;color:green;"&gt;&lt;span style="font-size: 18pt; color: green;"&gt;&lt;br /&gt;ITS A TYPICAL &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-size: 18pt;"&gt;SRILANKAN&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size:180%;color:fuchsia;"&gt;&lt;span style="font-size: 18pt; color: fuchsia;"&gt;MENTALITY&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:180%;color:green;"&gt;&lt;span style="font-size: 18pt; color: green;"&gt; THAT WORKING FOR LONG HOURS  MEANS VERY HARD WORKING &amp;amp; 100% COMMITMENT ETC.&lt;br /&gt;PEOPLE WHO REGULARLY SIT  LATE IN THE OFFICE &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:180%;color:fuchsia;"&gt;&lt;span style="font-size: 18pt; color: fuchsia;"&gt;DON'T KNOW TO MANAGE&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:180%;color:green;"&gt;&lt;span style="font-size: 18pt; color: green;"&gt; THEIR TIME.  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;color:fuchsia;"&gt;&lt;span style="font-size: 13.5pt; color: fuchsia;"&gt;&lt;br /&gt;SIMPLE !!! &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-3385278942420269125?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/3385278942420269125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=3385278942420269125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3385278942420269125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/3385278942420269125'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/to-all-sri-lankan-on-working-late.html' title='To all Sri Lankan on working late.'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-8464370035314013094</id><published>2007-12-26T22:34:00.000-08:00</published><updated>2007-12-26T22:35:24.647-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LTTE a trend setter in cyber terrorism'/><title type='text'>LTTE a trend setter in cyber terrorism</title><content type='html'>&lt;p&gt;&lt;b&gt;Colombo, 29 October, (Asiantribune.com):&lt;/b&gt; This month marks 20 years since the Indian Peace Keeping Force launched '&lt;i&gt;Operation Pawan&lt;/i&gt;' against the Tigers in response to their mortar and machine gun attacks on IPKF patrols. The only photo-journalist present in the combat zone at the height of the battle for Jaffna was &lt;i&gt;India Today's&lt;/i&gt;Shyam Tekwani. Having been taken to Jaffna , by the LTTE, he was witness to actual battle scenes and obtained a unique insight to Tiger tactics, their weapons, morale and mentality. His cover story appeared in the &lt;i&gt;India Today &lt;/i&gt; of November 15, 1987 under the title, ' Sri Lanka: A Bloodied Accord' with a picture of an Indian soldier killed by the LTTE in Kokuvil.&lt;/p&gt; &lt;p&gt;Now, two decades later with a wealth of experience with the Tigers behind him he draws attention to lessons that all governments fighting the terrorist menace had better learn if they are to effectively meet the challenge. &lt;/p&gt; &lt;p&gt;Presently Assistant Professor, School of Communication and Information, Nanyang Technological University, Singapore, Tekwani's exclusive reportage of the conflict has been published internationally. &lt;/p&gt; &lt;p&gt;Addressing the recently concluded International Conference on Countering Terrorism in Colombo, he said:&lt;/p&gt; &lt;p&gt;"To understand the significance of the regional security threat posed by the LTTE it is necessary first to examine the relationship between terrorism and new media technologies. The information revolution in Asia offers terrorist groups the same benefits and advantages that it extends to business enterprises in the region.&lt;/p&gt; &lt;p&gt;Increased globalization and rapid absorption of new media technologies into business practices has enabled the ongoing dynamic economic environment in many Asian nations. Just as business corporations in Asia are adapting their tactical and operational strategies to make the best use of new technology and the emerging global economy, extremist groups are doing the same." Tekwani was speaking on 'The LTTE's online network and its implications for Regional Security.' &lt;/p&gt; &lt;p&gt;Tekwani recalled that the IPKF lost the media war against the Tigers having failed to win the confidence of journalists. It clearly proved the theory that terrorists understand the value of the media far better than governments. &lt;/p&gt; &lt;p&gt;He recalled that once when he returned from the battle zone after seven weeks he was amazed to read in the Indian press reports that were almost a total distortion of the real situation. He did not require much intelligence to realize that the LTTE had fed these newspapers with virtually fabricated stories.&lt;/p&gt; &lt;p&gt;"The LTTE branded the IPKF the 'Indian People Killing Force' and – sometimes – the 'Italian-Parsi Killing Force.' The latter was meant to personally ridicule Sonia (Italian) and Rajiv Gandhi (Parsi)."&lt;/p&gt; &lt;p&gt;Tekwani said that the Western media too had eagerly lapped up everything that the Tigers offered to them, since the former always loves any group that projects itself as the underdog, although the today the world is beginning to see the LTTE as an integral part of the international terrorist network. &lt;/p&gt; &lt;p&gt;"The Tigers are so clever in deceiving the young that when I show my students Tiger websites meant for different audiences the students are impressed and almost express support for the LTTE cause. But afterwards when I explain to them the organization's background and who the Tigers really are they begin to think differently."&lt;/p&gt; &lt;p&gt;He observed that one of the main factors affecting the Sri Lankan military's handling of the LTTE has been dwindling morale, whittled away by the support the LTTE had garnered in its early years from the international community. This was in large part due to its international propaganda campaign, which capitalized on its status as a marginalized minority and used the propaganda to focus on the sufferings of the Tamils rather than the violence of its own actions. &lt;/p&gt; &lt;p&gt;"The LTTE continues to do so with considerable success on the Internet."&lt;/p&gt; &lt;p&gt;In addition, Tekwani says, the LTTE has also ventured into cyber crime on occasion. He recalled that the Tigers had used the Internet to hack into Sri Lankan Government networks in 1997 - the first recorded use of Internet in the world by any conventional terrorist group. The Tigers are also reported to have used the Internet for criminal profit, as evidenced by the University of Sheffield case, which exposes the more serious issue of the Internet identity theft by terrorists. &lt;/p&gt; &lt;p&gt;According to him, the Tigers were also able to hack into the Sheffield University in England in 1997, and use the university computer system to send their propaganda and to engage in fund raising. And they did it in a covert manner. Having captured legitimate user IDs and passwords of well-respected university academics to disseminate e-mail communications around the world, they used those legitimate e-mail accounts and asked people to send money to a charity in Sri Lanka! While such instances are not yet the norm, they are undeniably the trend of the future. And the LTTE is nothing if not a trend setter in such tactics.&lt;/p&gt; &lt;p&gt;Tekwani regretted that the Sri Lankan Government - which many perceive as having lost the propaganda war with the LTTE even more thoroughly than it has the war on the ground – has no infrastructure legal or technical, to block access to LTTE and pro-LTTE sites within Sri Lanka even though the State has its own press, radio and television. &lt;/p&gt; &lt;p&gt;"This is a loop hole the LTTE has used well. In a related matter the creator of the 'I Love You' virus in the Philippines escaped punishment because the government there had no laws in place to prosecute cyber crimes. The situation is depressingly similar across Asia with the exception of perhaps Singapore. Asian nations are getting on to the information highway without any traffic laws in place…" &lt;/p&gt; Tekwani noted that the LTTE was one of the first groups to use the Internet in its campaigns. The LTTE's use of the Internet and other new media and communication technologies as an integral part of its campaign represents an emerging security issue in the region, according to him.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-8464370035314013094?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/8464370035314013094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=8464370035314013094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8464370035314013094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8464370035314013094'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/ltte-trend-setter-in-cyber-terrorism.html' title='LTTE a trend setter in cyber terrorism'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-1948147523788120536</id><published>2007-12-26T22:31:00.001-08:00</published><updated>2007-12-26T22:31:59.283-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sri Lanka ranks no.2 of the software piracy in Asia'/><title type='text'>Sri Lanka ranks no.2 of the software piracy in Asia</title><content type='html'>&lt;p&gt;&lt;b&gt;Colombo, 24 October, (Asiantribune.com):&lt;/b&gt; The software piracy rate of Sri Lanka is the second to Bangladesh which ranks 92% .At present Sri Lanka ranks 90 % , according to a recent Global software Piracy Report conducted by the IDC- a global research and forecasting firm , said Roland Chan , Director of the Business Software Alliance of Singapore [BSA].&lt;/p&gt; &lt;p&gt;Speaking at a press briefing held in this morning in Colombo he said due to the software piracy the software industry losses over 86 million US$ per annum.&lt;/p&gt; &lt;p&gt;Replying questions of the reporters, he said this means that nine out of ten software installed personal computers in 2006 in Sri Lanka was unlicensed or obtained illegally through software theft. &lt;/p&gt; &lt;p&gt;The findings of the study have highlighted the need for action against software piracy in Sri Lanka, where it has taken a heavy toll on personal and business users as well as overall economy. The broader economic impact of software piracy is significantly greater than the retail value of pirated software, he said.&lt;/p&gt; &lt;p&gt;Among the many negative consequences of software piracy is the crippling of local software industries because of competition with pirated software, lost tax revenues and jobs from the lack of a legitimate market and decreased business productivity from using unsupported and unwarranted software.&lt;/p&gt; &lt;p&gt;Stemming the tide of piracy in Sri Lanka can only be achieved through industry education and awareness and proactive government led enforcement efforts . Software piracy is tantamount to software theft and therefore forbidden by the law of Sri Lanka . He commended local law imposing agencies and said Sri Lanka has already passed a number of bills to end computer crime and protect Intellectual Property Rights of the entrepreneurs.&lt;/p&gt; &lt;p&gt;Replying queries made by the media, the BSA Director explained the risks of using pirated software are vast-there is no warranty or support and users may even run the risk of fraud and identity theft.&lt;/p&gt; &lt;p&gt;He said the BSA which was formed in 1988 is making a concerted effort through software asset management to raise awareness about software piracy. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-1948147523788120536?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/1948147523788120536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=1948147523788120536' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1948147523788120536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1948147523788120536'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/sri-lanka-ranks-no2-of-software-piracy.html' title='Sri Lanka ranks no.2 of the software piracy in Asia'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-9095582044656564492</id><published>2007-12-26T22:28:00.000-08:00</published><updated>2007-12-26T22:31:00.526-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BPO in the A’pura backwoods'/><title type='text'>BPO in the A’pura backwoods</title><content type='html'>&lt;table align="right" border="0" cellpadding="3" width="40%"&gt;               &lt;tbody&gt;&lt;tr&gt;                 &lt;td&gt;&lt;img src="http://www.sundaytimes.lk/071021/images/ft1-1.jpg" height="306" hspace="5" vspace="5" width="400" /&gt;&lt;/td&gt;               &lt;/tr&gt;               &lt;tr&gt;                 &lt;td class="caption"&gt;OnTime operators&lt;/td&gt;               &lt;/tr&gt;             &lt;/tbody&gt;&lt;/table&gt;             &lt;p class="content"&gt;MAHAVILACHCHIYA, Anuradhapura - Business Processing Outsourcing (BPO) is a growing business globally which Sri Lanka has now cottoned onto quite capably.&lt;/p&gt;             &lt;p class="content"&gt; Dozens of BPO’s are springing up here as global companies look for cost effective ways of handling their back-office operations in countries where labour and communications are cheaper than the west. &lt;/p&gt;             &lt;p class="content"&gt; Yet ever heard of a BPO company in a jungle setting, next to a wild life park and subject to the occasional threat by the LTTE? OnTime Pvt Ltd is part of rural Sri Lanka’s first IT village, Horizon Lanka in the backwoods of Mahavilachchiya (adjoining Wilpattu) off Anuradhapura, where a group of youth processes data for a fee.&lt;/p&gt;             &lt;p class="content"&gt; There is nothing different in the BPO industry in processing information inside the office of the client or the service provider located elsewhere. For example, staff at Mahavilachchiya’s proud company, OnTime, processing marketing data for a John Keells Group subsidiary daily could – if we close the curtains in this nice office surrounded by shady trees and occasional bird calls – very well be inside a JKH office in Colombo. There’s nothing different.&lt;/p&gt;             &lt;p class="content"&gt; OnTime operators log into a JKH SAP accounting system through a secured link and enter data like prices and quality of suppliers. Some 150 documents are handled by one operator per day. Dialog Telekom and Singer are expected to join OnTime as its next clients with negotiations going on with the two parties. &lt;/p&gt;             &lt;p class="content"&gt;“The BPO entry came as we needed to create job opportunities for our youngsters to remain in the village after their initial learning in English and IT,” said Nandasiri Wanninayaka (better known as ‘Wanni”), the village boy-English teacher-turned village entrepreneur.&lt;/p&gt;             &lt;p class="content"&gt; Horizon Lanka, Sri Lanka’s first IT village, is a revelation itself. Launched by Wanni, as a Mahavilachchiya school teacher, in 1998, the initiative began as an English teaching exercise for the children whose parents were mostly rice farmers. From there with one computer donated by the US embassy, impressed by an English journal that the students did, the village has progressed to a centre of IT learning where one in every eight families has a computer (a ratio of 100 computers for 800 families).&lt;/p&gt;&lt;br /&gt;&lt;p class="content"&gt; Unheard of before but in these backwoods poor farmers are reading online newspapers in the comfort of their makeshift homes with uptodate computers with the help – unbelievable again – of seven wifi zones under a new technology called MESH. Here a section of the village amidst paddy fields and streams has wireless Internet access at all times.&lt;/p&gt;             &lt;p class="content"&gt; Wanni and his Horizon Lanka exploits are legendary and profiled in newspapers and TV stations across the world. The IT village’s biggest opportunity probably came when Wanni and his best students shared the stage with Intel Chairman Dr. Craig Barrett in December 2005, during the latter’s visit to Sri Lanka and presence at a major IT conference. &lt;/p&gt;             &lt;p class="content"&gt; The idea of setting up a BPO emerged as Wanni pondered on the next level of development. “Having taught English and then IT, the next issue was where do they get jobs? How can we retain them in the village?” he asked.&lt;/p&gt;             &lt;p class="content"&gt;Enter the Foundation for Advancing Rural Opportunities in Sri Lanka (FAROLanka) to help Horizon set up its BPO and find its first client. FARO’s help however comes with some conditions – Wanni’s support and guidance to help other villages to develop on similar lines which the latter and his team are more than willing to do.&lt;/p&gt;             &lt;p class="content"&gt; Isuru Senevirathna is OnTime’s Operations Director. He has received BPO training – along with another OnTime employee – in Laos and India sponsored by John Keells.&lt;/p&gt;             &lt;p class="content"&gt; The 20-year old youth like any other Mahavilachchiya youngster would have had to either join the armed forces (in the case of girls it’s garment factories) or remain in the village as a farmer, until Wanni and his vision came along. Now Isuru is the proud owner of a motor cycle, happy and contended.&lt;/p&gt;             &lt;p class="content"&gt; OnTime CEO is Nirosh Manjula Ranathunga, a 30 year-old graduate from Kelaniya University who studied IT while doing his B.Com degree. Ranathunga, who lives in Anuradhapura and visits Horizon twice a week saying he can handle operations from his home town easily through email/Internet, is also interested in transferring his skills and learning to other villages. He has his own company, Real Business Solutions, and runs a formerly-owned Horizon Lanka cyber café in Anuradhapura.&lt;/p&gt;             &lt;p class="content"&gt;“I joined Horizon Lanka two years ago as a project manager and I’am very happy with this BPO initiative,” he said. Some 50 youths are being trained to take up BPO jobs in Mahavilachchiya which has a modern computer lab with 512 KBPS Internet connection. The Horizon Lanka website is &lt;a href="http://www.horizonlanka.org/" target="_blank"&gt;www.horizonlanka.org&lt;/a&gt;&lt;/p&gt;&lt;p class="content"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="content"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-9095582044656564492?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/9095582044656564492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=9095582044656564492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/9095582044656564492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/9095582044656564492'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/bpo-in-apura-backwoods.html' title='BPO in the A’pura backwoods'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-2219608245159937667</id><published>2007-12-26T22:24:00.000-08:00</published><updated>2007-12-26T22:26:09.654-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Smart: Solution to classpath too long (aka input line too long) problem in Windows'/><title type='text'>Code Smart: Solution to classpath too long (aka input line too long) problem in Windows</title><content type='html'>&lt;p&gt;If you use Java in Windows, you're bound to run into classpath too long problem when your classpath grows. Windows has a limit (1KB - 2KB) of characters you can have on one single command line. The infamous "Input line is too long" is very annoying. Here's a trick to get around it.&lt;br /&gt;&lt;br /&gt;"java.exe" command also scan for classes from the environment variable "CLASSPATH". If you can break your classpath into separate folders and jars, you can concatenate them like this:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&lt;span class="pln"&gt;setlocal&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="pln"&gt;set CLASSPATH&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt;c&lt;/span&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;span class="str"&gt;/my/&lt;/span&gt;&lt;span class="pln"&gt;first&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;jar&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;somejar&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jar&lt;/span&gt;&lt;span class="pun"&gt;;%&lt;/span&gt;&lt;span class="pln"&gt;CLASSPATH&lt;/span&gt;&lt;span class="pun"&gt;%&lt;/span&gt;&lt;br /&gt;&lt;span class="pln"&gt;set CLASSPATH&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt;c&lt;/span&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;span class="str"&gt;/my/&lt;/span&gt;&lt;span class="pln"&gt;second&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;jar&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;someotherjar&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;jar&lt;/span&gt;&lt;span class="pun"&gt;;%&lt;/span&gt;&lt;span class="pln"&gt;CLASSPATH&lt;/span&gt;&lt;span class="pun"&gt;%&lt;/span&gt;&lt;br /&gt;&lt;span class="pln"&gt;set CLASSPATH&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt;c&lt;/span&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;span class="str"&gt;/path/&lt;/span&gt;&lt;span class="pln"&gt;to&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;a&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;folder&lt;/span&gt;&lt;span class="pun"&gt;;%&lt;/span&gt;&lt;span class="pln"&gt;CLASSPATH&lt;/span&gt;&lt;span class="pun"&gt;%&lt;/span&gt;&lt;br /&gt;&lt;span class="pun"&gt;.......&lt;/span&gt;&lt;br /&gt;&lt;span class="pun"&gt;.......&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="pln"&gt;java com&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;mycompany&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;Main&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="pln"&gt;endlocal&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;By using CLASSPATH env variable, you don't need to pass it in to "java" command. The setlocal/endlocal pair ensures the CLASSPATH is "local" to this process and won't pollute the systemwise value.&lt;br /&gt;&lt;br /&gt;--------&lt;br /&gt;Updated:&lt;br /&gt;&lt;br /&gt;Travis has pointed out that there is a limit on environment variable in Windows. I found it limited to 8K. So this isn't an absolute solution but it should sustain you for awhile. As suggested by D, you could shorten the path by using virtual drive. Further more, JDK6 has supported wildcard (*) in classpath.&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&lt;span class="typ"&gt;Virtual&lt;/span&gt;&lt;span class="pln"&gt; drive&lt;/span&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span class="typ"&gt;Say&lt;/span&gt;&lt;span class="pln"&gt; you have bunch of jars under c&lt;/span&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;span class="str"&gt;/path/&lt;/span&gt;&lt;span class="pln"&gt;to&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;lib&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="pln"&gt;subst z&lt;/span&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;span class="pln"&gt; c&lt;/span&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;span class="str"&gt;/my/&lt;/span&gt;&lt;span class="pln"&gt;path&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;to&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;lib&lt;/span&gt;&lt;br /&gt;&lt;span class="pln"&gt;set CLASSPATH&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt;z&lt;/span&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;span class="str"&gt;/jar1.jar:%CLASSPATH%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="str"&gt;Or with JDK6:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="str"&gt;set CLASSPATH=c:/&lt;/span&gt;&lt;span class="pln"&gt;path&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;to&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;lib&lt;/span&gt;&lt;span class="com"&gt;/*:%CLASSPATH%&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-2219608245159937667?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/2219608245159937667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=2219608245159937667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2219608245159937667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/2219608245159937667'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/code-smart-solution-to-classpath-too.html' title='Code Smart: Solution to classpath too long (aka input line too long) problem in Windows'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-823084457931449695</id><published>2007-12-26T22:21:00.000-08:00</published><updated>2007-12-26T22:22:49.171-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Success of Google - Running the business in Buddhist way'/><title type='text'>Success of Google - Running the business in Buddhist way</title><content type='html'>There is popular miss-conception in the society that the core values of Buddhism  are hindrance to material success of individual or succeeding in business. The  success of Google is a clear answer for this myth.&lt;br /&gt;&lt;br /&gt;Google was not started  by a businessman with mere profit in mind, but it began as a research project in  January, 1996 by Larry Page and Sergey Brin, two Ph.D. students at Stanford  University, California. They hypothesized that a search engine that analyzed the  relationships between websites would produce better results than existing  techniques. So they turn their idea into a business.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Democracy on the web works.&lt;/span&gt;&lt;br /&gt;While other  search engines like Yahoo was making money by both URL submit and search  facility, Google never intended to make money from web site owners to get them  undue preference in searching in return for their paying. Google identified that  this will result in poor search experience for web search users. Google assesses  the importance of every web page using a variety of techniques, including its  patented PageRank™ algorithm which analyzes which sites have been "voted" the  best sources of information by other pages across the web.&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Simplicity is the power&lt;/span&gt;&lt;br /&gt;The start  starter/home page for the Google is one of the simplest web pages in the net.  Ordinary people expect that when a company or person is growing, there need to  be increase complexity. However, it's amazing that Google keeping its simplest  form in google search and they have adapted the same approach in products like  GMail, Google Talk, etc as well.&lt;br /&gt;&lt;br /&gt;Google's services are run on several  server farms, each consisting of thousands of low-cost commodity computers  running stripped-down versions of Linux which is contrary to traditional tend of  using big super processor mainframes. So success of google search is based on  power of large number of small processors than having big super  processor.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;You can make money without  doing evil&lt;/span&gt;&lt;br /&gt;Google is a business. The revenue the company generates is  derived from offering its search technology to companies and from the sale of  advertising displayed on Google and on other sites across the web. However, you  may have never seen an ad on Google. That's because Google does not allow ads to  be displayed on their results pages unless they're relevant to the results page  on which they're shown. So, only certain searches produce sponsored links above  or to the right of the results. Google firmly believes that ads can provide  useful information if, and only if, they are relevant to what you wish to  find.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Not flashy and hindrance to the  user&lt;/span&gt;&lt;br /&gt;Google has also proven that advertising can be effective without  being flashy. Google does not accept pop-up advertising, which interferes with  your ability to see the content you've requested.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Trustworthy and reliable&lt;/span&gt;&lt;br /&gt;Advertising on  Google is always clearly identified as a "Sponsored Link." It is a core value  for Google that there be no compromising of the integrity of our results. Google  never manipulate rankings to put our partners higher in our search results. No  one can buy better PageRank. Therefore users trust Google's objectivity and no  short-term gain could ever justify breaching that trust.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pleasant working experience&lt;/span&gt;&lt;br /&gt;One of Googles  key philosophy for employment is that "Work and play are not mutually  exclusive".&lt;br /&gt;&lt;br /&gt;Every Google engineer is encouraged to spend 20 percent (20%)  of their work time on projects that interest them. Some of Google's newer  services, such as Gmail, Google News and orkut, originated from these  independent endeavors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Promoting Open  Source&lt;/span&gt;&lt;br /&gt;Google has recently formed a partnership with Sun Microsystems  to help share and distribute each other's technologies. As part of the  partnership Google will hire employees to help the open source office program &lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://openoffice.org/" target="_blank"&gt;openoffice.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Google  Code and Google Docs are two of the main project aiming toward free and open  source culture.&lt;br /&gt;&lt;blockquote&gt;If you're respectful by habit,&lt;br /&gt;constantly honoring the  worthy,&lt;br /&gt;four things increase:&lt;br /&gt;long life, beauty,&lt;br /&gt;happiness,  strength.&lt;br /&gt;- &lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.accesstoinsight.org/tipitaka/kn/dhp/dhp.08.than.html" target="_blank"&gt;The Buddha (Dammapada)&lt;/a&gt;&lt;/blockquote&gt;Ref:&lt;br /&gt;&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.google.com/corporate/tenthings.html" target="_blank"&gt;http://www.google.com/corporate/tenthings.html &lt;/a&gt;&lt;br /&gt;&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.google.com/support/jobs/bin/static.py?page=about.html&amp;amp;about=top10" target="_blank"&gt;http://www.google.com/support/jobs/bin/static.py?page=about.html&amp;amp;about  &lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-823084457931449695?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/823084457931449695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=823084457931449695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/823084457931449695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/823084457931449695'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/12/success-of-google-running-business-in.html' title='Success of Google - Running the business in Buddhist way'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-882019496663442811</id><published>2007-10-03T01:50:00.001-07:00</published><updated>2007-10-03T01:50:48.789-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming Can Ruin Your Life'/><title type='text'>Programming Can Ruin Your Life</title><content type='html'>&lt;div class="entry"&gt; &lt;p&gt;There are many essays and articles extolling the virtues of becoming a great  programmer. You’ll have a sharp mind, great abstract reasoning skills, and a  chance to become wealthy by working mere hours a day. This is what you’ve heard,  right?&lt;/p&gt; &lt;p&gt;Sadly, no one ever tells you about the ways in which it will adversely affect  your life. The physical effects are obvious. You’ll spend most of your time  sitting, probably in an uncomfortable chair that doesn’t promote good posture.  You’ll fuel yourself with food that is readily available, meaning it’s more than  likely processed and full of sugar and you’ll likely choose either coffee or  soda to stave off the drowsiness. A coworker once remarked, “If it doesn’t come  out of a vending machine, programmers don’t eat it.”&lt;/p&gt; &lt;p&gt;But I’m not particularly interested in the health risks, as I said, they’re  obvious. So what am I talking about? Programming changes more than your body.  Programming changes the way you think. You might hear a programmer say, “I like  python because it matches the way I think.” Or is it really that they’ve learned  to think in python? Regardless of the language employed, you think differently  when you program. No decent programmer will deny that. This is why it’s often so  hard to explain to someone “how you do that” because, as clear as your  explanation may be, you simply think differently. It is this change in thinking  that can ruin your life.&lt;/p&gt; &lt;p&gt;The application of programming specific processes and habits to the everyday  is where peril lies. The same traits that make you a great programmer can make  you an awkward, misunderstood and miserable human being.&lt;/p&gt; &lt;p&gt;Programming presents you with a problem and allows you to eventually solve it  provided you don’t quit. A solution is out there somewhere. Make enough attempts  and chances are you’ll eventually prevail. Aren’t computers great? They afford a  large degree of freedom in problem solving. If nothing else, you are able to  make as may attempts as you please and it will happily execute each one. This  instills in you a sense that failure is not final. Any obstacle can be hurdled.  This is not true in the real world. While you may find second chances now and  again, the wheels that turn in the &lt;a href="http://catb.org/jargon/html/B/Big-Room.html"&gt;big blue room&lt;/a&gt; are largely  unforgiving. Time marches on in one direction.&lt;/p&gt; &lt;p&gt;When faced with an interesting programming problem your mind will chew it  over in the background. Maybe it’s an algorithm you need to develop, maybe it’s  a tricky architecture problem, maybe it’s data that needs to be modeled. It  doesn’t matter. Your mind will quietly work the problem over in search of a  solution. The “ah-ha!” moment will come when you’re in the shower, or playing  Tetris. This practice of constant churning will slowly work its way into the  rest of your life. Each problem or puzzle you encounter will start it’s own  thread; the toughest and most troubling of which will be blocking.&lt;/p&gt; &lt;p&gt;A program is highly malleable. You can make a nearly unlimited number of  changes. You can re-implement. You can optimize. You can run the  compile-test-debug cycle ad infinitum. Make a change, see a result. Life is not  like this. Every action you take is followed by a commit and the transaction  cannot be rolled back. You can continue to make changes and optimizations as you  move forward but the effects of these will not be immediately apparent. The  instant feedback of development is sorely lacking in real life. Furthermore,  your changes might simply be ignored. Data will be skipped. Blocks will not be  executed. Optimizations will go unnoticed. The world is resistant to your  tinkering.&lt;/p&gt; &lt;p&gt;Programmers become obsessed with perfection. This is why they are constantly  talking about rewrites. They cannot resist optimum solutions. Perfection  requires tossing aside mediocre ideas in search of great ones. A good programmer  would rather leave a problem temporarily unsolved than solve it poorly. A good  solution takes into account all predictable outcomes and solves the largest  number of them in the most efficient way. This mindset prevents you from writing  code with limited utility and life span. While it’s a wonderful trait to have in  programming, the demons of scope and efficiency will start to assert themselves  on your ordinary life. You will avoid taking care of simple things because the  solution is inelegant or simply feels wrong. Time to think will no doubt yield a  better result, you’ll say.&lt;/p&gt; &lt;p&gt;The obsession with perfection develops a forward-thinking mindset. The  ability to anticipate provides a huge advantage because you won’t waist your  time implementing solutions that ultimately fail due to short-sightedness or  lack of imagination. You will constantly be mapping out flows and running the  permutations through your head. Back in the real world, you will find yourself  piecing together plans of breath-taking size and beauty that simultaneously  resolve multiple problems and fulfill numerous dreams. You will attempt to kill  every bird with one stone. The impossibility of actualizing these plans will be  agonizing, yet your mind will continue to pour over every detail as it seeks to  anticipate every possible outcome and construct the perfect solution.&lt;/p&gt; &lt;p&gt;Everything is now data. Every bit is worthy of attention. Every interaction  is worthy of analysis. Your mind has been trained to do this since it is usually  the insignificant or subtle bits that have to be rooted out when debugging. You  will find it frustrating that everyone else does not collect and analyze data.  You will notice details that others simply gloss over. Your penchant for detail  and over-analysis will earn you strange glances and confused shrugs. Your  decision making process will resemble that of your peers less and less.&lt;/p&gt; &lt;p&gt;The frantic pace of the software world will instill in you a sense of panic  and urgency. You must do everything now. Tomorrow is too late. The thought of  working constantly will no longer seem foreign or ridiculous. You will spend  your free time feeling guilty about not working. But you will be working. Your  hands may not be at the keyboard, but your mind will be.&lt;/p&gt; &lt;p&gt;The romanticized story of young upstarts toiling away in a garage to build  the world’s next great company is alluring. It’s easy to convince yourself that  the dream is there for the taking. But understand that there are many factors  you cannot control. Luck and timing being but two. Don’t miss the life you have  in the search for the one you think you want. To quote John Lennon, “Life is  what happens while you are busy making other plans.” But perhaps Pascal said it  best, “We never keep to the present. We … anticipate the future as if we found  it too slow in coming and were trying to hurry it up, or we recall the past as  if to stay its too rapid flight. We are so unwise that we wander about in times  that do not belong to us and do not think of the only one that does; so vain  that we dream of times that are not and blindly flee the only one that is… [We]  think of how we are going to arrange things over which we have no control for a  time we can never be sure of reaching… Thus we never actually live, but hope to  live, and since we are always planning how to be happy, it is inevitable that we  should never be so.”&lt;/p&gt; &lt;p&gt;Is programming the road to ruin? Or is it that those with a predilection for  detail and mental gymnastics find themselves drawn to it. Perhaps it simply  exacerbates a pre-existing mindset. There are certainly other traits  (stereotypical or not) that most programmers seem to share. I have focused  mainly on the negative impacts, but there are certainly positive ones as well.  All things listed as bad can be good if simply kept in check. Obsession is  dangerous, and anything great requires obsession. Programming is no exception.  &lt;/p&gt; &lt;p&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;a href="http://devizen.com/blog/2007/09/11/ruin/"&gt;http://devizen.com/blog/2007/09/11/ruin/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-882019496663442811?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/882019496663442811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=882019496663442811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/882019496663442811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/882019496663442811'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/10/programming-can-ruin-your-life.html' title='Programming Can Ruin Your Life'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-8294324640965929416</id><published>2007-10-03T01:46:00.000-07:00</published><updated>2007-10-03T01:49:31.430-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Single Sign On'/><title type='text'>Single Sign On</title><content type='html'>In the last few weeks I was asked to help to integrate a set of built-in-house  web applications with a Single Sign On (SSO) solution. After working with people  from different teams, I realized that it would be a good idea to write a brief  description of how the SSO solutions work in general. Perhaps this might help  you to get started if you have to do something like this at some  point.&lt;br /&gt;&lt;br /&gt;SSO is by no means a new technology. It has been in use for a long  time. Even before the Web Applications were available.&lt;br /&gt;&lt;br /&gt;The most primitive  of SSO systems is a piece of paper per user with a small table listing systems  with the user names and passwords. This list can be generally stamped on the  user monitor. Later on it can evolve, instead any simple piece of paper, it can  be a post-it.&lt;br /&gt;&lt;br /&gt;&lt;img alt="passwords.jpg" src="http://weblogs.java.net/blog/elevy/archive/img/passwords.jpg/passwords.jpg" align="middle" height="170" width="370" /&gt;&lt;br /&gt;(for those of you interested in how I created this  picture, I did it using the napkin look and feel)&lt;br /&gt;&lt;br /&gt;Yes, you might be  thinking that I am kidding here. And to some extent I am. However, this has been  a big concern in the corporate world. That's the way it used to be, not by  design, and it still is in some companies. Lots of applications, managed by  different teams in the famous "silos", not integrated, each requiring the user  to authenticate with its own username/password... you know the picture.&lt;br /&gt;&lt;br /&gt;I  think that that's how the need of SSO got started.&lt;br /&gt;&lt;br /&gt;Early SSO systems  worked as the post-it that the users where sticking to their  monitors.&lt;br /&gt;&lt;br /&gt;They were repositories of users/passwords pairs protected by a  password. In that way before the user would authenticate to the destination  system, they would first access the SSO repository, fetch their passwords, and  continue authenticating with the system they were intending to work on the first  place.&lt;br /&gt;&lt;br /&gt;Lately, In a web based environment, this can be extremely  simplified with a well know device: cookies.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Example&lt;/h3&gt;We will go over an SSO implementation with an example. Let's  have 3 major components: The SSO server, Application A, Application  B.&lt;br /&gt;&lt;br /&gt;Here is how the system would work:&lt;br /&gt;&lt;br /&gt;1) The user tries to access  the application A.&lt;br /&gt;&lt;br /&gt;2) Application A realizes that the user has not been  authenticated. (See &lt;a href="#authenticated"&gt;"user has been authenticated"&lt;/a&gt;  for details).&lt;br /&gt;&lt;br /&gt;3) Application A sends an HTTP redirect to the SSO  server.&lt;br /&gt;&lt;br /&gt;4) The SSO server sees that the user is not authenticated (again,  See "user has been authenticated" for details).&lt;br /&gt;&lt;br /&gt;5) The SSO server  requires the user to authenticate.&lt;br /&gt;&lt;br /&gt;6) The user submits  username/password&lt;br /&gt;&lt;br /&gt;7) SSO Server validates username/password. If they are  valid, the user is &lt;a href="#grantedPermission"&gt;"granted  permission"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;8) The user is redirected to Application A.&lt;br /&gt;&lt;br /&gt;9)  Application A sees that the user has been authenticated, and proceeds.&lt;br /&gt;&lt;br /&gt;&lt;h3 id="grantedPermission"&gt;Granting permission:&lt;/h3&gt;When the username and password  are validated by the SSO server, a unique large token is generated for the user.  The token is going to have a unique identifier for the user's session. The SSO  server keeps a list of the tokens associated with the credentials of the user  that owns it. This token is set by the SSO server in the user's browser as a  cookie.&lt;br /&gt;&lt;br /&gt;&lt;h3 id="authenticated"&gt;User has been authenticated:&lt;/h3&gt;For an application to  validate that a user has been authenticated it has to follow this  steps:&lt;br /&gt;&lt;br /&gt;1) Check for the token in the cookies.&lt;br /&gt;&lt;br /&gt;2) Query the SSO  server for the credentials associated with the token. If the token is valid, the  SSO returns the credentials of the user for the application to continue. If the  token is not present, or is invalid, the application knows that the user has not  been authenticated, and is redirected to the SSO server.&lt;br /&gt;&lt;br /&gt;This makes it  look like there is a lot of work to get this type of setup. Luckily, it is not  complicated at all. Most SSO servers come with a plug-in that is installed in  the application/web server that intercepts all the requests, and performs the  logic just described. Any application deployed in such a server will  automatically get the user credentials, populated by the plug-in, just as if the  user was authenticated locally using the JAAS framework.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;A Note on Cookies&lt;/h3&gt;As most of you know the capabilities of setting and  reading cookies are restricted by the domains. A web server that does not belong  to the domain where the cookie was set will not be able to read the  cookie.&lt;br /&gt;&lt;br /&gt;For that reason the applications and the SSO server have to  belong to the same domain. Indeed, if they are not to be part of the same domain  the cookies would not work. For that case the URL rewriting technique can be  used.  &lt;h3&gt;Development TIP:&lt;/h3&gt;When you are developing your app, no need to  authenticate with the SSO. Just have each developer to work with a simple JAAS  authentication within a local flat file (most of the IDEs have this by default).  Get them to complete the development, and when you are ready to test, deploy it  in your testing environment using the SSO plugin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-8294324640965929416?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/8294324640965929416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=8294324640965929416' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8294324640965929416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/8294324640965929416'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/10/single-sign-on.html' title='Single Sign On'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-1183106483166748769</id><published>2007-10-03T01:30:00.000-07:00</published><updated>2007-10-03T02:02:38.317-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Napkin Look and Feel'/><title type='text'>Napkin Look and Feel</title><content type='html'>&lt;table style="font-family: cursive;"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td width="100%"&gt; &lt;ol&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Latest"&gt; &lt;/a&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Latest"&gt;Latest&lt;/a&gt; &lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Overview"&gt; &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Overview"&gt;Overview &lt;/a&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Snapshots"&gt; &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Development"&gt;Development&lt;/a&gt; &lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Sightings"&gt; &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Sightings"&gt;Sightings&lt;/a&gt; &lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Acknowledgments"&gt; &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=23078113#Acknowledgments"&gt;Acknowledgments&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;td rowspan="2" align="right" nowrap="nowrap"&gt;&lt;a href="http://sourceforge.net/"&gt;&lt;img alt="SourceForge.net Logo" src="http://sourceforge.net/sflogo.php?group_id=104116&amp;amp;type=4" border="0" height="37" width="125" /&gt; &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.java.net/"&gt;&lt;img alt="java.net Member" src="http://www.java.net/images/javanet_button_90.gif" border="0" height="25" width="90" /&gt; &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;hr /&gt;  &lt;h2&gt;&lt;a name="Latest"&gt;&lt;/a&gt;Latest&lt;/h2&gt; &lt;h4&gt;&lt;a href="http://wiki.java.net/bin/view/Projects/NapkinLAF"&gt;New  Wiki&lt;/a&gt;&lt;/h4&gt;Our &lt;a href="http://wiki.java.net/bin/view/Projects/NapkinLAF"&gt;Wiki&lt;/a&gt; gives you a  place to share ideas and advice with other folks. We've started it off with some  instructions about how to get Java applications to use Napkin for their Look and  Feel.  &lt;h4&gt;Latest Release: &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=104116&amp;amp;package_id=111904&amp;amp;release_id=402743"&gt;1.0,  18 March, 2006 &lt;/a&gt;&lt;/h4&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;Upgrade to Java 1.5.&lt;/b&gt;  &lt;ul&gt;Several bugs vanished with this upgrade, but it does mean that this will not  work anymore with earlier Java versions. So far it has seemed too much work to  maintain a system that can work on both. &lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;b&gt;Sketched icons added&lt;/b&gt;  &lt;ul&gt;Peter Goodspeed and Justin Crafford created a cool package to take an XML  description of an icon and randomly perturb it around. This lets us easily have  icons for dialog boxes, for example, that look sketched and slightly different  each time. This is in the subpackage &lt;tt&gt;net.sourceforge.napkinlaf.sketch&lt;/tt&gt;,  and you can use it for diagrams as well. It's really, really cool. &lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;b&gt;Works on Windows&lt;/b&gt;  &lt;ul&gt;Alex Lam took an interest in using Napkin as his default look &amp;amp; feel for  NetBeans. Rather than refer him to an appropriate mental health professional, I  put him on the team. He has fixed many, many issues, most specific to the  Windows platform but including several other issues related to borders, opacity,  and created a tileable sticky-note background for popups, etc. Welcome to the  monkey house, Alex. &lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Note that these simple bullet items are each  damn big. There were also, of course, lots of small fixes and tweaks to clean  things up for the Big Release.  &lt;h2&gt;&lt;a name="Overview"&gt;&lt;/a&gt;Overview&lt;/h2&gt;The Napkin Look &amp;amp; Feel is a pluggable  Java look and feel that looks like it was scrawled on a napkin. You can use it  to make provisional work actually look provisional, or just for fun.  &lt;p&gt;The idea is to try to develop a look and feel that can be used in Java  applications that looks informal and provisional, yet be fully functional for  development. Often when people see a GUI mock-up, or a complete GUI without full  functionality, they assume that the code behind it is working. While this can be  used to sleazy advantage, it can also convince people who ought to know better  (like your managers) that you are already done when you have just barely begun,  or when only parts are complete. No matter how much you speak to their rational  side, the emotional response still says "Done!". Which after a while leads to a  later question: "That was done months ago! What are they doing? Playing  &lt;i&gt;Quake&lt;/i&gt;?" A good article on this is &lt;a href="http://www.joelonsoftware.com/"&gt;Joel on Software&lt;/a&gt;'s “&lt;a href="http://www.joelonsoftware.com/articles/fog0000000356.html"&gt;The Iceberg  Secret, Revealed&lt;/a&gt;”.  &lt;/p&gt;&lt;p&gt;So the idea is to create a complete look and feel that can be used while the  thing is not done which will convey an emotional message to match the rational  one. As pieces of the work are done, the GUI for those pieces can be switched to  use the "formal" (final) look and feel, allowing someone looking at demos over  time to see the progress of the entire system reflected in the expression of the  GUI.  &lt;/p&gt;&lt;p&gt;Over time, several folks have just liked the thing and wanted to use it for  non-provisional GUI's. Sometimes this is because the application itself seems to  match the theme, such as a brainstorming tool. And sometimes it's just that it  looks fun.  &lt;/p&gt;&lt;p&gt;This is all done using the Java Swing pluggable Look &amp;amp; Feel framework.  &lt;/p&gt;&lt;h2&gt;&lt;a name="Snapshots"&gt;&lt;/a&gt;&lt;/h2&gt;  &lt;h2&gt;&lt;a name="Development"&gt;&lt;/a&gt;&lt;/h2&gt; &lt;h2&gt;&lt;a name="Sightings"&gt;&lt;/a&gt;Sightings&lt;/h2&gt; &lt;dl&gt;&lt;p&gt; &lt;/p&gt;&lt;dt&gt;&lt;a href="http://headrush.typepad.com/creating_passionate_users/2006/12/dont_make_the_d.html"&gt;Don't  make the Demo look Done&lt;/a&gt;, from Kathy Sierra's blog &lt;a href="http://headrush.typepad.com/creating_passionate_users/"&gt;Creating  Passionate Users&lt;/a&gt;.  &lt;/dt&gt;&lt;dd&gt;"Finally, it's great to know that there are tools to help make the look  match the state, with my favorite being the Napkin Look and Feel, a GUI "skin"  for Java that makes the interface look -- quite literally -- like it was  scrawled on a napkin."    &lt;/dd&gt;&lt;dt&gt;Matt Stephens' “&lt;a href="http://www.softwarereality.com/AgileDevelopment.jsp"&gt;Agile Development  with ICONIX Process&lt;/a&gt;”  &lt;/dt&gt;&lt;dd&gt;"... if the working prototype was presented looking like a user interface  mockup that had been scrawled on theback of a napkin, then the customer would be  more likely to see it for what it actually is: a slightly working but mostly  non-functional prototype... Seems like a great idea to us!" (You can &lt;a href="http://www.blogger.com/AgileNapkin.pdf" target="_new"&gt;read the pages here&lt;/a&gt;)    &lt;/dd&gt;&lt;dt&gt;&lt;a href="http://www.netbeans.org/competition/look-and-feel.html"&gt;NetBeans  Look &amp;amp; Feel Competition &lt;/a&gt; &lt;/dt&gt;&lt;dd&gt;Claudio Miranda submitted an &lt;a href="http://www.netbeans.org/images/competition/Claudio_Miranda.png"&gt;entry&lt;/a&gt;  with NapkinLAF on GTK.    &lt;/dd&gt;&lt;dt&gt;&lt;a href="http://weblogs.java.net/blog/kirillcool/archive/2006/02/aligning_menu_i_1.html"&gt;Kirill  Grouchnikov's blog &lt;/a&gt; &lt;/dt&gt;&lt;dd&gt;Compares various LAFs for their Right-to-Left menu alignment issues. Thanks  to Kirill for reporting the issues ;-)    &lt;/dd&gt;&lt;dt&gt;&lt;a href="http://wiki.java.net/bin/view/Javadesktop/BlogEd"&gt;BlogEd&lt;/a&gt;  &lt;/dt&gt;&lt;dd&gt;"I have added the napkin L&amp;amp;F to BlogEd and made it the default when run  from cvs using 'ant run'. We can easily change it back if it gets in the way.  The only bug I have noticed currently is that the pulling on the scrollbar seems  to move the whole window. Perhaps Ken Arnold will know what the problem is  there."    &lt;/dd&gt;&lt;dt&gt;&lt;a href="http://weblogs.java.net/pub/wlg/1178"&gt;Daniel Steinberg's blog  &lt;/a&gt;at &lt;a href="http://java.net/"&gt;java.net&lt;/a&gt;, April 5, 2004  &lt;/dt&gt;&lt;dd&gt;A very nice &amp;amp; quick writeup.    &lt;/dd&gt;&lt;dt&gt;Front page note on &lt;a href="http://community.java.net/javadesktop/"&gt;javadesktop.org &lt;/a&gt;, April 1 2004   &lt;/dt&gt;&lt;dd&gt;Just a brief note pointing to the home page, but we got some good mail from  it.  &lt;/dd&gt;&lt;/dl&gt; &lt;h2&gt;&lt;a name="Acknowledgments"&gt;&lt;/a&gt;Acknowledgments&lt;/h2&gt; &lt;p&gt;&lt;b&gt;Peter Goodspeed&lt;/b&gt; and &lt;b&gt;Justin Crafford&lt;/b&gt; created the sketching  subsystem, as a senior project for their degrees at Worcester Polytechnic  Institute. They did a great job, and solved an important problem. And thanks to  &lt;b&gt;Scott Anderson&lt;/b&gt;, a fellow student and friend of mine who suggested they  get in touch with me to look for a thesis project.  &lt;/p&gt;&lt;p&gt;&lt;b&gt;Scott Violet&lt;/b&gt; of Sun has helped me pick apart some of the more abstruse  and arcane bits of the plaf framework, which is full of 'em. Thanks a bunch,  Scott, and thanks to &lt;b&gt;Hans Muller&lt;/b&gt;, also of Sun, for plugging me together  with him.  &lt;/p&gt;&lt;p&gt;&lt;b&gt;Brandon Franklin&lt;/b&gt; has contributed many spare cycles (of which he has  none) to planning the upgrade to 1.5, making the whole process &lt;em&gt;much&lt;/em&gt;  easier.  &lt;/p&gt;&lt;p&gt;The font "Felt Tip Roman" was created by &lt;b&gt;Mark Simonson&lt;/b&gt;, who spent a  lot of time with me on how to license this. He has kindly decided that this  particular use does not require individual licensing for each user of the LAF,  but can be done by special arrangement. The legalities are below, but beyond  those legalities, we'd like to ask you all to be cool — if you like the font and  want to use it, buy it properly. Making fonts is not easy, and font folks get  their work ripped off far too often. If you do want to use it, buy it from his  site &lt;a href="http://www.ms-studio.com/"&gt;http://www.ms-studio.com/&lt;/a&gt;, where he  gets more from it.  &lt;/p&gt;&lt;p&gt;The font "Ænigma Scrawl" was created by &lt;b&gt;Brian Kent&lt;/b&gt;, and has worked  very well for a handwritten font that scales reasonably to GUI-control sizes  (most handwritten-style fonts are display fonts that only work in large sizes).  To make things work better, Brian has adapted the font to adjust the spacing  around some punctuation as well as some other tweaks. So the version released  here is a custom one direct from the artist (which we believe he expects to roll  back into the font at future date). We would like to thank Brian a lot for his  quick and nimble cooperation, which made this work a lot better and easier on  me.  &lt;/p&gt;&lt;p&gt;&lt;b&gt;Miro Jurišić&lt;/b&gt; has been very helpful in thinking through with me  (sometimes &lt;em&gt;for&lt;/em&gt; me) some of the hairy graphics problems. This definitely  pushes into some poorly documented areas of the 2D API, and it has helped a lot  to have someone to talk it through with. Thanks, Miro!  &lt;/p&gt;&lt;p&gt;&lt;b&gt;Brian Hawthorne&lt;/b&gt; created a quick and excellent selection of blueprint  backgrounds for me to choose from. Thanks!  &lt;/p&gt;&lt;p&gt;Several people have helped with testing, reporting bugs, and suggesting  things. The most persistent have been: &lt;b&gt;Deryl Steinert&lt;/b&gt;, &lt;b&gt;Bob  Herrmann&lt;/b&gt;, &lt;b&gt;David Matuszek&lt;/b&gt;, &lt;b&gt;Graham Perks&lt;/b&gt;, &lt;b&gt;Henry Story&lt;/b&gt;,  and &lt;b&gt;Tom Eugelink&lt;/b&gt;. Thanks to all, and we'll be happy to have &lt;em&gt;you&lt;/em&gt;  be added to this list. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-1183106483166748769?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/1183106483166748769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=1183106483166748769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1183106483166748769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1183106483166748769'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/10/napkin-look-feel.html' title='Napkin Look and Feel'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-6120852503307016000</id><published>2007-10-03T01:16:00.001-07:00</published><updated>2007-10-03T01:16:46.679-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Essential firefox add-ons for web programmers'/><title type='text'>Essential firefox add-ons for web programmers</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://fireftp.mozdev.org/"&gt;FireFTP&lt;/a&gt; - is a free, secure,  cross-platform FTP client for Mozilla Firefox which provides easy and intuitive  access to FTP servers, FireFTP includes more advanced features such as:  directory comparison, syncing directories while navigating, SSL encryption,  search/filtering, integrity checks, remote editing, drag &amp;amp; drop, file  hashing, and much more! &lt;/li&gt;&lt;li&gt;&lt;a href="http://ietab.mozdev.org/"&gt;IE Tab&lt;/a&gt; - is a great tool for web  developers, since you can easily see how your web page displayed in IE with just  one click and then switch back to Firefox. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.getfirebug.com/"&gt;Firebug&lt;/a&gt; - integrates with Firefox  to put a wealth of development tools at your fingertips while you browse. You  can edit, debug, and monitor CSS, HTML, and JavaScript live in any web page.&lt;a href="http://fireftp.mozdev.org/"&gt;&lt;br /&gt;&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://chrispederick.com/work/web-developer/"&gt;The Web Developer&lt;/a&gt;  - adds a menu and a toolbar to the browser with various web developer tools. &lt;/li&gt;&lt;li&gt;&lt;a href="http://users.skynet.be/mgueury/mozilla/"&gt;HTML Validator&lt;/a&gt; - is a  Mozilla extension that adds HTML validation inside Firefox and Mozilla. The  number of errors of a HTML page is seen on the form of an icon in the status bar  when browsing. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.iosart.com/firefox/colorzilla/"&gt;ColorZilla&lt;/a&gt; - you can  get a color reading from any point in your browser, quickly adjust this color  and paste it into another program. You can Zoom the page you are viewing and  measure distances between any two points on the page. The built-in palette  browser allows choosing colors from pre-defined color sets and saving the most  used colors in custom palettes. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nu22.com/firefox/cssvalidator/"&gt;CSS Validator&lt;/a&gt; - is a  Mozilla Firefox extension which Validates a page using the W3C CSS Validator.  Adds an option to the right-click context menu and to the Tools menu to allow  for easy validation of the CSS of the current page. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kevinfreitas.net/extensions/measureit/"&gt;MeasureIt&lt;/a&gt; -  draw a ruler across any webpage to check the width, height, or alignment of page  elements in pixels. &lt;/li&gt;&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/697?id=697"&gt;View  formatted source&lt;/a&gt; - displays formatted and color-coded source and optional  CSS information for each element. &lt;/li&gt;&lt;li&gt;&lt;a href="http://jennifermadden.com/scripts/ViewRenderedSource.html"&gt;View  Source Chart&lt;/a&gt; - draws a Color-Coded Chart of a Webpage's Source Code and  displays Source in its Altered State After the DOM has been Manipulated by  JavaScript. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mozilla.org/projects/venkman/"&gt;Venkman&lt;/a&gt; - the code  name for Mozilla's JavaScript Debugger, aims to provide a powerful JavaScript  debugging environment for Mozilla based browsers namely Firefox, Netscape  7.x/9.x series, Seamonkey 1.x/2.x. &lt;/li&gt;&lt;li&gt;&lt;a href="http://toolbar.iwebtool.com/"&gt;iWEBTOOL&lt;/a&gt; - Access over 30  Webmaster Tools for Free directly from your web browser &lt;/li&gt;&lt;li&gt;http://livehttpheaders.mozdev.org/ &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kevinfreitas.net/extensions/linkchecker/"&gt;LinkChecker&lt;/a&gt; -  check webpage links at a glance with simple color coding. Ditch those massive  listings of bad links that provide no context and add LinkChecker to your  arsenal of web development tools today. &lt;/li&gt;&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3371"&gt;Load Time  Analyzer&lt;/a&gt; is an extension created by Google that displays the number of  events that are processed by a certain website and how long it takes to load  them all. The load time displayed will obviously be influenced by your Internet  connection, nonetheless it can provide a good indicator of the site speed. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.captaincaveman.nl/?id=firefox_extensions&amp;amp;subid=quick_locale_switcher"&gt;Quick  Locale Switcher&lt;/a&gt; - Allows you to quickly change and apply a different locale  (language) in your Mozilla application. &lt;/li&gt;&lt;li&gt;&lt;a href="http://xhtmlmp.mozdev.org/"&gt;XHTML-MP&lt;/a&gt; - allows firefox to render  HTML content with the mime-type of application/vnd.wap.xhtml+xml. For any  developer working with mobile applications, this provides an alternative to  using a device emulator. &lt;/li&gt;&lt;li&gt;&lt;a href="http://console2.mozdev.org/"&gt;Console²&lt;/a&gt; - let's you display  errors filtered by type (Errors, Warnings, Messages), language (JavaScript, CSS,  XML) and context (Chrome, Content). Furthermore it provides a simple search box  (as seen in the History and Bookmarks sidebars), hiding of duplicates, sidebar  optimizations, a customizable toolbar and some more accessibility  improvements.&lt;/li&gt;&lt;/ul&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.nu22.com/firefox/validator/"&gt;Page validator&lt;/a&gt; -  validates a page using the W3C Markup Validation Service. Adds an option to the  right-click context menu and to the Tools menu to allow for easy validation of  the current page. Opens the results in a new tab. This is a simple extension  that will work only for online pages.  &lt;/li&gt;&lt;li&gt;&lt;a href="http://xmldeveloper.mozdev.org/"&gt;xmldeveloper&lt;/a&gt; - helps XML  developers with their programming efforts by supplying a central toolbar for  everything XML. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.totalvalidator.com/tool/extension.html"&gt;The Total  Validator&lt;/a&gt; - provides one-click validation. Once installed all you do is  browse to the page you want to validate then click on the 'TV' icon in the  browser status bar. &lt;/li&gt;&lt;li&gt;&lt;a href="http://modifyheaders.mozdev.org/"&gt;Modify Headers&lt;/a&gt; - allows the  user to Add, Modify and Filter out HTTP request headers. See the help tab in the  Modify Headers window for more information. &lt;/li&gt;&lt;li&gt;&lt;a href="http://xpath.alephzarro.com/"&gt;The XPather&lt;/a&gt; - is a simple  extension that integrates both with the browser and its DOMInspector. Thus, is't  very lightweight and cross-platform. It is valuable mainly as a web/XML-app  development and hacking tool. &lt;/li&gt;&lt;li&gt;&lt;a href="http://livehttpheaders.mozdev.org/"&gt;LiveHTTPHeaders&lt;/a&gt; - display  http headers in real time while pages are being downloaded from the Internet &lt;/li&gt;&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4415"&gt;Font  Finder&lt;/a&gt; - Get all CSS styles of selected text in Firefox&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-6120852503307016000?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/6120852503307016000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=6120852503307016000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6120852503307016000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6120852503307016000'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/10/essential-firefox-add-ons-for-web.html' title='Essential firefox add-ons for web programmers'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-1606853944819250181</id><published>2007-10-03T01:14:00.000-07:00</published><updated>2007-10-03T01:15:50.964-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Top 10+ source code search engines'/><title type='text'>Top 10+ source code search engines</title><content type='html'>&lt;p&gt;Programmers are coding and coding in somewhere for some purpose. I wonder how  many lines of code is written in a minute on the world :) I guess thousands of  lines. But most them are coding the same snippets of code again and again. I  always used "Koders" not to reinvent america, means not to rewrite the codes  someone else have already solved. There are plenty of code search engines out  there to serve us (programmers) with the millions of lines of codes to fasten  our job. Here is the most used ones i could found on the internet.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.koders.com/"&gt;Koders.com&lt;/a&gt; - is the leading search  engine for open source code. Our source code optimized search engine provides  developers with an easy-to-use interface to search for source code examples and  discover new open source projects which can be leveraged in their  applications.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_URGxd6K-z7Y/RqcBPdeI3mI/AAAAAAAAAEM/inrUszcLysA/s1600-h/koders.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5091039268886339170" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" alt="" src="http://bp2.blogger.com/_URGxd6K-z7Y/RqcBPdeI3mI/AAAAAAAAAEM/inrUszcLysA/s200/koders.gif" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://labs.oreilly.com/code/"&gt;O'Really Labs Code Search&lt;/a&gt; - The  database currently contains over 123,000 individual examples, composed of 2.6  million lines of code — all edited and ready to use. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/codesearch"&gt;Google /*Code Search*/&lt;/a&gt; - is a  free product from Google which debuted in Google Labs allowing web users to  search for open-source code on the Internet. Features include the ability to  search using operators. These are lang:, package:, license: and file:. The code  available for searching is in various formats including tar.gz, .tar.bz2, .tar,  and .zip, CVS and Subversion repositories as well as snippets from HTML pages  such as Wikipedia itself.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_URGxd6K-z7Y/RqcBi9eI3nI/AAAAAAAAAEU/Qpq7APu7Ty8/s1600-h/codesearch_logo.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5091039603893788274" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" alt="" src="http://bp0.blogger.com/_URGxd6K-z7Y/RqcBi9eI3nI/AAAAAAAAAEU/Qpq7APu7Ty8/s200/codesearch_logo.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.codase.com/"&gt;Codase&lt;/a&gt; - is an innovative and unique  search engine for source code. Codase offers the best search results than any  other services available today in source code search space. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.krugle.com/"&gt;Krugle&lt;/a&gt; - is a search engine that allows  programmers and other developers to search Open Source repositories in order to  locate open source code, and quickly share the code with other programmers on  the internet.&lt;/li&gt;&lt;/ul&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jexamples.com/"&gt;JExamples&lt;/a&gt; - provides the ability to  search for &lt;a title="Java (programming language)" href="http://en.wikipedia.org/wiki/Java_%28programming_language%29"&gt;Java&lt;/a&gt;  projects. The examples extracted from open source search engine understands the  semantics of Java, so the search yields more accurate results than a text  search. The site also provides the ability to rate examples so the highest rated  examples will be shown first. &lt;/li&gt;&lt;li&gt;&lt;a href="http://jsourcery.com/"&gt;JSourcery&lt;/a&gt; - Search open source Java APIs &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.merobase.com/"&gt;Merobase&lt;/a&gt; - is a software search  engine that allows developers to find, share and reuse software components from  the Internet. The engine harvests software components from a large variety of  sources, including Apache, SourceForge, and Java.net.  &lt;/li&gt;&lt;li&gt;&lt;a href="http://allthecode.com/"&gt;All The Code&lt;/a&gt; - is a source code search  engine, presently for the Java language but with more languages being added  soon. Unlike similar source code search engines, All The Code considers the  relation between code and uses this to help judge the relevance. &lt;/li&gt;&lt;li&gt;http://csourcesearch.net/ &lt;/li&gt;&lt;li&gt;&lt;a href="http://codesearch.developer.emc.com/"&gt;EMC Dev Network&lt;/a&gt; -  Searching 312,750 lines of code at EMC Developer Network. Powered by Kders.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codefetch.com/"&gt;Codefetch&lt;/a&gt; - Its mission is to  connect programmers and authors so that programmers get the information they  need, and the work of authors is supported and encouraged. &lt;/li&gt;&lt;li&gt;&lt;a href="http://archive.devx.com/sourcebank/"&gt;DevX's Sourcebank&lt;/a&gt; - is a  directory of links to source code and script posted around the Web. Use the  Search option to find terms within the source code. To cast the widest net, use  the search with All Types selected. Or, you can browse through a subset of the  code by categories (below). First, select a filter, such as C or Java, by  clicking on one of the square buttons and then choose one of the categories  (such as Mathematics) from within that filter.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-1606853944819250181?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/1606853944819250181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=1606853944819250181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1606853944819250181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/1606853944819250181'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/10/top-10-source-code-search-engines.html' title='Top 10+ source code search engines'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_URGxd6K-z7Y/RqcBPdeI3mI/AAAAAAAAAEM/inrUszcLysA/s72-c/koders.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-6268425159463174888</id><published>2007-10-03T01:13:00.000-07:00</published><updated>2007-10-03T01:14:40.915-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming Handbooks and Cheatsheets'/><title type='text'>Programming Handbooks and Cheatsheets</title><content type='html'>&lt;p&gt;Cheat sheets are useful one page document which you should print out and post  it on the wall from of your eyes. It helps you to learn the subject more  quickly, and saves your time.&lt;/p&gt;&lt;strong&gt;PHP&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ilovejackdaniels.com/php_cheat_sheet.pdf"&gt;http://www.ilovejackdaniels.com/php_cheat_sheet.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blueshoes.org/en/developer/php_cheat_sheet"&gt;http://www.blueshoes.org/en/developer/php_cheat_sheet&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://aspnetresources.com/blog/ms_ajax_cheat_sheets_batch2.aspx"&gt;Microsoft  Ajax Library Cheat sheet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;AJAX&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://slash7.com/cheats/whats_ajax_cheatsheet.pdf"&gt;http://slash7.com/cheats/whats_ajax_cheatsheet.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;CSS&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://lesliefranke.com/files/reference/csscheatsheet.html"&gt;http://lesliefranke.com/files/reference/csscheatsheet.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://home.tampabay.rr.com/bmerkey/cheatsheet.htm"&gt;http://home.tampabay.rr.com/bmerkey/cheatsheet.htm&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ilovejackdaniels.com/css/css-cheat-sheet"&gt;http://www.ilovejackdaniels.com/css/css-cheat-sheet&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://home.tampabay.rr.com/bmerkey/cheatsheet.htm"&gt;http://home.tampabay.rr.com/bmerkey/cheatsheet.htm&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/css/"&gt;http://www.petefreitag.com/cheatsheets/css/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://refcards.com/download/bj/css2.pdf"&gt;http://refcards.com/download/bj/css2.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.tek271.com/articles/css_cheat_sheet.html"&gt;http://www.tek271.com/articles/css_cheat_sheet.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Perl&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://juerd.nl/site.plp/perlcheat"&gt;http://juerd.nl/site.plp/perlcheat&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.regxlib.com/CheatSheet.htm"&gt;http://www.regxlib.com/CheatSheet.htm&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/%7Enwclark/perl-5.8.7/pod/perlcheat.pod"&gt;http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlcheat.pod&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mnlab.cs.depaul.edu/%7Eehab/Courses/TDC568/resources/PerlQuickRef.pdf"&gt;http://www.mnlab.cs.depaul.edu/~ehab/Courses/TDC568/resources/PerlQuickRef.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://heron.snell.clarkson.edu/it/perlrefcard.pdf"&gt;http://heron.snell.clarkson.edu/it/perlrefcard.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://johnbokma.com/perl/perl-quick-reference-card.html"&gt;http://johnbokma.com/perl/perl-quick-reference-card.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;.NET&lt;br /&gt;&lt;/span&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://john-sheehan.com/blog/index.php/net-cheat-sheets/"&gt;http://john-sheehan.com/blog/index.php/net-cheat-sheets/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://aspnetresources.com/downloads/ms_ajax_library_cheat_sheets1.zip"&gt;http://aspnetresources.com/downloads/ms_ajax_library_cheat_sheets1.zip&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Python&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.yukoncollege.yk.ca/%7Ettopper/COMP118/rCheatSheet.html"&gt;http://www.yukoncollege.yk.ca/~ttopper/COMP118/rCheatSheet.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www-128.ibm.com/developerworks/library/l-cheatsheet3.html"&gt;http://www-128.ibm.com/developerworks/library/l-cheatsheet3.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.onlamp.com/python/excerpt/PythonPocketRef/examples/python.pdf"&gt;http://www.onlamp.com/python/excerpt/PythonPocketRef/examples/python.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.drweb.de/weblog/weblog/?p=548"&gt;http://www.drweb.de/weblog/weblog/?p=548&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Javascript&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ilovejackdaniels.com/javascript/javascript-cheat-sheet/"&gt;http://www.ilovejackdaniels.com/javascript/javascript-cheat-sheet/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Ruby on Rails&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://ruby.cenophobie.com/RubyCheat.pdf"&gt;http://ruby.cenophobie.com/RubyCheat.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf"&gt;http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.zenspider.com/Languages/Ruby/QuickRef.html"&gt;http://www.zenspider.com/Languages/Ruby/QuickRef.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.threaded.com/ruby_cheatsheet.htm"&gt;http://www.threaded.com/ruby_cheatsheet.htm&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ilovejackdaniels.com/cheat-sheets/ruby-on-rails-cheat-sheet/"&gt;http://www.ilovejackdaniels.com/cheat-sheets/ruby-on-rails-cheat-sheet/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://slash7.com/cheats/rails_files_cheatsheet.pdf"&gt;http://slash7.com/cheats/rails_files_cheatsheet.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://slash7.com/cheats/activerecord_cheatsheet.pdf"&gt;http://slash7.com/cheats/activerecord_cheatsheet.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://railshandbook.com/" rel="nofollow"&gt;http://railshandbook.com&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blainekendall.com/index.php/rubyonrailscheatsheet/"&gt;http://www.blainekendall.com/index.php/rubyonrailscheatsheet/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rubyonrailsblog.com/articles/2006/10/04/ruby-on-rails-cheat-sheet-collectors-edition"&gt;http://www.rubyonrailsblog.com/articles/2006/10/04/ruby-on-rails-cheat-sheet-collectors-edition&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="fullpost"&gt; &lt;p&gt;&lt;strong&gt;Java&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://mindprod.com/jgloss/jcheat.html"&gt;http://mindprod.com/jgloss/jcheat.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://lesliefranke.com/files/reference/javacheatsheet.pdf"&gt;http://lesliefranke.com/files/reference/javacheatsheet.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/java/"&gt;http://www.petefreitag.com/cheatsheets/java/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://whatis.techtarget.com/definition/0,,sid9_gci826135,00.html"&gt;http://whatis.techtarget.com/definition/0,,sid9_gci826135,00.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/java/"&gt;http://www.petefreitag.com/cheatsheets/java/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.janeg.ca/JQREF.pdf"&gt;http://www.janeg.ca/JQREF.pdf&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;JSP&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://ndpsoftware.com/JSPXMLCheatSheet.html"&gt;http://ndpsoftware.com/JSPXMLCheatSheet.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.digilife.be/quickreferences/QRC/JSP%20Syntax.pdf"&gt;http://www.digilife.be/quickreferences/QRC/JSP%20Syntax.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/products/jsp/syntax/2.0/card20.pdf"&gt;http://java.sun.com/products/jsp/syntax/2.0/card20.pdf&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Javascript&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://tiger.la.asu.edu/Quick_Ref/javascript_cheat_sheet.pdf"&gt;http://tiger.la.asu.edu/Quick_Ref/javascript_cheat_sheet.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.werelight.com/docs/JavaScript_Quick_Reference.htm"&gt;http://www.werelight.com/docs/JavaScript_Quick_Reference.htm&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ilovejackdaniels.com/javascript/javascript-cheat-sheet/"&gt;http://www.ilovejackdaniels.com/javascript/javascript-cheat-sheet/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.webmonkey.com/webmonkey/reference/html_cheatsheet/"&gt;http://www.webmonkey.com/webmonkey/reference/html_cheatsheet/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://lesliefranke.com/files/reference/htmlcheatsheet.pdf"&gt;http://lesliefranke.com/files/reference/htmlcheatsheet.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.psacake.com/web/dy.asp"&gt;http://www.psacake.com/web/dy.asp&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://cdburnerxp.se/htmlcheatsheet.pdf"&gt;http://cdburnerxp.se/htmlcheatsheet.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cookwood.com/html/extras/entities.html"&gt;http://www.cookwood.com/html/extras/entities.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.modularmedia.com/xhtml_standards/xhtmlcheatsheet.html"&gt;http://www.modularmedia.com/xhtml_standards/xhtmlcheatsheet.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/xhtml/"&gt;http://www.petefreitag.com/cheatsheets/xhtml/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.angelfire.com/nm/thehtmlsource/html/cheatsheet.html"&gt;http://www.angelfire.com/nm/thehtmlsource/html/cheatsheet.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Unix&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://mainline.brynmawr.edu/%7Egtowell/unix.pdf"&gt;http://mainline.brynmawr.edu/~gtowell/unix.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://freeengineer.org/learnUNIXin10minutes.html"&gt;http://freeengineer.org/learnUNIXin10minutes.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rain.org/%7emkummel/unix.html"&gt;http://www.rain.org/%7emkummel/unix.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pixelbeat.org/cmdline.html"&gt;http://www.pixelbeat.org/cmdline.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.denness.net/LinuxCLICheatSheet.pdf"&gt;http://www.denness.net/LinuxCLICheatSheet.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.unixguide.net/linux/linuxshortcuts.shtml"&gt;http://www.unixguide.net/linux/linuxshortcuts.shtml&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;C&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://claymore.engineer.gvsu.edu/%7Esteriana/226/C.CheatSheet.pdf"&gt;http://claymore.engineer.gvsu.edu/~steriana/226/C.CheatSheet.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;C++&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dreamincode.net/downloads/ref_sheets/cpp_reference_sheet.pdf"&gt;http://www.dreamincode.net/downloads/ref_sheets/cpp_reference_sheet.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;C#&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.quadrantbiz.com/docs/csharpref.pdf"&gt;http://www.quadrantbiz.com/docs/csharpref.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;span style="font-weight: bold;"&gt;Django&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mercurytide.com/media/whitepapers/django-cheat-sheet/django095-cheat-sheet.pdf"&gt;http://www.mercurytide.com/media/whitepapers/django-cheat-sheet/django095-cheat-sheet.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;SQL&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.buayacorp.com/images/articulos/postgresql-cheat-sheet-big.png"&gt;http://www.buayacorp.com/images/articulos/postgresql-cheat-sheet-big.png&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.yagc.ndo.co.uk/cheatsheets/plsql_cheatsheet.html"&gt;http://www.yagc.ndo.co.uk/cheatsheets/plsql_cheatsheet.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.yagc.ndo.co.uk/cheatsheets/plsql_cheatsheet.html"&gt;http://www.scottferguson.com/pages/SybaseSystem11SQLCheatSheet.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ilovejackdaniels.com/php/mysql-cheat-sheet/"&gt;http://www.ilovejackdaniels.com/php/mysql-cheat-sheet/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://nparikh.freeshell.org/unix/mysql.php"&gt;http://nparikh.freeshell.org/unix/mysql.php&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.3gwt.net/demo/SQL_redux.html"&gt;http://www.3gwt.net/demo/SQL_redux.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nparikh.org/unix/mysql.php"&gt;http://www.nparikh.org/unix/mysql.php&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vttoth.com/oracle.htm"&gt;http://www.vttoth.com/oracle.htm&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Web Development&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.alvit.de/handbook/"&gt;http://www.alvit.de/handbook/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Others&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://mypage.bluewin.ch/yuppi/links/cheatsheets.html" rel="nofollow"&gt;http://mypage.bluewin.ch/yuppi/links/cheatsheets.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.digilife.be/quickreferences/quickrefs.htm"&gt;http://www.digilife.be/quickreferences/quickrefs.htm&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23078113-6268425159463174888?l=itblackbelt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itblackbelt.blogspot.com/feeds/6268425159463174888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23078113&amp;postID=6268425159463174888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6268425159463174888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23078113/posts/default/6268425159463174888'/><link rel='alternate' type='text/html' href='http://itblackbelt.blogspot.com/2007/10/programming-handbooks-and-cheatsheets.html' title='Programming Handbooks and Cheatsheets'/><author><name>make it simple</name><uri>http://www.blogger.com/profile/03356377809939814997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='8' src='http://photos1.blogger.com/blogger/4668/2358/400/yourimagehere6gf.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23078113.post-6829064493337916218</id><published>2007-10-03T01:09:00.000-07:00</published><updated>2007-10-03T01:13:01.863-07:00</updated><category scheme='http:
