28

Hopefully, I'm going to finish my undergraduate studies next semester and I'm thinking about the topic of my final project. And yes, I've read the questions with duplicate title. I'm asking this from a bit different viewpoint, so it's not an exact dupe.

I've spent at least half of my life coding stuff in different languages and frameworks so I'm not looking at this project as a way to learn much about coding and preparing for real world apps or such. I've done lots of those already. But since I have to do it to complete my degree, I felt I should spend my time doing something useful instead of throwing the whole thing out. I'm planning to make it an open source project or a hosted Web app (depending on the type) if I can make a high quality thing out of it, so I decided to ask StackOverflow what could make a useful project.

Situation

I've plenty of freedom about the topic. They also require 30-40 pages of text describing the project. I have the following points in mind (the more satisfied, the better):

  • Something useful for software development
  • Something that benefits the community
  • Having academic value is great
  • Shouldn't take more than a month of development (I know I'm lazy).
  • Shouldn't be related to advanced theoretical stuff (soft computing, fuzzy logic, neural networks, ...). I've been a business-oriented software developer.
  • It should be software oriented. While I love hacking microcontrollers and other fun embedded electronic things, I'm not really good at soldering and things like that.
  • I'm leaning toward a Web application (think StackOverflow, PasteBin, NerdDinner, things like those).

Technology

It's probably going to be done in .NET (C#, F#) and Windows platform. If I really like the project (cool low level hacking), I might actually slip to C/C++. But really, C# is what I'm efficient at.

Ideas

Programming language, parsing and compiler related stuff:

  • Designing a domain specific programming language and compiler
  • Templating language compiled to C# or IL
  • Database tools and related code generation stuff

Web related technologies:

  • ASP.NET MVC View engine doing something cool (don't know what exactly...)
  • Specific-purpose, small, fast ASP.NET-based Web framework

Applications:

  • Visual Studio plugin to integrate with Bazaar (it's too much work, I think).
  • ASP.NET based, jQuery-powered issue tracker (and possibly, project lifecycle management as a whole - poor man's TFS)

Others:

  • Something related to GPGPU

Looking forward for great ideas!

Unfortunately, I can't help on a currently existing project. I need to start my own to prevent further problems (as it's an undergrad project, nevertheless).

7

there's also the recent opening of data.gov which you could use to do some kind of information mashup (which is pretty much the given trend now in webdev). there's even a contest associated with all this.

http://www.sunlightlabs.com/contests/appsforamerica2/

7

I like the idea of the DSL that compiles down to a .NET executable. I'm working on something similar for one of my final projects here at school.

If you are looking for any resources on this topic here is what I have found so far:

I actually emailed Mike Stall and asked him for some advice on writing a .NET compiler as a university project. He gave me some great tips:

  • Writing the lexer by hand is relatively easy, but if you can use a parser generator (such as ANTLR). Writing the parser is fairly tedious
  • For the code generation phase of the compiler, you basically have three options:

    1. Reflection.Emit - Emits IL opcodes. However! Reflection.Emit() cannot emit all possible constructs (incomplete with certain generic things)
    2. Spew out your IL codes to a textfile by hand, and run ILASM on the file.
    3. Use the newly created CCI (Common Compiler Infrastructure) - CCI is very new and very cool in how it works. It takes a tree structure and will emit the IL opcodes based off the tree you pass in. Easiest option for this project by far.
  • PEVerify.exe is very useful when testing your compiled executables. It does static validation on IL.

  • Use ILDASM with programs that you have compiled with CSC.exe to help make sure you are getting the IL sequence correct in your own compiler.

Be sure to let us know what project you think you are going to take on!

7

Mehrdad, I don't know if you are still interested ideas, but I will propose this one to you anyway, because I think it would be of great value to the developer community, and I know that I won't pursue it myself.

The idea is a Visual Debugger. I've worked on a bit, and named it 'obivis', but if you start again, I think you should name it yourself, as it will be only your work.

The basic concept is:

A real-time debugger that you can attach to any running .net process (or launch one). It will then show you, with 3D graphics, the calls between all live objects.

General features:

  • Navigate the world with a mouse/keyboard to see what objects are doing
  • Start/Stop any application and watch calls
  • Click on an object in the 3d debugging world, to get the member variables/other properties of it

Below is an image of my previous attempts in WPF:

image of obivis in wpf

I hit a roadblock because the AOP functionality in the .NET framework was not sufficient, and I needed to go to the profiler API in C++, but this was beyond my abilities, so I couldn't proceed further.

The beauty of doing the rendering engine in WPF is that it can be adapted to Silverlight, and hence you would have the ability, through some WCF interface (or similar), 'visually debug' ASP.NET processes.

I wouldn't intend this system to replace general debugging in Visual Studio. My thought with this system is that it will let you understand the relationships between objects in a system that you potentially didn't write. It could let you understand how the system calls itself.

More specific features would be:

  • Conditional breaking [obvious feature for a debugger :P]
  • Ability to filter namespaces, or get a general 'overview' view of the conversations between namespaces
  • And many more

I personally would find it quite interested and useful, and I think the developer community at larger would enjoy it as a useful open-source addition to the typical debugging techniques. Currently it is hard to get an overall 'idea' of how an application integrates with itself, any suffuciently complicated application anyway, and I think this project would provide a nice way to do that, and be generally fun and interesting to work on. I also think for someone of your capability it should be possible :)

I leave it to you.

5

A tool that migrates from one database system to another, including all data types of all supported database systems, Stored Procedures, Views, Foreign keys, triggers, ON CASCADE, functions, database jobs, etc.

E.g. MS-SQL -> PostGre, MySQL->PostGre, Oracle->PostGre, PostGre -> MS-SQL, etc.

2

Personally I would go for something that I was interested in so I wouldn't have to drag myself to the keyboard, just to get it done ;). In my case it would be game development.

Your game wouldn't need a good story to be playable/enjoyable as you could make it physics or AI related ( it's like John Carmack said.. "Story in a game is like a story in a porn movie. It's expected to be there, but it's not that important." ). . Also you could try some game engine development but it's quite a lot work if you are not strong with graphics programming.

