I don't see it anywhere here yet so I'll throw it in...
I forget where I read this a few years ago -- maybe on Slashdot. It's been enormously helpful to me whenever I get "programmer's block"
Idea is to deliberately leave something "broken" at the end of the day: a line of CSS that isn't quite right, a SQL query that doesn't work, etc. Then when you start up the following day, you have something to work on and you're not struggling to find something to do, at least not at the start.
This works for me in two ways:
1) I'm starting off my day feeling productive and engaged, and I find the process of troubleshooting something causes a cascade effect in my mind when I'm coming up with other things to fix, modify, etc. Voila, I'm unstuck!
2) I find myself thinking overnight sometimes about that "broken" thing I have waiting for me in the morning. I'm consciously and unconsciously turning things over in my head, planning ahead to how I'll solve my problem. I'll oftentimes get to work charged up and ready to go because I've got this cool approach or something I want to try out. Sometimes I'll even have more plans queued up in my head, ready for me to tackle. Voila, sometimes I'm unstuck before I even get to work!