views:

1110

answers:

12

I'm already familiar with the standard Java package naming convention of using a domain name to create a unique package name (i.e. package com.stackoverflow.widgets). However, I've never seen any recommendations for how to choose package names for personal projects. I assume because this is because this is really a matter of personal taste.

So, how do you choose package names for personal projects that will never make it into production (you might be experimenting with a new framework in your spare time). Assuming you don't have a personal website whose domain you can use to create your package structure, what do (or would) you do? Do you have a logical system in place for generating new package names for hobby projects, or do you just use simple throw-away package names like mypackage?

Since I'm just curious to see what different people's thoughts are on this, I've made this a community wiki.

For me personally, I've never given it much thought, but I wanted to play around with Wicket tonight and it occurred to me that I don't have a clear idea of how I want to organize my hobby projects. A separate, distinct package naming convention for hobby projects (in my mind, at least) would serve as a good way to keep personal and work-related code clearly separate from each other.

I was thinking of a simple hierarchal naming convention, to keep the source for my personal projects in a single root folder:

  • Use myprojects as the root folder
  • Append the project name
  • Add any additional subpackage names

So, my Wicket project would be in the package myprojects.learningwicket and unit tests would be in the package myprojects.learningwicket.tests (for example).

+10  A: 

If you're just doing personal projects where nobody else will use the code, then you can make up a package name that you like. Don't make up something that starts with com. or net. or other top-level domain though, because that would imply that you own the domain name (ie. using com.john as your package name just because your name happens to be John is not a good idea).

If you're going to give the code to anybody else, you should use a globally unique package name, which according to Java conventions means you should register and use a domain name.

Greg Hewgill
+1  A: 

I store most of my hobby projects in Google Code, so I just use the project site as the package name: com.googlecode.donkirkby.someproject.

Don Kirkby
A: 

my name is anjan

usually, I use com.anjan

I have a fantasy company of my own -- sometimes I use that

the tradition with sourceforge(as hibernate and other packages showed) is net.sf.*

so, depending on your mood, you can go with that.

anjanb
Unless you also own http://anjan.com/ I think you are terribly wrong in doing so.
Fredrik
+6  A: 

I just use my initials: fg.nameofproject.etc

It reduces typing. It can be prefixed at any time with sf.net or com. or org. or com.google..

As the project is personal treat it special just like your freshly pressed personalized gift shirt - it will feel good.

Florin
A: 

I think you've got it worked out. The temptation to avoid here is to not bother with a package name at all. It's easy to save a few keystrokes because "I'm just writing some test code." But then the code gets good and useful and large, and then you realize you have a solid start for what may be a long-lived library or application. It may not be a library or an application that ever leaves your home network, but the point is, you've not thought ahead. That's the Denmark ghost of computer science -- always think ahead, if only a little bit.

The naming convention I use for my hobby code is very much like yours. I have a top-level directory named "futura" (long, boring reasons why that name came about) that all my code hangs off of. I do try and organize my code into package libraries, even if it might be a class or package I never use for another project. I place all applications (that is, anything that has a void main(String[] args) in the class) in the futura.app.* folder. I also try to mimic the standard Java library package names for my own code, although in a couple of cases I broke convention because of my own tastes (i.e. futura.inet for Internet, not merely socket, code, and futura.collections for non-util stuff.) To paraphrase David Mamet: Always be genericizing. Always be genericizing!

From the care you used to post the question, I suspect you agree with my last point as well: You don't have to treat hobbyist hacking as an enterprise-level project, but if you bring some of that discipline to the home game, the hobby is all the more rewarding.

Jim Nelson
A: 

I just use my name: surname.initials.xxx, as a nice comprise between brevity and collision avoidance. I figured that would give a reasonable collision free namespace should I ever choose to publicly publish the code. I also have a little program I've written which can repackage entire directory trees so I figured should I ever need to repackage for publishing it's quite painless... therefore I didn't loose too much sleep over it.

After the surname.initials.xxx, I use either app for application packages, lib for library packages, and tst for stuff I am purely experimenting with.

Software Monkey
+3  A: 

<sarcasm> Bah. Any self-respecting programmer would have his or her own domain name. This is clearly a trick question. Everyone has their own personal domain name! </sarcasm> :-)

Ok, in all seriousness, buying a custom domain name is probably the easiest option. For about $10 a year, you can find reputable providers to host the domain and forward email.

James Schek
Strangely enough, this'll do your self-confidence a boost too.
jamesh
A: 

what you think about lastname.firstname.project ??? like luz.marlon.project ?

That might work for you, but John Smith and Bob Jones might run into conflicts when they want to release their code someday.
Bill the Lizard
A: 

I thought about asking this same question. So far i've used the prefix com.tehvan, even though i don't actually have a company.

tehvan
A: 

i type women, e.g women.abc, women.zxy, etc

Click Upvote
+3  A: 
pmurray_at_bigpond_dot_com.project.package
paulmurray
+1. Clever. This gets you a unique package name and identifies the author all at once.
Mike Spross
A: 

I use my OpenID URL and then I append my project's name. for example, com.myopenid.cd1.twitter is the root package of a Twitter client I've been developing.

cd1