@dazang
I had to sign something similar.
When I read the document I was particularly concerned with it because I was in school and one course in particular involved developing an application for a real client. I spoke to someone about my concerns and they told me that whatever I developed for the company (regardless of when or where I did it) it belonged to the company...they thought that because the application required to complete the course for was not developed for the company, that the company didn't own it.
Now that I think about this I'm still really uneasy about that contract that I signed. I'm starting to accept development contracts that I do in my spare time outside of work and I don't want there to be any issues with the work that I'm doing for other people.
It seems unfair that companies can do this but they have to protect themselves. They don't want their "secrets" to be exposed. They also don't want to lose any foothold in the competitive software industry that could occur if you took the techniques you used on their software and applied it to their competition's software.
Last year I learned something very interesting about the difference between a contractor and a consultant. A contractor develops software for someone and that software, in its entirety, belongs to the person/company that the contractor developed the software for. A consultant, on the other hand, maintains owership of the software that the consultant created for the person/company.
-Frinny