Don't make your projects big monolithic tasks, make them consist of a series of fun, small iterations (like Agile development). You'll have a better time, and it'll be easier to stay motivated - especially if you're making your project open source and can do minor releases along the way.