I hate Sudoku. I figure that by writing a solver I have solved every Sudoku that has ever or will ever exist and thus will never again need to ponder one. My Java/Swing implementation is exceedingly simple, naught more than a depth-first search through the solution space. One future enhancement I am contemplating is an initial pass to fill in values that can be determined by process of elimination. As many puzzles are entirely solvable using this method, forgoing the brute-force search will likely improve overall performance.
When I was working on Sudoku at Microsoft I developed another solver based on treating each puzzle as an instance of the exact cover problem. I used Knuth's dancing links algorithm to find the exact covers.
You can run the solver via Webstart or download the code.