When I was younger and struggling with issues, I did exactly this - plot my happiness on a graph. It was one of the few things that helped me get through a day, seeing that there are ebbs and flows, and for every low point there's likely a high point coming up.
"It’s a bit ironic considering that yesterday Marcus took to Twitter to say his credit card was hacked. So clearly not all hacking is acceptable in Marcus’ book — only hacking that supports the company’s business objectives."
I don't think it's a joke at all - I know lots of companies and people (myself included) who stress their culture and fit so much that technical skills often fall by the wayside. Sure, we want to know if you can code, but that can usually be figured out with a 15 minute white board test. If you're truly a pain to work with, unable to work in a team environment, or generally not collaborative, you probably won't get a job at my company.
Conversely, if you're a self-motivated learner, a good team member, and able to contribute, but don't quite have the technical skills we're looking for, we'll gladly take a training hit (usually 2 to 4 weeks) to get you up to speed on language X in exchange for an engaged and valuable employee.
Related, I like to leave non-working code or tests at the end of a day so I can easily find where I left off. For some reason when I try to build / test and the errors pop up I'm able to immediately pick up where I left off. A combination of a bookmark and the Zeigarnik Effect I guess?
I like to set external-facing deadlines. I'll do things like tell my department I'm going to do a presentation on technology X in two weeks, and then start learning about it. If I don't get it done, I have to tell 20 other developers why I have to cancel the meeting they've all accepted.
This is part of the motivation of team and peer-accountability in some of the agile methods like Scrum / XP / Pair Programming. If you feel personally responsible to someone else, you're likely to follow through. A good way to do this with personal projects is to find a partner - I work with a designer on a lot of my personal projects, and telling him that I'm going to get X done helps, as well as seeing the time and progress he's invested in the project.
Yeah - fortunately our company is small enough where we can hear stories like that from our support/sales staff, but in larger companies developers are so far removed from the end user that we have no idea how much of an impact we actually make in people's day-to-day.
One of my favorite stories told by our software consultants (the people we send to client sites to train how to use our software effectively):
One day he went to a customer's site to train them on the new version of our software, and met with one of the bookkeepers of the company. He showed her a report that we recently added a column to as part of a feature request from our clients, and she started crying. He was asking her what was wrong, worried that we did something terrible. She replied: "You just saved me 3 hours a day. Now I can go home when my kids are home from school instead of after supper".
Just because we're not saving babies doesn't mean we're not making people's lives better.
That's a pretty good point, and a much better solution to the example I gave. It'd be interesting to see FetchRemoteString as a Func<string, string> property where you could have a default implementation (web client) and then in your test setup you could just redefine the property to do whatever you want.
The general point still stands though - if there was an interface, we wouldn't have to come up with these workarounds.
As I noted in the article's comments, I'm pretty sure you can't just add "dataType:jsonp" and have it automagically bypass all the cross-domain security restrictions.
What actually happens is jQuery appends something like "callback=some_random_function" to the end of the querystring when it makes the request, and then the server is supposed to return you the standard data, wrapped in a function definition with the same name. jQuery then automatically executes the function, making the json data available.
Some servers require a specific function name, which can be specified as an ajax option using "jsonpCallback: functionName". All this effectively does is uses a specific function name instead of a randomly generated one, so that it matches up with the function returned from the server in the response.