<?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-6050067629911853658</id><updated>2012-02-21T06:03:24.432-08:00</updated><category term='User Interface Design'/><category term='Databases and Data Mining'/><category term='Software Processes and Methodologies'/><category term='Object Oriented Design'/><category term='Software Antipatterns'/><category term='Coding Standards'/><category term='Microsoft .NET'/><category term='Design Patterns'/><category term='Web Services'/><category term='Software Sites and Products'/><title type='text'>CodeBalance</title><subtitle type='html'>A Software Engineering Blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-1628008462691645909</id><published>2012-01-13T04:31:00.000-08:00</published><updated>2012-01-13T04:32:24.333-08:00</updated><title type='text'>Relocation of CodeBalance</title><content type='html'>&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;CodeBalance has been suspended and renamed as &lt;a href="http://codebuild.blogspot.com/"&gt;CodeBuild&lt;/a&gt;&amp;nbsp;on 12th January 2012.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;You can reach our new site via &lt;a href="http://codebuild.blogspot.com/"&gt;codebuild.blogspot.com&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Blog postings about software development will continue on CodeBuild exactly as before.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Thanks for your concern.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-1628008462691645909?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/1628008462691645909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2012/01/relocation-of-codebalance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/1628008462691645909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/1628008462691645909'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2012/01/relocation-of-codebalance.html' title='Relocation of CodeBalance'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-3997366838300827852</id><published>2012-01-10T07:47:00.000-08:00</published><updated>2012-01-10T07:55:39.218-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Processes and Methodologies'/><title type='text'>Java Dynamic Web Project to Maven 3 Project - Migration Steps</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2012/01/java-dynamic-web-project-to-maven-3.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;If you start a java project in eclipse as "maven project" at the beginning, all you need is downloading maven distribution or maven plug-in and add dependencies to the pom.xml file when required. But some issues exist while migrating from java dynamic web project to maven project. In this post, required configuration steps will be told. Maven introduction, installation, "repository" concept and maven commands are out of scope for&amp;nbsp;this post.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Source codes for a maven project must be located in src/main/java folder. Also test and resources must be located in src/test/java and src/main/resources folders respectively. For this conversion, you can create required folders manually and copy old source codes in it, but more preferred and stable way is defining source paths in Project Properties --&amp;gt; Java Build Path section:&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZELo4N-6ozs/TwxRP4aB3dI/AAAAAAAAAQc/6q0HdGqxEy0/s1600/maven_1.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ZELo4N-6ozs/TwxRP4aB3dI/AAAAAAAAAQc/6q0HdGqxEy0/s1600/maven_1.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Source folder configuration&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;project_name&gt;/WEB_INF folder is not used in maven projects. There is "webapp" folder instead. You can move WEB_INF files into webapp folder as the given structure&amp;nbsp;and delete old WEB_INF folder. You don't even need lib folder because maven will create required jars:&lt;/project_name&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ik4xuM-Sbms/TwxRXonhYCI/AAAAAAAAAQk/XYZq7Ng_nmQ/s1600/maven_2.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-ik4xuM-Sbms/TwxRXonhYCI/AAAAAAAAAQk/XYZq7Ng_nmQ/s1600/maven_2.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;webapp folder&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;li style="text-align: justify;"&gt;target/classes folder must be the output (deploy) path instead of build/classes. Again in Project Properties --&amp;gt; Java Build Path section:&lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RFAg-bs4ZkI/TwxSjOWQ-2I/AAAAAAAAAQs/iz3yQEiSnRA/s1600/maven_3.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-RFAg-bs4ZkI/TwxSjOWQ-2I/AAAAAAAAAQs/iz3yQEiSnRA/s1600/maven_3.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Output folder&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;li style="text-align: justify;"&gt;org.eclipse.wst.common.component file needs some changes. Open it using ctrl+shift+R and edit deploy path and output path as below:&lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xXiE1V6hdbk/TwxbF85CccI/AAAAAAAAARM/J33MijXACQc/s1600/maven_4.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-xXiE1V6hdbk/TwxbF85CccI/AAAAAAAAARM/J33MijXACQc/s1600/maven_4.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-size: small; text-align: justify;"&gt;org.eclipse.wst.common.component file&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;Create pom.xml file on project root folder and configure required sections with your project details. Then add required dependencies one-by-one between &lt;dependency&gt; tags (This will be the most time consuming issue if there are tens or hundreds of JARs). If maven global repository has required jar, it will be downloaded automatically, otherwise you must find required jar and run "mvn install" command to install that jar to maven repository:&lt;/dependency&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-kGHX3l3ufsE/TwxbdyHDlfI/AAAAAAAAARc/RCJ2Bo5lJOA/s1600/maven_5.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-kGHX3l3ufsE/TwxbdyHDlfI/AAAAAAAAARc/RCJ2Bo5lJOA/s1600/maven_5.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;pom.xml file&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Run mvn-install or mvn-package commands for the project. Created JARS, web.xml, other resources and class files will be located under /target folder automatically. Also a WAR file for the project will be created. You can copy WAR file to server (e.g. apache tomcat) and run the application, or you can run the application using the server defined&amp;nbsp;in eclipse.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-pRnUt_LvbYU/Twxca-a5pnI/AAAAAAAAARs/gLjy59vb6VA/s1600/maven_7.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-pRnUt_LvbYU/Twxca-a5pnI/AAAAAAAAARs/gLjy59vb6VA/s1600/maven_7.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;target directory&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: 'Trebuchet MS', sans-serif; text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Depending on the running style of mvn-install command (by plug-in, command etc.) , created JARs under the /target folder may not be copied to src/main/webapp/WEB-INF folder. If you will run the application using the server of the ide, you may be needed to copy created libs into&amp;nbsp;src/main/webapp/WEB-INF/lib folder and add those libs to project using Project Properties --&amp;gt; Java Build Path --&amp;gt; Libraries --&amp;gt; Add JARs section for once.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;ol&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YCKZIPO58-M/Twxb22VGqfI/AAAAAAAAARk/rD9VB_NWJDc/s1600/maven_6.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-YCKZIPO58-M/Twxb22VGqfI/AAAAAAAAARk/rD9VB_NWJDc/s1600/maven_6.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Adding required jars under webapp/WEB-INF/lib&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-3997366838300827852?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/3997366838300827852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2012/01/java-dynamic-web-project-to-maven-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/3997366838300827852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/3997366838300827852'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2012/01/java-dynamic-web-project-to-maven-3.html' title='Java Dynamic Web Project to Maven 3 Project - Migration Steps'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ZELo4N-6ozs/TwxRP4aB3dI/AAAAAAAAAQc/6q0HdGqxEy0/s72-c/maven_1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-3745437712467707394</id><published>2011-12-29T07:26:00.000-08:00</published><updated>2011-12-29T07:28:23.504-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Oriented Design'/><title type='text'>A Look Into Java Annotations &amp; A Real World Spring Example</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/12/look-into-java-annotations-real-world.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;An "annotation" is a type of programminglanguage definition and used as a “marker”. They can be thought as commentlines which programming language engine can understand. They don’t directlyaffect program execution but affect indirecly if wanted. &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Definition&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;An annotation is defined with &lt;b&gt;@interface&lt;/b&gt; keyword and is similar withan interface. It has attributes which are defined like interface methods.Attributes can have default values. Let’s define an annotation named “Page”,which defines UI pages of an application:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public @interface&lt;/span&gt;&lt;/b&gt; Page {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;int&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;id();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;String &lt;/span&gt;&lt;/b&gt;url();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;String &lt;/span&gt;&lt;/b&gt;icon()&lt;b&gt;&lt;span style="color: #0b5394;"&gt;default &lt;/span&gt;&lt;/b&gt;"[none]"; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;String &lt;/span&gt;&lt;/b&gt;name();&lt;b&gt;&lt;span style="color: #0b5394;"&gt;default &lt;/span&gt;&lt;/b&gt;"[none]"; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;span style="font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Usage&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;Annotations are widely used to informcompiler or compile-time/runtime/deployment-time processing.&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Usage ofan annotation is simpler:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;@Page&lt;/span&gt;&lt;/b&gt;(id=1, url=”studentView”, icon=“icons/student.png”,name=”Students”)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class&lt;/span&gt;&lt;/b&gt; StudentWindow &lt;b&gt;&lt;span style="color: #0b5394;"&gt;extends &lt;/span&gt;&lt;/b&gt;Window { … }&lt;/span&gt;&lt;span style="font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Annotationscan also be defined for methods and attributes:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;@AnAnnotation&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public String&lt;/span&gt; &lt;/b&gt;getElementName() {…}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;@AnAnnotation&lt;/span&gt;&lt;/b&gt;(type=”manager”, score=3)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public int&lt;/span&gt;&lt;/b&gt; income;&lt;/span&gt;&lt;span style="font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;Examples&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="background-color: white; font-family: 'Trebuchet MS', sans-serif; font-size: 10pt; text-indent: -18pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="background-color: white; font-family: 'Trebuchet MS', sans-serif; font-size: 10pt; text-indent: -18pt;"&gt;&lt;b&gt;1)&lt;/b&gt;&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; font-family: 'Trebuchet MS', sans-serif; font-size: 10pt; text-indent: -18pt;"&gt;Reflection/code generation:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Methods havinga specific annotation can be processed at runtime:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public @interface&lt;/span&gt; &lt;/b&gt;MyAnnotation { ... }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class&lt;/span&gt; &lt;/b&gt;TestClass {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;@MyAnnotation&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;public static&lt;/span&gt; &lt;/b&gt;method1() { ... }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b style="background-color: white; font-family: 'Courier New', Courier, monospace; font-size: 13px;"&gt;&lt;span style="color: #0b5394;"&gt;@MyAnnotation&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;public static&lt;/span&gt; &lt;/b&gt;method2() { ... }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b style="background-color: white; font-family: 'Courier New', Courier, monospace; font-size: 13px;"&gt;&lt;span style="color: #0b5394;"&gt;@MyAnnotation&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;public static&lt;/span&gt; &lt;/b&gt;method3() { ... }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public static void&lt;/span&gt;&lt;/b&gt; main(&lt;b&gt;&lt;span style="color: #0b5394;"&gt;String&lt;/span&gt;&lt;/b&gt;[] args) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;for &lt;/span&gt;&lt;/b&gt;(Method method : Class.forName("TestClass").getMethods()) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;if &lt;/span&gt;&lt;/b&gt;(method.isAnnotationPresent(MyAnnotation.&lt;b&gt;&lt;span style="color: #0b5394;"&gt;class&lt;/span&gt;&lt;/b&gt;)) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // do what you want&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="background-color: white; font-size: 10pt; text-indent: -18pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="background-color: white; font-size: 10pt; text-indent: -18pt;"&gt;&lt;b&gt;2&lt;/b&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; font-size: 10pt; text-indent: -18pt;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Spring bean configuration (this section requires Spring bean configurationknowledge):&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Let’s useour “Page” annotation again:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;package&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style="background-color: transparent;"&gt;com.cmp.annotation;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;/span&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public @interface&lt;/span&gt;&lt;/b&gt;&amp;nbsp;Page {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;id();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;String&amp;nbsp;&lt;/span&gt;&lt;/b&gt;url();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;String&amp;nbsp;&lt;/span&gt;&lt;/b&gt;icon()&amp;nbsp;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;default&amp;nbsp;&lt;/span&gt;&lt;/b&gt;"[none]";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;String&amp;nbsp;&lt;/span&gt;&lt;/b&gt;name();&amp;nbsp;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;default&amp;nbsp;&lt;/span&gt;&lt;/b&gt;"[none]";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Say thatwe have a few classes having @Page annotation in a package:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;@Page&lt;/span&gt;&lt;/b&gt;(id=1, url=”studentView”, icon=“icons/student.png”, name=”Students”)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class&lt;/span&gt;&lt;/b&gt;&amp;nbsp;StudentWindow&amp;nbsp;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;extends&amp;nbsp;&lt;/span&gt;&lt;/b&gt;Window { … }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;If wedefine a bean configuration as below in a Spring application-context.xml file, Springwill create class instances “which has @Page annotation” placed in “givenpackage”.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span style="background-color: white; font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: teal; font-size: 10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #3f7f7f; font-size: 10pt;"&gt;context:component-scan&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt; &lt;span style="color: #7f007f;"&gt;base-package&lt;/span&gt;=&lt;i&gt;&lt;span style="color: #2a00ff;"&gt;"com.cmp.ui"&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&lt;span style="color: #7f007f;"&gt;annotation-config&lt;/span&gt;=&lt;i&gt;&lt;span style="color: #2a00ff;"&gt;"true"&lt;/span&gt;&lt;/i&gt;&lt;span style="color: teal;"&gt;&amp;gt;&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span style="background-color: white; font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: teal; font-size: 10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #3f7f7f; font-size: 10pt;"&gt;context:include-filter&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt; &lt;span style="color: #7f007f;"&gt;type&lt;/span&gt;=&lt;i&gt;&lt;span style="color: #2a00ff;"&gt;"annotation"&lt;/span&gt;&amp;nbsp;&lt;/i&gt;&lt;span style="color: #7f007f;"&gt;expression&lt;/span&gt;=&lt;i&gt;&lt;span style="color: #2a00ff;"&gt;"com.cmp.annotation.Page"&lt;/span&gt;&lt;/i&gt;&lt;span style="color: teal;"&gt;/&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="background-color: white; font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: teal; font-size: 10pt;"&gt;&lt;!--&lt;/span--&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #3f7f7f; font-size: 10pt;"&gt;context:component-scan&lt;/span&gt;&lt;span style="color: teal; font-size: 10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10.0pt; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;So, we havebeen enforced Spring to instantiate only a selection of classes at runtime.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;o:p&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;For more detailed info about annotations, please refer to:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://docs.oracle.com/javase/1.5.0/docs/guide/language/annotations.html"&gt;&lt;span style="color: windowtext; text-decoration: none; text-underline: none;"&gt;http://docs.oracle.com/javase/1.5.0/docs/guide/language/annotations.html&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: TR;"&gt;&lt;a href="http://docs.oracle.com/javase/tutorial/java/javaOO/annotations.html"&gt;&lt;span style="color: windowtext; text-decoration: none; text-underline: none;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;http://docs.oracle.com/javase/tutorial/java/javaOO/annotations.html&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-3745437712467707394?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/3745437712467707394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/12/look-into-java-annotations-real-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/3745437712467707394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/3745437712467707394'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/12/look-into-java-annotations-real-world.html' title='A Look Into Java Annotations &amp; A Real World Spring Example'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-4687629418984859692</id><published>2011-12-29T02:00:00.000-08:00</published><updated>2011-12-29T03:57:49.810-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Processes and Methodologies'/><title type='text'>A Selection of Successful Software Engineering Posts (2011)</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/12/selection-of-successful-software.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;selection contains 25 blog posts selected by&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;C&lt;/span&gt;&lt;span style="font-size: small;"&gt;odeBalance which were placed on DZone in 2011.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Java&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/producer_and_consumer_pattern_in_java.html"&gt;Producer and Consumer Pattern in Java&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/quick_tips_for_improving_java_apps_performance.html"&gt;Quick Tip for Improving Java Apps Performance&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/junit_tutorial_2.html"&gt;JUnit Tutorial 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/clientside_improvements_in_java_6_and_java_7.html"&gt;Clientside Improvements in Java 6 &amp;amp; 7&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/java_productivity_report_2011_india_vs_rest_of_wo.html"&gt;Java Productivity Report 2011 (India vs Rest of the World)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/be_a_better_java_programmer_a_reading_list.html"&gt;Be a Better Java Programmer - A Reading List&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/method_size_limits_in_java.html"&gt;Method Size Limits in Java&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/why_i_choose_java_2.html"&gt;Why I Choose Java?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/best_practices_list_in_java.html"&gt;Best Practices List in Java&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/lessons_in_software_reliability_java_code_geeks.html"&gt;Lessons in Software Reliability&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/music_components_in_java_effects.html"&gt;Music Components in Java Effects&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/presentation_world_wide_wait_a_performance_compar.html"&gt;WWW: World Wide Wait - A Performance Comparison&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Software Engineering &amp;amp; Practices&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/the_principles_of_good_programming.html"&gt;The Principles of Good Programming&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/a_detailed_study_on_understanding_code.html"&gt;A Detailed Study on Understanding Code&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/making_better_software_forget_new_features_just_d.html"&gt;Making Better Software - Forget New Features&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/making_code_easy_to_understand_what_developers_wa.html"&gt;Making Code Easy to Understand What Developers Want&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/things_to_remember_when_doing_code_review.html"&gt;Things to Remember When Doing Code Review&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/the_seven_phases_of_introducing_continuous_integr.html"&gt;The Seven Phases of Introducing Continuous Integration&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;General&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/the_most_important_man_in_tech_died_last_weekit_w.html"&gt;The Most Important Man in Tech Dies Last Week…It wasn't Steve Jobs.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/the_top_10_attributes_of_a_great_programmer_2.html"&gt;The Top 10 Attributes of a Great Programmer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/build_facebook_bot_in_2_easy_hours.html"&gt;Build Facebook Bot in 2 Easy Hours&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/30_free_programming_ebooks.html"&gt;30 Free Programming E-Books&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/signs_that_youre_a_bad_programmer.html"&gt;Signs That You're a Bad Programmer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/a_complete_list_of_all_major_algorithms_300_in_an.html"&gt;A Complete List of All Major Algorithms (300)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/100_android_articlestutorials.html"&gt;10 Android Articles/Tutorials&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size: small;"&gt;You can also review Part 1 (2010) here:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://codebalance.blogspot.com/2011/01/selection-of-successful-software.html"&gt;http://codebalance.blogspot.com/2011/01/selection-of-successful-software.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br class="Apple-interchange-newline" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-4687629418984859692?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/4687629418984859692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/12/selection-of-successful-software.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/4687629418984859692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/4687629418984859692'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/12/selection-of-successful-software.html' title='A Selection of Successful Software Engineering Posts (2011)'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-4129335166074058837</id><published>2011-12-28T07:26:00.000-08:00</published><updated>2011-12-28T07:28:22.349-08:00</updated><title type='text'>Improve Software Quality with Tools and Processes</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/12/improve-software-quality-with-tools-and.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;As most of the software developers know, software engineering is not just "coding". It's a complex process which requires engineering vision, analytical thinking, designing and software process management supported with tools. This article contains some important approaches, techniques and tools to improve software production quality.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Software quality depends on time and cost of course.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&amp;nbsp;But you can be sure that spent money and time will return as so much more. Quality standards will also be used for upcoming projects and increase company growth speed on midterm.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;a href="http://3.bp.blogspot.com/-BHv5p93CB4g/Tp__MgxAPxI/AAAAAAAAAPg/NAcnCDXFKVg/s1600/projecttriangle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-BHv5p93CB4g/Tp__MgxAPxI/AAAAAAAAAPg/NAcnCDXFKVg/s1600/projecttriangle.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Choose a suitable process model and apply it correctly&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;As you know there are software process models like&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;agile&lt;/a&gt;,&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;scrum&lt;/a&gt;,&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Iterative_and_incremental_development"&gt;iterative&amp;nbsp;and&amp;nbsp;incremental&lt;/a&gt;&amp;nbsp;etc. Choose one of these according to the project type. You don't have to perform all rules strictly, you can modify most of them. The point is "using a process" here, for a systematic and ordered development.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Control the version of each required source&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Using a version controlling system is a must. Even if only one developer exist, it must be used. Historical data, versioning, merging, ... is very important for increasing productivity. Otherwise developers will wait each other, can not detect performers and lines of previous changes, can not perform versioning systematically etc.&amp;nbsp;&lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt;,&amp;nbsp;&lt;a href="http://cvs.nongnu.org/"&gt;CVS&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/team-foundation-server/overview"&gt;TFS&amp;nbsp;&lt;/a&gt;are used for this purpose.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Track issues with easy-to-use tools&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Parallel with using a process model, issue tracking tool usage is essential.&amp;nbsp;&lt;a href="https://jira.atlassian.com/secure/Dashboard.jspa"&gt;JIRA&lt;/a&gt;-like tools are useful and easy-to-use. By tracking issues, you can track productivity and software growth and get production reports easily. Besides, those tools can be used to monitor developer work-hour productivity.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Perform and manage documentation&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Perform documentation as required (e.g. %10 of total production time). No documentation is never a good solution as much as excessive documentation. It may include code documentation, requirement specifications, design documents, test documents, user manuals etc. Those documents are needed to be managed and shared also, by using version controlling tools or web based platforms (like&amp;nbsp;&lt;a href="http://confluence.atlassian.com/dashboard.action"&gt;Confluence&lt;/a&gt;).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Use dependency management tools&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Managing dependency libraries (library projects, jars, DLLs etc.) are a big problem especially for big projects. Configuring libraries to run the application after each release or after each project check-out is a hell. Use a dependency managing tool like&amp;nbsp;&lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;&amp;nbsp;or at least auto build/copy script tools like&amp;nbsp;&lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Use continuous integration&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Building, deploying and versioning software is a big problem. Its time consuming and reduces productivity. Because of these, use a continuous integration tool (&lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;&amp;nbsp;for example) and integrate it with dependency management or build tools (like&amp;nbsp;&lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;,&amp;nbsp;&lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt;, ..). The tool may be configured to perform a build on each commit, on clicking a button manually or on predefined periodic times...&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Perform testing and integration testing constantly&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Testing is very important for software quality. Test documentation which may consist test scenarios, results and relations with issues is required. &amp;nbsp;Also, testing (UI testing, integration testing, ...) must be performed constantly and periodically. Even if changing a single line of code may crush the whole system or crash a hidden functionality. for example,&amp;nbsp;&lt;a href="http://www.junit.org/"&gt;JUnit&lt;/a&gt;&amp;nbsp;is very popular for Java applications.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Perform unit testing and automatize it&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Unit testing is as important as the other testing methods. Unit tests provide pre-detection of most of the problems. By performing qualitative unit testing, time consumption for other testing methods also descreases. Automatizing these tests using continuous integration tools or at least command line tools (&lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;&amp;nbsp;with&amp;nbsp;&lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;&amp;nbsp;for example) are important to keep software consistency and reliability.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Collect metrics from production and use results&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Coding metrics (e.g. line of code, abstraction ratio, cyclomatic complexity, ...) gives us some good viewpoints about software. For example, by using line of code maybe we can't (or we mustn't) determine the productivity of a developer; but we can determine the growth speed of software monthly. Complexity-like metrics tells us design errors before deployment. These metrics can be collected by tools or plug-ins (e.g.&amp;nbsp;&lt;a href="http://code.google.com/javadevtools/download-codepro.html"&gt;CodePro&lt;/a&gt;&amp;nbsp;Eclipse plug-in).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Follow best practices of coding and control with tools&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;There is no "golden rule" suitable with all software projects, but there are best practices for p&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;roject management, architecture, designing, coding, testing for most&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&amp;nbsp;situations. Performing those rules will increase the quality. For example, you can define rules for code production (about indentation, commenting, magic numbering, paranthesis etc.) and monitor convenience automatically and periodically with external tools or plug-ins like&amp;nbsp;&lt;a href="http://maven.apache.org/plugins/maven-surefire-report-plugin/"&gt;Maven Surefire Report&lt;/a&gt;&amp;nbsp;plug-in.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br class="Apple-interchange-newline" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-4129335166074058837?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/4129335166074058837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/12/improve-software-quality-with-tools-and.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/4129335166074058837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/4129335166074058837'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/12/improve-software-quality-with-tools-and.html' title='Improve Software Quality with Tools and Processes'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-BHv5p93CB4g/Tp__MgxAPxI/AAAAAAAAAPg/NAcnCDXFKVg/s72-c/projecttriangle.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-297338746363345601</id><published>2011-10-10T01:27:00.000-07:00</published><updated>2011-10-10T05:43:01.016-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Databases and Data Mining'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Oriented Design'/><title type='text'>Hibernate 3 Installation &amp; Configuration</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/10/hibernate-3-installation-configuration.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Short Description:&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Hibernate is an ORM framework for Java applications, which maps application objects into relational database tables. It is important because:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Developers don't write SQL expressions into code. This saves time and increases maintainability.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It is database independent. DBMS can be changed without changing the code. Only configuration XML is modified for this.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It supports transaction methods and auto-creation of tables, constraints, relations (1-N,1-1, N-N, etc.).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Installation&lt;/u&gt;:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Requires two steps:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Copying required JARs into /lib directory:&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Creating and configuring persistence.xml configuration file.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Required JARs are:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2qHrvRpvjbA/TpKjsRreo1I/AAAAAAAAAPY/ZrmnSdoYyQM/s1600/hibernate.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-2qHrvRpvjbA/TpKjsRreo1I/AAAAAAAAAPY/ZrmnSdoYyQM/s1600/hibernate.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Hibernate installation JARs&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Hibernate requires only hibernate3.jar. But hibernate-jpa jar is also used generally for additional JPA properties. A database connector jar is also reqiured for connection handling. mysql-connector jar is used here for this reason. Other jars are required because of dependencies. These jars can be found on most Java developer download site with exact version numberings.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;persistence.xml file is also required to map application into database. Database configuration is done in this file. It is put into /src/main/config/META-INF folder as default. Content should be as below:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ilTq7OMsTfw/TpKl7dp8SMI/AAAAAAAAAPc/9eRKBOrj5m0/s1600/hibernate-config.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ilTq7OMsTfw/TpKl7dp8SMI/AAAAAAAAAPc/9eRKBOrj5m0/s1600/hibernate-config.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Hibernate persistence.xml configuration&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;li style="text-align: justify;"&gt;persistence-unit name: Defines the configuration id. More than one persistence unit can be defined at once.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;hibernate.connection.driver_class &amp;amp; hibernate.dialect: Defines the database type. MySQL is used in this example.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;hibernate.connection.username &amp;amp; hibernate.connection.password: Defines database connection parameters.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;hibernate.connection.url: Defines database server name, port and schema. "test" is used here for schema name.&lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;These two steps are required and enough for starting Hibernate usage. Hibernate entity definition and API usage will be explained in upcoming posts.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-297338746363345601?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/297338746363345601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/10/hibernate-3-installation-configuration.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/297338746363345601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/297338746363345601'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/10/hibernate-3-installation-configuration.html' title='Hibernate 3 Installation &amp; Configuration'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-2qHrvRpvjbA/TpKjsRreo1I/AAAAAAAAAPY/ZrmnSdoYyQM/s72-c/hibernate.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-5010513365283090402</id><published>2011-10-07T03:19:00.000-07:00</published><updated>2011-10-07T03:45:18.027-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Oriented Design'/><title type='text'>A Quick Reference to the Spring 3 DI Bean Configuration</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/10/quick-reference-to-spring-3-di-bean.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Spring 3 DI (dependency injection) functionality which placed in "Spring Core" is very important for managing objects (or "beans") in enterprise applications.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Here is a quick reference for bean configuration of Spring DI:&lt;/span&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZtUmGVtKIPE/To7Q0n5J-uI/AAAAAAAAAPU/rkX7PRmLKgU/s1600/SpringBeanConfigByCodeBalance.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-ZtUmGVtKIPE/To7Q0n5J-uI/AAAAAAAAAPU/rkX7PRmLKgU/s1600/SpringBeanConfigByCodeBalance.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Spring Bean Configurations&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;You can get a bean in application by&lt;br /&gt;&lt;br /&gt;&lt;u&gt;manual&lt;/u&gt;:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;ApplicationContext &lt;/span&gt;context = new &lt;span class="Apple-style-span" style="color: #0b5394;"&gt;ClassPathApplicationContext&lt;/span&gt;(&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;new &lt;/span&gt;String[] {“application-context.xml”})&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;ViewManager &lt;/span&gt;viewManager = (&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;ViewManager&lt;/span&gt;)context.getBean(“viewManager”);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;annotation&lt;/u&gt;:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@Autowired&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;ViewManager &lt;/span&gt;viewManager;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="direction: ltr; language: tr; margin-bottom: 0pt; margin-left: .3in; margin-top: 3.84pt; mso-line-break-override: none; punctuation-wrap: hanging; text-align: left; text-indent: -.3in; unicode-bidi: embed; word-break: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: black; font-family: 'Courier New'; font-style: italic;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="direction: ltr; language: tr; margin-bottom: 0pt; margin-left: .3in; margin-top: 3.84pt; mso-line-break-override: none; punctuation-wrap: hanging; text-align: left; text-indent: -.3in; unicode-bidi: embed; word-break: normal;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;span style="color: black; font-family: 'Courier New'; font-style: italic;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span style="color: black; font-family: 'Courier New';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="color: black; font-family: 'Courier New'; font-style: italic;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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/6050067629911853658-5010513365283090402?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/5010513365283090402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/10/quick-reference-to-spring-3-di-bean.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/5010513365283090402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/5010513365283090402'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/10/quick-reference-to-spring-3-di-bean.html' title='A Quick Reference to the Spring 3 DI Bean Configuration'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ZtUmGVtKIPE/To7Q0n5J-uI/AAAAAAAAAPU/rkX7PRmLKgU/s72-c/SpringBeanConfigByCodeBalance.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-3098554948763898965</id><published>2011-08-21T23:28:00.000-07:00</published><updated>2011-08-21T23:41:02.237-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Processes and Methodologies'/><title type='text'>10 SCRUM Methodology Best Practices</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/08/10-scrum-methodology-best-practices.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Here is a list of some best practices about scrum:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Burn_down_chart"&gt;Burn down charts&lt;/a&gt;&amp;nbsp;can be used to monitor sprint status. Graphical representations are better than tabular list views in planning.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ZJP6a0nEtS8/TjuXsqxCZGI/AAAAAAAAANc/9s1Jpkx9g9k/s1600/SampleBurndownChart.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://2.bp.blogspot.com/-ZJP6a0nEtS8/TjuXsqxCZGI/AAAAAAAAANc/9s1Jpkx9g9k/s200/SampleBurndownChart.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Planning_poker"&gt;Planning poker&lt;/a&gt;&amp;nbsp;is a useful way to determine sprint item finish durations. And using Fibonacci numbers is a good practice for planning poker numbers.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-GIldjF1a1lA/TjuX8JO5MpI/AAAAAAAAANg/ew2SFwQvCBA/s1600/20100417-planningpoker.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://2.bp.blogspot.com/-GIldjF1a1lA/TjuX8JO5MpI/AAAAAAAAANg/ew2SFwQvCBA/s200/20100417-planningpoker.gif" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://www.investopedia.com/terms/r/returnoninvestment.asp"&gt;ROI (Return on Investment)&lt;/a&gt;&amp;nbsp;values are useful to determine item priorities in a sprint. Planning poker can be used to determine ROI values.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-EjbhPvChF-A/TjuYNlyjMJI/AAAAAAAAANk/zX0J7bhARYA/s1600/roi_investreturn.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="128" src="http://1.bp.blogspot.com/-EjbhPvChF-A/TjuYNlyjMJI/AAAAAAAAANk/zX0J7bhARYA/s200/roi_investreturn.gif" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Using a board and simple planning/reporting tools (e.g. excel,&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://sprintometer.com/"&gt;spr&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://sprintometer.com/"&gt;intometer&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://www.freedownloadmanager.org/downloads/ProjectSimple_62152_p/"&gt;projectsimple&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;) are important and enough as process quality equipments.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-fiLyGOlDUmM/TjubCtYopPI/AAAAAAAAANo/bkNgGVO7mXo/s1600/Screenshot_burndown.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-fiLyGOlDUmM/TjubCtYopPI/AAAAAAAAANo/bkNgGVO7mXo/s200/Screenshot_burndown.PNG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Scrum methodology does not offe&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;r documenting everything, but this does not mean "no documentation". Really needed documentation can be done as required.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Daily meetings must not be longer than 15 minutes. Scrum is an agile methodology and no one needs to listen other members' problem details. These details may be discussed after daily meeting with scrum master&amp;nbsp;with only required subset of team members.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Stand up meeting style is better for daily meetings, to keep meeting short. Also&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&amp;nbsp;meeting location and time are recommended to be the same for each day&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Product backlog may contain items which will not be developed. According to ROI values, some items may not be developed and this is normal. Product backlog should contain all possible items anyway.&amp;nbsp;Give backlog items ID numbers, to manage simply.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Sprint length (in weeks) changes are &lt;u&gt;not&lt;/u&gt; recommended. But according to the sprint retrospective meeting results, sprint week lengths may be changed if there are really important reasons.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;6 hours per a day is a realistic planning input. Total sprint hour capacity can be calculated as: (number of team members) * (number of sprint days) * 6 hours&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;For general information about SCRUM: &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://codebalance.blogspot.com/2011/08/scrum-software-development-methodology.html"&gt;http://codebalance.blogspot.com/2011/08/scrum-software-development-methodology.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-3098554948763898965?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/3098554948763898965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/08/10-scrum-methodology-best-practices.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/3098554948763898965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/3098554948763898965'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/08/10-scrum-methodology-best-practices.html' title='10 SCRUM Methodology Best Practices'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ZJP6a0nEtS8/TjuXsqxCZGI/AAAAAAAAANc/9s1Jpkx9g9k/s72-c/SampleBurndownChart.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-4400452152094285876</id><published>2011-08-15T23:24:00.000-07:00</published><updated>2011-08-15T23:27:23.474-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Antipatterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Oriented Design'/><title type='text'>Software Architecture Antipatterns : Swiss Army Knife Interface</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/08/software-architecture-antipatterns.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Swiss Army Knife Interface is an interface class which has excessive number of method definitions. Architect/designer may design this interface to use for every need of the software, but this is a wrong approach and an antipattern. More than one interface must be designed using some design approaches.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-_nlJMWE12P8/TjfaoyFgyjI/AAAAAAAAANQ/1mm29OAojvk/s1600/sak.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-_nlJMWE12P8/TjfaoyFgyjI/AAAAAAAAANQ/1mm29OAojvk/s320/sak.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Of course, "excessive number of methods" is a too general statement. Although most developer think that a handful number of methods (e.g. 8-10) &amp;nbsp;and some studies&amp;nbsp;show that some magic numbers&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two"&gt;(7 plus/minus 2)&lt;/a&gt;&amp;nbsp;are mostly enough, we can't say the maximum number of methods precisely.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;First of all, you must think that this interface will be implemented by a class and if the number of methods is excessive, there will be plenty of empty method bodies in implementor class. But this situation still can't determine the number of interfaces and number of methods in an interface.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;The answer is hidden in the OOP SOLID rules. Single Responsibility ("S") rule of SOLID says that "every object should have a single responsibility", and Interface Segregation ("I") rule of SOLID says that "different types of functionalities should be placed in different interfaces". If an interface have more than one types of functionalities or defines more than one responsibilities, implemening that interface is meaningless because implementer class will not suit SOLID rules by implementing that interface.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;More than one Swiss Army Knife Interface may also exist in a software. This means more than one problem exist and must be solved.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;For another viewpoint, you can take a look at our another post about interface segregation principle:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://codebalance.blogspot.com/2010/09/oop-solid-rules-interface-segregation.html"&gt;http://codebalance.blogspot.com/2010/09/oop-solid-rules-interface-segregation.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-4400452152094285876?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/4400452152094285876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/08/software-architecture-antipatterns.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/4400452152094285876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/4400452152094285876'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/08/software-architecture-antipatterns.html' title='Software Architecture Antipatterns : Swiss Army Knife Interface'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-_nlJMWE12P8/TjfaoyFgyjI/AAAAAAAAANQ/1mm29OAojvk/s72-c/sak.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-6804490133380152033</id><published>2011-08-07T23:22:00.000-07:00</published><updated>2011-08-08T09:42:15.863-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Processes and Methodologies'/><title type='text'>SCRUM Software Development Methodology : Nuts &amp; Bolts</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/08/scrum-software-development-methodology.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Scrum is an &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;agile&lt;/a&gt; software development methodology. It is useful for relatively small (5-9 developers) development teams and limited project calendars. This post will give brief definitions and useful suggestions about this methodology.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-t8_HURjuF4A/TjqtpTPWlWI/AAAAAAAAANY/nB8yk-6ExNg/s1600/web_development.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="278" src="http://1.bp.blogspot.com/-t8_HURjuF4A/TjqtpTPWlWI/AAAAAAAAANY/nB8yk-6ExNg/s320/web_development.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Team Members&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Product Owner:&lt;/u&gt; Behaves as real customer and criticizes product. Attends meetings and can determine work priorities. Adds items to product backlog (will be told later). Only one person can be product owner in a scrum team.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Scrum Master:&lt;/u&gt; Enforcer of the rules. Generally most experienced team member. Works like team leader. Solves the problems of the team, if team/team member couldn't. Only one person can be scrum master in a scrum team.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Team:&lt;/u&gt; A scrum team member is responsible of analysing, design, development, test and the other required processes. So, specialization is rare. Self-organization is a plus. There is no hierarchy in members. Scrum master is also a team member.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Document Types:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Product Backlog:&lt;/u&gt; This list contains items that the project must have and may have. Item size can increase every time.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Sprint Backlog:&lt;/u&gt; Sprint is a time interval (generally 2-4 weeks) that a group of items must be completed (similar with "iteration" in unified process and some other processes). Sprint backlog contains items that must be completed in that sprint.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Meeting Types:&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Daily Scrum/Standup Meeting:&lt;/u&gt;&lt;b&gt; &lt;/b&gt;Max. time is 15 minutes. Performed at the start of the day and generally in stand-up style. Every member should answer 3 questions:&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;What did you do yesterday?&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;What will you do today?&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Is there a problem about your work item(s)?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Sprint Planning Meeting:&lt;/u&gt; Performed at the start of each sprint. Sprint backlog is created using product backlog items and priority opinions of all team members.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Sprint Review:&lt;/u&gt;&lt;b&gt; &lt;/b&gt;Performed at the end of each sprint. Status of sprint backlog items are discussed and results are recorded.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;u&gt;Sprint Retrospective:&lt;/u&gt;&lt;b&gt; &lt;/b&gt;Performed at the end of each sprint. Sprint process issues are discussed to improve process quality.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Process&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZJz7Re1S5z8/TjqqcSx6Q1I/AAAAAAAAANU/k-a-6Try7z4/s1600/800px-Scrum_process_svg.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-ZJz7Re1S5z8/TjqqcSx6Q1I/AAAAAAAAANU/k-a-6Try7z4/s400/800px-Scrum_process_svg.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Scrum Process&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;From product owner opinions and other internal/external sources, product backlog is created.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Sprint planning meeting is performed at the start of each sprint. Previous sprint's unfinished items (if exists) and product backlog are sources of sprint backlog. Backlog is created according to item priority opinions of all team members.&amp;nbsp;Sprint length (in weeks) may also be defined here for once.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;In sprint time, daily meetings are performed. Team members take responsibility of items from item pool of sprint backlog continiously when an item is finished. By the way scrum master solve possible problems and product owner criticizes results.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Sprint review and retrospective meetings are performed at the end of each sprint. Results are discussed in these meetings. Results are recorded to be applied for next sprints.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-6804490133380152033?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/6804490133380152033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/08/scrum-software-development-methodology.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/6804490133380152033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/6804490133380152033'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/08/scrum-software-development-methodology.html' title='SCRUM Software Development Methodology : Nuts &amp; Bolts'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-t8_HURjuF4A/TjqtpTPWlWI/AAAAAAAAANY/nB8yk-6ExNg/s72-c/web_development.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-5628089646461706737</id><published>2011-07-24T23:14:00.000-07:00</published><updated>2011-07-26T23:25:46.116-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Databases and Data Mining'/><title type='text'>20 Database Design Best Practices</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/07/20-database-design-best-practices.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use well defined and consistent names for tables and columns (e.g. School, StudentCourse, CourseID ...).&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use singular for table names (i.e. use StudentCourse instead of StudentCourses). Table represents a collection of entities,&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&amp;nbsp;there is no need for plural names.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Don’t use spaces for table names. Otherwise you will have to use ‘{‘, ‘[‘, ‘“’ etc. characters to define tables (i.e. for&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;accesing table Student Course you'll write “Student Course”. StudentCourse is much better).&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Don’t use unnecessary prefixes or suffixes for table names (i.e. use School instead of TblSchool, SchoolTable etc.).&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Keep passwords as encrypted for security. Decrypt them in application when required.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use integer id fields for all tables. If id is not required for the time being, it may be required in the future (for association tables,&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;indexing ...).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Choose columns with the integer data type (or its variants) for indexing. varchar column indexing will cause&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;performance problems.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use bit fields for boolean values. Using integer or varchar is unnecessarily storage consuming. Also start those column&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;names with “Is”.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Provide authentication for database access. Don’t give admin role to each user.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Avoid “select *” queries until it is really needed. Use "select [required_columns_list]" for better&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;performance.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use an ORM (object relational mapping) framework (i.e. hibernate, iBatis ...) if application code is big&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;enough. Performance issues of ORM frameworks can be handled by detailed configuration parameters.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Partition big and unused/rarely used tables/table parts to different physical storages for better query performance.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;For big, sensitive and mission critic database systems, use disaster recovery and security services like&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;failover clustering, auto backups, replication etc.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use constraints (foreign key, check, not null ...) for data integrity. Don’t give whole control to&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;application code.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Lack of database documentation is evil. Document your database design with ER schemas and&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;instructions. Also write comment lines for your triggers, stored procedures and other scripts.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use indexes for frequently used queries on big tables. Analyser tools can be used to determine where&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;indexes will be defined. For queries retrieving a range of rows, clustered indexes are usually better. For point&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;queries, non-clustered indexes are usually better.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Database server and the web server must be placed in different machines. This will provide more&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;security (attackers can’t access data directly) and server CPU and memory performance will be better because of&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;reduced request number and process usage.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Image and blob data columns must not be defined in frequently queried tables because of performance issues. These data&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;must be placed in separate tables and their pointer can be used in queried tables.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Normalization must be used as required, to optimize the performance.&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Under-normalization will cause excessive repetition of data,&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;over-normalization will cause excessive joins across too many tables. Both of them will get worse&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;performance.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Spend time for database modeling and design as much as required. Otherwise saved(!) design time will&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;cause (saved(!) design time) * 10/100/1000 maintenance and re-design time.&lt;/span&gt;&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/6050067629911853658-5628089646461706737?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/5628089646461706737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/07/20-database-design-best-practices.html#comment-form' title='37 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/5628089646461706737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/5628089646461706737'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/07/20-database-design-best-practices.html' title='20 Database Design Best Practices'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><thr:total>37</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-5414526413203533917</id><published>2011-07-07T00:02:00.000-07:00</published><updated>2011-07-07T04:09:32.457-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Antipatterns'/><title type='text'>Sofware Management Antipatterns: E-Mail is Dangerous</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/07/sofware-management-antipatterns-e-mail.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div class="MsoSmall" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Using e-mail is an important communication tool in software companies, but performing communications mostly with e-mail is dangerous. In this post, this issue will be detailed together with common e-mail mistakes. This information can be generalized for most types of companies.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nKuKsGZzwoI/ThVUHr1XzhI/AAAAAAAAANA/Wn1XLx3TQ6s/s1600/email.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;img border="0" height="143" src="http://1.bp.blogspot.com/-nKuKsGZzwoI/ThVUHr1XzhI/AAAAAAAAANA/Wn1XLx3TQ6s/s200/email.png" width="200" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;E-mails may be used for some kind of situations:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;For sending a report, meeting record etc. which is not confidential, to a manager or a group.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;For sending a short message which is not urgent, to a person who can’t be accessed via telephone and face-to-face.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;E-mails should &lt;u&gt;NOT&lt;/u&gt; be used for these situations:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;For confidential messages and criticisms: E-mails can be distributed to other people or large groups easily, so this is not a good idea.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;For situations&amp;nbsp; which could be used as evidence in a court of&amp;nbsp;law : For example, if you say “We will do X item in a month” to the customer with e-mail, it can be a mandatory item for you in the next days.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;For explaining a complex topic: It will be time consuming to write hundreds of words. Speaking will be more effective.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;For explaining an important, sensitive topic: Word emphasis, voice tone, gestures and mimics are very important for conversations. E-mails have none of them and this may cause misunderstandings.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;And some e-mail suggestions:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US"&gt;Don’t use e-mail bodies as title, this is ridiculous:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;Title: Please send me a report about X task.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;Body: nothing&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;Don’t put hundreds of people to your e-mail’s “TO” or “CC” list. Use BCC. Otherwise all people and spam softwares will know all e-mails:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;To:a1@a.com, a2@b.com, ... , a1000@z.com&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;CC:a1001@z1.com, …, a2345@zz.com&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;Don’t use infinite forwards for e-mails. These type of mails are not funny for most people.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;To: hundreds of people&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;Title: FW:FW:FW:FW:FW:FW:FW:FW:FW:…&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;Don’t use e-mails as FTP. Use a file transfer protocol for sending messages larger than a few MB. A common wrong usage:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;Attachments&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;: AnImportantDocument.pdf (123 MB)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;Don’t use e-mails as a version controlling system. Manage your documents with a real version controlling system:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;Attachments:&amp;nbsp; “CustomerReport_last_20122010_newest_veryVeryLast_1_1.doc”.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;Don’t use so many smiley images, big signature images, long signatures, colorful decoration templates in your e-mail. These are generally disgusting and unnecessary. Besides, they will increase network load.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Sources: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://sourcemaking.com/antipatterns/e-mail-is-dangerous"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="line-height: 115%; text-decoration: none;"&gt;http://sourcemaking.com/antipatterns/e-mail-is-dangerous&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -18.0pt;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://www.dzone.com/links/r/if_you_do_this_in_an_email_i_hate_you.html"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="line-height: 115%; text-decoration: none;"&gt;http://www.dzone.com/links/r/if_you_do_this_in_an_email_i_hate_you.html&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-5414526413203533917?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/5414526413203533917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/07/sofware-management-antipatterns-e-mail.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/5414526413203533917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/5414526413203533917'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/07/sofware-management-antipatterns-e-mail.html' title='Sofware Management Antipatterns: E-Mail is Dangerous'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-nKuKsGZzwoI/ThVUHr1XzhI/AAAAAAAAANA/Wn1XLx3TQ6s/s72-c/email.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-6672892463391182620</id><published>2011-06-24T06:57:00.000-07:00</published><updated>2011-06-24T07:17:04.708-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='User Interface Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><title type='text'>Develop Rich Web Applications with Java by Vaadin Framework (Introduction)</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/06/developing-rich-web-interfaces-using.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Vaadin (&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;&lt;a href="http://vaadin.com/home"&gt;&lt;span style="color: black;"&gt;http://vaadin.com/home&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;) is an open source web application framework having a server-side architecture which constructs user interface of web applications as RIA (rich internet applications), using Java code only.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: black; font-family: Arial, sans-serif; font-size: 8pt; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-osKKAspWSjk/TgSS0DAt21I/AAAAAAAAAM0/Gq_A4RCv0xM/s1600/vaadinLogo.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="77" src="http://1.bp.blogspot.com/-osKKAspWSjk/TgSS0DAt21I/AAAAAAAAAM0/Gq_A4RCv0xM/s320/vaadinLogo.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Vaadin Logo&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;For developing Vaadin applications, you only use Java code, like Java Swing. This Java code is then converted to GWT (Google Web Toolkit) components (which are HTML and Javascript based) for browser side, and AJAX code sections are generated for some actions to support RIA concept. Server side validation is also performed for all actions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 115%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="color: black; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 115%;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;An example source code is shown below:&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="color: black; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 115%;"&gt;&lt;span class="apple-style-span"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 115%;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; line-height: 12.5pt; margin-bottom: 8.75pt; margin-left: 30.7pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;import &lt;/span&gt;&lt;/b&gt;com.vaadin.ui.*;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="line-height: 115%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; line-height: 12.5pt; margin-bottom: 8.75pt; margin-left: 30.7pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;HelloWorld extends com.vaadin.Application {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; line-height: 12.5pt; margin-bottom: 8.75pt; margin-left: 30.7pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;public void &lt;/span&gt;&lt;/b&gt;init() { &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; line-height: 12.5pt; margin-bottom: 8.75pt; margin-left: 30.7pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Window main = &lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;new &lt;/span&gt;&lt;/b&gt;Window("Hello window"); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; line-height: 12.5pt; margin-bottom: 8.75pt; margin-left: 30.7pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setMainWindow(main);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; line-height: 12.5pt; margin-bottom: 8.75pt; margin-left: 30.7pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main.addComponent(&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;new &lt;/span&gt;&lt;/b&gt;Label("Hello World!")); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; line-height: 12.5pt; margin-bottom: 8.75pt; margin-left: 30.7pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; line-height: 12.5pt; margin-bottom: 8.75pt; margin-left: 30.7pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #e6f8fe; font-family: 'Courier New', Courier, monospace;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;And the result is:&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span lang="EN-US" style="color: black; font-family: Arial, sans-serif; font-size: 8pt; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ER0wAE3VoUI/TgST09gcbwI/AAAAAAAAAM4/FFM3oUpQal4/s1600/HelloWorld.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="116" src="http://1.bp.blogspot.com/-ER0wAE3VoUI/TgST09gcbwI/AAAAAAAAAM4/FFM3oUpQal4/s400/HelloWorld.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Vaadin Hello World Example&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Vaadin supports so many UI components and these can be extended with new GWT components if required, and CSS themes can be applied to results. For using Vaadin, only a JAR file is enough. Some Eclipse and NetBeans plugins are also available for easier development if required.&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Vaadin supports JPA (java persistence API) container package JAR for database operations. By using containers, you can associate components to database operations directly, e.g. if the item list of a container changes, related visual component’s list is changed too.&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Here is an example view of a Vaadin application layout VaadinTunes (&lt;a href="http://demo.vaadin.com/VaadinTunesLayout/"&gt;&lt;span style="color: black; text-decoration: none;"&gt;http://demo.vaadin.com/VaadinTunesLayout/&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;):&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 8pt; font-weight: bold;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-S4x6MfkzSmA/TgSUP44ZhbI/AAAAAAAAAM8/sxC4DvAJ0RM/s1600/vaadinTunes.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="107" src="http://1.bp.blogspot.com/-S4x6MfkzSmA/TgSUP44ZhbI/AAAAAAAAAM8/sxC4DvAJ0RM/s400/vaadinTunes.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Vaadin Tunes&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;Because of Vaadin UI components are generated automatically from Java code, they may generally have some complex structure and a bit slow compared to a pure HTML page. For increasing the performance, some optimization rules are suggested: &lt;a href="http://vaadin.com/wiki/-/wiki/Main/Optimizing%20Sluggish%20UI"&gt;&lt;span style="color: black; text-decoration: none;"&gt;http://vaadin.com/wiki/-/wiki/Main/Optimizing%20Sluggish%20UI&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;But development time gain is very high and rich &amp;amp; interactive web components can be developed without any script language information. These parameters must be considered while choosing the technology.&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Vaadin is very well documented. You can take a look at “Book of Vaadin”:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://vaadin.com/book/-/page/preface.html"&gt;&lt;span style="color: black; text-decoration: none;"&gt;http://vaadin.com/book/-/page/preface.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span lang="EN-US" style="color: black; font-family: Arial, sans-serif; font-size: 8pt; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-6672892463391182620?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/6672892463391182620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/06/developing-rich-web-interfaces-using.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/6672892463391182620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/6672892463391182620'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/06/developing-rich-web-interfaces-using.html' title='Develop Rich Web Applications with Java by Vaadin Framework (Introduction)'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-osKKAspWSjk/TgSS0DAt21I/AAAAAAAAAM0/Gq_A4RCv0xM/s72-c/vaadinLogo.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-1768556017901303447</id><published>2011-06-06T00:29:00.000-07:00</published><updated>2011-06-06T11:05:05.289-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><title type='text'>A Brief Look at Apache Velocity</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/06/brief-look-at-apache-velocity.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Introduction&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Velocity is a template engine. Using Java classes, you can inject objects into template engine and use those injected objects in velocity template (.vm) files.&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Its benefits are:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="line-height: normal; margin-bottom: 4.5pt; mso-add-space: auto; mso-list: l0 level1 lfo1; mso-margin-top-alt: auto; text-align: justify; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;It can be used in desktop applications, web applications and other areas where a structured text or code is required.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It can be used as a powerful code generator. Dynamic codes are created by velocity injected objects.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It can access all public attribute and methods of given object.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;It has an easy and clear syntax.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;You can define user interfaces (HTML, JSP etc.) dynamically and developers and designers can work seperately. So, MVC pattern can be used too.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Examples&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; text-align: justify;"&gt;Here is an example velocity template file helloWorld.vm:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; text-align: justify;"&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"&gt;Hello $param&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; text-align: justify;"&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; line-height: normal; margin-bottom: 0.0001pt;"&gt;And below is an example Java file HelloWorld.java that uses the template:&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: x-small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;org.apache.velocity.app.VelocityEngine;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;org.apache.velocity.Template;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;org.apache.velocity.VelocityContext;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;import &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;java.io.StringWriter;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;class &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;HelloWorld&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;b&gt;public &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;static &lt;/b&gt;&lt;/span&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;main( String[] args ) &lt;/span&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;throws &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;Exception&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&amp;nbsp; first, get and initialize an engine&amp;nbsp; */&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VelocityEngine engine = &lt;/span&gt;&lt;span style="color: #0b5394; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;new &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;VelocityEngine();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; engine.init();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Template template = engine.getTemplate( "helloWorld.vm" );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VelocityContext context = new VelocityContext();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.put("param", "World");&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringWriter writer = new StringWriter();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; template.merge( context, writer );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println( writer.toString() );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black;"&gt;Console Result: Hello World&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; line-height: 15pt; margin-bottom: 0.0001pt; text-align: justify;"&gt;In the code Velocity engine is created, initialized, velocity tamplate file template is taken, required parameters are put into context, and at last the string is written to the screen.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; line-height: normal; margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;b&gt;Commands&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; line-height: normal; margin-bottom: 0.0001pt; text-align: justify;"&gt;Velocity also has a built-in VTL (Velocity Template Language) syntax that has following statements:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Trebuchet MS', sans-serif; line-height: normal; margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-kXNDAvG0IzQ/Te0WwjQ71qI/AAAAAAAAAMw/RTfEJEbNRpE/s1600/VTL+Tags.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-kXNDAvG0IzQ/Te0WwjQ71qI/AAAAAAAAAMw/RTfEJEbNRpE/s1600/VTL+Tags.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;VTL Tags&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 15pt; margin-bottom: 0.0001pt;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 15pt; margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Escape Tool&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 15pt; margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Because of the VTL is a template language, string operations are required widely. For that case, some escaping methods are supported for java, javascript, html, xml, sql and some character renderings exist:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 15pt; margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;(For more detail &lt;span lang="EN-US"&gt;&lt;a href="http://velocity.apache.org/tools/devel/generic/EscapeTool.html"&gt;http://velocity.apache.org/tools/devel/generic/EscapeTool.html&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: 'Courier New'; font-size: 10pt; line-height: 15pt; margin-bottom: 0.0001pt; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;For example,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;$val = “Stop!”&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;$esc.java($java) &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;produces \”Stop!\”&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;or&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;${esc.d} produces $ output.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;${esc.h} produces # output.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-1768556017901303447?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/1768556017901303447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/06/brief-look-at-apache-velocity.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/1768556017901303447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/1768556017901303447'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/06/brief-look-at-apache-velocity.html' title='A Brief Look at Apache Velocity'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-kXNDAvG0IzQ/Te0WwjQ71qI/AAAAAAAAAMw/RTfEJEbNRpE/s72-c/VTL+Tags.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-7047507798278176465</id><published>2011-02-26T14:56:00.000-08:00</published><updated>2011-06-03T05:41:15.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Standards'/><title type='text'>20 Software Development Best Practices</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/02/20-software-developing-best-practices.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Below are a compilation of 20 software development best practices:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Always use source control system even if the project has only one developer. By doing that, you don't lose some or whole code immediately, can share same source file by multiple person and can take the whole advantage of coding histories.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Follow coding standards and check that standard with automized tools.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Be consistent. If you do operations in a specific way, do that kind of operations in the same way (e.g. defining variable/method/class names, paranthesis usage etc.).&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;More code does not mean better code. Keep it simple and reduce complexity.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Don't use magic numbers and strings directly in the code. Use constants. This method provides more modularity and understandability.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Don't use comment lines to delete code, just delete. Version controling system will help you if deleted code is required.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Delete unused methods and classes.&amp;nbsp;Version controling system will help you if deleted code is required.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Catch specific exceptions instead of highest level class 'Exception'. This will provide understandability and more performance.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use understandable and long names for variables. Loop variable names can be i, j, k, index etc., local variable names must be longer than loop variables, parameter names must be longer than local variables and static variable names must be longer than parameters; &amp;nbsp;proportional with scope size.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Package related classes (that changed together and/or used together) together.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use understandable comments. Bad comment is worse than no comment.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use positive conditionals. Readability of positive conditionals are better than negative ones.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use dependency injection to manage too many singletons.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Use exceptions only for catching exceptions, not for control flow. Think as required and perform control flow with control statements/conditionals.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Don't use so many arguments with methods. Keep the number at most 8-10. If more is required, review your design.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Don't use method alternatives with boolean flag variables (public void someMethod(bool flag)). Write more than one method for each flag condition. &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Method names must include "what is done by this method" information.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Think twice before defining a method as static and be sure if you really need to. Static methods are harder to manage.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Avoid using methods with reference parameters. Use multi attributed object parameters instead.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Number of interface methods&amp;nbsp;must be minimized to decrease coupling/dependency.&lt;/span&gt;&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/6050067629911853658-7047507798278176465?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/7047507798278176465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/02/20-software-developing-best-practices.html#comment-form' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/7047507798278176465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/7047507798278176465'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/02/20-software-developing-best-practices.html' title='20 Software Development Best Practices'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-6398705091064983392</id><published>2011-02-26T13:39:00.000-08:00</published><updated>2011-02-26T23:14:20.505-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft .NET'/><title type='text'>A Brief Explanation of HttpModule and HttpHandler</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/02/brief-explanation-of-httpmodule-and.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;An HTTP request from client to server can be explained as a chain of IIS, AspNET_ISAPI, Asp.NET Work Processor, HttpModules and HttpHandlers. The last part of the chain which is HttpHandler, creates the HTML and sends the result to HttpModule. AspNet_IASPI.dll is used for Asp.NET pages. And chain completes in reverse order this time, as shown below:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-vkWr9SbN9Cw/TWlwBuPkL_I/AAAAAAAAALA/jcr8yH0qKCk/s1600/httphandlersandmodules.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="287" src="https://lh4.googleusercontent.com/-vkWr9SbN9Cw/TWlwBuPkL_I/AAAAAAAAALA/jcr8yH0qKCk/s400/httphandlersandmodules.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Http Request Lifecycle&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;HttpModules and Usage:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;We can use several predefined methods of the Global.asax file to perform actions on start/end of the application, on start/end of the request etc., and an HttpModule &amp;nbsp;do the same thing with more modularity. So, an HttpModule can be thought as a modular alternative of Global.asax file and its usage is recommended.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;For creating an HttpModule, you should implement IHttpModule interface, and then Init and Dispose methods. We can use HttpApplication object:&lt;/span&gt;&lt;/div&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;using &lt;/span&gt;&lt;/b&gt;System;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;using &lt;/span&gt;&lt;/b&gt;System.Web;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;namespace &lt;/span&gt;&lt;/b&gt;CodeBalance.Web&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;ExampleHttpModule : IHttpModule&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;public void &lt;/span&gt;&lt;/b&gt;Init(HttpApplication app)&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;app.BeginRequest += new EventHandler(newBeginRequest);&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;public void &lt;/span&gt;&lt;/b&gt;Dispose()&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// dispose operations, if necessary&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;void new&lt;/span&gt;&lt;/b&gt;BeginRequest(&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;object &lt;/span&gt;&lt;/b&gt;sender, EventArgs e)&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HttpApplication context = (HttpApplication)sender;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string Url = context.Context.Request.RawUrl;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;if &lt;/span&gt;&lt;/b&gt;(!Url.Contains("SystemMonitoring.aspx"))&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// show error page&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;You can easily add/remove HttpModule via web.config file:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-G6JKygUyeOI/TWlzIyuLWtI/AAAAAAAAALM/3tAM2QEXNA4/s1600/httpModuleConfig.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-G6JKygUyeOI/TWlzIyuLWtI/AAAAAAAAALM/3tAM2QEXNA4/s1600/httpModuleConfig.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;HttpHandlers and Usage:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;HttpHandlers define actions for different type of requested files. They also can perform actions even if that file does not exist. An HTML page can perform all of the operations of an HttpHandler. But an HttpHandler has better performance and has more modularity than pages.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;For creating an HttpHandler, you should implement IHttpHandler interface and then IsReusable and ProcessRequest methods. We can use HttpContext's Request and Response objects&lt;/span&gt;:&lt;/div&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;using &lt;/span&gt;&lt;/b&gt;System;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;using &lt;/span&gt;&lt;/b&gt;System.Web;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;namespace &lt;/span&gt;&lt;/b&gt;CodeBalance.Web&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;ExampleHttpHandler : IHttpHandler&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;public void &lt;/span&gt;&lt;/b&gt;IsReusable(HttpApplication app)&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// readonly.determines if this handler can be used in another requests&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;public void &lt;/span&gt;&lt;/b&gt;ProcessRequest(HttpContext context)&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.Response.Write("Hello World!");&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;You can easily add/remove HttpHandler via web.config file:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-uAdKizaVrVo/TWlwxeGqQ1I/AAAAAAAAALI/5Be8j5IaixA/s1600/httHandlerConfig.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-uAdKizaVrVo/TWlwxeGqQ1I/AAAAAAAAALI/5Be8j5IaixA/s1600/httHandlerConfig.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-6398705091064983392?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/6398705091064983392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/02/brief-explanation-of-httpmodule-and.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/6398705091064983392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/6398705091064983392'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/02/brief-explanation-of-httpmodule-and.html' title='A Brief Explanation of HttpModule and HttpHandler'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-vkWr9SbN9Cw/TWlwBuPkL_I/AAAAAAAAALA/jcr8yH0qKCk/s72-c/httphandlersandmodules.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-8715609040894217149</id><published>2011-01-18T13:43:00.000-08:00</published><updated>2011-01-18T13:52:55.601-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><title type='text'>A Selection of Successful Software Engineering Posts - Part 1</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/01/selection-of-successful-software.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This &lt;/span&gt;&lt;span style="font-size: small;"&gt;selection (Part 1) contains 25 blog posts selected by &lt;/span&gt;&lt;span style="font-size: small;"&gt;C&lt;/span&gt;&lt;span style="font-size: small;"&gt;odeBalance which were placed on DZone in 2010.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Project Management &amp;amp; IT Business&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.dzone.com/links/r/youre_a_bad_manager_embrace_it.html"&gt;You're a Bad Manager. Embrace It.&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;span id="goog_1315874361"&gt;&lt;/span&gt;&lt;span id="goog_1315874362"&gt;&lt;/span&gt;&lt;a href="http://www.dzone.com/links/r/starting_your_own_software_company_think_twice.html"&gt;Starting your own Software Company? Think twice.&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/comparing_open_source_agile_project_management_to.html"&gt;Comparing Open Source Agile Project Management Tools&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Software Architecture&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/infoq_10_suggestions_for_the_architect_of_an_agil.html"&gt;10 Suggestions for the Architect of an Agile Team&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/sessions_sessions_everywhere.html"&gt;Sessions, Sessions Everywhere&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Modelling/Analysing&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/understanding_code_visually_three_ways_that_work.html"&gt;Understanding Code Visually: Three Ways that Work&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/role_of_uml_in_agile_evolutionary_architecture.html"&gt;Role of UML in Agile &amp;amp; Evolutionary Architecture &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;About Programmers/Software Engineers:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/the_psychology_of_programmers_2.html"&gt;The Psychology of Programmers&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/can_you_be_too_old_for_software_development.html"&gt;Can You Be Too Old For Software Development?&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/developers_still_the_most_indemand_it_workers.html"&gt;Developers Still the Most In-Demand IT Workers&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Programming/Software Engineering Practices&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/always_code_as_if_.html"&gt;Always code as...&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/things_to_do_to_improve_code_quality.html"&gt;Things to do to improve code quality&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/pair_programming_issues.html"&gt;Pair programming Issues&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Java&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/how_to_write_secure_java_code.html"&gt;How to write Secure Java Code&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/the_unbearable_lightness_of_java_jodd.html"&gt;The Unbearable Lightness of Java – jodd&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;.NET&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/net_application_performance.html"&gt;Code Review: .NET Application Performance&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/parallelizing_windows_applications_using_net_40.html"&gt;Parallelizing Windows Applications in .NET 4.0&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/aspnet_developer_guidance_map.html"&gt;ASP.NET Developer Guidance Map&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Mobile Programming&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/beginning_android_game_programming.html"&gt;Beginning Android Game Programming&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/android_ui_development_tools.html"&gt;Android UI development tools &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Development Tools &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/top_10_most_popular_eclipse_plugins.html"&gt;Top 10 Most Popular Eclipse Plugins&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/net_developer_tools_what_you_should_could_have_in.html"&gt;.NET Developer Tools - What you should (could) have in your toolbox&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/5_maven_tips.html"&gt;5 Maven Tips&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;and Some Fun... &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/if_you_do_this_in_an_email_i_hate_you.html"&gt;If you do this in an email, I hate you.&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.dzone.com/links/r/for_whom_do_we_develop_software.html"&gt;For whom do we develop software!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-8715609040894217149?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/8715609040894217149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/01/selection-of-successful-software.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/8715609040894217149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/8715609040894217149'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/01/selection-of-successful-software.html' title='A Selection of Successful Software Engineering Posts - Part 1'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-2143745438165823248</id><published>2011-01-16T10:34:00.000-08:00</published><updated>2011-01-16T12:05:26.073-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft .NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><title type='text'>10 Differences Between WCF and ASP.NET Web Services</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2011/01/10-differences-between-wcf-services-and.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;span style="font-size: small;"&gt;Here are the 10 important differences between WCF Services and ASP.NET Web Services:&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_hGraFK2-w-4/TTNPXRFz7VI/AAAAAAAAAKE/hY9jffzAVxg/s1600/WCFandWebServicesDiff.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_hGraFK2-w-4/TTNPXRFz7VI/AAAAAAAAAKE/hY9jffzAVxg/s1600/WCFandWebServicesDiff.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;10 Differences Between WCF and ASP.NET Web Services&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span id="goog_147753237"&gt;&lt;/span&gt;&lt;span id="goog_147753238"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;For details: &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa738737.aspx" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;http://msdn.microsoft.com/en-us/library/aa738737.aspx&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="goog_1501083725"&gt;&lt;/span&gt;&lt;span id="goog_1501083726"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-2143745438165823248?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/2143745438165823248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2011/01/10-differences-between-wcf-services-and.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/2143745438165823248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/2143745438165823248'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2011/01/10-differences-between-wcf-services-and.html' title='10 Differences Between WCF and ASP.NET Web Services'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hGraFK2-w-4/TTNPXRFz7VI/AAAAAAAAAKE/hY9jffzAVxg/s72-c/WCFandWebServicesDiff.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-5743782337405688046</id><published>2010-12-14T13:00:00.000-08:00</published><updated>2010-12-14T13:38:19.323-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Databases and Data Mining'/><title type='text'>A Theorical Introduction to Data Mining</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2010/12/theorical-introduction-to-data-mining.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;This article introduces the aim of data mining and explains basic concepts and terms.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;u&gt;Data Mining&lt;/u&gt;&lt;/b&gt; (i. e. Knowledge discovery from data): Extraction of interesting (non-trivial, implicit, previously unknown and potentially useful) patterns or knowledge from huge amount of data.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;u&gt;&lt;b&gt;Data Warehouse&lt;/b&gt;&lt;/u&gt; : A single, complete and consistent store of data obtained from a variety of different sources made available to end users in a what they can understand and use in a business context. &lt;/span&gt;&lt;span style="font-size: small;"&gt; [Barry Devlin] &lt;/span&gt;&lt;span style="font-size: small;"&gt;Data warehouses are used for data mining.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;u&gt;&lt;b&gt;Potential Usages&lt;/b&gt;&lt;/u&gt; : Web information mining,&amp;nbsp; spam filtering, medical data mining, weather data mining, market sale strategies etc. &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_hGraFK2-w-4/TQfgibEUCqI/AAAAAAAAAJo/hFQa3EIDx4c/s1600/Data+Mining.PNG" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="182" src="http://4.bp.blogspot.com/_hGraFK2-w-4/TQfgibEUCqI/AAAAAAAAAJo/hFQa3EIDx4c/s640/Data+Mining.PNG" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Data Mining Related Operations&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;u&gt;&lt;b&gt;Preprocessing&lt;/b&gt;:&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Handling Noisy Data &lt;/b&gt;: Handling missing, duplicate or errorneous data before data mining. Noisy data can be removed, or corrected by a specific approach (i.e. correlation analysis).&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Integration&amp;nbsp; &lt;/b&gt;: Combining data from multiple sources.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Normalization :&lt;/b&gt; Scaling data to specified range. For example, scaling 750 in [500, 1000] to range [0,1] (the result is 0.5)&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Feature Selection&lt;/b&gt; : Selecting only useful features (i.e. attributes for record data) of data. &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;u&gt;Data Mining:&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Classification: &lt;/b&gt;Finding a model for a class attribute of data to predict the values of other attributes. (An example class attribute: CustomerBuysProduct (bool))&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Different methods can be used for classification:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Decision Trees: Uses decision trees to make model and evaluates new data on the tree.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Rule-Based Classifying: Deduces rules on the data (if X = Y and if Z z T result is W etc.).&lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Bayes Classifying: Uses previous probabilities to classify.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;K-Nearest Neighbor Classifying: Uses distances between previous data to new data, to classify.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Clustering: &lt;/b&gt;Finding groups of objects such that the objects in a group will be similar (or related) to one another and different from (or unrelated to) the objects in other groups.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;Different methods can be used for clustering:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;K-means Clustering: Splits data according to a previously known number of clusters.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Hierarchical Clustering: Produces a set of nested clusters organized as a hierarchical tree.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Association (Rule) Discovery:&lt;/b&gt; Producing dependency rules which will predict occurrence of a feature (i.e. attribute) of data based on occurrences of other features.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Pattern Discovery&lt;/b&gt;: Deducing patterns as a result of classification, clustering, Pattern discovery etc.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;u&gt;Postprocessing:&lt;/u&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt; Evaluating and selecting interesting patterns, interpreting and visualizing them as an information report.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-5743782337405688046?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/5743782337405688046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2010/12/theorical-introduction-to-data-mining.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/5743782337405688046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/5743782337405688046'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2010/12/theorical-introduction-to-data-mining.html' title='A Theorical Introduction to Data Mining'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hGraFK2-w-4/TQfgibEUCqI/AAAAAAAAAJo/hFQa3EIDx4c/s72-c/Data+Mining.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-2166078383622892424</id><published>2010-10-29T10:46:00.000-07:00</published><updated>2010-10-29T11:02:17.135-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Antipatterns'/><title type='text'>Software Antipatterns : The Golden Hammer</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2010/10/software-antipatterns-golden-hammer.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Preface&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;A "software pattern" is a predefined and accepted solution for a specific software problem. Similarly, a "software antipattern" is a predefined and accepted &lt;u&gt;unsuccesful&lt;/u&gt; solution. It's known as a bad solution, and should not be used.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;The Golden Hammer Antipattern&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;The Golden Hammer can be defined as an architecture, a solution or a software tool that is believed to be the best solution for every software problem/project.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_hGraFK2-w-4/TMsCY_ZEwrI/AAAAAAAAAJM/pP6ep8pT0gc/s1600/goldenHammer.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_hGraFK2-w-4/TMsCY_ZEwrI/AAAAAAAAAJM/pP6ep8pT0gc/s1600/goldenHammer.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;f a software team had successful experiences with a software architecture, tool or solution they may want to use that in every other problem/project. Especially if that experience had a success in the past, this probability will be higher. Or if that experience had been costly for the company and new experiences will be more costly, managers may not give resource for new techniques.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;There can be other causes: The software team either don't want to learn new technologies and techniques, so they want to use their "known" technology/technique in every problem or they are not aware of the growing world of technology and new solutions.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;For example, "using well known software patterns in every software project" is a golden hammer antipattern. Because of one or more causes told before, this approach can be used and probably will be harmful for the software. And maybe it will not be corrected in the future because of project calendar.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;Eventually, each software problem/project is different is its own context. And must be evaluated in its own cases. Using same approaches for every problem is dangerous.&lt;/span&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-2166078383622892424?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/2166078383622892424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2010/10/software-antipatterns-golden-hammer.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/2166078383622892424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/2166078383622892424'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2010/10/software-antipatterns-golden-hammer.html' title='Software Antipatterns : The Golden Hammer'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hGraFK2-w-4/TMsCY_ZEwrI/AAAAAAAAAJM/pP6ep8pT0gc/s72-c/goldenHammer.jpeg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-324618648982737036</id><published>2010-10-14T12:24:00.000-07:00</published><updated>2010-10-14T12:32:06.749-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><title type='text'>10 Free, Standalone and Easy to Use UML Editors</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2010/10/10-free-standalone-and-easy-to-use-uml.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Below is a compilation of UML drawing &amp;amp; editing tools which are:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Free (and most of them are open source),&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Standalone (not installed as plug-in or add-in),&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Easy to download and install, &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;No-need to registration and activation keys,&lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Fast to start and use.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;Note: Last 2 editors are text based web uml tools.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_hGraFK2-w-4/TLdRcGk56_I/AAAAAAAAAHU/gW70aKZFlsA/s1600/violet.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://sourceforge.net/projects/violet/"&gt;1. Violet&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://sourceforge.net/projects/violet/"&gt;&lt;img border="0" height="245" src="http://1.bp.blogspot.com/_hGraFK2-w-4/TLdRcGk56_I/AAAAAAAAAHU/gW70aKZFlsA/s320/violet.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&amp;nbsp;&lt;span style="font-size: small;"&gt;&lt;a href="http://argouml.tigris.org/"&gt;2. Argo UML&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://argouml.tigris.org/"&gt;&lt;img border="0" height="289" src="http://4.bp.blogspot.com/_hGraFK2-w-4/TLdVWoUIUDI/AAAAAAAAAHc/SSkryeRLDR8/s320/argoUML.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://dia-installer.de/"&gt;3. DIA&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://dia-installer.de/"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_hGraFK2-w-4/TLdVfwKiwvI/AAAAAAAAAHg/_9WKwtMEZAI/s1600/dia.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.openameos.org/download"&gt;4. Open Ameos&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.openameos.org/download"&gt;&lt;img border="0" height="256" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TLdVoKXm3OI/AAAAAAAAAHk/FM2dW5M1K28/s320/openAmeos.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.papyrusuml.org/scripts/home/publigen/content/templates/show.asp?P=114&amp;amp;L=EN&amp;amp;ITEMID=16"&gt;5. Papyrus&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.papyrusuml.org/scripts/home/publigen/content/templates/show.asp?P=114&amp;amp;L=EN&amp;amp;ITEMID=16"&gt;&lt;img border="0" height="216" src="http://2.bp.blogspot.com/_hGraFK2-w-4/TLdVuieQuZI/AAAAAAAAAHo/JaK2SJv7vz0/s320/papyrus.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://bouml.free.fr/download.html"&gt;6. BOUML&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://bouml.free.fr/download.html"&gt;&lt;img border="0" height="246" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TLdV-Oe3sVI/AAAAAAAAAHs/m1VIYEzmLTw/s320/boUML.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.umlet.com/changes.htm"&gt;7. UMLet&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.umlet.com/changes.htm"&gt;&lt;img border="0" height="254" src="http://4.bp.blogspot.com/_hGraFK2-w-4/TLdWIJ7clAI/AAAAAAAAAH0/HGi6gJcuyOA/s320/UMLetp.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&lt;a href="http://sourceforge.net/projects/tinyuml/"&gt;8.Tiny UML&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://sourceforge.net/projects/tinyuml/"&gt;&lt;img border="0" height="242" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TLdWPiN5EXI/AAAAAAAAAH4/S2ZT-VBnUlE/s320/tinyUML.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://yuml.me/diagram/scruffy/usecase/draw"&gt;9. yUML (text based online tool)&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://yuml.me/diagram/scruffy/usecase/draw"&gt;&lt;img border="0" height="143" src="http://2.bp.blogspot.com/_hGraFK2-w-4/TLdVMQd678I/AAAAAAAAAHY/3ZLOJzHiTnE/s320/yuml.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.websequencediagrams.com/"&gt;10. Web Sequence Diagrams (text based online tool)&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.websequencediagrams.com/"&gt;&lt;img border="0" height="183" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TLdWD_I6HKI/AAAAAAAAAHw/rhaloAUwsIY/s320/webseqdia.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_hGraFK2-w-4/TLdWD_I6HKI/AAAAAAAAAHw/rhaloAUwsIY/s1600/webseqdia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.umlet.com/changes.htm"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-324618648982737036?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/324618648982737036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2010/10/10-free-standalone-and-easy-to-use-uml.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/324618648982737036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/324618648982737036'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2010/10/10-free-standalone-and-easy-to-use-uml.html' title='10 Free, Standalone and Easy to Use UML Editors'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hGraFK2-w-4/TLdRcGk56_I/AAAAAAAAAHU/gW70aKZFlsA/s72-c/violet.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-1919729275050291427</id><published>2010-10-06T12:51:00.000-07:00</published><updated>2010-10-07T00:03:05.793-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><title type='text'>Most Useful Shortcuts for Visual Studio 2010 &amp; Eclipse 3.6</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2010/10/most-useful-shortcuts-for-visual-studio.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;Below is the most useful shortcuts for Visual Studio 2010 and Eclipse 3.6 Helios. Many of them are also available for every version of these editors:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_hGraFK2-w-4/TKzTnYoZCjI/AAAAAAAAAHE/Jyct0VabYVg/s1600/Shortcuts.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_hGraFK2-w-4/TK1wi9gptpI/AAAAAAAAAHQ/2LU8JLPX_YE/s1600/Shortcuts.PNG" style="margin-left: auto; margin-right: auto;" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-size: small;"&gt;Shortcuts for Visual Studio 2010 and Eclipse 3.6 Helios&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_hGraFK2-w-4/TK1wi9gptpI/AAAAAAAAAHQ/2LU8JLPX_YE/s1600/Shortcuts.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_hGraFK2-w-4/TKzXdf1GbGI/AAAAAAAAAHM/2pLnUM18IBk/s1600/Shortcuts.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_hGraFK2-w-4/TKzWwVprd0I/AAAAAAAAAHI/ymIED3mO9SE/s1600/Shortcuts.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-1919729275050291427?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/1919729275050291427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2010/10/most-useful-shortcuts-for-visual-studio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/1919729275050291427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/1919729275050291427'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2010/10/most-useful-shortcuts-for-visual-studio.html' title='Most Useful Shortcuts for Visual Studio 2010 &amp; Eclipse 3.6'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hGraFK2-w-4/TK1wi9gptpI/AAAAAAAAAHQ/2LU8JLPX_YE/s72-c/Shortcuts.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-3391803060335118756</id><published>2010-09-26T13:54:00.000-07:00</published><updated>2010-10-14T13:04:12.606-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Sites and Products'/><title type='text'>10 Successful e-Book Search Engines</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2010/09/10-successful-e-book-search-engines.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Below are 10 successful (with large e-book databases, easy to use and minimal design) e-book search engines:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;1. &lt;a href="http://mega-pdf.com/"&gt;Mega PDF&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://mega-pdf.com/"&gt;&lt;img border="0" height="84" src="http://4.bp.blogspot.com/_hGraFK2-w-4/TJ-wiP9JkYI/AAAAAAAAAFY/qLXmBYPa4s8/s320/7.PNG" width="320" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;2. &lt;a href="http://www.docjax.com/"&gt;Doc Jax&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.docjax.com/"&gt;&lt;img border="0" height="134" src="http://1.bp.blogspot.com/_hGraFK2-w-4/TJ-xZ3kC2_I/AAAAAAAAAFo/_7MR2NCLq7k/s320/9.PNG" width="320" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;3. &lt;a href="http://pdfdatabase.com/"&gt;PDF Database&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://pdfdatabase.com/"&gt;&lt;img border="0" height="140" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TJ-wfIxOtqI/AAAAAAAAAFE/F-3veGbvv34/s320/2.PNG" width="320" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;4. &lt;a href="http://pdfind.com/"&gt;PDFind&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://pdfind.com/"&gt;&lt;img border="0" height="106" src="http://1.bp.blogspot.com/_hGraFK2-w-4/TJ-wf0j93-I/AAAAAAAAAFM/rtymlfkjB3Y/s200/4.PNG" width="200" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/_hGraFK2-w-4/TJ-whIxQ4sI/AAAAAAAAAFU/p7q0LDu30VM/s1600/6.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;5.&amp;nbsp;&lt;a href="http://www.pdfgeni.com/"&gt;PDF Geni&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.pdfgeni.com/"&gt;&lt;img border="0" height="91" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TJ-whIxQ4sI/AAAAAAAAAFU/p7q0LDu30VM/s320/6.PNG" width="320" /&gt;&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;6. &lt;a href="http://www.typepdf.com/"&gt;Type PDF&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.typepdf.com/"&gt;&lt;img border="0" height="50" src="http://2.bp.blogspot.com/_hGraFK2-w-4/TJ-wiraoY9I/AAAAAAAAAFc/qeYlTNr9X5k/s400/8.PNG" width="400" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;7.&amp;nbsp;&lt;a href="http://pdfse.com/"&gt;PDF SE&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://pdfse.com/"&gt;&lt;img border="0" height="80" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TJ-wfSnerWI/AAAAAAAAAFI/QpU3pPEyNX4/s400/3.PNG" width="400" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;8. &lt;a href="http://www.ebook-search-engine.com/"&gt;E-Book Search Engine&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.ebook-search-engine.com/"&gt;&lt;img border="0" height="112" src="http://4.bp.blogspot.com/_hGraFK2-w-4/TJ-wevWI-2I/AAAAAAAAAFA/M4x9WxvS6Ag/s400/1.PNG" width="400" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;9. &lt;a href="http://www.ebookee.com/"&gt;E-Book EE&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.ebookee.com/"&gt;&lt;img border="0" height="60" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TJ-wgCHO38I/AAAAAAAAAFQ/ZnvGZ_9NZoU/s400/5.PNG" width="400" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;10. &lt;a href="http://flazx.com/"&gt;Flazx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://flazx.com/"&gt;&lt;img border="0" height="88" src="http://2.bp.blogspot.com/_hGraFK2-w-4/TJ-yxV1YaVI/AAAAAAAAAFs/4YaH_M9bSEs/s400/10.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-3391803060335118756?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/3391803060335118756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2010/09/10-successful-e-book-search-engines.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/3391803060335118756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/3391803060335118756'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2010/09/10-successful-e-book-search-engines.html' title='10 Successful e-Book Search Engines'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hGraFK2-w-4/TJ-wiP9JkYI/AAAAAAAAAFY/qLXmBYPa4s8/s72-c/7.PNG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-7847102002308433584</id><published>2010-09-22T11:30:00.000-07:00</published><updated>2010-09-22T21:56:04.310-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Object Oriented Design'/><title type='text'>OOP SOLID Rules : Interface Segregation Principle (ISP)</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2010/09/oop-solid-rules-interface-segregation.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Introduction:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Object Oriented Programming (OOP) has 5 basic rules which shortly named as SOLID:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;S : &lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Single Responsibility Principle&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;O : &lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Open Closed Principle&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;L : &lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Liskov Substitution Principle&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;I : &lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Interface Segregation Principle&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;D : &lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Dependency Inversion  Principle&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Interface Segregation Principle is explained with examples (in Java language) in this article.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Explanation:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Some interfaces are created with huge amount of functionalities. But when those interfaces are implemented by client implementor classes, not required functionalities are forced to be implemented, and so the code will have many dummy or empty implementations.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This situation can be prevented by segregating (i.e seperating) big interfaces into smaller ones. Only strictly related method definitions must be in the same interface. Different types of functionalities must be placed in different interfaces.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Examples&lt;/b&gt;:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Below is a wrong design that's not using Interface Segregation Principle. Implementor classes have to implement unnecessary methods.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public interface &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;Animal &lt;/span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;void &lt;/span&gt;&lt;/b&gt;&lt;span style="color: #0b5394;"&gt;&lt;span style="color: black;"&gt;fly&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0b5394;"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;run();&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;void &lt;/b&gt;&lt;span style="color: black;"&gt;bark&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;Bird&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;implements &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;Animal &lt;/span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0b5394;"&gt;&lt;b&gt;public &lt;/b&gt;&lt;b&gt;void &lt;/b&gt;&lt;span style="color: black;"&gt;bark&lt;/span&gt;&lt;/span&gt;() &lt;/span&gt;&lt;span style="font-size: small;"&gt;{ /* do nothing */ }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;run()&lt;/span&gt;&lt;span style="font-size: small;"&gt; {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write code about running of the bird&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;&lt;span style="color: #0b5394;"&gt;public &lt;/span&gt;void &lt;/b&gt;&lt;span style="color: black;"&gt;fly&lt;/span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write code about flying of the bird&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;Cat &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;implements &lt;/span&gt;&lt;/b&gt;&lt;span style="color: #0b5394;"&gt;&lt;span style="color: black;"&gt;Animal&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;{ &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;public void &lt;/span&gt;&lt;/b&gt;&lt;span style="color: #0b5394;"&gt;&lt;span style="color: black;"&gt;fly&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; { &lt;b&gt;&lt;span style="color: #0b5394;"&gt;throw new &lt;/span&gt;&lt;/b&gt;Exception("Undefined cat property"); }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #0b5394;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;/b&gt;&lt;b&gt;void &lt;/b&gt;&lt;span style="color: black;"&gt;bark&lt;/span&gt;&lt;/span&gt;() &lt;/span&gt;&lt;span style="font-size: small;"&gt;{ &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;throw new &lt;/span&gt;&lt;/b&gt;Exception("Undefined cat property");&lt;/span&gt;&lt;span style="font-size: small;"&gt; }&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0b5394;"&gt;&lt;b&gt;public &lt;/b&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;run() {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;// write code about running of the cat&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;Dog &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;implements &lt;/span&gt;&lt;/b&gt;&lt;span style="color: #0b5394;"&gt;&lt;span style="color: black;"&gt;Animal&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;{ &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;public void &lt;/span&gt;&lt;/b&gt;&lt;span style="color: #0b5394;"&gt;&lt;span style="color: black;"&gt;fly&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; { }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #0b5394;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;/b&gt;&lt;b&gt;void &lt;/b&gt;&lt;span style="color: black;"&gt;bark&lt;/span&gt;&lt;/span&gt;() &lt;/span&gt;&lt;span style="font-size: small;"&gt;{ &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write code about barking of the dog&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0b5394;"&gt;&lt;b&gt;public &lt;/b&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;run() {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;// write code about running of the dog&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;And below is the implementation which uses ISP:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public interface &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;Flyable &lt;/span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;void &lt;/span&gt;&lt;/b&gt;&lt;span style="color: #0b5394;"&gt;&lt;span style="color: black;"&gt;fly&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;interface &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black;"&gt;Runnable &lt;/span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0b5394;"&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;run();&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;interface &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;Barkable &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;void &lt;/b&gt;&lt;span style="color: black;"&gt;bark&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;Bird &lt;b style="color: #0b5394;"&gt;implements &lt;/b&gt;&lt;span style="color: black;"&gt;Flyable&lt;/span&gt;, Runnable&lt;/span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;run()&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #0b5394;"&gt;&lt;/span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write code about running of the bird&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="background-color: #eeeeee; color: #0b5394;"&gt;&lt;span style="color: #0b5394;"&gt;public &lt;/span&gt;void &lt;/b&gt;&lt;span style="background-color: #eeeeee; color: black;"&gt;fly&lt;/span&gt;&lt;span style="background-color: #eeeeee;"&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write code about flying of the bird&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black;"&gt;Cat &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;implements &lt;/span&gt;&lt;/b&gt;Runnable&lt;/span&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0b5394;"&gt;&lt;b&gt;public &lt;/b&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;run() {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;// write code about running of the cat&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;Dog &lt;b&gt;&lt;span style="color: #0b5394;"&gt;implements &lt;/span&gt;&lt;/b&gt;Runnable&lt;b&gt;, &lt;/b&gt;Barkable &lt;/span&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #0b5394;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;/b&gt;&lt;b&gt;void &lt;/b&gt;&lt;span style="color: black;"&gt;bark&lt;/span&gt;&lt;/span&gt;() &lt;/span&gt;&lt;span style="font-size: small;"&gt;{ &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write code about barking of the dog&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0b5394;"&gt;&lt;b&gt;public &lt;/b&gt;&lt;b&gt;void &lt;/b&gt;&lt;/span&gt;run() {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;// write code about running of the dog&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Interface Segregation Principle is one of the key points in OOP. By following this principle, growing interfaces will no longer be a problem.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-7847102002308433584?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/7847102002308433584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2010/09/oop-solid-rules-interface-segregation.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/7847102002308433584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/7847102002308433584'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2010/09/oop-solid-rules-interface-segregation.html' title='OOP SOLID Rules : Interface Segregation Principle (ISP)'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-242674229213739229</id><published>2010-09-16T12:44:00.001-07:00</published><updated>2010-09-16T13:43:47.672-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft .NET'/><title type='text'>Creating a Visual Studio Add-In in 1 Minute</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2010/09/creating-visual-studio-add-in-in-1.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This article introduces the basics of Visual Studio Add-In (aka "Plug-In" in Java terminology) creation. &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Note:  This information is valid for every version of Microsoft Visual Studio.  Examples will be given over Visual Studio 2008 and .NET version 3.5.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;First, &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;choose File --&amp;gt; Create --&amp;gt; Project. After that choose "Extensibility Project" type and "Visual Studio Add-In".&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_hGraFK2-w-4/TJJbmGzhX_I/AAAAAAAAADw/TETuZiZosmU/s1600/addin1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_hGraFK2-w-4/TJJegZt1qAI/AAAAAAAAAD4/VX7c_eV1RCc/s1600/addin1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="260" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TJJegZt1qAI/AAAAAAAAAD4/VX7c_eV1RCc/s400/addin1.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Then, you can choose "Next" for every step of the Add-in wizard. And finally press "Finish" for the last step:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_hGraFK2-w-4/TJJgWdDeRGI/AAAAAAAAAEA/sIptlGXUuYQ/s1600/addin2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_hGraFK2-w-4/TJJvMz4bhQI/AAAAAAAAAEo/1oTiieW4rwE/s1600/addin7.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/_hGraFK2-w-4/TJJvMz4bhQI/AAAAAAAAAEo/1oTiieW4rwE/s400/addin7.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;After  that, the add-in project is created. Required DLLs and directory  structures are ready. "Connect.cs" class is the most important part and  starting point of the add-in. And ExampleAddIn.AddIn file is the add-in  descriptor file, which has the basic information (eg. add-in DLL file  location, about info...) of add-in.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_hGraFK2-w-4/TJJhAR4g8gI/AAAAAAAAAEI/mWS0T6Is4ig/s1600/addin3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_hGraFK2-w-4/TJJhAR4g8gI/AAAAAAAAAEI/mWS0T6Is4ig/s200/addin3.PNG" width="193" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;"OnConnection"  method is the starting point of add-in execution. _applicationObject  and _addInInstance objects are taken at the start as default. These  objects are used to have control over Visual Studio application actions.  As an example, let's put an "hello world" dialog at the startup of  add-in:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_hGraFK2-w-4/TJJwdcQjyLI/AAAAAAAAAE4/HUEu6j-BHfg/s1600/addin4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="88" src="http://1.bp.blogspot.com/_hGraFK2-w-4/TJJwdcQjyLI/AAAAAAAAAE4/HUEu6j-BHfg/s640/addin4.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;You  can enable add-in (and also set the add-in to run on the startup and/or  command line) using Tools --&amp;gt; Add-in Manager... menu and the  following screen:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_hGraFK2-w-4/TJJtDJRjrSI/AAAAAAAAAEg/0qHuwENCDQo/s1600/addin6.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="258" src="http://4.bp.blogspot.com/_hGraFK2-w-4/TJJtDJRjrSI/AAAAAAAAAEg/0qHuwENCDQo/s400/addin6.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Once you press F5, you will see Visual Studio re-starting and the "hello world" dialog:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_hGraFK2-w-4/TJJwP_RhgsI/AAAAAAAAAEw/AszlIWgCNO0/s1600/addin5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_hGraFK2-w-4/TJJwP_RhgsI/AAAAAAAAAEw/AszlIWgCNO0/s320/addin5.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Specific add-in examples, details and configurations will be explained in future posts.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-242674229213739229?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/242674229213739229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2010/09/creating-visual-studio-add-in-in-1.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/242674229213739229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/242674229213739229'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2010/09/creating-visual-studio-add-in-in-1.html' title='Creating a Visual Studio Add-In in 1 Minute'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hGraFK2-w-4/TJJegZt1qAI/AAAAAAAAAD4/VX7c_eV1RCc/s72-c/addin1.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-6329396944567768689</id><published>2010-09-06T07:38:00.000-07:00</published><updated>2011-01-18T14:36:46.177-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='User Interface Design'/><title type='text'>4 Rules of User Interface Design</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;1. Consistency&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;First of all, user interface design must be consistent. For example, all text alignment of labels must be the same for the whole application. If capital letters are used, all labels must be capitalised. Also, predefined company based user interface components (e.g. text fields with type conversion, table with add/remove buttons etc.) can be used for design consistency and functional equality.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;The best way to provide consistency is using templates. If there are rules, whole software team will obey them. And those rules are preferred to be formed and used on the way, because if all user interfaces are completed there may not be enough time to change all screens.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_hGraFK2-w-4/TTYVmB1Aq8I/AAAAAAAAAKI/kvAnXZvCrm0/s1600/1.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="130" src="http://1.bp.blogspot.com/_hGraFK2-w-4/TTYVmB1Aq8I/AAAAAAAAAKI/kvAnXZvCrm0/s400/1.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; Inconsistent and Consistent Labels of a Screen&lt;/span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;2. Usability&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;User interfaces are preferred to be used by a person who hasn't got any information about that screens. For achieving this, screen components must be placed correctly and information on the screens must be enough. Component sizes, selection types, obligations and placing priorities must serve the purpose.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;3. Simplicity&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Simple is always the best. Complex screens also violates the "usability" rule. User interfaces must contain as least element as they can. Unnecessary elements causes complexity. In addition&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;, a function of user interface may be reached by only one way (menu item, button or keyboard shortcut) for decreasing complexity. But if the structure of&amp;nbsp; a complex application requires a function to be run by more than one ways (by menu item &amp;amp; shortcut keys &amp;amp; quick launch button on the screen) to guide user, this approach can be discarded. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;4. Elegance &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;For the most end-users, managers and for customers, user interface equals the whole software. Those people are not related with sublevel implementation design&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;, they only see the screens. So, elegant design is very important.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This requires employers which have the viewpoint of art. Only by improving the screen designs, a software can seem to be renewed and upgraded.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_hGraFK2-w-4/TIT8ockQnPI/AAAAAAAAADg/gy5y3r_PDJg/s1600/3.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="121" src="http://4.bp.blogspot.com/_hGraFK2-w-4/TIT8ockQnPI/AAAAAAAAADg/gy5y3r_PDJg/s400/3.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;A Windows 95 and Windows 7 File Dialog&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-6329396944567768689?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/6329396944567768689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2010/09/4-rules-of-user-interface-design.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/6329396944567768689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/6329396944567768689'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2010/09/4-rules-of-user-interface-design.html' title='4 Rules of User Interface Design'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hGraFK2-w-4/TTYVmB1Aq8I/AAAAAAAAAKI/kvAnXZvCrm0/s72-c/1.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6050067629911853658.post-951894068269301293</id><published>2010-08-25T11:21:00.000-07:00</published><updated>2010-09-23T04:19:18.536-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Oriented Design'/><title type='text'>5 Implementations of Singleton Pattern</title><content type='html'>&lt;script type="text/javascript"&gt;var dzone_url = 'http://codebalance.blogspot.com/2010/08/singleton-pattern-and-beyond.html';&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var dzone_style = '2';&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt; &lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This article introduces singleton design pattern and its 5 implementation variations (with C#).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Problem&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;At most &lt;u&gt;one&lt;/u&gt; instance of a class must be created in an application.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;That class (singleton) is defined including its own instance, and the constructor must be private.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://1.bp.blogspot.com/_hGraFK2-w-4/THVWisVHltI/AAAAAAAAACw/d4Gi06HI7i8/s1600/singleton.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_hGraFK2-w-4/THVWisVHltI/AAAAAAAAACw/d4Gi06HI7i8/s320/singleton.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Implementations&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;1. Lazy initialization, non-thread safe:&lt;/b&gt; This is the classical version, bot it's not thread safe. If more than one thread attempts to access instance at the same time, more than one instance may be created.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;Singleton {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;private static &lt;/span&gt;&lt;/b&gt;Singleton instance = &lt;b style="color: #0b5394;"&gt;null&lt;/b&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #3d85c6;"&gt;&lt;span style="color: #0b5394;"&gt;public static &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;Singleton Instance() {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;if &lt;/b&gt;(instance == &lt;b style="color: #0b5394;"&gt;null&lt;/b&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance = &lt;b style="color: #0b5394;"&gt;new &lt;/b&gt;Singleton(); &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;return &lt;/b&gt;instance;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;private &lt;/b&gt;Singleton() {}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;2. Non-lazy initialization, thread safe:&lt;/b&gt; This is the simplest thread safe version, but it does not support lazy initialization.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;Singleton {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;private readonly static &lt;/span&gt;&lt;/b&gt;Singleton instance = &lt;b style="color: #0b5394;"&gt;new &lt;/b&gt;Singleton();&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;public static &lt;/span&gt;&lt;/b&gt;Singleton Instance() {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;return &lt;/b&gt;instance;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;private &lt;/b&gt;Singleton() {}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;3. Lazy initialization, thread safe:&lt;/b&gt; This version supports both properties, but has&amp;nbsp; performance problems. Once a thread uses singleton instance, the others have to wait because of lock.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="color: #0b5394;"&gt;public class &lt;/span&gt;&lt;/b&gt;Singleton {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;private static &lt;/span&gt;&lt;/b&gt;Singleton instance = null;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;private static readonly &lt;/span&gt;&lt;/b&gt;object lockObj = &lt;b style="color: #0b5394;"&gt;new &lt;/b&gt;object(); &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;public static &lt;/span&gt;&lt;/b&gt;Singleton Instance() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b style="color: #0b5394;"&gt;lock &lt;/b&gt;(lockObj) { &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;if &lt;/b&gt;(instance == &lt;b style="color: #0b5394;"&gt;null&lt;/b&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance = &lt;b style="color: #0b5394;"&gt;new &lt;/b&gt;Singleton(); &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;return &lt;/b&gt;instance;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;private &lt;/b&gt;Singleton() {}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;4. Double-check locking: &lt;/b&gt;An improved version of the third solution. Two null controls prevent lock waits for most time, but not always. Also, it does not work properly for Java because of Java memory management approach.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="color: #0b5394;"&gt;public &lt;/b&gt;class Singleton {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;private static &lt;/span&gt;&lt;/b&gt;Singleton instance = &lt;b style="color: #0b5394;"&gt;null&lt;/b&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;private static &lt;/span&gt;&lt;/b&gt;object lockObj = &lt;b style="color: #0b5394;"&gt;new &lt;/b&gt;object(); &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;public static &lt;/span&gt;&lt;/b&gt;Singleton Instance() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b style="color: #0b5394;"&gt;if &lt;/b&gt;(instance == &lt;b style="color: #0b5394;"&gt;null&lt;/b&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b style="color: #0b5394;"&gt;lock &lt;/b&gt;(lockObj) { &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;if &lt;/b&gt;(instance == &lt;b style="color: #0b5394;"&gt;null&lt;/b&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance = &lt;b style="color: #0b5394;"&gt;new &lt;/b&gt;Singleton(); &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b style="color: #0b5394;"&gt;return &lt;/b&gt;instance;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;private &lt;/b&gt;Singleton() {}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;5. Nested initialization:&lt;/b&gt; A nested class is used for lazy initialization. This version is also thread safe, but a bit complex. For most situations, solutions 2 or 4 will be suitable according to performance parameters.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="color: #0b5394;"&gt;public &lt;/b&gt;class Singleton {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;public static &lt;/span&gt;&lt;/b&gt;Singleton Instance() {&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;return &lt;/b&gt;&lt;span style="color: black;"&gt;Nested&lt;/span&gt;&lt;b style="color: #0b5394;"&gt;.&lt;/b&gt;instance;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;private &lt;/b&gt;Singleton() {}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &lt;b style="color: #0b5394;"&gt;class &lt;/b&gt;Nested {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: #0b5394;"&gt;static &lt;/b&gt;Nested() {}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: #0b5394;"&gt;internal static readonly &lt;/span&gt;&lt;/b&gt;Singleton instance = &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b style="color: #0b5394;"&gt;new &lt;/b&gt;Singleton()&lt;/span&gt;&lt;span style="font-size: small;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Usage:&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;&lt;b style="color: #0b5394;"&gt;public static void &lt;/b&gt;Main(&lt;b style="color: #0b5394;"&gt;string&lt;/b&gt;[] args)&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; Singleton instance = Singleton.Instance(); &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #eeeeee;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6050067629911853658-951894068269301293?l=codebalance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codebalance.blogspot.com/feeds/951894068269301293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codebalance.blogspot.com/2010/08/singleton-pattern-and-beyond.html#comment-form' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/951894068269301293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6050067629911853658/posts/default/951894068269301293'/><link rel='alternate' type='text/html' href='http://codebalance.blogspot.com/2010/08/singleton-pattern-and-beyond.html' title='5 Implementations of Singleton Pattern'/><author><name>CB</name><uri>http://www.blogger.com/profile/13504212299235753253</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-qcRir11wBbY/TjvgPsMCymI/AAAAAAAAAOg/Dqc5ovyibP4/s220/cb-small.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hGraFK2-w-4/THVWisVHltI/AAAAAAAAACw/d4Gi06HI7i8/s72-c/singleton.jpg' height='72' width='72'/><thr:total>17</thr:total></entry></feed>
