... at least back in the days i was amazed how deep you could bury the int main() {}.
i think that the best one would (regardless of the source code qualities) an open source application that does something you are really interested in, or just find a simple usability problem or a simple bug.
then post your bugreport up on their tracker/mailinglist and offer to help with a patch with a little bit of help.
even if you don't manage to implement it, you might come up with a test case or at least discussion which will help you and the project. during the implementation attempt and/or testcase bulding you will most likely grep through a lot of code, commit logs and comments and might be able to implement your next idea.
if you are not familiar with the project's tools, you will be "wasting" a lot of time learning those while building a testcase/implementation attempt. that time you'll save during your next idea.
remember to start with small ideas. of course selecting a project that is both alive and non-hostile might be a good starting point as well.