Nice jQuery plugins

I’ve been working on a web page for the last couple of days that has to do a bunch of stuff client-side, so I’ve been relying more on JavaScript and jQuery, rather than the usual ASP.NET Web Forms stuff I’m used to.

Here’s a list of three relatively simple jQuery plugins that I’m using. I’ve found that, when looking for a way to do something in JavaScript/jQuery, there are usually several options. There are a lot of plugins out there. Some of them are well-written, cross-browser compatible, small, and quick. Others are a little buggy. These three appear to be in the former category.

Watermark plugin for jQuery — We usually use the Ajax Control Toolkit watermark extender. This seems to work just as well, with minimal effort.

jquery-color — I wanted to do some simple color animations on this page. Basically, I wanted to just briefly highlight a new entry with a color background, then have that background color fade out. This can be done with jQuery UI, but that’s a heavy bit of code to include, if you don’t really need it all. This plugin took a while to track down. The page for this at plugins.jquery.com just has a bunch of dead links on it. And searching for jquery color animation on Google mostly leads you astray. I found links to jquery-color on a couple of Stack Overflow questions.

simplepager — I’m displaying a list of comments on the page, and I needed to have a way to display them 10 at a time and page through them. This, again, is something that would be easy for me to do server-side with a ListView and DataPager, but I hadn’t really had to do it client-side before. There’s one site I worked on recently where the original author had implemented his own custom pager, but I didn’t want to use that code if I could avoid it. (Not that there was anything wrong with it, but it was well-integrated into that specific instance, and would have required work to generalize.) I had to make a minor change to this plugin, and I’m thinking that maybe I should submit it back to the author and see if he’ll merge it into the release version. I probably need to create an account on Github to do that, but that wouldn’t be a bad idea anyway.

truly annoying programming problems

I spent a few hours on Friday working on a problem that’s weird enough that I feel it warrants a blog entry. I made a few changes to one of our systems at work recently, and rolled them out Friday morning. This system is a VS 2008 solution with several projects in it. One of the projects is a bunch of web services, both SOAP and REST, that are deployed as a single DLL. I made a minor change to one of the REST services, but didn’t touch the SOAP services. And I made a minor change to a class in what is essentially a data access layer project that is referenced in the web service project, but nothing that should have affected the SOAP services. I’m saying all this to establish that I did not change anything that should have changed the SOAP services at all.

Returning to the data access project: this project was initially auto-generated through some CodeSmith templates, long before I started working for the company. The idea was that every class was implemented as a partial class broken into two files, with one file that contained auto-generated code, and one that could be used to add custom code. Now, some of these classes are used as output for the SOAP services. And those services just use the default XML serialization. (Some of you may see where this is heading.)

So we’re got a class called, let’s say, “Location,” broken into file X and file Y. File X contains properties A, B, and C, and file Y contains properties D, E, and F. Up until Friday, these properties had always been serialized from file X, then file Y, so they appeared in the output as A, B, C, D, E, and F. For some reason, on Friday, the compiler decided to process file Y before file X, and give me an XML document ordered as D, E, F, A, B, C. And, of course, the C# programs we have that actually call these web services don’t like getting their properties out of order. They expect everything to look exactly like the WSDL that was pulled in when they were last deployed. Oh, and most of them don’t have any useful error-handling or logging, and do a lot of their work in a declarative manner, through controls in the .aspx files rather than in code-behind, where I can see what’s going on step-by-step in the debugger. So figuring out what had gone wrong was interesting.

It had never really occurred to me, though I’m sure I read it at some point, that there is no guarantee as to the order in which the C# compiler will process the individual files that make up a partial class. (See this Stack Overflow question for reference.) I think the reason it changed now is that I moved the project from VSS to Mercurial recently, and that change probably caused enough of a disturbance to muck things up a bit.

I think if I had been the one that had implemented this thing in the first place, I would probably have done custom XML serialization, just because I’m a bit of a control freak, so I wouldn’t have ever had this problem.

Well, anyway, the moral of this story is that you shouldn’t assume that, just because a bit of code has been working for years, and you honestly haven’t touched it at all, that nothing can go wrong with it, and that the compiler will always output the same code given the same source code.

Borders

I’m really sorry to see Borders going into liquidation and closing all their stores. There’s a good article about this on AnnArbor.com. (Ann Arbor is where Borders started out.)
Our local Borders, in Bridgewater, has been around for about 10 years, I think. I’ve spent a lot of time in there, poking through SF novels, computer books, comics, and CDs. I will admit that I’m one of those guys who often looked through books at Borders, then bought them through Amazon. I did buy a fair amount of stuff in-store though, especially when I had 30% or 40% off coupons from Borders Rewards.
There’s a Barnes & Noble at the Somerville circle, so I guess that’s where I’ll be going when I want to actually look at a hard-copy book before buying it.
There used to be a Waldenbooks (or maybe B. Dalton) right here in downtown Somerville, along with two different used book stores. Now, there are no book stores at all in Somerville. (One of the used book stores moved to Raritan, I think, and is probably still in business, but I haven’t checked lately.)
I can’t help wondering if brick & mortar book stores (and even hard-copy books) are on their way out. I like my Kindle and my iPad, and I like Amazon, but I’m not sure I’m ready to start buying and reading everything electronically.

SDCC 2011, day one

This is now the third year in a row that I’ve skipped Comic-Con. The last time I went was 2008. I’m hoping I can find some way to get a full four-day pass and hotel reservation for next year. It’s been too long since I’ve been out there.
Meanwhile, as usual, I’ve been poking around the web for interesting articles about the con. Here are a few from SignOnSanDiego.com:
Comic-Con makes itself at home
Comic-Con and Hollywood
Comic-Con 2011 Preview

PHP Cookbook

I’m going to be doing some maintenance programming on a PHP/MySQL site pretty soon. I know a little PHP, probably enough to get by on this project, but I’d like to learn more. I have an old introductory PHP book around here somewhere, but I wanted to pick up something more substantial. So I picked up O’Reilly’s PHP Cookbook at Borders on my way home from work today. I have so many programming books that I’ve barely started reading, but this one looks like it’ll be a good reference.

TortoiseHg 2.1

I upgraded to TortoiseHg 2.1 yesterday.
This item, under the “improvements” list, is huge:

(file history) added context menu for file revision features

Thank you so much for implementing this! I’m using it every day now. Of course, I see that a bug fix release, 2.1.1, was made available this morning, so now I need to upgrade again. Well, the install is pretty painless, so that’s OK.

fun with Twitter and Facebook

I just finished working on a module to automatically post news stories from a client web site to Twitter and Facebook. I know that’s not a big deal, but it was kind of cool, and it took a bit of effort to get the Facebook thing figured out. (See this stackoverflow.com post for some detail on that.)

I used the Facebook C# SDK for the Facebook stuff, Twitterizer for the Twitter stuff, and EasyHttp to access the bit.ly API, for URL shortening. And of course I pulled them all into the project with NuGet. I feel like the master of all social media APIs now.