Wednesday, April 20, 2011

Ideas for Summer Java project

Hi I'm taking an independent project during the summer at school. The prof. told me to come up with a good topic or a good project. He likes doing GUI in Java and I like the same too.

So I was thinking a on doing a project in Java instead of doing research. He told me to present to him a good topic and explain what I am planning on doing.

Any of you have any ideas on what would be kind of cool to project to do in Java? These are things I'm looking for:

  1. Must be in Java
  2. Must use GUI
  3. It's a 300-level course so not too complicated, but not too easy.
  4. It's a project for the whole summer, so something a bit extensive.

Thanks for any ideas.

From stackoverflow
  • It might be fun to do something with Java3D or JOGL. 3D graphics are interesting, and involve a good amount of math and computer science theory (graphs, etc.).

    You could try to do some sort of physics simulation in 3D or something like that.

  • "Any of you have any ideas on what would be kind of cool to project to do in Java?" - I'd recommend that you pick a problem that means something to you. A problem in your life that might be solved with software. That's the best way to motivate whatever you do.

    "Something cool" seems too broad to me. The important thing isn't the cool-ness, it's your desire to see it all the way through beyond just getting a grade.

  • What about an image pane where you can add images, resize, change opacity, rotate and that type of thing. Then provide the ability to save these views.

    This will provide you an opportunity to implement command pattern and show how easy it is to have undo/redo commands as well.

  • Something you'll personally use would be best I think. Just giving up on the project mid summer will just have you say "dammit, i'll never be able to use this!".

    A few summers ago i was download errr... stuff on IRC via automated commands so I decided to code an IRC client then create a GUI for download management. It kept me motivated because using it meant more err... stuff (mp3).

  • Now, I don't know about you, but whenever my Ma sends me photos by email, they always come through at the full resolution, rocking ~5mb each. She doesn't have the skills to be able to resize the image before sending it.

    How about making a "photo resizer even your Mom could use", with a super simple interface. Drag and drop a photo into the app, choose a size, click go. Done.

    Extra points for supporting renaming, batches of photos and email integration (open a new message and attach newly resized images).

  • Something that would be incredibly useful is a GUI that can dynamically display graphical output of formatted text input piped to the program via command line, or some other easy input. By graphical output I mean moving line that can display something like frequency, or a moving average on a graph which is updated as the numbers changes.

    They key thing about it is that it would be able have a graphical display created without creating your own GUI. Just print the numbers to stdout, pipe them to you your program, and voila a graph pops up. I'm looking for something like this for a demo, and don't have the time to code up the GUI myself.

  • Three possible concrete ideas for anyone to do with as they will.

    1/ I actually wrote a CPU/machine simulator recently as a side project which had two parts:

    • an assembler for creating load modules.
    • an emulator for running the load modules.

    The assembler was just a command line tool but the emulator was a full-blown GUI which showed register contents, memory contents, stack area and so on.

    It wasn't just a CPU emulator, rather a system emulator since it had memory mapped I/O for keyboard and screen.

    The hardest bit was getting the CPU instructions correct so that they were useful, the coding up was quite fun and now it's earning (small amounts of) cash for me.

    2/ Another idea I've had is a graphical interface for a pipeline (feel free to run with this, I've done nothing but design it due to the constraints of work and family).

    The basic idea is to drag'n'drop elements into a pipeline to transform text. So, instead of having to learn the intricacies of:

    cat infile
        | grep '^ERROR: '
        | grep -v 'errno=-100'
        | cut -c1-80
        | tee outfile
    

    you could instead design:

    +------------+    +--------------+    +----------------+
    | InputFile  |    | Filter       |    | Filter (not)   |
    |   infile   | -> |   '^ERROR: ' | -> |   'errno=-100' |
    |            |    |              |    |                |
    +------------+    +--------------+    +----------------+
                                                  |
                                                  V
    +------------+    +--------------+    +----------------+
    | OutputFile |    | Duplicate    |    | Cut            |
    |   <stdout> | <- |              | <- |   1-80         |
    |            |    |              |    |                |
    +------------+    +--------------+    +----------------+
                             |
                             V
                      +--------------+
                      | OutputFile   |
                      |   outfile    |
                      |              |
                      +--------------+
    

    and have it generate any text processing language you want, such as:

    • bash and the text tools (sed, grep, cut, paste, etc).
    • Perl with a "while ()" loop.
    • Python.

    I think this would be useful as a learning tool (and possibly a production tool for transformation). You could even have a debugging tool that single-stepped the pipeline, showing inputs and outputs at each stage.

    3/ A full-blown Physics planetary motion emulator where you can put various-sized planets and other bodies (powered or unpowered) into space (2D since 3D would be too hard to visualize on a monitor).

    At each step, you would have to calculate all the gravitational (and other) forces to figue out the next frame. I think it would be interesting to see the evolution of a solar system (or the fun we would have had in a binary star system).

  • A song library: mp3 file management.

    • ID3 tag editor (low level file handling)
    • Auto file renaming according to user rules
    • Ability to search in the library and the web (i.e. calling a browser)
    • Rating and tagging files
  • If you don't have any ideas for a project, how about looking for a non-profit organization in your community that could use some help with a project?

    If that doesn't appeal to you, how about hooking up with another department on campus? You could probably talk to someone in one of the science departments and come up with a really cool project that they could use in their work.

    When you are finished, you could release your project as an open source project.

  • Roedy Green has a great list of student project ideas on his site, http://mindprod.com. The list is at

    http://mindprod.com/project/projects.html

    BTW: His site has a great Java glossary as well.

  • How about a collaborative whiteboard application. Multiple people (e.g. you and your professor) could simultaneously connect to a shared host and draw on a canvas using drawing tools or marked up text. I'm assuming when you say Java GUI you mean Swing, so each collaborator would need a copy of the Swing client app configured to talk to a separate central server app. You should be able to see each other's changes in real-time and have the ability to chat via an instant messenger style window. You should also provide the ability to save the whiteboard at anytime to an image file on the client.

  • How about a game? Tetris?

  • I wonder why no one mentioned this nice list of possible projects yet.

  • you are doing a java project right? hey dude we all need some help then.

    "netbeans git plugin"

  • You could look into some (older) GSOC (google summer of code) Java related projects which have not been realized yet. Some open source programs (with GUI) need some special GUI related feature or fixing. So you could also contribute to the community.

  • You can develop a small HTTP server. It will require you to use sockets, files, string and streams manipulation, read the RFC 2616 (HTTP)... And, best of all, this is a never-ending project, you can always come back to it later and add more features : virtual hosting, security, and even try to implement the Servlet specification (without the JSP part, which is quite hardcore).

0 comments:

Post a Comment