<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Eric F. Savage &#187; Conventions</title>
	<atom:link href="http://efsavage.com/blog/posts/category/conventions/feed/" rel="self" type="application/rss+xml" />
	<link>http://efsavage.com/blog</link>
	<description>Good stuff, updated weekly(ish)</description>
	<lastBuildDate>Fri, 06 Jan 2012 17:35:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Why don&#8217;t websites have credits?</title>
		<link>http://efsavage.com/blog/posts/why-dont-websites-have-credits/</link>
		<comments>http://efsavage.com/blog/posts/why-dont-websites-have-credits/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 16:46:21 +0000</pubDate>
		<dc:creator>Eric F. Savage</dc:creator>
				<category><![CDATA[Conventions]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[credits]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[websites]]></category>

		<guid isPermaLink="false">http://efsavage.com/blog/?p=405</guid>
		<description><![CDATA[Engineers of any discipline are largely an anonymous bunch. You don&#8217;t know who designed the fuel pump in your car, I&#8217;d even wager it would be extremely difficult for you find out if you wanted to. You don&#8217;t know who wrote the code for the OS X Dock or Windows Start bar or who wrote [...]]]></description>
			<content:encoded><![CDATA[<p>Engineers of any discipline are largely an anonymous bunch.  You don&#8217;t know who designed the fuel pump in your car, I&#8217;d even wager it would be extremely difficult for you find out if you wanted to.  You don&#8217;t know who wrote the code for the OS X Dock or Windows Start bar or who wrote the Like button on Facebook.  These people made decisions that affect you deeply every day, and you have no idea who they are.</p>
<p>The most interesting part of this is that those people are OK with it.  If you ask them (myself included) they will tell you that it doesn&#8217;t matter, that what really matters is the quality of the work and the enjoyment you had doing it.  Unfortunately, I think we&#8217;re wrong.</p>
<h3>Should they?</h3>
<p>I can&#8217;t seem to come up with a good framework for who figuring out who wants credit, never mind who deserves it.  If you so much as make a photocopy during the production of a movie, you&#8217;re probably in the credits with some high-faluten title like &#8220;First deputy assistant duplication specialist&#8221;.  Music credits are tied to royalties and managed very closely.  Most authors wouldn&#8217;t think about publishing something anonymously, nor would artists or sculptors.  Artists always sign their work.</p>
<p>This is not even strictly a software issue.  Video games list credits, often in the box and at the end of the game, and they even have a <a href="http://www.game-credits.org/">IMDB-like</a> site.  Nor is it an &#8220;arts &#038; entertainment&#8221; issue, any credible scientific paper will cite other works and acknowledge contributions.  Patents have names on them, even when assigned to a company.</p>
<p>A few software packages have listed credits.  If I remember correctly, Microsoft did it on old versions of Word and Excel, and Adobe had it on old versions of Photoshop and Illustrator.  I&#8217;m curious why those were removed, or at least hidden.  &#8220;The Social Network&#8221; had something about Saverin being removed and re-added to &#8220;masthead&#8221; of Facebook (although I don&#8217;t know what or where that is).</p>
<p>So it would seem that we might be in the minority here, perhaps due to convention rather than any specific reason.  And if there&#8217;s one thing that bugs an engineer, it&#8217;s deviating from standards with no good reason.</p>
<p>So let&#8217;s do it.</p>
<h3>Why do it?</h3>
<ul>
<li>Pride in your work &#8211; Sure there is some pride in doing a good job anonymously, but wouldn&#8217;t be just a little more motivated or happy now that your name is on it?</li>
<li>Being a stakeholder &#8211; We&#8217;ve all done projects we didn&#8217;t believe in, and consoled ourselves with the fact that &#8220;it&#8217;s not my project&#8221;.  Well, now it is.</li>
<li>Reputation &#8211; We&#8217;ve got our resumes, but credits will verify them.</li>
<li>Honesty/Transparency &#8211; There is no good reason to withhold this information, so it should be out there.</li>
<li>All that money they spent on school &#8211; Show your parents your name on a website and watch them smile.</li>
</ul>
<h3>So who&#8217;s get listed?</h3>
<p>I think the short answer here is, everyone.  Movies do it, why not websites?  It could be just a big list of names, or something more detailed with contributions, dates, whatever makes sense.  Let&#8217;s just start throwing some names up there, and let the de facto standards evolve on their own.</p>
<p>If you know of any major sites that do this well, put it in the comments.  Similarly, if you can think of a good reason why this shouldn&#8217;t happen, I&#8217;d love hear about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://efsavage.com/blog/posts/why-dont-websites-have-credits/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Register My Login to Join Your Account</title>
		<link>http://efsavage.com/blog/posts/log_in_sign_up/</link>
		<comments>http://efsavage.com/blog/posts/log_in_sign_up/#comments</comments>
		<pubDate>Thu, 15 May 2008 01:37:52 +0000</pubDate>
		<dc:creator>Eric F. Savage</dc:creator>
				<category><![CDATA[Conventions]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.efsavage.com/blog/posts/log_in_sign_up/</guid>
		<description><![CDATA[One of the details that can be tough to keep track of with a large or fast-moving website is language consistency. Of course, to be consistent, you need to decide what to use. I did an audit of the most popular English-language sites (as determined by Alexa and Compete), to see how three key phrases [...]]]></description>
			<content:encoded><![CDATA[<p>One of the details that can be tough to keep track of with a large or fast-moving website is language consistency.  Of course, to be consistent, you need to decide what to use.  I did an audit of the most popular English-language sites (as determined by Alexa and Compete), to see how three key phrases were being used.  These were:</p>
<p><strong>Login/Log In/Sign in</strong> &#8211; The action of authorizing your account.<br />
<strong>My/Your</strong> &#8211; My Movies, Your Account, etc.<br />
<strong>Join/Sign Up/Register/Create</strong> &#8211; Creating a new account.</p>
<p>Here is the raw data, see below for some analysis.</p>
<table class="basic">
<tr>
<td>adultfriendfinder.com</td>
<td>login</td>
<td>my</td>
<td>join</td>
</tr>
<tr>
<td>aim.com</td>
<td>sign in</td>
<td>my</td>
<td>join/get</td>
</tr>
<tr>
<td>amazon.com</td>
<td>sign in</td>
<td>your</td>
<td>start</td>
</tr>
<tr>
<td>aol.com</td>
<td>sign in</td>
<td>my</td>
<td>sign up</td>
</tr>
<tr>
<td>bankofamerica.com</td>
<td>sign in</td>
<td>your*</td>
<td>enroll</td>
</tr>
<tr>
<td>blogger.com</td>
<td>sign in</td>
<td>my</td>
<td>create</td>
</tr>
<tr>
<td>craigslist.com</td>
<td>login</td>
<td>N/A</td>
<td>sign up</td>
</tr>
<tr>
<td>deviantart.com</td>
<td>login</td>
<td>N/A</td>
<td>become/join</td>
</tr>
<tr>
<td>ebay.com</td>
<td>sign in</td>
<td>my</td>
<td>register</td>
</tr>
<tr>
<td>facebook.com</td>
<td>login</td>
<td>my</td>
<td>sign up</td>
</tr>
<tr>
<td>flickr.com</td>
<td>sign in</td>
<td>your</td>
<td>create</td>
</tr>
<tr>
<td>fotolog.com</td>
<td>log in/login</td>
<td>my</td>
<td>join</td>
</tr>
<tr>
<td>friendster.com</td>
<td>log in</td>
<td>my</td>
<td>sign up</td>
</tr>
<tr>
<td>go.com (espn)</td>
<td>sign in</td>
<td>my</td>
<td>register</td>
</tr>
<tr>
<td>google.com</td>
<td>sign in</td>
<td>my</td>
<td>create</td>
</tr>
<tr>
<td>hi5.com</td>
<td>log in</td>
<td>my</td>
<td>join</td>
</tr>
<tr>
<td>imageshack.us</td>
<td>login</td>
<td>my</td>
<td>signup</td>
</tr>
<tr>
<td>imdb.com</td>
<td>login</td>
<td>my</td>
<td>register</td>
</tr>
<tr>
<td>live.com</td>
<td>sign in</td>
<td>my</td>
<td>sign up</td>
</tr>
<tr>
<td>mininova.com</td>
<td>login</td>
<td>my</td>
<td>register</td>
</tr>
<tr>
<td>msn.com</td>
<td>sign in</td>
<td>my</td>
<td>sign up</td>
</tr>
<tr>
<td>myspace.com</td>
<td>login</td>
<td>my</td>
<td>sign up</td>
</tr>
<tr>
<td>neopets.com</td>
<td>login</td>
<td>my</td>
<td>sign up</td>
</tr>
<tr>
<td>photobucket.com</td>
<td>log in</td>
<td>my</td>
<td>join</td>
</tr>
<tr>
<td>pogo.com</td>
<td>sign in</td>
<td>my</td>
<td>register</td>
</tr>
<tr>
<td>rapidshare.com</td>
<td>login</td>
<td>my</td>
<td>join</td>
</tr>
<tr>
<td>store.apple.com</td>
<td>login*</td>
<td>N/A</td>
<td>create/set up</td>
</tr>
<tr>
<td>veoh.com</td>
<td>log in</td>
<td>my</td>
<td>register</td>
</tr>
<tr>
<td>walmart.com</td>
<td>sign in</td>
<td>my</td>
<td>create</td>
</tr>
<tr>
<td>wikipedia.org</td>
<td>log in</td>
<td></td>
<td>create</td>
</tr>
<tr>
<td>wordpress.com</td>
<td>login</td>
<td>my</td>
<td>sign up</td>
</tr>
<tr>
<td>yahoo.com</td>
<td>sign in</td>
<td>my</td>
<td>sign up</td>
</tr>
<tr>
<td>youporn.com</td>
<td>login</td>
<td>my</td>
<td>register*</td>
</tr>
<tr>
<td>youtube.com</td>
<td>log in</td>
<td>my</td>
<td>sign up</td>
</tr>
</table>
<p>* Inconsistent</p>
<p>&#8220;My&#8221; is the clear winner over &#8220;Your&#8221;, with 27 mys, 3 yours, and 2 that avoid using possessive pronouns.</p>
<p>&#8220;Login&#8221; takes the edge over &#8220;Sign In&#8221;, 20-14.  &#8220;Sign In&#8221;, however, seems to be more popular with the biggest of the big sites, like Yahoo, Microsoft&#8217;s sites, and Google.  I&#8217;d say this is a tossup, and I have a feeling that in a few years signup with come to dominate.  Of those using login, 13 use &#8220;login&#8221;, and 7 use &#8220;log in&#8221;, with the space.</p>
<p>There&#8217;s a plurality of choices for sign up, with &#8220;sign up&#8221; being used on 12 sites.  7 used join, 7 used register, 6 used create (an account), 1 used start, and 1 used enroll.  This is not an independent choice, however, as &#8220;sign up&#8221; is often seen where &#8220;log in&#8221; is used, and sites that use &#8220;sign in&#8221; use something like &#8220;register&#8221;.  AOL, Microsoft, and Yahoo use &#8220;sign in/sign up&#8221;.  I suspect that some people think using such similar phrases would be confusing, and I agree, despite the appeal of the general consistency.</p>
<p>My preference is to use &#8220;my, &#8220;log in&#8221;, and &#8220;sign up&#8221;.  &#8220;Join&#8221; seems ambiguous, &#8220;register&#8221; seems bureaucratic and expensive, while &#8220;create an account&#8221; just feels a little dorky.</p>
<p>Dishonorable Mention: The Apple Store, supposed paragon of usability and attention to detail, is the worst offender on this list in terms of mixing and matching the terms, often on the same page.  They also fail miserably on one major point, there&#8217;s no logout button! </p>
]]></content:encoded>
			<wfw:commentRss>http://efsavage.com/blog/posts/log_in_sign_up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usernames</title>
		<link>http://efsavage.com/blog/posts/usernames/</link>
		<comments>http://efsavage.com/blog/posts/usernames/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 04:32:40 +0000</pubDate>
		<dc:creator>Eric F. Savage</dc:creator>
				<category><![CDATA[Conventions]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://www.efsavage.com/blog/posts/usernames/</guid>
		<description><![CDATA[Usernames for most websites are based on UNIX conventions/standards. They are lowercase, usually begin with letters, and have no whitespace. Many sites offer a &#8220;display name&#8221; which is more flexible. While discussing requirements for a new project, my first inclination was to do something similar, simply because &#8220;that&#8217;s how it&#8217;s done&#8221;, but someone suggested this [...]]]></description>
			<content:encoded><![CDATA[<p>Usernames for most websites are based on UNIX conventions/standards.  They are lowercase, usually begin with letters, and have no whitespace.  Many sites offer a &#8220;display name&#8221; which is more flexible.</p>
<p>While discussing requirements for a new project, my first inclination was to do something similar, simply because &#8220;that&#8217;s how it&#8217;s done&#8221;, but someone suggested this method might be antiquated.  After giving it a few days of thought, I tend to agree.  &#8220;Old&#8221; user domains like AOL, Windows, and Slashdot have logins that have allowed spaces for years, yet most of even the latest, shiniest Web 2.0 sites go back to the 1970s for their guidelines.</p>
<p>We&#8217;ve even taken it a little further and not only can users use spaces, underscores, and dashes, these characters are ignored for purposes of uniqueness, because I&#8217;m guessing people&#8217;s brains will tend to stem these characters when it comes to memorizing them.  So &#8220;Eric Savage&#8221; and &#8220;ericsavage&#8221; and &#8220;Eric_Savage&#8221; and even something like &#8220;Eri__c-SAVA g-_E&#8221; would all be the same.</p>
<p>When appearing in a URL or other machine-readable context, these characters are all changed to underscore and consecutive duplicates are eliminated, so the previous username would be &#8220;eric_savage&#8221;.  Also, leading and trailing non-alphanumerics are stripped, otherwise we&#8217;d likely find users all naming themselves __alphadog so they appear first alphabetically.  We could expand the list of which extra characters are allowed, but we&#8217;ll start off easy.</p>
<h3>Questions:</h3>
<ul<li>Can anyone think of good reasons for why you should stick to UNIX-style usernames?</li>
<li>Should users on a community site be able to change usernames? [I'm currently in the "no" camp]</li>
<li>If changeable, should the change history be public?</li>
<li>Most people like short usernames, some people prefer long ones.  What do you think should be the limit? [I'm currently thinking 20]</li>
<li>Is a short limit too ethnocentric?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://efsavage.com/blog/posts/usernames/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Database Naming Conventions</title>
		<link>http://efsavage.com/blog/posts/database_naming_conventions/</link>
		<comments>http://efsavage.com/blog/posts/database_naming_conventions/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 06:24:57 +0000</pubDate>
		<dc:creator>Eric F. Savage</dc:creator>
				<category><![CDATA[Conventions]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.efsavage.com/blog/posts/database_naming_conventions/</guid>
		<description><![CDATA[Time for another naming convention. This time it&#8217;s something people care more about than Java packages, we&#8217;re talking about databases. Here are the rules, and the reasons behind them. Use lowercase for everything We&#8217;ve got 4 choices here: Mixed case Some servers are case sensitive, some are not. MySQL for example, is case-insensitive for column [...]]]></description>
			<content:encoded><![CDATA[<p>Time for another naming convention. This time it&#8217;s something people care more about than <a href="http://www.efsavage.com/blog/posts/java_package_conventions/">Java packages</a>, we&#8217;re talking about databases. Here are the rules, and the reasons behind them.</p>
<h3>Use lowercase for everything</h3>
<p>We&#8217;ve got 4 choices here:</p>
<ul>
<li>
		Mixed case</p>
<ul>
<li>Some servers are case sensitive, some are not. MySQL for example, is case-insensitive for column names, case-insensitive on Windows for table names, but case-sensitive on Linux for table names.</li>
<li>Error prone</li>
</ul>
</li>
<li>
		No convention</p>
<ul>
<li>Same reasons as mixed case</li>
</ul>
</li>
<li>
		Upper case</p>
<ul>
<li>SQL is easier to scan when the reserved words are uppercase. This is valuable when scanning log files looking for things like WHERE statements and JOINs.</li>
<li>MySQL will always dump table names on Windows in lowercase.</li>
</ul>
</li>
<li>
		Lowercase</p>
<ul>
<li>Works everywhere. Some servers, like Oracle, will appear to convert everything to uppercase, but itâ€™s just case-insensitive and you can use lowercase.</li>
</ul>
</li>
</ul>
<h3>Only use letters and underscores and numbers (sparingly)</h3>
<ul>
<li>Most servers support other characters, but there are no other characters which all the major servers support.</li>
<li>
		Numbers should be used as little as possible. Frequent use is typically a symptom of poor normalization.</p>
<ul>
<li>address1, address2 is OK</li>
</ul>
</li>
<li>Whitespace isnâ€™t allowed on most servers, and when it is you have to quote or bracket everything, which gets messy.</li>
</ul>
<h3>
	Table and column should be short, but not abbreviated.<br />
	</h2>
<ul>
<li>You&#8217;ve seen the same thing abbreviated every way possible, like cust_add, cus_addr, cs_ad, cust_addrs, why not just customer_address? We&#8217;re not writing code on 80 character terminals any more, and most people aren&#8217;t even writing SQL, so let&#8217;s keep it clear, OK?</li>
<li>30 characters is considered the safe limit for portability, but give some serious thought before you go past 20.</li>
</ul>
<h3>Table names should be singular.</h3>
<p>	Yes, singular! Oh yes, I went there. I used to use plural names, because itâ€™s more semantically accurate. After all if each record is a person, then a group of them would be people, right? Right, but who cares. SELECT * FROM person isn&#8217;t any less clear than people, especially if you&#8217;ve got a solid convention. You don&#8217;t use plurals when you&#8217;re declaring class names for a vector of generics do you? Also:</p>
<ul>
<li>
			English plurals are crazy, and avoiding them is good.</p>
<ul>
<li>user -> users</li>
<li>reply -> replies</li>
<li>address -> addresses</li>
<li>data -> data (unless its geographic, then itâ€™s datum -> data)</li>
</ul>
</li>
<li>Singular names means that your primary key can always be tablename_id, which reduces errors and time.</li>
</ul>
<h3>Double Underscores for Associative Tables.</h3>
<p>	You&#8217;ve got your person table, and your address table, and there&#8217;s a many-to-many between them. This table should be called address__person. Why? Well what if you have a legacy_customer table that also ties to address. Now you&#8217;ve got address__legacy_customer. A new developer can easily pick up this convention and will be able to break down the names accordingly. Remember, no matter what the Perl/Lisp/Ruby/etc guys say, clarity of code is judged by how someone reads it, not how they write it.</p>
<h3>Component Names of Associative Tables in Alphabetical Order.</h3>
<p>	This rule is somewhat arbitrary, but still beneficial. There&#8217;s no good way to determine which goes first. Table size, &#8220;importance&#8221;, age, who knows what else, and those assessments may change over time. Or, you might find that your manager assigned the same task to two people, and now you&#8217;ve got an address__person and a person__address table co-existing peacefully, when you only need one. Everyone putting them in the same order makes reading and writing queries easier.</p>
<p>	That&#8217;s all I&#8217;ve got for now, but I encourage you to offer your own, or even refute some of the ones above (with some reasoning, of course).</p>
]]></content:encoded>
			<wfw:commentRss>http://efsavage.com/blog/posts/database_naming_conventions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Naming Conventions: Java Packages</title>
		<link>http://efsavage.com/blog/posts/java_package_conventions/</link>
		<comments>http://efsavage.com/blog/posts/java_package_conventions/#comments</comments>
		<pubDate>Mon, 04 Dec 2006 17:59:10 +0000</pubDate>
		<dc:creator>Eric F. Savage</dc:creator>
				<category><![CDATA[Conventions]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[dao]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java packages]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[naming convention]]></category>
		<category><![CDATA[organization]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://www.efsavage.com/blog/posts/java_package_conventions/</guid>
		<description><![CDATA[When developing, conventions can mean the difference between producing something clear and concise and producing something confusing and arcane. They exist at all levels, from the industry and the language down to specific modules of applications. I&#8217;m going to attempt to codify some conventions for aspects I use heavily, and I&#8217;ll start with one of [...]]]></description>
			<content:encoded><![CDATA[<p>When developing, conventions can mean the difference between producing something clear and concise and producing something confusing and arcane.  They exist at all levels, from the industry and the language down to specific modules of applications.  I&#8217;m going to attempt to codify some conventions for aspects I use heavily, and I&#8217;ll start with one of the easier ones, Java package names.  Sun has some <a href="http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html">basic ones</a>, but I think some more specific guidelines are warranted.</p>
<ol>
<li><span class="q">Names should be all lowercase.  Uppercase and mixed case denote other concepts in Java and there&#8217;s no need to muddy the waters further.<br />
</span></li>
<li><span class="q">Names should be alphanumeric, preferably just alphabetical</span>.</li>
<li>Do not use version numbers or dates (see below for a possible exception).</li>
<li><span class="q">Use tld.domain-you-own.project/library.* for distributed or published code.  This follows with Sun&#8217;s convention, and is the only way to know a name is globally unique, or at least that you are the one that&#8217;s allowed to use it.</span></li>
<li><span class="q">Do not use tld.domain-you-own.* for internal code that should not be distributed.  I typically just use the project or library&#8217;s name as the first segment.  This convention can be useful in signaling other developers that code is for internal use only, and if something is converted from internal to external usage, this will help identify which version an application was built against.<br />
</span></li>
<li>Package names that are nouns should be singular (mycompany.myproject.account).  This maintains consistency with packages that are named for actions (mycompany.myproject.search) and adjectives (mycompany.myproject.common).</li>
<li>Store DAOs in a &#8220;data&#8221; subpackage.  This helps the tree-views in IDEs and also allows for easier control of logging.  If you&#8217;re being formal and encapsulate DAO operations in a manager class, the manager class should not be in the data package because it&#8217;s grammar is business-based, not persistence-based.</li>
<li>Classes that are heavily dependent on third-party packages should be in a subpackage named for the primary dependency.  A Hibernate implementation of your DAO should live in mycompany.myproject.data.hibernate.  This helps greatly with logging configuration.  This is one place where version numbers are permissible, such as mycompany.myproject.data.hibernate3.  Use this exception very sparingly, as it can be confusing with regards to forward compatibility.</li>
<li>Classes that are extensions of third-party code should be named for the dependency and be outside of the project&#8217;s or product&#8217;s context.  For example, if you are creating a new type of controller for Spring MVC that does not depend on project-specific code, put it in mycompany.spring.controller.  If it is integrated with the application, see the previous point.</li>
<li>Don&#8217;t expose organizational details in the package structure (mycompany.mydepartment.myproject). Naming packages by department, office, or region will surely be confusing soon due to management&#8217;s penchant to reorganize and reassign.</li>
</ol>
<p>I consider the above a work in-progress, and welcome comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://efsavage.com/blog/posts/java_package_conventions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