2

I would target something with accessing data over the Web and presenting it in a friendly manner.

So, may be:

  • a site that would allow to answer comparison questions from Wikipedia ("top peak in africa" -> "from Mountains where location=Africa select Highest" -> ...)

  • a distributed, secure, Tor-like gateway to social networks

It certainly would be interesting to learn parallelization (OpenCL?). You could also use the opportunity to learn Python, it's similar to .NET in many ways but imho easier while implementing important concepts. Please keep us informed how it's going. I hope the question is still relevant.

(update) I wouldn't go with compilers, etc. First, there was an excellent post by Joel about how people overestimate the need for code tools. Second, it's good to learn to write things that would be used by the average Internet user (this is kind of a special skill which not every high-level programmer has).

1

Create a web application framework that easily integrates RDF or a similar technology with the published content, making all that content easily discoverable and usable by semantic-web apps, such as SearchMonkey or Twine

1

I wouldn't recommend you to do a compiler/interpreter, for a few simple reasons:

  • It's a hell of a job
  • There are too many out there (and most of them aren't used by anybody)

My advice is that you shouldn't close your mind to what you call "advanced topics", because they're not so difficult (at least not more difficult than implementing a good compiler xD) and they will probably make your work shine a little bit more... and also you will learn some cool stuff that may be helpful someday and you wouldn't otherwise learn.

What about some kind of game? Everybody likes games ^_^

0

Something I would like to see is an IL compiler. I know it sounds pretty stupid but it would be fun to play in. I think it would also give you a view of what is going on behind the scenes in the CLR.

0

Have you looked at project ideas that were accepted and, more importantly, almost accepted for, Google's Summers of Code? It sounds like you have fairly similar criteria, and I know that there are every year a lot of SoC projects that are good and wanted, but don't make it because there are just to many.

0

This may be a stretch for you since it doesn't make use of .NET and might not be a "self-contained" project that fits into a month's worth of work, but I suggest trying to help out on the Shed Skin project. You or its author can probably find a suitably sized chunk of work that you can do in a month and write it up. It would be of both academic and practical value.

0

If you're interested in developing something useful for the community, go ask people in your college. Most students in non-IT related areas usually have great ideas but just don't know how to deploy them.

0

I don't know if you still need this question answered or not, but how about defining your own open source project on SourceForge or somewhere similar?

Is that an option? If it is, then it's gonna be something more than just an udergrad project and it won't be forgotten after a while. Kind of like Paint.Net. You can also gather a few good freelance devs around, to work on it alongside you. Thus, not only the project demonstrates your software design and implementation skills, but project management and leadership. And if it goes huge at some point, it's gonna bring positive reputation for you, UT and the country as well. All I'm trying to say is that you'll be making the most out of all the efforts that you're gonna make. Besieds, you're moving to the states soon and you deserve a great job, employers love this stuff. Bear that in mind.

-1

i am stating my final year under graduate project soon and i have chosen to do a fixture generating system but i find it a hard one to implemet as it has many constraints

please can you suggest other projects i can implemet