<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkMDQXw6fyp7ImA9WhVUFUw.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779</id><updated>2012-05-20T08:54:30.217-04:00</updated><category term="java based CMS" /><category term="linux" /><category term="self employed" /><category term="amazon ec2" /><category term="MySQL" /><category term="MVC" /><category term="finance" /><category term="leanstartup" /><category term="cache" /><category term="spring framework" /><category term="eol" /><category term="ipad" /><category term="Java" /><category term="usps" /><category term="ipad3" /><category term="Everything else" /><category term="S-corp" /><category term="eol-style" /><category term="design pattern" /><category term="certification" /><category term="webhosting" /><category term="ipad2" /><category term="LLC" /><category term="kindle fire" /><category term="aws" /><category term="subversion" /><category term="j2ee server" /><category term="e-commerce" /><title>Java Frameworks &amp; Technologies</title><subtitle type="html">Blog about my journey in world of Java web frameworks. It involves reviews and experiences with current state of APIs available and other technical musings.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.jframeworks.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.jframeworks.com/" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/J2eeFrameworks" /><feedburner:info uri="j2eeframeworks" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DE4FQn06eSp7ImA9WhVSEUk.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-7517289113955080689</id><published>2012-03-07T13:58:00.000-05:00</published><updated>2012-03-07T14:01:53.311-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-07T14:01:53.311-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ipad3" /><category scheme="http://www.blogger.com/atom/ns#" term="kindle fire" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad2" /><title>Comparing iPads</title><content type="html">Today Apple announced new iPad 3 with new features and upgraded path. &lt;br /&gt;
Below is sheet comparing Kindle Fire / iPad2 and iPad3. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Here is summary of missing information for iPad 3&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Price for wi-fi (16GB/32GB/64GB) = $499 / $599 / $699&lt;/li&gt;
&lt;li&gt;Price for 4G LTE (16GB/32GB/64GB) = $629 / $729 / $829&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Networking:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;New iPad 3 now has 21Mbps HSPA+ and DC-HSDPA at 42Mbps, with LTE taking the cake at 73Mbps.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;New features:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;No SIRI, but voice dictation instead of typing on keyboard.&lt;/li&gt;
&lt;li&gt;1080p video recording&lt;/li&gt;
&lt;li&gt;5-megapixel backside illuminated sensor on the back, 5-element lens, IR filter, and ISP built into ​the A5X chip.&lt;/li&gt;
&lt;li&gt;iSight camera.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder="0" height="750" src="https://docs.google.com/spreadsheet/pub?key=0ApcnKdCUYEoIdGVVcFlhTl9lYVdma05tQ3VxUWxfWVE&amp;amp;single=true&amp;amp;gid=0&amp;amp;output=html&amp;amp;widget=true" width="550"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-7517289113955080689?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sZl9mFj6aKoc0KoHpH-VnM_Wg5Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sZl9mFj6aKoc0KoHpH-VnM_Wg5Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sZl9mFj6aKoc0KoHpH-VnM_Wg5Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sZl9mFj6aKoc0KoHpH-VnM_Wg5Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/wS3_W3RM7S4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/7517289113955080689/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=7517289113955080689" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/7517289113955080689?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/7517289113955080689?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/wS3_W3RM7S4/comparing-ipads.html" title="Comparing iPads" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.jframeworks.com/2012/03/comparing-ipads.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEMQHg4fSp7ImA9WhdUFk8.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-2785185305624460351</id><published>2011-10-03T01:44:00.002-04:00</published><updated>2011-10-03T01:44:41.635-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-03T01:44:41.635-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="certification" /><title>Why Certified and Why No Non-Certified?</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: justify;"&gt;
This topic has come up many times. And even #MartinFowler wrote a blog about this.&amp;nbsp;Recently I was doing code review, found a code snippet.&amp;nbsp;Let me show you a simplified code snippet.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b style="background-color: #ffe599;"&gt;public boolean isEligible(List list) {&lt;/b&gt;&lt;/div&gt;
&lt;span class="Apple-style-span" style="background-color: #ffe599;"&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: justify;"&gt;
&amp;nbsp; boolean isEligible = false;&lt;/div&gt;
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: justify;"&gt;
&amp;nbsp; for (int i = 0;i &amp;lt; list.size(); i++) {&lt;/div&gt;
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;if (list.get(i) == 1) {&lt;/div&gt;
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isEligible = true;&lt;/div&gt;
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;}&lt;/div&gt;
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: justify;"&gt;
&amp;nbsp; }&lt;/div&gt;
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: justify;"&gt;
&amp;nbsp; return isEligible;&lt;/div&gt;
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;div style="text-align: justify;"&gt;
&lt;b&gt;}&lt;/b&gt;&lt;/div&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;Now, when I asked developer to put in break statement, he replied, it's small array. Though he was right, as there is not much performance penalty, but that code was wrong from "certified" developer point of view. And this pretty much sums up difference b/w certified &amp;amp; non-certified developer.&amp;nbsp;&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;
I am a certified Java programmer (eleven years back) but whenever I do code reviews, looking at this kind of code, really makes me fire that developer. It's not that, if you are not certified, you are not good or you are not capable, but it makes difference, how you started programming.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
From my point of view, mostly non-certified programmers come in two categories.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Very experience programmer, who started programming in 80s something.&lt;/li&gt;
&lt;li&gt;Comparatively newer breed of programmers after IT boom in late 90s.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
First category of programmers, most of them, never bothered to get certified, as they been programming enough long time, to optimize code at assembly level. I always end up learning something new from them. (In-fact, they would have optimized above mentioned code, to use iterator and stored list.size() in one local variable :) )&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
But after IT boom in late 90s, lots of college graduates jumped into programming (where is $$). Now, when they got jobs and did programming in languages like Java, no body really code reviewed their code and nobody did performance analysis at code loop level. And they were never penalized for that, they continued programming like this. If I interview them, they might know difference b/w stateless and stateful EJBs but no idea about IOC pattern. Are they programmers in true sense? Have they given serious enough preference to their skills set, to get certified in that.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
You can say, certified programmers got certified only because, they can get better jobs. And you are right. But getting certifications, also made you complete programmer and make you think, before you commit your code. Hence if given choice of hiring someone for my team, I will go for certified programmer (unless he/she flunk my java/jee questions).&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
To end my blog entry, here is another code example, from java developer, who has 8yrs of experience (and guess what? :)) . Same developer also wrote MyService class.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
(see technical requirement as javadoc)&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;blockquote&gt;
/** Finds service and invoke it.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; If service is not enabled, then don't invoke it.&lt;br /&gt;**/&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #ffe599;"&gt;public void findAndInvoke() throws Exception{&lt;br /&gt;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MyService service = serviceFinder.findService("MyService");&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;service.invoke();&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;&amp;nbsp; } catch (NullPointerException ex) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; logger.log("Service is not enabled, hence ignoring");&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-2785185305624460351?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4zXyaJEVjp3Zvc30DiHyzU-g-9M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4zXyaJEVjp3Zvc30DiHyzU-g-9M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4zXyaJEVjp3Zvc30DiHyzU-g-9M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4zXyaJEVjp3Zvc30DiHyzU-g-9M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/IuMcT7f2Lu8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/2785185305624460351/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=2785185305624460351" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/2785185305624460351?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/2785185305624460351?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/IuMcT7f2Lu8/why-certified-and-why-no-non-certified.html" title="Why Certified and Why No Non-Certified?" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.jframeworks.com/2011/10/why-certified-and-why-no-non-certified.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4GQnsyeip7ImA9WhdUFE4.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-8339122178748631649</id><published>2011-09-30T22:08:00.001-04:00</published><updated>2011-09-30T22:08:43.592-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-30T22:08:43.592-04:00</app:edited><title>Public Key Cryptography (Yet another guide)</title><content type="html">&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Introduction&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Traditional encryption method, where you encrypt using one key and de-crypt using same key. Of course it suffers with basic problem is sharing key. And it is difficult or impossible, when we want to exchange information in public domain. (secure websites extra.).&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;i&gt;Public key encryption&lt;/i&gt; is&amp;nbsp;asymmetric, means, you encrypt using one key and other key decrypts it. Starting point of this encryption is to generate two keys using some tool at same time and share one key to other party. Other party can be public to all or internet. The key which gets published to public is called public key and key which you keep to yourself is called private key. Hence this type of cryptography called public key cryptography.&lt;/div&gt;
&lt;blockquote&gt;
&lt;i&gt;pub-key concept is basis for digital signatures and digital certs.&lt;/i&gt;&lt;/blockquote&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;PGP (Pretty Good Privacy) encryption. &lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
PGP uses both symmeteric and assymetric encryption. PGP uses one time session key for encrypting whole document and uses public-private key method to share that session key.&lt;/div&gt;
&lt;blockquote&gt;
&lt;i&gt;PGP is a hybrid cryptosystem.&lt;/i&gt;&lt;/blockquote&gt;
&lt;div style="text-align: justify;"&gt;
Hence it's faster to encrypt and decrypt compare to just using pub key to encrypt whole document. Conventional encryption is about 1,000 times faster than public key encryption. Public key encryption in turn provides a solution to key distribution and data transmission issues.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
These days, PGP method is being used most widely. &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Digital Signatures&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
One of important use of public key cryptography is, authentication of sender. Hence this type of cryptography is perfect for digitally signing documents (or emails). This even more secure than signing by hand (nobody can forge it) (Imagine, digital signing report cards of kids, they are out of luck :) ). &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Instead of encrypting information using someone else's public key, you encrypt it with your private key. If the information can be decrypted with your public key, then it must have originated with you.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;i&gt;General rule of using PGP (or public key ) cryptography&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
If you want to exchange information, where origin from you has to be verified then you use your private key to encrypt.&amp;nbsp;&lt;i&gt;Example&lt;/i&gt;: Digital signatures in email.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
If you want to authenticate origin of document, then you use that origin's public key to decrypt.&amp;nbsp;&lt;i&gt;Example &lt;/i&gt;secure website of banks.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Hash Functions (Message Digest or MD5)&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
PGP tool can take any file and generate fixed length hash value of that file. Fixed length is generally couple of bytes to 10-20 bytes. (Lets say 160 bits). Now if recipient gets that file or downloads (or using torrents), then he can generate same hash code for received file. If that hash code matches from hash code published (on website), it means he has right file with no modifications. This concept is generally used if users are getting software archives from different sources (or server mirrors) and users want to make sure, they got original file. &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Even a single bit changed in file, will cause different hash code. The generated hash code is called message digest or MD5. &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
To make cryptography even more fasted using PGP, instead of encrypting whole document with session key, PGP generates message digest and digitally sign it using private key. (Basically encrypted message digest). Recipient then uses public key to decrypt MD and generate new one from received file. If both matches, then voila.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Digital Certificates&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Now with all above encryption methods, one thing is that, public key has to published and we need to make sure that public key originated from right party. To solve problem authentication of public key, digital certificates comes into picture. &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;i&gt;A digital certificate consists of three things:&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;A public key of entity, whole this certificate belongs to.&lt;/li&gt;
&lt;li&gt;Certificate information. ("Identity" information about the user, such as name, user ID, and so on.)&lt;/li&gt;
&lt;li&gt;One or more digital signatures of third party companies vouching for authenticity of public key. Digital signature is for public key of entity in question, signed by 'trusted' 3rd party. Example verisign, geotrust etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
One way for a recipient to check whether a certificate is valid is by verifying its digital signature, using its issuer's (signer's) public key. That key can itself be stored within another certificate whose signature can also be verified by using the public key of that next certificate's issuer, and that key may also be stored in yet another certificate, and so on. You can stop checking when you reach a public key that you already trust and use it to verify the signature on the corresponding certificate.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Hence there is hierarchy of CAs (Certificate Authority). Top most level CA is called root CA. &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
A CA creates certificates and digitally signs them using the CA's private key.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Public Key Infrastructures (PKI)&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
A PKI contains the certificate storage facilities of a certificate server, but also provides certificate management facilities&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Our browsers come equipped with some top level certificate issuing authority public keys. &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;i&gt;Digital Certificates are of two types&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;PGP Certs (lesser used)&lt;/li&gt;
&lt;/ul&gt;
No 3rd Party digital signature&lt;br /&gt;
Self signed digital signature&lt;br /&gt;
Multiple people can sign it.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;X.509 Certificates (most commonly used) (web browsers).&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Apart from above three labels, it has DN (distinguished name)&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Example: CN=Bob Allen, OU=Total Network Security Division, O=Network Associates, Inc., C=US&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;How to get X.509 Certificates?&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
To obtain an X.509 certificate, you must ask a CA to issue you a certificate. You provide your public key, proof that you possess the corresponding private key, and some specific information about yourself. You then digitally sign the information and send the whole package — the certificate request — to the CA. The CA then performs some due diligence in verifying that the information you provided is correct, and if so, generates the certificate and returns it&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
In other words, you send a self-signed certificate signing request (CSR) to the CA. The CA verifies the signature on the CSR and your identity, perhaps by checking your driver's license or other information. The CA then vouches for your being the owner of the public key by issuing a certificate and signing it with its own (the CA's) private key. Anybody who trusts the issuing CA's public key can now verify the signature on the certificate. In many cases the issuing CA itself may have a certificate from a CA higher up in the CA hierarchy, leading to certificate chains.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Other Misc Topics&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;b&gt;Passphrase&lt;/b&gt;&lt;br /&gt;
Further private key can be stored encrypted by using some password. Generally it is phrase, hence it's called&amp;nbsp;&lt;i&gt;passphrase&lt;/i&gt;. Think of situation, if someone has access to your m/c and steal your private keys. Unless, they decrypt private key using same passphrase, they can't use that key to encrypt any document&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Strength of&amp;nbsp;encryption.&lt;/b&gt;&lt;br /&gt;
Keys (private &amp;amp; public) are measured in bits. Generally it ranges from 64 bit to 1024 bit. Larger is key, more powerful encryption but bad performing. Hence while choosing key strength, it has to be right balance between strength and performance. Generally 128bit to 256 bit keys are enough for day to day operations like secure website etc. Unless it is military secret. 1024 bit keys are overkill.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;References:&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
http://www.pgpi.org/doc/pgpintro/&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
http://java.sun.com/docs/books/tutorial/security/sigcert/index.html&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
http://www.debuntu.org/book/export/html/146&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
http://sial.org/howto/openssh/publickey-auth/&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
http://www.ibm.com/developerworks/library/l-keyc.html&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-8339122178748631649?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HyGZN0opfNtcdnk3rZw6-lTSZ9k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HyGZN0opfNtcdnk3rZw6-lTSZ9k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HyGZN0opfNtcdnk3rZw6-lTSZ9k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HyGZN0opfNtcdnk3rZw6-lTSZ9k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/SoJRfgEyQ6A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/8339122178748631649/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=8339122178748631649" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/8339122178748631649?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/8339122178748631649?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/SoJRfgEyQ6A/public-key-cryptography-yet-another.html" title="Public Key Cryptography (Yet another guide)" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.jframeworks.com/2011/09/public-key-cryptography-yet-another.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEHSHw6eyp7ImA9WhdUFkw.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-2379445896615078288</id><published>2011-09-28T12:15:00.001-04:00</published><updated>2011-10-03T00:53:59.213-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-03T00:53:59.213-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="kindle fire" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><title>Comparing Amazon Kindle Fire and Apple iPad 2</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;b&gt;Comparing Technical Specs of Apple iPad 2 and Amazon Kindle Fire&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Amazon announced Kindle FIRE on September 28th, with availability on November 15th. &amp;nbsp;As soon as Kindle Fire is annouced, whole tablet fans are enthuasitic about new tablet which really poses some serious competition to Apple iPad.&lt;br /&gt;
&lt;br /&gt;
Well main attraction of Kindle Fire is, it's price point of $199 compare to iPad $499. Lets compare apple to apple.&lt;br /&gt;
&lt;br /&gt;
I took iPad2 minimum configuration available.&lt;br /&gt;
Apple iPad has wifi+3G model. 3G model has A-GPS available.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder="0" height="750" src="https://docs.google.com/spreadsheet/pub?hl=en_US&amp;amp;hl=en_US&amp;amp;key=0ApcnKdCUYEoIdDRWRlpXM2lySjBqbEhNbVFKYTZuZ0E&amp;amp;single=true&amp;amp;gid=0&amp;amp;output=html&amp;amp;widget=true" width="500"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Do you want to add rows to comparison? Please comment.&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/8836501415071594779-2379445896615078288?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6pUaDqAv4sePANAJMXOXl1puUM0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pUaDqAv4sePANAJMXOXl1puUM0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6pUaDqAv4sePANAJMXOXl1puUM0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pUaDqAv4sePANAJMXOXl1puUM0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/8yI4UOLalWk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/2379445896615078288/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=2379445896615078288" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/2379445896615078288?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/2379445896615078288?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/8yI4UOLalWk/comparing-amazon-kindle-fire-and-apple.html" title="Comparing Amazon Kindle Fire and Apple iPad 2" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>6</thr:total><feedburner:origLink>http://www.jframeworks.com/2011/09/comparing-amazon-kindle-fire-and-apple.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cCQ38-eyp7ImA9WhdUEE8.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-7594567658853467821</id><published>2011-09-26T03:11:00.000-04:00</published><updated>2011-09-26T03:11:02.153-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-26T03:11:02.153-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="eol-style" /><category scheme="http://www.blogger.com/atom/ns#" term="eol" /><category scheme="http://www.blogger.com/atom/ns#" term="subversion" /><title>Subversion END OF LINE (EOL) problem</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;Generally, if you have been working on subversion source control long enough, you might seen this error. Most of developers end up doing some work around and forget about it. But what is this problem is.&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="background-color: #d0d0d0; font-family: Verdana, sans-serif;"&gt;svn: File "xxx.vsd" has inconsistent newlines svn: Inconsistent line ending style&lt;/span&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;Subversion whenever adding or commiting file, checks EOL (end of line) style. It can either UNIX (LF) or Windows (CRLF). But if it is not consistent in a file, then it doesn't know, which style to use while storing. Hence it stops whole committing process and throw this error.&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;Subversion provides various options for windows and developers for this. First option they provide using svn property 'svn:eol-style'. This property can be set on a file, whether LF or CRLF. &amp;nbsp;Subversion will store this file using Operating System native format of line-ending. But different developers can be editing same file on different operating system. Hence subversion provide option of 'native' which means, whatever OS is being used, let developer check-in using that but other developer on different OS, will see file, in it's own native format. Here Subversion is play proxy to EOL format.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;Coming back to error above, this problem won't be fixed even if, we have svn:eol-style is set. For this either, we open that file and chance EOL to one format. Subversion is confused, by seeing different types of EOL in one single file.&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;Other solution mentioned in forums is, to use dos2unix utility. Not sure, whether it is even available on Windows platform and certainly, I may not want to commit another version of file, just because of EOL.&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;What about, if you have hundreds of files?&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;Subversion has 'config' file where you can set values at global scope. Hence you don't need to set svn:eol-style for different files all the time. This global file resides at&amp;nbsp;&lt;tt style="background-color: white; color: #333333; margin-bottom: 0px; margin-left: 0.2em; margin-right: 0.2em; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;"&gt;~/.subversion/config&lt;/tt&gt;&lt;span style="background-color: white; color: #333333; text-align: -webkit-auto;"&gt;&amp;nbsp;file (or&amp;nbsp;&lt;/span&gt;&lt;tt style="background-color: white; color: #333333; margin-bottom: 0px; margin-left: 0.2em; margin-right: 0.2em; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;"&gt;%APPDATA%\&lt;span class="searchword" style="background-color: #ffc08c; color: black; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: inherit;"&gt;Subversion&lt;/span&gt;\config&lt;/tt&gt;&lt;span style="background-color: white; color: #333333; text-align: -webkit-auto;"&gt;&amp;nbsp;on Windows)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;span style="background-color: white; color: #333333; text-align: -webkit-auto;"&gt;Now by default, "&lt;/span&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;&lt;span style="color: #333333;"&gt;&lt;span style="white-space: pre;"&gt;&lt;i&gt;enable-auto-props = yes&lt;/i&gt;" is set and uncommented. Also youcan see at bottom of file, certain file extensions has eol-stype property beingset to 'native' But to solve problem of mixed bag of EOLs in different files, you just &lt;b&gt;comment &lt;/b&gt;back "&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #333333; text-align: -webkit-auto; white-space: pre;"&gt;&lt;i&gt;enable-auto-props&lt;/i&gt;". So what happens, subversion will NOT try to expect any EOL and let you add/commit a file. Once done, you can un-comment it back.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; text-align: -webkit-auto; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; text-align: -webkit-auto; white-space: pre;"&gt;&lt;b&gt;References:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ol style="text-align: left;"&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="color: #333333; font-family: Verdana, sans-serif;"&gt;&lt;span style="white-space: pre;"&gt;&lt;a href="http://svnbook.red-bean.com/en/1.1/ch07s02.html"&gt;http://svnbook.red-bean.com/en/1.1/ch07s02.html&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="color: #333333; font-family: Verdana, sans-serif;"&gt;&lt;a href="https://www.opends.org/wiki/page/ConfiguringSubversionToSetTheCorrectEndOfLineFormat"&gt;https://www.opends.org/wiki/page/ConfiguringSubversionToSetTheCorrectEndOfLineFormat&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;a href="http://conorcahill.blogspot.com/2007/10/subversion-end-of-line-style.html"&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;http://conorcahill.blogspot.com/2007/10/subversion-end-of-line-style.html&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&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/8836501415071594779-7594567658853467821?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/llT86E6nlp9yru_hrW0qXg1jHVA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/llT86E6nlp9yru_hrW0qXg1jHVA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/llT86E6nlp9yru_hrW0qXg1jHVA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/llT86E6nlp9yru_hrW0qXg1jHVA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/FE5nvJcatqk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/7594567658853467821/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=7594567658853467821" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/7594567658853467821?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/7594567658853467821?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/FE5nvJcatqk/subversion-end-of-line-eol-problem.html" title="Subversion END OF LINE (EOL) problem" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>0</thr:total><georss:featurename>Plainsboro, NJ 08536, USA</georss:featurename><georss:point>40.3279335 -74.5873348</georss:point><georss:box>40.279513 -74.66629879999999 40.376354 -74.5083708</georss:box><feedburner:origLink>http://www.jframeworks.com/2011/09/subversion-end-of-line-eol-problem.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkABRno9eSp7ImA9WhdVF0Q.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-1761662110350953052</id><published>2011-09-23T13:25:00.003-04:00</published><updated>2011-09-23T13:25:57.461-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-23T13:25:57.461-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="usps" /><title>USPS, Perspective from a customer.</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;div dir="ltr" id="internal-source-marker_0.09659404726698995" style="margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The United States Postal Service (USPS) is facing a fiscal crisis and it’s been quite uproar in Washington and online world for what to do next. USPS is among largest employers of USA and important part of American history &amp;amp; pride. Postmaster General and CEO ‘Patrick Donahoe’ has presented his testimony in front of congress. (&lt;/span&gt;&lt;a href="http://about.usps.com/news/speeches/2011/pr11_pmg0906.htm"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;"&gt;link&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;). There, he has emphasized on cutting costs by reducing number of postal employees, consolidating &amp;amp; closing postal processing units, closing post offices etc. Also with very abstract proposal of ‘streamlining process and product offerings’. So far, other than cutting costs, he has not suggested any of concrete methods to increase revenue. And here comes my purpose of writing this blog. &lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I come from software development career, spanning 15yrs. I have been keen observer of how commerce industry innovating and finding new methods to market and sell their services and products. On same line, here is 10-point suggestions for USPS. &lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Use Your Real Estate &lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;USPS got 32,000 retail locations. Inspite of real estate crash, 32,000 locations is big piece of asset and lots of floor space. They need to start recognizing value of their floor space in middle of towns and put them to use. Recent example of 7-Eleven stores will allow &lt;/span&gt;&lt;a href="http://amazon.com/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;"&gt;amazon.com&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;a href="http://mashable.com/2011/09/06/amazon-locker-system/"&gt;local pickup&lt;/a&gt;s. USPS can allow some kind of locker services or start some program, where online retailer or new retailer can deliver/pickups through their retail location. Here is another example, allow Redbox movie kiosks.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol start="2"&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Make Priority Shipping More Simple and Intuitive&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Add tracking number by default. In 21st century, getting status and confirmation of their shipment, has become standard. That’s one of biggest reason, I use UPS. Make pricing simple. Lets say two fixed prices for small and big priority box. (Yes, USPS already does that, I am moving towards, to make it more standardizing in their priority offering). &lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol start="3"&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Use Global Shipping As Strength&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;“&lt;/span&gt;&lt;span style="background-color: white; color: #202020; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;U.S. Postal Service revenue from international mailing and shipping products has seen a 12.3 percent year-on-year increase so far in the first three quarters of the 2011 fiscal year.” &amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; color: #202020; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I think, USPS international operations and contracts with international postal services is big asset for them. I am surprised, why they are not marketing it and &lt;/span&gt;&lt;span style="background-color: white; color: #202020; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;streamlining &lt;/span&gt;&lt;span style="background-color: white; color: #202020; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;it. USPS provides international priority and standard shipping. Of course, whenever you do, you end up filling in multiple documents as required. They need to make it simpler to ship and price attractive. Coupled with marketing, USPS can capture &amp;amp; encourage, immigrants segment of their customer. Think of shipments going from USA (USA Brand) to countries like India, Mexico, Spain. European tourist come to USA, to do shopping around Thanksgiving holidays. It’s big market outside USA for USA retailers. They can be right shipping company for businesses and individual consumers. &lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: white; color: #202020; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol start="4"&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Do not Take Away Saturday Delivery And Introduce Sunday Express&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This is one of new measurements, Mr. Donahoe proposed. I am pretty sure, he is trying to pick low hanging fruit for now. My perspective is, use Saturday delivery as one of strength. In fact, if why don’t you give laid off employees to work part time on Sunday, for &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;express &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;mail deliveries. Think of marketing USPS can do, where you ship on Friday and &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;residential &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;customers can get it on Sunday.&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol start="5"&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Add Automated Postal Center (APC) In Every Location. In fact Add Two.&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Factoid: APC can provide the services needed for 85 percent of post office visits. &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I have it in my zipcode and loves it. Only problem, I have seen, if someone is hogging the machine for full ½ hr. I really wished they have two APC machines. Assuming, 85% people can use APC for USPS deliveries, think of that, number of people wants to stand in line for window service. Plus, incentive of &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;lower &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;rate compare to window service, is good enough for most of shippers. &lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol start="6"&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Add More Informational Posters And Provide Pamphlets to Educate Shipper For Different Options&lt;/span&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I am not sure, if USPS ever gathered analytical data like percentage of different services rendered at retail window. What I personally feel, if USPS put some more posters on different services and even put some matrix table, comprising weight/rate columns, then shippers doesn’t have to take help. Let him/her use APC afterwards. &lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol start="7"&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Reduce Number Of Service Employees Per Location to ONE.&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In combination to above mentioned proposals, USPS can reduce number of employees needed to manage a retail location. It’s contrary to proposal to close down retail locations. I think, instead of closing loss-making locations, turn them into profit making units or at-least let them self sustain. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol start="8"&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Get Contractors Instead of Employees. &lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;It’s been established in testimony of Mr. Donahoe, paying salary to Employees and their health benefits plus mandatory retirement benefits is one of major expense compare to other private shipping companies. I understand, USPS employee union may not appreciate this idea, but in this economy and age, paying by hour makes more sense. Getting health insurance for a private contractor is another painful topic of America, I won’t go there. By implementing policies to hire seasonal private contractors, USPS can smartly manage their workforce expenses with-out worrying about ever increasing health insurance and putting money in retirement funds. Further expanding on this idea, for full time employees, USPS can start &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;incentive &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;based salary structure, like basic salary + performance based bonus. Performance can be measured using number of hours, number of packages handled or number of customers dealt with. &lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol start="9"&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Empower “Approved Postal Providers”, More Than Just Selling Stamps.&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We all have seen, checkout counters on many grocery stores or bank windows, giving you option to buy &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;usps stamps. &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Why doesn’t USPS do some pilot programs with interested partners, let them provide more services of USPS. Simple services like Accepting mail, Accepting Priority boxes, Selling USPS approved packing boxes, various documents. Even ask them to allow, to install APCs at their premises (on commission/affiliate basis.). It’s all about getting more packages into USPS delivery. More volume means more money and more utilizing mammoth infrastructure of USPS.&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol start="10"&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: #cccccc; font-size: 11pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Provide Other Services Through Their Service Window. &lt;/span&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Currently, whenever I see big line for window service, I always wonder, how many customers thinking of other things, they need to do, like buying phone cards, coffee (i know, i know :) ) or small items they need to buy. Well, why don’t we use time of postal worker to sell more and generate more money for their employer. (which is USPS). UPS stores sell things other than shipping supplies. Few of things, I can think of, phone cards, greeting cards, copy using copier machines, fax ability. &lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Other Small Ideas&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Open early on weekdays. Work with working and paying class of customers. How many working people can come between 10am to 5pm. That’s why it’s crazy during lunch hours. &lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hire students part time, to pre-handle customers entering post office. Let them assist/teach customer, how to use APC machines or fill forms. Target is customer is handled as quickly as possible and spend less time with USPS employee on unnecessary trivial things. &lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In this Internet age, make your USPS online shipping site super easy and intuitive. Hire 3rd party consultants to do usability study and design. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Facts &amp;amp; Numbers&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="background-color: white; color: #202020; font-family: Arial; font-size: 8pt; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Postal Service delivers 212 billion pieces of mail to over 144 million homes, businesses and Post Office boxes every year.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: white; color: #202020; font-family: Arial; font-size: 8pt; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The U.S. Postal Service ended its third quarter of fiscal year (FY) 2011 (April 1-June 30) with a net loss of $3.1 billion, compared to a net loss of $3.5 billion for the same period in FY 2010. Total mail volume declined to 39.8 billion pieces for the quarter, compared to 40.9 billion pieces in the third quarter of FY 2010.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: white; color: #202020; font-family: Arial; font-size: 8pt; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;U.S. Postal Service revenue from international mailing and shipping products has seen a 12.3 percent year-on-year increase so far in the first three quarters of the 2011 fiscal year.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: white; color: #202020; font-family: Arial; font-size: 8pt; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Postmaster General is Patrick Donahoe&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: white; color: #202020; font-family: Arial; font-size: 8pt; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Postal Service ended Quarter III of fiscal year 2011 (April 1 – June 30) with a net loss of $3.1 billion. &amp;nbsp;Net losses for the nine months which ended June 30 amount to $5.7 billion and we are currently projecting a net loss of up to $10 billion by the end of this fiscal year, depending on interest rates. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li style="background-color: white; color: #202020; font-family: Arial; font-size: 8pt; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Mr Donahoe testimony in front of congress, &amp;nbsp;&lt;/span&gt;&lt;a href="http://about.usps.com/news/speeches/2011/pr11_pmg0906.htm"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 8pt; vertical-align: baseline; white-space: pre-wrap;"&gt;http://about.usps.com/news/speeches/2011/pr11_pmg0906.htm&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;span style="background-color: white; color: #202020; font-family: Arial; font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;# # #&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: white; color: #202020; font-family: Arial; font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;A self-supporting government enterprise, the U.S. Postal Service is the only delivery service that reaches every address in the nation, 150 million residences, businesses and Post Office Boxes. The Postal Service receives no tax dollars for operating expenses, and relies on the sale of postage, products and services to fund its operations. We’re everywhere so you can be anywhere:&lt;/span&gt;&lt;a href="http://www.uspseverywhere.com/"&gt;&lt;span style="background-color: white; color: #2f6fa9; font-family: Arial; font-size: 8pt; font-style: italic; vertical-align: baseline; white-space: pre-wrap;"&gt;www.uspseverywhere.com&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #202020; font-family: Arial; font-size: 8pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. With 32,000 retail locations and the most frequently visited website in the federal government, usps.com, the Postal Service has annual revenue of more than $67 billion and delivers nearly 40 percent of the world’s mail. If it were a private sector company, the U.S. Postal Service would rank 29th in the 2010 Fortune 500. Black Enterprise and Hispanic Business magazines ranked the Postal Service as a leader in workforce diversity. The Postal Service has been named the Most Trusted Government Agency six consecutive years and the sixth Most Trusted Business in the nation by the Ponemon Institute.&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/8836501415071594779-1761662110350953052?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aHP5shNRPxekeaZ7f7mGfxRS4DQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aHP5shNRPxekeaZ7f7mGfxRS4DQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aHP5shNRPxekeaZ7f7mGfxRS4DQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aHP5shNRPxekeaZ7f7mGfxRS4DQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/B6_f4Ybx514" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/1761662110350953052/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=1761662110350953052" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/1761662110350953052?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/1761662110350953052?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/B6_f4Ybx514/usps-perspective-from-customer.html" title="USPS, Perspective from a customer." /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>0</thr:total><georss:featurename>Plainsboro, NJ, USA</georss:featurename><georss:point>40.3366667 -74.5869444</georss:point><georss:box>40.2882527 -74.66590839999999 40.3850807 -74.5079804</georss:box><feedburner:origLink>http://www.jframeworks.com/2011/09/usps-perspective-from-customer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cGSHgycSp7ImA9WhZTGU0.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-6037895611970928514</id><published>2011-03-23T14:30:00.000-04:00</published><updated>2011-03-23T14:30:29.699-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-23T14:30:29.699-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="leanstartup" /><category scheme="http://www.blogger.com/atom/ns#" term="spring framework" /><title>#LeanDevelopment for #LeanStartups</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;To align with #LeanStartups way of doing things, we also need lean development, &amp;nbsp;lean technical stack and lean project cycle.&amp;nbsp;Startups are&amp;nbsp;big news these days. And when we talk about startups, there is big push for quick turn-over and get to market before time &amp;amp; money runs out. Hence we talking about #LeanStartups. (&lt;i&gt;If you wondering, why I am using '#' sign, because, that's how I am getting my topic news on Twitter. So keeping up lingo&lt;/i&gt;).&lt;br /&gt;
&lt;div&gt;&lt;s&gt;&lt;br /&gt;
&lt;/s&gt;&lt;/div&gt;&lt;div&gt;Coming to topic of this blog, whenever I think of implementing some idea or start chalking up some plans to develop something, first thing comes to my mind, which web framework? Which technology stack of APIs. How I can get other developers involved with-out spending time on discussing these things.&amp;nbsp;When we talk about Lean startup, it means you should be able to develop some features quickly and deliver it. As user experience 'demands', you are agile enough to change backlog continuously, with-out changing technologies or whole project direction.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;Keyword is 'Continuous'.&lt;/b&gt; (This explains it better,  &lt;a href="http://goo.gl/q6Pnk"&gt;http://goo.gl/q6Pnk&lt;/a&gt;)&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;You change backlog continuously&lt;/li&gt;
&lt;li&gt;You build continuously (every commit)&lt;/li&gt;
&lt;li&gt;You deploy continuous. (even 5-6 times a day)&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Now problem is, when we start spending time developing code using traditional frameworks (or technical stack), then we are introducing rigidness to whole continuous process.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;i&gt;Example&lt;/i&gt;&lt;/u&gt;: Lets say, you are using&amp;nbsp;Apache tiles + JSP + Spring framework + Hibernate, to formulate any development efforts. If you need to change DB schema, need to change JSPs &amp;amp; their layouts, then it will take a lot of effort to change everything. &amp;nbsp;That's one of reason, I think, we have a lot of &amp;nbsp;PHP based frameworks for&amp;nbsp;startups. Because they are missing layers of layers of configurations. (See my older post&amp;nbsp;&lt;a href="http://www.jframeworks.com/2008/07/java-products-but-php-based-website.html"&gt;http://www.jframeworks.com/2008/07/java-products-but-php-based-website.html&lt;/a&gt;&amp;nbsp;touching this subject)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b style="background-color: #cccccc;"&gt;So What I Propose?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Lean Development (&amp;amp; technologies)&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: #ffe599;"&gt;(&lt;u&gt;&lt;i&gt;Note&lt;/i&gt;&lt;/u&gt;: This is written with Java/JEE APIs in mind)&lt;/span&gt;&lt;br /&gt;
&lt;ol style="text-align: left;"&gt;&lt;li&gt;If you are in same boat as me, I have choosen 'Spring Framework'. Spring Framework is not a framework, it has become underlying nerve of almost all project. It's all IOC.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;I recently dump technologies like ORM (Hibernate/JPA) in favor of old school JDBC (See my other post on &lt;b&gt;&lt;a href="http://www.jframeworks.com/2011/03/spring-31-with-cache-and-orm.html"&gt;Why?&lt;/a&gt;&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;I am sticking to JSPs and old school JSP includes. Why? Because my team should be able to introduce any jsp with minimal time and minimal impact. Any developer with little experience of java, can work around JSPs.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;At last&amp;nbsp;but least, standardize html technologies including CSS and JavaScript libraries.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #274e13;"&gt;Sample&amp;nbsp;Recipe&amp;nbsp;(If I choose my stack now)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;MySQL DB (or you can go with PostgresSQL )&lt;/li&gt;
&lt;li&gt;Spring Framework (JDBC, MVC, rich set of Annotations for transaction, cache, webservices )&lt;/li&gt;
&lt;li&gt;JSPs for displaying content. No templating framework. Plain JSP includes.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;HTML 4.01 Strict transitional standardized UI&lt;/li&gt;
&lt;li&gt;JQuery 1.4.2+ (including JQuery UI and plugins as needed). Google it, you will find thousands&lt;/li&gt;
&lt;li&gt;Yahoo YUI CSS grids, to stanardized your grids once for all. (including reset css)&lt;/li&gt;
&lt;/ol&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Why not PHP?&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;Now speaking of PHP, yes, you can argue why not use PHP (hence products like Drupal)? That's main concern with us (or me). Acting on a idea is not everything. Having passion to develop it with technologies you love and you are confident in it. I won't discuss pros/cons of PHP v/s JAVA right now.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;I have friends, who are in same boat. &amp;nbsp;Many of them belongs to group, "Why you thinking technology? Just think of idea and&amp;nbsp;pursue&amp;nbsp;it. Just pick Drupal or any existing CMS application." Yes this is what I been told many times. But I am technologist and I want to know about technology that will be used.&amp;nbsp;I am java web developer with decade of&amp;nbsp;experience. So with so many tested web frameworks available, sticking to&amp;nbsp;java/j2ee technologies makes sense. I don't advise, against PHP but this is something, doesn't suit me or my time. Why learn new skills and figure out things, whenever you need to do something different.&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Lean Project Cycle:&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;When we talk about this, we talk about all other tasks to give light to a written code. This involves everything like recording requirements, maintaining backlog, continuous builds &amp;amp; deploys.&lt;br /&gt;
&lt;i&gt;&lt;u&gt;Traditionally&amp;nbsp;&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
Generally, if we are bunch of developers, we think, of getting one build server and install some open source tools like 'Hudson'. Also make maintain source control repositories using subversion ourselves.&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Provision a development integration server.&lt;/li&gt;
&lt;li&gt;Provision DB servers for different stages of a project&lt;/li&gt;
&lt;li&gt;Provision a Unix box, for source control.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;And then find people, to install those and manage those.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;i&gt;&lt;u&gt;Welcome to world of PaaS and Saas&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;i&gt;(Platform As A Service and Software As A Service)&lt;/i&gt;&lt;/div&gt;If you have experience enough, we know, getting into maintaining tools ourselves, we will be putting hours, which we could have been writing code. Hence, I am in favor of, why not use online services? For example, altassian group provides execellent&amp;nbsp;suite of all tools in one single subscription package. Link&amp;nbsp;&lt;a href="http://www.atlassian.com/hosted/studio/"&gt;http://www.atlassian.com/hosted/studio/&lt;/a&gt;&amp;nbsp;. &amp;nbsp;Personally, I am big fan of JIRA and used Confluence. So I don't want to waste my time, learning new tool or spend time, how to install/maintain it. There are lot of other paid subscription services available like&amp;nbsp;&lt;a href="http://beanstalkapp.com/"&gt;http://beanstalkapp.com/&lt;/a&gt;&amp;nbsp;and many others. Point is, I will rather buy subscription for these services and use it. &amp;nbsp;(If I need my car serviced, I will drive to auto shop, rather than setting up a new one in my garage :) )&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;i&gt;Excellent examples of PaaS &amp;amp; Saas&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://xeround.com/"&gt;Xeround&lt;/a&gt;, They are new kid on block, providing DB hosting as a service (SaaS model). I have experimented with their services. At least for startup or low volume work, they can be right fit. You can always do &lt;i&gt;cost-benefit-DBA_salary-Ping_time&lt;/i&gt; analysis.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.atlassian.com/hosted/studio/"&gt;Atlassian Studio&lt;/a&gt;: Provide hosted services for Subversion/ JIRA / Bamboo, confluence wiki and even agile tools like Greenhopper. Frankly speaking, I am ok with spending $125/mo with them, if I am seriously spending my time for startup. Think of productivity.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2,&lt;/a&gt; If you need to provision a server for any reason (or live production hosting) This is one very good option. I am using their&amp;nbsp;&lt;i&gt;micro&amp;nbsp;&lt;/i&gt;instance for running my dedicated MySQL server. I even hosted wordpress blog there. (A week back, I moved to blogger.com) (To save some more bucks, I am using 'Spot Instances'. )&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Basically, you need Laptop and your&amp;nbsp;favorite&amp;nbsp;IDE to start a #LeanStartup.&amp;nbsp;&lt;b&gt;&lt;i&gt;By the way, if you not using&amp;nbsp;&lt;a href="http://maven.apache.org/"&gt;Maven&amp;nbsp;&lt;/a&gt;for builds, you need to start from there.&lt;/i&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;i&gt;Why or Why Not AppFuse ?&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
For those, who don't know, &lt;a href="http://appfuse.org/display/APF/Home"&gt;AppFuse &lt;/a&gt;is excellent open source project, which allows you to download &amp;amp; use it's pre-built projects. It provides different projects with different technology stack with web interface. Yes, it is good starting point, when you want to see certain API in action and modify, experiment with it. But from my point of view, it's more like proof of concept. It can be good starting point for you, if you starting from scratch, as long as it matches you pre-determined technical stack. For my own project, it doesn't. I was spending more time, working around it, hence I decided to write some 'generic' web framework from scratch. Also adding different goodies like separate admin, user interface, cache support using annotations etc. Hopefully, I will release it, it's first alpha release as open source soon.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;End Note:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
In this post, I tried to look at technologies side of #LeanStartups. &amp;nbsp;This is something, which can be&amp;nbsp;black hole&amp;nbsp;for many startups if not controlled to begin with. Programming languages like PHP can be easy step for day 1, but when things get serious, we need serious enterprise friendly language and tools supporting it. And Lean development model (as described above, using Java), can serve both purposes of starting easily and able to sustain long term.&lt;/div&gt;&lt;div&gt;&lt;br /&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/8836501415071594779-6037895611970928514?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VALyMF58Mtbuh1mFMXrtiZs8RNM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VALyMF58Mtbuh1mFMXrtiZs8RNM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VALyMF58Mtbuh1mFMXrtiZs8RNM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VALyMF58Mtbuh1mFMXrtiZs8RNM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/stFGwCKzTS8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/6037895611970928514/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=6037895611970928514" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/6037895611970928514?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/6037895611970928514?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/stFGwCKzTS8/leandevelopment-for-leanstartups.html" title="#LeanDevelopment for #LeanStartups" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.jframeworks.com/2011/03/leandevelopment-for-leanstartups.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YASXs_cSp7ImA9WhZTFk4.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-7647248217743284095</id><published>2011-03-19T18:47:00.001-04:00</published><updated>2011-03-20T12:39:08.549-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-20T12:39:08.549-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="spring framework" /><category scheme="http://www.blogger.com/atom/ns#" term="cache" /><title>Spring 3.1 with Cache and ORM technologies</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Recently Spring Framework released Milestone 1 of version 3.1 (&lt;a href="http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/"&gt;New features&lt;/a&gt;). &amp;nbsp;One of new key feature caught my eye is, support for cache using annotations. Now you can annotate your DAOs (or Repositories) with provided cache specific annotations and let spring take case of behind the scene bridge to cache provider.&lt;br /&gt;
&lt;br /&gt;
To be fair, Cache using annotation is not new. It's been available as part of open source projects like&amp;nbsp;&lt;a href="http://code.google.com/p/ehcache-spring-annotations/"&gt;http://code.google.com/p/ehcache-spring-annotations/&lt;/a&gt;. But now cache annotations, being part of core spring framework, it is going to be used more seriously and developed pro-actively.&lt;br /&gt;
&lt;br /&gt;
Another major impact is, I am revisiting actual benefits of using ORM API for data access. As we all know, we have pretty much two ways to access database, either plain JDBC or ORM API like Hibernate. I am big fan of Hibernate, due to obvious reasons. And one of main reason is, adding cache capabilities by enabling 2nd level cache. &amp;nbsp;But in design sense, cache is more like cross-cutting requirement for a running system. Like any other cross-cutting concerns like Transactions, it makes more sense to use 'annotations' way.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Why back to JDBC now?&lt;/b&gt;&lt;br /&gt;
That's one decision, I recently made. I switched back to JDBC based DAO implementations instead of Hibernate backed DAOs.&lt;br /&gt;
&lt;ol style="text-align: left;"&gt;&lt;li&gt;We all have experience of writing SQLs. And using Spring JDBC templates, it's very easy to implement methods.&lt;/li&gt;
&lt;li&gt;When we actually implementing DAOs, most of operations are not CRUD type. It's mostly join of multiple tables. Although HQL/JPQL can achieve can anything but it's another learning curve.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Personally, I don't want to add another layer API in whole technical stack. Hibernate (or any other ORM layer) is great and might have obvious benefits but it always have learning curve and yes, we spend time in debugging HQL or JPQL.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Major factor was 'cache' feature in Hibernate. Now Spring Framework provides cache annotations. It gives me more flexibility on what to cache and what not to. (even eviction policies are supported)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Plus spring cache annotation can be applied anywhere. Not just DAO, even remote webservices, or any method which is resource intensive.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;You can be setup and running by simple steps like upgrading spring dependency to 3.1.0-M1 (&lt;spring.version&gt;3.1.0.M1&lt;/spring.version&gt;) and read this useful article at spring blog.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;a href="http://blog.springsource.com/2011/02/23/spring-3-1-m1-caching/"&gt;http://blog.springsource.com/2011/02/23/spring-3-1-m1-caching/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Things which might need polishing&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;There seems to be incomplete code, how to generate key. (It's using just method name to generate key? )&lt;/li&gt;
&lt;li&gt;Spring team is working on adding more providers (apart from ehcache). Support for providers like JBoss treecache will be nice. Specially in multi-cluster environment.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;References:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.springsource.org/node/3026"&gt;http://www.springsource.org/node/3026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.springsource.com/2011/02/23/spring-3-1-m1-caching/"&gt;http://blog.springsource.com/2011/02/23/spring-3-1-m1-caching/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.springsource.com/index.php?s=3.1+M1"&gt;http://blog.springsource.com/index.php?s=3.1+M1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Forum Discussion. &amp;nbsp;&lt;a href="http://forum.springsource.org/showthread.php?t=103372"&gt;http://forum.springsource.org/showthread.php?t=103372&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Forum Discussion.&amp;nbsp;&lt;a href="http://forum.springsource.org/showthread.php?t=103802"&gt;http://forum.springsource.org/showthread.php?t=103802&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&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/8836501415071594779-7647248217743284095?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MzQH3hwd74TL0IYCZm5ytPp2vAE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MzQH3hwd74TL0IYCZm5ytPp2vAE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MzQH3hwd74TL0IYCZm5ytPp2vAE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MzQH3hwd74TL0IYCZm5ytPp2vAE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/8uS3c-r66X4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/7647248217743284095/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=7647248217743284095" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/7647248217743284095?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/7647248217743284095?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/8uS3c-r66X4/spring-31-with-cache-and-orm.html" title="Spring 3.1 with Cache and ORM technologies" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.jframeworks.com/2011/03/spring-31-with-cache-and-orm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcMRn48eyp7ImA9WhZTFUo.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-1786292543037953508</id><published>2010-04-25T10:53:00.000-04:00</published><updated>2011-03-19T17:28:07.073-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T17:28:07.073-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Fast Forward To MVC 'ONE'</title><content type="html">&lt;div style="text-align:justify;"&gt;Recently, I worked on adding a feature to legacy webapp of my client, based upon MVC one model. And  it's simplicity and getting work done, made me think again, about MVC one based webapps. I am always on hunt for simple web framework, which i can embark on for proof of concept of my startup ideas.&lt;/div&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;This is year 2010 and we as java developers, have spent countless time in arguing and reading (fun though) about various java web frameworks in play. Many bloggers publish their findings, opinions and countless others copied their content, republished them anyway. One common subject has been, which web framework? Cult is increasing everyday, for Spring MVC, Wicket, now JBoss Seam. I had personally spent time thinking about choosing one framework of choice, for my own projects, but I could never conclude on one. Spring MVC has become strong contender and safe choice, because I will be using spring for services and data access layer. Have we ever took step back and thought, we have surrounded ourselves plethora of frameworks for unlimited reasons, but never thought of ROI and time to market any product. Java always been treated as enterprise solution for big companies with big projects with big budgets. What about simple B2C startup projects which has limited user base and no funds. In today's real web applications, PHP is thriving as before. People are still coding &amp;amp; adding more to PHP based projects. And those projects have been more successful and widely accepted. Example would be 'WordPress' , 'Drupal', 'OSCommerce'. (Even springframework.org used drupal. Not sure whether they still using it). So what is main charishma or any characteristics of PHP? We all have argued, bloggoed about How PHP is inferior compare to Java, but PHP is productive.&lt;/div&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;Having said that, lets come to drawing board, as new developer or even CIO of a company. What we need in a web application (lets assume startup webapp, upto 100 concurrent users in one cluster)&lt;/div&gt;&lt;br/&gt;&lt;div style="text-align:justify;padding-left:30px;"&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li style="text-align:left;"&gt;Pretty interface, which users to love to use it. (Example mint.com)&lt;/li&gt;&lt;br/&gt;	&lt;li style="text-align:left;"&gt;Interactive &amp;amp; Intuitive interface.&lt;/li&gt;&lt;br/&gt;	&lt;li style="text-align:left;"&gt;Functional interface. It does what it promises and always does that.&lt;/li&gt;&lt;br/&gt;	&lt;li style="text-align:left;"&gt;Low or almost NIL learning curve for any new developer.&lt;/li&gt;&lt;br/&gt;	&lt;li style="text-align:left;"&gt;Able to extend interface + functionality by 3rd party developers. (That strives any web product)&lt;/li&gt;&lt;br/&gt;	&lt;li style="text-align:left;"&gt;Quick turn around of code to market&lt;/li&gt;&lt;br/&gt;	&lt;li style="text-align:left;"&gt;Able to remove or disable code or by choice of end user. (user is deployer)&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;div style="text-align:left;"&gt;Having listed all the requirements, how many requirements really demand for use of MVC II framework?&lt;/div&gt;&lt;br/&gt;&lt;div&gt;First two are more of DHTML only.&lt;/div&gt;&lt;br/&gt;&lt;div&gt;Number 3 is quality of code and how well tested code is.&lt;/div&gt;&lt;br/&gt;&lt;div&gt;Number 4 is not good for MVC II frameworks like spring or wicket or even struts. They have some learning curve and you need resources, comfortable on that.&lt;/div&gt;&lt;br/&gt;&lt;div&gt;Number 5, people can argue, here MVC II excels. But at what cost? Lets analyze that more (I will use example of Spring MVC, because of popularity. Nothing against it)&lt;/div&gt;&lt;br/&gt;&lt;div style="padding-left:30px;"&gt;First drawback is, to write any java code, you need to be java developer. It eliminates pool of casual web programmers who just like to write scripting (like PHP) and DHTML. Second is, if you write anything in JAVA, webapp has to be repackaged (and ofcourse released again). So there is no on-fly programming or releasing code on running webapp. (Lets forget about OSGi for now. It's different ball game).&lt;/div&gt;&lt;br/&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;div&gt;&lt;em&gt;&lt;span style="text-decoration:underline;"&gt;What about writing code using JSPs only?&lt;/span&gt;&lt;/em&gt;&lt;/div&gt;&lt;br/&gt;That's this post is all about. I know, many of you, thinking, c'mon man, Nineties called, they want their MVC one back. But lets entertain this idea for a while. For example, I want to write simple webapp 'java press' blogging engine, able to deploy it with in couple of weeks and my available heap size is 64MB (pretty common for VPS plans). If I go by spring mvc route, it will take me a couple of weeks, just enough to setup my environment, DBs, etc etc. I will have re-hash my knowledge of spring, and spring mvc controllers etc etc. But if I just pick JSPs model, i am ready to convert static HTMLs with-in a day.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;div style="text-align:justify;padding-left:30px;"&gt;Using JSPs and JSTL tags, I get lots of java functionality baked in. I can divide my jsps using includes (keeping option of apache tiles open). I can keep two sets of JSPs, presentation jsp and worker jsps. I can use extensively extra request parameters, to drive backend jsp, where to forward or redirect my request after finishing work.&lt;/div&gt;&lt;br/&gt;&lt;div style="text-align:justify;padding-left:30px;"&gt;If we still on this concept, few custom tags can be written and being delivered as part of SDK. So anyone who wants to customize it or extend it, he has JSPs, JSTL and some custom util tags at his disposal.&lt;/div&gt;&lt;br/&gt;&lt;blockquote&gt;&lt;br/&gt;&lt;div style="text-align:justify;padding-left:30px;"&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;div style="text-align:justify;padding-left:30px;"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Advantages or trying to look at positive aspects.&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br/&gt;&lt;div style="text-align:justify;padding-left:30px;"&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;For deployments for small companies or concept deliveries or Y combinator kinda projects, time to deliver is small.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;You don't have to muck around which framework to use. You think of doing something, and you doing it.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Think of 3rd party developers pool, you get access to. If you document well, even PHP developer can pick JSP skills in few days and write JSPs for your webapp. (Imagine hiring PHP developer for spring MVC work. I don't have time &amp;amp; budget for training).&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;With new JEE specs coming out, you are always safe to upgrade your app and take advantages of new features without rewriting anything. (That's what spring says, we give you another layer of abstraction. But you have upgrade code for spring 3.x now, isn't it?)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;For scalability, it's cheaper than before, clustering solutions based upon clouds. So my one deployment supports 50 concurrent sessions, I will just throw couple extra virtual tomcat instances, with in same cloud instance. or couple other different ways.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;I am less worried about performance, because recent benchmarks for tomcat 6 using JDK 6, is impressive.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Using data source pooling, getting connections from JSP isn't resource intensive. (As part of SDK, some classes with static methods can provided, to provide some encapsulation on common used API calls)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;web.xml supports basic security model. And again, as part of SDK, some common servlet filters can be provided for cross cutting concerns like security, logging, transactions.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;DB Caching can be ignored for now, assuming DB server and tomcat instance are co-located or installed in same instance. Caching adds lots of code maintenance, research &amp;amp; testing. Benefits of using caching diminishes in small db and small users.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Well known advantage of JSP, do code change and see changes immediately on web browser. Hence time to see results, while doing development is almost nil. We all have taken coffee breaks in our past projects while waiting for server to bounce.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;div style="text-align:justify;padding-left:30px;"&gt;This post is &lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;not&lt;/span&gt; &lt;/strong&gt;comparison between MVC I and MVC II model. It's more of another look at MVC I model and putting on my thoughts, why It could make sense to use it.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-1786292543037953508?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/y_QFokVyzALF9gsx924s-itEgjM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y_QFokVyzALF9gsx924s-itEgjM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/y_QFokVyzALF9gsx924s-itEgjM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y_QFokVyzALF9gsx924s-itEgjM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/-OFGmVeIRco" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/1786292543037953508/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=1786292543037953508" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/1786292543037953508?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/1786292543037953508?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/-OFGmVeIRco/fast-forward-to-mvc.html" title="Fast Forward To MVC &amp;#39;ONE&amp;#39;" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.jframeworks.com/2010/04/fast-forward-to-mvc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcBQ3w9eCp7ImA9WhZTFUo.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-9071453797774846281</id><published>2009-11-08T17:37:00.000-05:00</published><updated>2011-03-19T17:27:32.260-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T17:27:32.260-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon ec2" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><title>Running MySQL on Amazon EC2 with Elastic Block Store (another take)</title><content type="html">&lt;strong&gt;Summary: &lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I have been following ‘Eric Hammod’ &lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?categoryID=100&amp;amp;externalID=1663" target="_blank"&gt;article&lt;/a&gt; on how to setup MySQL so that, it survives EC2 instance termination or restarts.  That article is one of best article but it’s too much for my requirements. So I came up with some more simple steps to host MySQL files on EBS volume. Many parts of Eric’s article still applies like how to create EBS volume and how to create snapshot of EBS.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;How it is different from Eric’s version.&lt;/strong&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;Eric’s article is solving this problem by mounting original locations as mirror of EBS locations. In case of restart, you will have to fix fstab file. In my case, you will have to fix my.cnf file. I rather not touch fstab file.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;My purpose, just to do enough, to save my MySQL data files in case of my instance crashes/restarts. Hence I don’t care of configuring log files location.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;I am using elastic fox plugin for creating EBS volume etc. Able to avoid ec2 tools. (if you planning to do lots of work, better spend some time setting up tools and get familiarized.)&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;strong&gt;Pre-requisites for readers&lt;/strong&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;You are familiar with Amazon EC2 images and how to play with them.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;You already have installed MySQL and it is successfully running.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;strong&gt;How to configure MySQL to use data files on EBS.&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I have created 10G EBS volume and mounted that volume to /mnt/jframeworks. Attach volume to instance (as /dev/sdf). I used Elasticfox firefox plugin. Using amazon ec2 tools was getting too much time consuming.&lt;br/&gt;&lt;br/&gt;Let’s create a new user also, make his home on EBS only, to start with. Adding new user is not necessary for this purpose. But I think, it is good idea to create new user and use that user for all new changes starting from fresh EC2 image.&lt;br/&gt;&lt;pre&gt;sudo useradd -d /mnt/jframeworks/home/&amp;lt;newuser&amp;gt; -m &amp;lt;newuser&amp;gt;&lt;br/&gt;sudo passwd &amp;lt;newuser&amp;gt;&lt;br/&gt;sudo usermod -a -G admin &amp;lt;newuser&amp;gt; -s /bin/bash&lt;br/&gt;sudo usermod -s /bin/bash &amp;lt;newuser&amp;gt; (may not be needed)&lt;br/&gt;sudo mkfs -t ext3 /dev/sdf&lt;/pre&gt;&lt;br/&gt;(Formatting as ext3. Being linux noob, not sure, why xfs filesystem as mentioned in Eric’s article.)&lt;br/&gt;&lt;pre&gt;sudo mkdir /mnt/jframeworks&lt;br/&gt;sudo mount /dev/sdf /mnt/jframeworks&lt;/pre&gt;&lt;br/&gt;&lt;em&gt; &lt;/em&gt;&lt;br/&gt;&lt;br/&gt;First create required data directory on mounted EBS volume&lt;br/&gt;&lt;pre&gt;mkdir /mnt/jframeworks/var&lt;br/&gt;mkdir /mnt/jframeworks/var/lib&lt;/pre&gt;&lt;br/&gt;&lt;em&gt; &lt;/em&gt;&lt;br/&gt;&lt;br/&gt;Copy MySQL libs to EBS directory&lt;br/&gt;&lt;pre&gt;cp -a /var/lib/mysql /mnt/jframeworks/var/lib/&lt;/pre&gt;&lt;br/&gt;&lt;em&gt; &lt;/em&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#ff0000;"&gt;Note&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;Remember to use “-a” flag while copying.&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;&lt;em&gt; &lt;/em&gt;&lt;br/&gt;&lt;br/&gt;MySQL settings are stored in my.cnf file, available at /etc/mysql.&lt;br/&gt;&lt;br/&gt;Hence change /etc/mysql/my.cnf file to change data directory to new location&lt;br/&gt;&lt;br/&gt;In this example, here it looks like -&amp;gt;&lt;br/&gt;&lt;pre&gt;datadir = /mnt/jframeworks/var/lib/mysql&lt;/pre&gt;&lt;br/&gt;&lt;em&gt; &lt;/em&gt;&lt;br/&gt;&lt;br/&gt;AppArmor is new tool, which is being used in ubuntu by default. Hence lets fix that too.&lt;br/&gt;&lt;pre&gt;sudo vi /etc/apparmor.d/*mysqld, replicate lines /var/lib/mysql** with new data dir location&lt;/pre&gt;&lt;br/&gt;Now finally, lets restart MySQL and AppArmor, to make changes in effect.&lt;br/&gt;&lt;pre&gt;sudo /etc/init.d/apparmor restart&lt;br/&gt;sudo /etc/init.d/mysqld restart&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-9071453797774846281?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Mq84H0kUVa-P_saIVoQ1JD0S7pQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mq84H0kUVa-P_saIVoQ1JD0S7pQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Mq84H0kUVa-P_saIVoQ1JD0S7pQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mq84H0kUVa-P_saIVoQ1JD0S7pQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/uyERvw3kd7o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/9071453797774846281/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=9071453797774846281" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/9071453797774846281?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/9071453797774846281?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/uyERvw3kd7o/running-mysql-on-amazon-ec2-with.html" title="Running MySQL on Amazon EC2 with Elastic Block Store (another take)" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.jframeworks.com/2009/11/running-mysql-on-amazon-ec2-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ABRno5eCp7ImA9WhZTFUs.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-2101865756334204283</id><published>2009-10-31T12:39:00.000-04:00</published><updated>2011-03-19T17:22:37.420-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T17:22:37.420-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="spring framework" /><title>Spring scope using Example</title><content type="html">&lt;p style="text-align:justify;"&gt;This post is about to experiment about spring framework 'singleton' and 'prototype' scope. I created couple of tests to show proof of concept and clear our understanding of 'singleton' scope.&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align:justify;"&gt;Those are new or fairly new to spring framework, they sometimes get confused, when they read the term 'singleton' in spring beans. As traditionally, we know, Singleton class pattern makes sure, we have single instance of that class &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;per jvm&lt;/span&gt;&lt;span style="font-style:normal;"&gt;. But when we talk about singleton pattern in spring framework world or lets say spring context world,  it's singleton pattern applied per spring container. Now we can have multiple containers initiated in a java virtual machine, hence we can have multiple instance of same class possible, but single instance per container per bean definition. &lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;Example, Lets use simple java bean, which stores it's own creation time and also defines equals method to check that equality.&lt;br/&gt;&lt;code&gt;&lt;br/&gt;public class SpringBean {&lt;br/&gt;private long createTime;&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;&lt;code&gt;public SpringBean()&lt;br/&gt;{&lt;br/&gt;this.createTime = System.currentTimeMillis();&lt;br/&gt;}&lt;/code&gt;&lt;br/&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;&lt;code&gt;public boolean equals(final Object obj) {&lt;br/&gt;if (this == obj) {&lt;br/&gt;return true;&lt;br/&gt;}&lt;br/&gt;if (obj == null) {&lt;br/&gt;return false;&lt;br/&gt;}&lt;br/&gt;if (this.getClass() != obj.getClass()) {&lt;br/&gt;return false;&lt;br/&gt;}&lt;br/&gt;SpringBean other = (SpringBean) obj;&lt;br/&gt;if (this.createTime != other.createTime) {&lt;br/&gt;return false;&lt;br/&gt;}&lt;br/&gt;return true;&lt;br/&gt;}&lt;br/&gt;}&lt;/code&gt;&lt;br/&gt;&lt;span style="font-family:monospace;"&gt;My spring context file defined only two beans&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="font-family:monospace;"&gt; &lt;/span&gt;&lt;br/&gt;&lt;div id="_mcePaste" style="left:-10000px;width:1px;position:absolute;top:600px;height:1px;"&gt;&amp;lt;bean id="singletonBean"/&amp;gt;&lt;/div&gt;&lt;br/&gt;&lt;div id="_mcePaste" style="left:-10000px;width:1px;position:absolute;top:600px;height:1px;"&gt;&amp;lt;bean id="prototypeBean" scope="prototype"/&amp;gt;&lt;/div&gt;&lt;br/&gt;&lt;p style="text-align:justify;"&gt; &lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;&amp;lt;bean id="singletonBean" class="com.jframeworks.learn.SpringBean"/&amp;gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&amp;lt;bean id="prototypeBean" class="com.jframeworks.learn.SpringBean" scope="prototype"/&amp;gt;&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Both beans use same class but different scope. Lets define a testsuite class which will initiate these beans and run some basic tests.&lt;br/&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;&lt;span style="font-family:monospace;"&gt;Class: SpringScopeTestSuite, method = runTests&lt;/span&gt;&lt;br/&gt;&lt;code&gt;&lt;br/&gt;public SpringScopeTestSuite(ApplicationContext ctx, ApplicationContext ctx2) {&lt;br/&gt;this.ctx = ctx;&lt;br/&gt;this.ctx2 = ctx2;&lt;br/&gt;}&lt;br/&gt;...............&lt;br/&gt;public void runTests(String name) throws InterruptedException&lt;br/&gt;{&lt;br/&gt;SpringBean singletonBean0 = this.getBeanUsingContext("singletonBean");&lt;br/&gt;Thread.sleep(50);//To make sure, next bean from context is at different timestamp.&lt;br/&gt;SpringBean singletonBean1 = (SpringBean) this.getCtx().getBean("singletonBean");&lt;br/&gt;Thread.sleep(50);&lt;br/&gt;SpringBean protoTypeBean0 = (SpringBean) this.getCtx().getBean("prototypeBean");&lt;br/&gt;Thread.sleep(50);&lt;br/&gt;SpringBean protoTypeBean1 = (SpringBean) this.getCtx().getBean("prototypeBean");&lt;br/&gt;&lt;/code&gt;&lt;code&gt;Thread.sleep(50);&lt;br/&gt;SpringBean singletonBean2 = (SpringBean) this.getCtx2().getBean("singletonBean");&lt;br/&gt;Thread.sleep(50);&lt;br/&gt;SpringBean protoTypeBean2 = (SpringBean) this.getCtx2().getBean("prototypeBean");&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;&lt;code&gt;System.out.println(name + " =====================================================");&lt;br/&gt;System.out.println(name + " Equality Tests");&lt;br/&gt;System.out.println(name + " =====================================================");&lt;br/&gt;System.out.println(name + " Two beans references with Scope 'singleton'");&lt;br/&gt;System.out.println(name + " singletonBean0.equals(singletonBean1) = " + singletonBean0.equals(singletonBean1));&lt;br/&gt;System.out.println(name + " singletonBean1.equals(singletonBean2) = " + singletonBean1.equals(singletonBean2));&lt;br/&gt;System.out.println(name + " singletonBean1.equals(protoTypeBean1) = " + singletonBean1.equals(protoTypeBean1));&lt;br/&gt;System.out.println(name + " protoTypeBean0.equals(protoTypeBean1) = " + protoTypeBean0.equals(protoTypeBean1));&lt;br/&gt;System.out.println(name + " protoTypeBean1.equals(protoTypeBean2) = " + protoTypeBean1.equals(protoTypeBean2));&lt;br/&gt;System.out.println(name + " =====================================================");&lt;br/&gt;}&lt;br/&gt;&lt;/code&gt;&lt;br/&gt;&lt;span style="font-family:monospace;"&gt;To run this test, lets define test runner class, 'BasicSpringScopeTest'&lt;/span&gt;&lt;br/&gt;&lt;code&gt;&lt;br/&gt;public class BasicSpringScopeTest&lt;br/&gt;{&lt;br/&gt;public static void main( final String[] args )&lt;br/&gt;{&lt;br/&gt;try {&lt;br/&gt;ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationConfig.xml");&lt;br/&gt;ApplicationContext ctx2 = new ClassPathXmlApplicationContext("applicationConfig.xml");&lt;br/&gt;SpringScopeTestSuite test = new SpringScopeTestSuite(ctx, ctx2);&lt;br/&gt;test.runTests("singleThread");&lt;br/&gt;} catch (Exception ex) {&lt;br/&gt;ex.printStackTrace();&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;}&lt;/code&gt;&lt;br/&gt;Now executing this class, we see this output...&lt;br/&gt;&lt;code&gt;&lt;br/&gt;singleThread =====================================================&lt;br/&gt;singleThread Equality Tests&lt;br/&gt;singleThread =====================================================&lt;br/&gt;singleThread Two beans references with Scope 'singleton'&lt;br/&gt;singleThread singletonBean0.equals(singletonBean1) = true&lt;br/&gt;singleThread singletonBean1.equals(singletonBean2) = false&lt;br/&gt;singleThread singletonBean1.equals(protoTypeBean1) = false&lt;br/&gt;singleThread protoTypeBean0.equals(protoTypeBean1) = false&lt;br/&gt;singleThread protoTypeBean1.equals(protoTypeBean2) = false&lt;br/&gt;singleThread =====================================================&lt;br/&gt;&lt;/code&gt;&lt;br/&gt;&lt;p style="text-align:justify;"&gt;&lt;em&gt;Analysis.&lt;/em&gt;&lt;br/&gt;As singletonBean0 and singletonBean1 comes from same container, and their scope is default 'singleton', hence they are &lt;span style="text-decoration:underline;"&gt;&lt;em&gt;same instance&lt;/em&gt;&lt;/span&gt;.&lt;br/&gt;&lt;p style="text-align:justify;"&gt;singletonBean1 and singletonBean2, though are same bean and 'singleton' scope, &lt;em&gt;but &lt;/em&gt;they comes from different container. Hence they are &lt;span style="text-decoration:underline;"&gt;&lt;em&gt;different instance&lt;/em&gt;&lt;/span&gt; of same class.&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align:justify;"&gt;singletonBean1 and prototypeBean1 comes from same container and same class, but prototypeBean1 is different bean definition and 'prototype' scope. Every time, this bean retrieved from container, spring container creates new instance. Hence they are not equals. They are not equal for two reasons&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align:justify;"&gt; &lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;ol style="text-align:justify;"&gt;&lt;br/&gt;	&lt;li&gt;They are two different bean definition (even same class type)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;prototypeBean is defined as 'prototype' scope'&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;Next equality check is for prototypeBean0 and prototypeBean1 beans.  Even they come from same container but they still not equal, because they refer to spring bean defined as 'prototype' scope.&lt;br/&gt;&lt;p style="text-align:justify;"&gt;Last equality check is for prototypeBean1  and prototypeBean2 beans. They are not equal for two reasons..&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;ol style="text-align:justify;"&gt;&lt;br/&gt;	&lt;li&gt;They both comes from different spring container&lt;/li&gt;&lt;br/&gt;	&lt;li style="text-align:justify;"&gt;They refer to spring bean defined as 'prototype' scope.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br/&gt;Spring framework takes away boiler plate code of defining Singleton classes in code base. This aligns with their philosphy of letting developers concentrate on business logic instead of writing boiler plate code.&lt;br/&gt;&lt;br/&gt;Just to be clear, in spring world, a bean definition is singleton &lt;span style="text-decoration:underline;"&gt;&lt;em&gt;not bean class&lt;/em&gt;&lt;/span&gt;. We can have multiple of bean definitions of same class, each representing different singleton class. This makes spring container light weight container. Prototype scope is not used widely, but it can specified depending upon technical requirements.&lt;br/&gt;&lt;br/&gt;For further testing, there is another code, which runs test suite in mutli-threaded environment.&lt;br/&gt;&lt;code&gt;&lt;br/&gt;public class AdvancedSpringScopeTest&lt;br/&gt;{&lt;br/&gt;public static void main( final String[] args )&lt;br/&gt;{&lt;br/&gt;try&lt;br/&gt;{&lt;br/&gt;ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationConfig.xml");&lt;br/&gt;ApplicationContext ctx2 = new ClassPathXmlApplicationContext("applicationConfig.xml");&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;&lt;code&gt;SpringScopeTestSuite testSuite = new SpringScopeTestSuite(ctx, ctx2);&lt;/code&gt;&lt;br/&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt; &lt;br/&gt;&lt;div&gt;&lt;code&gt;Thread thread1 = new Thread(testSuite, "thread1");&lt;br/&gt;Thread thread2 = new Thread(testSuite, "thread2");&lt;br/&gt;Thread thread3 = new Thread(testSuite, "thread3");&lt;/code&gt;&lt;/div&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;&lt;code&gt;&lt;/code&gt; &lt;br/&gt;&lt;br/&gt;&lt;code&gt;}&lt;br/&gt;catch (Exception ex)&lt;br/&gt;{&lt;br/&gt;ex.printStackTrace();&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;&lt;/code&gt;&lt;br/&gt;This class output is..&lt;br/&gt;&lt;code&gt;&lt;br/&gt;thread2 =====================================================&lt;br/&gt;thread2 Equality Tests&lt;br/&gt;thread2 =====================================================&lt;br/&gt;thread2 Two beans references with Scope 'singleton'&lt;br/&gt;thread1 =====================================================&lt;br/&gt;thread1 Equality Tests&lt;br/&gt;thread1 =====================================================&lt;br/&gt;thread1 Two beans references with Scope 'singleton'&lt;br/&gt;thread1 singletonBean0.equals(singletonBean1) = true&lt;br/&gt;thread3 =====================================================&lt;br/&gt;thread1 singletonBean1.equals(singletonBean2) = false&lt;br/&gt;thread2 singletonBean0.equals(singletonBean1) = true&lt;br/&gt;thread2 singletonBean1.equals(singletonBean2) = false&lt;br/&gt;thread2 singletonBean1.equals(protoTypeBean1) = false&lt;br/&gt;thread1 singletonBean1.equals(protoTypeBean1) = false&lt;br/&gt;thread1 protoTypeBean0.equals(protoTypeBean1) = false&lt;br/&gt;thread3 Equality Tests&lt;br/&gt;thread3 =====================================================&lt;br/&gt;thread3 Two beans references with Scope 'singleton'&lt;br/&gt;thread3 singletonBean0.equals(singletonBean1) = true&lt;br/&gt;thread3 singletonBean1.equals(singletonBean2) = false&lt;br/&gt;thread3 singletonBean1.equals(protoTypeBean1) = false&lt;br/&gt;thread1 protoTypeBean1.equals(protoTypeBean2) = false&lt;br/&gt;thread1 =====================================================&lt;br/&gt;thread2 protoTypeBean0.equals(protoTypeBean1) = false&lt;br/&gt;thread3 protoTypeBean0.equals(protoTypeBean1) = false&lt;br/&gt;thread2 protoTypeBean1.equals(protoTypeBean2) = false&lt;br/&gt;thread2 =====================================================&lt;br/&gt;thread3 protoTypeBean1.equals(protoTypeBean2) = false&lt;br/&gt;thread3 =====================================================&lt;br/&gt;&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;thread1.start();&lt;br/&gt;thread2.start();&lt;br/&gt;thread3.start();&lt;br/&gt;&lt;br/&gt;//make sure, all threads finish.&lt;br/&gt;Thread.sleep(2500);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-2101865756334204283?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cY5YUIe0TwJhDuvD1BfUQmXcH_E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cY5YUIe0TwJhDuvD1BfUQmXcH_E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cY5YUIe0TwJhDuvD1BfUQmXcH_E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cY5YUIe0TwJhDuvD1BfUQmXcH_E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/BJ0Te7QJYXs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/2101865756334204283/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=2101865756334204283" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/2101865756334204283?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/2101865756334204283?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/BJ0Te7QJYXs/spring-scope-using-example.html" title="Spring scope using Example" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.jframeworks.com/2009/10/spring-scope-using-example.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ABRn07fip7ImA9WhZTFUs.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-8178805545993486595</id><published>2009-10-24T16:38:00.000-04:00</published><updated>2011-03-19T17:22:37.306-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T17:22:37.306-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="design pattern" /><title>To Interface or NOT for Value Beans in Java</title><content type="html">&lt;h3&gt;What is a Java Interface&lt;/h3&gt;&lt;br/&gt;&lt;h4&gt;&lt;strong&gt;From java.sun.com&lt;/strong&gt;&lt;/h4&gt;&lt;br/&gt;&lt;blockquote&gt;There are a number of situations in software engineering when it is important for disparate groups of programmers to agree to a "contract" that spells out how their software interacts. Each group should be able to write their code without any knowledge of how the other group's code is written. Generally speaking, &lt;em&gt;interfaces&lt;/em&gt; are such contracts.&lt;/blockquote&gt;&lt;br/&gt;In this blog,  I am trying to present very common design pattern in projects, which I kind of don't agree with.&lt;br/&gt;&lt;br/&gt;This pattern is to define &lt;em&gt;Interface&lt;/em&gt; for all data beans and value beans.  In most of the projects, I have worked in past (and current one too), I have observed, &lt;em&gt;Architects&lt;/em&gt; have defined &lt;em&gt;interface &lt;/em&gt;for any kind of bean flowing between layers of software.&lt;br/&gt;&lt;br/&gt;For example  'Person' and associated 'Address' bean.  So, there will be a &lt;em&gt;Person&lt;/em&gt; interface and an &lt;em&gt;Address&lt;/em&gt; interface. And there will be 'PersonImpl' and 'AddressImpl' object implementing respective interfaces.  Now &lt;em&gt;Person &lt;/em&gt;interface has common getters and setters for properties like name, age, height and &lt;em&gt;Address&lt;/em&gt; interface has getters &amp;amp; setters for addressLine1, addressLine2, city, zipcode, country etc.  So we can imagine implementing classes have defined class variables for corresponding each getter and setter. Now big question comes to mind, Why we have defined interface for this object? Why not to keep single class Person having getter/setter and it's class variables.&lt;br/&gt;&lt;h4&gt;Common Reasons (and why I think, they are wrong)&lt;/h4&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;It can have multiple, different implementations&lt;/span&gt;. As I have heard from architects, they just want to expose interface to integrating layers/client. And if later on, we change implementation, it won't visible or require any code change on their side. Well, why we will have different implementations, in first place? These beans have getter and setter of certain property. How come you can have different implementation?&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;We want integrating client to write their own implementation&lt;/span&gt;&lt;em&gt;.&lt;/em&gt; Again, why? It's simple data bean carrying data around. I think, this is another example of 'abuse' of interfaces by architects who are following more of text books version, instead of thinking out of box. Interfaces are contracts of expected behavior of operations, not data beans. Data beans doesn't have behavior, they are mere payload objects. If they are more than payload, then I would put your design in question.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;To support legacy objects.&lt;/span&gt; Argument is, their legacy code of databeans have behavior. Now to bridge to new version of software, they need to use interfaces for databeans. Hence they provide bridged data beans implementing new data beans. And later on, when they move away from legacy, we will just use new implementation of interface. This is clear sign of 'design' smell. If you want to bridge to legacy code, then use bridge services objects. Bridged services will take care of handling legacy operations on legacy bean. Your new beans shouldn't have any kind of behavior, encapsulating or hiding legacy smell. That was main reason to start new project, right?&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;So that, we can have multiple inheritance.&lt;/span&gt;&lt;em&gt; &lt;span style="font-style:normal;"&gt;If your data bean's getters/setters are not suppose to have different kind of implementation, hence why different objects will implement same implementation. Those different objects rather extend common super implementing class.&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;em&gt; (write in comments, I will add here)&lt;/em&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;h4&gt;Problems I have faced and I hate it&lt;/h4&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Whenever I need to add/remove any property, first you will have to fix interface. Hence doubling my effort in refactoring.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;If same interface is implemented somewhere else, then changing interface (in prev step), I will have to change all other classes too. Question comes, why other implementing class, just simple extends original class.  They all are data beans,  no behavior.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Only behavior, data beans/value beans (must) contain, implementing equals() and hashCode() methods.  Well, we get those as part of Object class. Another possible 'operations' can from other interfaces like 'Comparable' or 'Serializable'. If you get gist of it, none of  interfaces defined operations as accessors for properties.&lt;br/&gt;&lt;br/&gt;In end, I am trying to advocate, to keep java programming simple and productive. Yes, we can boost of designing complex mutli-layered system, but at the cost of productivity and maintainability. Lets keep any kind of operability or logic in business classes.  Any logic or code in data beans, is destined for future refactoring some time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-8178805545993486595?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KgPI1uZr0h9DJsIeIOVdnhtQSCQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KgPI1uZr0h9DJsIeIOVdnhtQSCQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KgPI1uZr0h9DJsIeIOVdnhtQSCQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KgPI1uZr0h9DJsIeIOVdnhtQSCQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/3RB0_axCiN0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/8178805545993486595/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=8178805545993486595" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/8178805545993486595?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/8178805545993486595?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/3RB0_axCiN0/to-interface-or-not-for-value-beans-in.html" title="To Interface or NOT for Value Beans in Java" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.jframeworks.com/2009/10/to-interface-or-not-for-value-beans-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ABQncycCp7ImA9WhZTFUs.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-1747133745868900037</id><published>2009-10-02T05:04:00.000-04:00</published><updated>2011-03-19T17:22:33.998-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T17:22:33.998-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon ec2" /><category scheme="http://www.blogger.com/atom/ns#" term="j2ee server" /><category scheme="http://www.blogger.com/atom/ns#" term="webhosting" /><category scheme="http://www.blogger.com/atom/ns#" term="aws" /><title>Why I decided to host website using Amazon EC2</title><content type="html">&lt;h2&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/h2&gt;&lt;br/&gt;Cloud computing is something, we been listening and reading about from past couple of years.  From my perspective, it is virtual machines running on virtualized hardware. Hence giving us dual benefit  of running any image on any kind of hardware. We can dynamically launch any image and also dynamically expand/reduce available hardware capacity. Hence the word 'Elastic' &amp;amp; 'Cloud'. In cloud computing world, amazon is more established compare to others.  So rest of article will use Amazon EC2. Amazon elastic computing allows user to launch any image (from their growing library of public images). They are called 'AMI's. You pay per use of images. (hourly usage rate plans). Hence it makes it easy to choose any image w/o binding to any contract.&lt;br/&gt;&lt;h3&gt;Why cloud computing is better than tradition web hosting?&lt;/h3&gt;&lt;br/&gt;&lt;span style="text-decoration:underline;"&gt;&lt;em&gt;Answer is, it is not&lt;/em&gt;.&lt;/span&gt; If you looking to run simple apache web server and few php based applications then web hosting companies give best pricing and pre-configured applications.  Decision comes, if you looking for better hardware and more RAM for your applications.&lt;br/&gt;&lt;p&gt;&lt;br/&gt;&lt;em&gt;&lt;span style="text-decoration:underline;"&gt;Pros, Comparing amazon EC2 smallest image &amp;amp; virtual private server (VPS) plans.&lt;/span&gt;&lt;/em&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt; Amazon EC2 guarantees one CPU core whereas 4-5 VPS images run per CPU core.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; RAM available is 1.7GB for EC2 instance and VPS gives maximum of 512MB to 756MB (for plans &amp;gt;$40/mo) (for simultaneous multiple J2EE web applications, you wish for more RAM.)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; Available capacity is elastic. You can expand it as required, compare to fixed capacity available in VPS/Dedicated plans.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; Once you finished configuring your images, you can make current installation as another image incase you want multiple instances running.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; Amazon EC2 instance are running with better reliable infrastructure comparing.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; If you pre-pay for EC2 account, your average cost of running website 24x7, for whole month comes to $42 something, which is comparable to good VPS plans with lots of memory.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;Hence comparing to dedicated hosting, amazon ec2 seems to be better option, if we start comparing relability factor, ability to instantly increase computing capacity, price and many other options.&lt;br/&gt;&lt;/p&gt;&lt;br/&gt;I decided to give it try to move my website.&lt;br/&gt;&lt;p&gt;&lt;br/&gt;&lt;h3&gt;Other factors to consider&lt;/h3&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt; 1.7 GB of available RAM and 160 GB of drive capacity, gives me chance to run java apps w/o worrying about available memory.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; It was learning experience for me, (as average user of linux OS).&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; It's easy to install applications on ubuntu image. (same goes for other OS like fedora/centOS).&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; I can run MySQL &amp;amp; PostGres DB server together, as required.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; Java tomcat web server seems to be good enough, but I can try some other servers like glassfish or jboss for better experience.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; Using it as subversion server. Ping time &amp;amp; bandwidth is better than other servers.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt; Will be using as build server &amp;amp; agent both. (Most probably open source project 'Hudson').&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-1747133745868900037?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sg6BtR0d80vyY3TTqOii0LncScg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sg6BtR0d80vyY3TTqOii0LncScg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sg6BtR0d80vyY3TTqOii0LncScg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sg6BtR0d80vyY3TTqOii0LncScg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/9PJFmWlAnR4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/1747133745868900037/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=1747133745868900037" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/1747133745868900037?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/1747133745868900037?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/9PJFmWlAnR4/why-i-decided-to-host-website-using.html" title="Why I decided to host website using Amazon EC2" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.jframeworks.com/2009/10/why-i-decided-to-host-website-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4FRnk_eip7ImA9WhZTFUs.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-7261759653218120209</id><published>2008-07-03T12:01:00.000-04:00</published><updated>2011-03-19T17:08:37.742-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T17:08:37.742-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="java based CMS" /><title>Java Products BUT PHP based website ?</title><content type="html">&lt;div id="zlkh" style="text-align:left;"&gt;&lt;span id="zlkh0" style="background-color:#93c47d;font-size:130%;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;&lt;span id="zlkh0" style="background-color:#93c47d;font-size:130%;"&gt;&lt;span id="ztar2" style="background-color:#ffffff;"&gt;&lt;span id="qxa5" style="font-size:85%;"&gt;I am starting to run a website which features java and j2ee products. That site would be more of ecosystem containing forums, blogs, demos for webapps etc.  I am java developer, good in web development using j2ee technologies in JSP, JScripts, HTML. Ofcourse if I want to build a website, first thing I think is JSP and which container.  (Container is pretty much standard, Tomcat for webapps). Hence quest for nice CMS application or portal application begins.   So instead of researching and spending time what container and framework would be fine, I decide to look at major java sites infrastructure.  I was pretty sure, for starters like me, it's easier to replicate their website technologies than build myself.  So here what I find. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;ul id="g85j1"&gt;&lt;br/&gt;	&lt;li id="g85j2"&gt;http://www.springframework.org  - Running in drupal (PHP based content management site)&lt;/li&gt;&lt;br/&gt;	&lt;li id="g85j3"&gt;I recently read blog about "Java Parallel Processing Framework". When I visited their site, again it was PHP.&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp"&gt;And many many others.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;It has definitely ticked me off, what's so wrong with j2ee technologies, to run a even simple website.  Everyone knows that JSP is far superior technology than PHP.  So why j2ee evangelist, who live, eat, blog, earn using jsp, BUT not build their product site using JSP?   For simple static site, just HTML is good. No doubt about it. But we try to wrap it up with some dynamic UI page, just in case.  Ok so lets wrap that HTML page in JSP. but why PHP?   Number of reasons, I think, might be?&lt;/div&gt;&lt;br/&gt;&lt;ol id="rsp6"&gt;&lt;br/&gt;	&lt;li id="rsp60"&gt;There is no simple content management system (CMS) in JSP world&lt;/li&gt;&lt;br/&gt;	&lt;li id="rsp61"&gt;There are not enough JSP/Tomcat hosting available.&lt;/li&gt;&lt;br/&gt;	&lt;li id="rsp63"&gt;We are using 3rd party hosting team, which prefers to use PHP&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp0"&gt;There are many tools available in PHP, hence running whole website makes more sense.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;Lets try to dissect each one by one.  &lt;strong&gt; &lt;/strong&gt;&lt;/div&gt;&lt;br/&gt;&lt;div id="mihp1" style="text-align:left;"&gt;&lt;strong&gt;There is no simple content management system in JSP world&lt;/strong&gt; Yes there are.&lt;br/&gt;&lt;ul id="hl-j"&gt;&lt;br/&gt;	&lt;li id="hl-j0"&gt;OpenEdit&lt;/li&gt;&lt;br/&gt;	&lt;li id="hl-j1"&gt;dotCMS&lt;/li&gt;&lt;br/&gt;	&lt;li id="hl-j2"&gt;LifeRay&lt;/li&gt;&lt;br/&gt;	&lt;li id="hl-j3"&gt;Clearspace&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;div id="mihp13" style="text-align:left;"&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;Most of them are available as FREE and almost all are free to open source projects.  This also brings us to interesting point, do we really need CMS application, for my website?  In most of cases, I don't think. If you are only person to change content and you change content lets say every week, then it is lighter to run simple JSP pages.  How many times, you update documentation of product?     (Please be not confused with need to source control. I personally prefer everything should be in source control)&lt;/div&gt;&lt;br/&gt;&lt;strong&gt;There are not enough JSP/Tomcat hosting available. &lt;/strong&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;Over the period of time, with reduce cost of hardware processing and RAM, many good hosting companies are providing tomcat and even jboss hosting.  I don't this as show stopper now, if you want to host site running on tomcat.  Here is list of companies, I researched &lt;span style="text-decoration:underline;"&gt;2 years back&lt;/span&gt;. Of course over the period, ,more companies has added.. and their plan prices has dropped.&lt;/div&gt;&lt;br/&gt;&lt;ul id="jv7y1"&gt;&lt;br/&gt;	&lt;li id="jv7y2"&gt;&lt;span id="jv7y3" class="postbody"&gt;http://www.eapps.com/ManagedHosting/TomcatJSP.jsp &lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y4"&gt;&lt;span id="jv7y5" class="postbody"&gt;http://rimuhosting.com/javahosting.jsp &lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y6"&gt;&lt;span id="jv7y7" class="postbody"&gt;http://www.hostjava.net &lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y8"&gt;&lt;span id="jv7y9" class="postbody"&gt;http://www.DailyRazor.com &lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y10"&gt;&lt;span id="jv7y11" class="postbody"&gt;http://www.lunarpages.com&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y12"&gt;&lt;span id="jv7y13" class="postbody"&gt;http://www.javaservlethosting.com/index.php&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y14"&gt;&lt;span id="jv7y15" class="postbody"&gt;http://www.oxxus.net/java-hosting/features.htm&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y16"&gt;&lt;span id="jv7y17" class="postbody"&gt;http://neospire.net/products.services/j2ee.application.hosting/tomcat.php&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y18"&gt;&lt;span id="jv7y19" class="postbody"&gt;http://www.westhost.com/jsp-hosting.html&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y20"&gt;&lt;span id="jv7y21" class="postbody"&gt;http://www.smedia.info/hosting-j2ee-jsp.asp&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y22"&gt;&lt;span id="jv7y23" class="postbody"&gt;https://www.assortedinternet.com/hosting/jsp-servlet-hosting/&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y24"&gt;&lt;span id="jv7y25" class="postbody"&gt;http://www.capital-internet.net/hosting_shared.jsp&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y26"&gt;&lt;span id="jv7y27" class="postbody"&gt;http://www.hub.org/hosting.php&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y28"&gt;&lt;span id="jv7y29" class="postbody"&gt;http://www.kattare.com/java-servlet-hosting.kvws&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y30"&gt;&lt;span id="jv7y31" class="postbody"&gt;http://www.metawerx.net/&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y32"&gt;&lt;span id="jv7y33" class="postbody"&gt;http://www.mmaweb.net&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y34"&gt;&lt;span id="jv7y35" class="postbody"&gt;http://www.visionwebhosting.net/index.html&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y36"&gt;&lt;span id="jv7y37" class="postbody"&gt;http://jsp-servlet.net/Gold.jsp&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y38"&gt;&lt;span id="jv7y39" class="postbody"&gt;http://www.jwebhosting.net/service.jsp&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y40"&gt;&lt;span id="jv7y41" class="postbody"&gt;https://www.visionwebhosting.net/services.html&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y42"&gt;&lt;span id="jv7y43" class="postbody"&gt;http://www.blacksun.ca/hosting.html&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y44"&gt;&lt;span id="jv7y45" class="postbody"&gt;http://www.echomountain.com/ApplicationInfrastructures.html&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y46"&gt;&lt;span id="jv7y47" class="postbody"&gt;http://www.svwh.net/dedicated_hosting.php&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li id="jv7y48"&gt;&lt;span id="jv7y49" class="postbody"&gt;http://www.kgbinternet.com/index.jsp&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;strong&gt;We are using 3rd party hosting team, which prefers to use PHP &lt;/strong&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;Well, you spending time coding on Tomcat or any other server, how big is deal for you to code JSP or convert html to JSP and throw it in Tomcat.  If you are open source project, then you got volunteers.  If you are commercial product provider, it makes more sense to use j2ee platform. To me, it puts bad impression if you using PHP and selling j2ee based CMS product. :) To me, springframework is getting more interesting, but it's running on Drupal? Their MVC or webflow APIs are not mature enough for this simple site?  &lt;strong&gt; &lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;There are many tools available in PHP, hence running whole website makes more sense.&lt;br/&gt;&lt;/strong&gt;This is one of most important factor, which deciding between JSP and PHP based hosting.  I did some research, I found tools which are not great as PHP counterpart, but they solve the purpose.  &lt;em&gt; For Forums&lt;/em&gt;&lt;/div&gt;&lt;br/&gt;&lt;ul id="kw-44"&gt;&lt;br/&gt;	&lt;li id="kw-45"&gt;jforum.net&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp5"&gt;javabb.org&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp6"&gt;http://www.jivesoftware.com/products/jive-forums&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;em&gt;For wikis&lt;/em&gt;&lt;br/&gt;&lt;ul id="e2rn2"&gt;&lt;br/&gt;	&lt;li id="e2rn3"&gt;xwiki.org&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp7"&gt;JSPWiki&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp8"&gt;SnipSnap&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;em&gt;For Blogs&lt;/em&gt;&lt;br/&gt;&lt;ul id="de7z1"&gt;&lt;br/&gt;	&lt;li id="de7z2"&gt;Apache Roller&lt;/li&gt;&lt;br/&gt;	&lt;li id="de7z3"&gt;Peeble&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;em&gt;Issue Tracking&lt;/em&gt;&lt;br/&gt;&lt;ul id="q66n2"&gt;&lt;br/&gt;	&lt;li id="q66n3"&gt;JIRA&lt;/li&gt;&lt;br/&gt;	&lt;li id="cknc0"&gt;TrackPlus (I just read their announcement on theserverside.com)&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Continous Integration Tools&lt;br/&gt;&lt;ul id="urj21"&gt;&lt;br/&gt;	&lt;li id="urj22"&gt;Cruise Control&lt;/li&gt;&lt;br/&gt;	&lt;li id="urj23"&gt;Continuum&lt;/li&gt;&lt;br/&gt;	&lt;li id="urj24"&gt;Luntbuild&lt;/li&gt;&lt;br/&gt;	&lt;li id="urj25"&gt;Hudson&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;strong&gt;Wishlist: &lt;/strong&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;Most common wish is, 'Single Sign On (SSO)' for all tools.  If it is public website, then I want users to log on once for forums and able to comment to blogs using same profile.  Right now, every product is using some kind of security, like j2ee form based security or Spring security or home grown security code.  They also document, how to do SSO capabilities, but at this point, it seems more of hassle. Anyways, in case of PHP, I don't think, people think about luxuries like SSO.   Above wish, mentioned 'user profile'. I am not able to find mature product, whose whole purpose is to manage user profile. Thinking aloud, brings us to point, user profile is essentailly feature of CMS application. So if I need user profile kinda feature on my public site, I can use CMS application. But can we use same user profile application to manage profiles to all other modules like forums or blog or customer service?    &lt;strong&gt; &lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt; &lt;/strong&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;&lt;strong&gt;Should we always use J2EE for hosting if we are in business of J2EE/Java? &lt;/strong&gt;&lt;br/&gt;Now, I try to look at whole website hosting task at 35,000 feet. Basically, you want to spend minimal resources to get maximum UI experience. So if using vBulletin or phpBB makes my life easier then why I should stick to idealism of using j2ee?  I can try to answer this by using these criteria&lt;br/&gt;&lt;br/&gt;Q: I am selling/open sourcing j2ee product which is related to web-app development?&lt;br/&gt;A: You should use JSP based hosting. It definitely puts good impression. Even better use your product in that webapp if possible.&lt;br/&gt;&lt;br/&gt;Q: I am open source evangelist for java and j2ee but I still want PHP site?&lt;br/&gt;A: Again, you should use JSP. If you can code in PHP, then you can code same functionality in JSP (assuming you are JSP developer)&lt;br/&gt;&lt;br/&gt;Q: I need to use a tool which is perfect in PHP or Python (example Trac or vBulletin)&lt;br/&gt;A: In this situation, using tool like Trac or anything else, shouldn't matter. Basically, productivity matters.      I would suggest to use hybrid solution. (Ofcourse SSO is nearly impossible)&lt;/div&gt;&lt;br/&gt;&lt;strong&gt;&lt;br/&gt;References: &lt;/strong&gt;&lt;/div&gt;&lt;br/&gt;&lt;ul id="urj29"&gt;&lt;br/&gt;	&lt;li id="urj210"&gt;http://www.javaworld.com/javaworld/jw-11-2006/jw-1101-ci.html&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp9"&gt;http://www.javaworld.com/javaworld/jw-03-2007/jw-03-bugs.html?page=2&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp10"&gt;http://java.dzone.com/news/open-source-web-applications-p&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp11"&gt;http://java.dzone.com/news/open-source-web-applications-p-0&lt;/li&gt;&lt;br/&gt;	&lt;li id="mihp12"&gt;http://raibledesigns.com/rd/entry/building_a_website_with_an&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;div style="text-align:justify;"&gt;&lt;strong&gt;Note: &lt;/strong&gt;&lt;br/&gt;I just read few more user comments. Almost every other user is recommending Drupal for CMS/Portal website.  I wish, if something like that comes up in JSP world. If that is made on Spring, it's even better.&lt;/div&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/8836501415071594779-7261759653218120209?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ud4_QapBkdrScS2a1bGoGAIcydk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ud4_QapBkdrScS2a1bGoGAIcydk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ud4_QapBkdrScS2a1bGoGAIcydk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ud4_QapBkdrScS2a1bGoGAIcydk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/Oz0JjsM1QPc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/7261759653218120209/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=7261759653218120209" title="15 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/7261759653218120209?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/7261759653218120209?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/Oz0JjsM1QPc/java-products-but-php-based-website.html" title="Java Products BUT PHP based website ?" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>15</thr:total><feedburner:origLink>http://www.jframeworks.com/2008/07/java-products-but-php-based-website.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8CRHYycSp7ImA9WhZTFUs.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-8229499920059206831</id><published>2007-10-30T16:34:00.000-04:00</published><updated>2011-03-19T17:07:45.899-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T17:07:45.899-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="self employed" /><category scheme="http://www.blogger.com/atom/ns#" term="Everything else" /><category scheme="http://www.blogger.com/atom/ns#" term="finance" /><category scheme="http://www.blogger.com/atom/ns#" term="S-corp" /><category scheme="http://www.blogger.com/atom/ns#" term="LLC" /><title>Difference between LLC Vs S-Corp</title><content type="html">LLC Vs S-Corp&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;The owner of an LLC is considered to be self-employed and, as such, must pay a “self-employment tax” of 15.3% which goes toward social security and Medicare. The entire net income of the business is subject to self-employment tax.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;In an S corporation, only the salary paid to the employee-owner is subject to employment tax. The remaining income that is paid as a distribution is not subject to employment tax under IRS rules. No employment tax on dividends paid to shareholders&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;The self-employment tax rate (15.3%) consists of two parts: 12.4% for social security and 2.9% for Medicare.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;First of all there is nothing such as a 'S Corp' for entity formation purposes. When forming an entity - the state recognizes an entity as either partnerships, LLC or Corporation. S Corp status is ONLY for tax purposes. So after you form a LLC or Corporation and get the EIN, you have to file an election with the IRS (Form 2553) to treat your entity as a S Corp. for tax purposes.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;regarding payroll, the Corp will have to pay 7.15% of the employment taxes and the rest of the 7.15% will be taken from your pay check. So effective you will be paying 15.3% from the corp. Running a payroll is not that costly and you can always signup with ADP/Paychex - who take care of the monthly/quarterly/annual filing of returns and paying payroll taxes. There charge is nominal, which again you can deduct as expense on the corp return.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;If you want a 401(k), you aren't limited to 100% matching. If the employer is a corporation, it can contribute up to 25% of payroll; if you're self-employed, you can contribute up to 20% of self-employment income. Those are in addition to the $15,000 you can contribute as "employee." Note that employee contributions are subject to social security tax, but employer ones aren't. "Payroll" or "self-employment income" is computed WITHOUT deducting employee contributions.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-8229499920059206831?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vf8rkUbCFOCcNPzm6WlYY29G1vk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vf8rkUbCFOCcNPzm6WlYY29G1vk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vf8rkUbCFOCcNPzm6WlYY29G1vk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vf8rkUbCFOCcNPzm6WlYY29G1vk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/2sxdB_oyFpw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/8229499920059206831/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=8229499920059206831" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/8229499920059206831?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/8229499920059206831?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/2sxdB_oyFpw/difference-between-llc-vs-s-corp.html" title="Difference between LLC Vs S-Corp" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.jframeworks.com/2007/10/difference-between-llc-vs-s-corp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8CRHc7eSp7ImA9WhZTFUs.&quot;"><id>tag:blogger.com,1999:blog-8836501415071594779.post-3584396072359837470</id><published>2007-03-05T14:27:00.000-05:00</published><updated>2011-03-19T17:07:45.901-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T17:07:45.901-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="e-commerce" /><category scheme="http://www.blogger.com/atom/ns#" term="Everything else" /><title>Finally starting out</title><content type="html">&lt;div style="text-align:justify;"&gt;&lt;span style="font-size:180%;"&gt;F&lt;/span&gt;inally, I am thinking to think about blogs seriously.&lt;br/&gt;This particular blog page will serve the purpose of publishing my thoughts and findings about web frameworks and web applications for e-commerce (aka shopping cart) related websites.&lt;/div&gt;&lt;br/&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;Why I am starting to write blog?&lt;/span&gt;&lt;br/&gt;First most reason is to make web presence of what I am doing.&lt;br/&gt;I need to get YOUR comments.&lt;br/&gt;&lt;br/&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;Various topics to be covered are&lt;/span&gt;:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Existing e-commerce suites available&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Existing j2ee solutions for e-commerce&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Pros and Cons&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Various observations of different frameworks and existing applications.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;Frameworks and Applications, which I will be blogging about&lt;/span&gt;.&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;ElasticPath, only J2EE complete e-commerce application.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Other shopping cart solutions like MIVA, oscommerce, zencart etc.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;My own open source (?) j2ee shopping cart framework coming up.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8836501415071594779-3584396072359837470?l=www.jframeworks.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0fWNMNI5kPpEHclI912Ung9pZ5c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0fWNMNI5kPpEHclI912Ung9pZ5c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0fWNMNI5kPpEHclI912Ung9pZ5c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0fWNMNI5kPpEHclI912Ung9pZ5c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2eeFrameworks/~4/lQ9vyOCKz_U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jframeworks.com/feeds/3584396072359837470/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8836501415071594779&amp;postID=3584396072359837470" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/3584396072359837470?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8836501415071594779/posts/default/3584396072359837470?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2eeFrameworks/~3/lQ9vyOCKz_U/finally-starting-out.html" title="Finally starting out" /><author><name>Ashish Jain</name><uri>http://www.blogger.com/profile/16797104130948577916</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_OVtsT3lqf5w/TVAilUtprUI/AAAAAAAAG30/j3r8TkahImM/s220/profile.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.jframeworks.com/2007/03/finally-starting-out.html</feedburner:origLink></entry></feed>

