Comic-Con@Home, day one

Today is the first day of my short vacation, “attending” Comic-Con @ Home. I started the day with a number of vaguely creative ideas in my head about how to simulate actually being at a San Diego con. I didn’t actually execute on any of them. I did wear my WonderCon 2019 t-shirt though, so that’s something.

I’m currently watching the Star Trek Universe panel, my first panel of the con. I knew that the panel was going to be prerecorded, and I’m OK with that, but they’ve also done a couple of other things I’m a little disappointed with. First, they turned off comments on the video. I know that YouTube comments are often terrible, but allowing comments would have made it feel more like a real event, with other real fans in the “room”. They also blocked it from being watched on Apple TV or TiVo, so I’m stuck watching it on my computer. I guess that’s a copyright thing, but it’s still weird. If I wanted to make a copy of the panel, it would be way easier for me to do that on my computer than on my Apple TV or TiVo. Oh well. They’re in the middle of a table read of a Discovery episode right now, which is kind of fun, but also kind of pointless. It would be really fun at a live con, but, prerecorded, it’s kind of boring, to be honest. They’re getting into a Q&A now (with questions that they must solicited in advance, I guess). One nice thing about prerecorded video is that I can pause it if I need a break, and I can skip past any boring parts. I’m going to get back to it now, and see if I can single-task for awhile and just watch the video and relax, without having a bunch of other tabs open and switching back and forth to other stuff.

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.

another Comic-Con down

I’m done with the con, and back in my hotel room, trying to figure out how to fit all my stuff back in my luggage. I think I’ll get everything packed away OK, but I’m wondering how it will all look by the time I get back to Newark. Hopefully, everything will still be in one piece.

Looking back, I think I did most of the things I like to do at a con:

  • Ric Meyers’ kung-fu thing.
  • A few DC and Marvel panels.
  • A couple of the panels done by the CFQ guys. (This year, the movie preview and Robot Rumble panels.)
  • A couple of Mark Evanier’s panels. (This year, the cartoon voices panel, and a panel on cover art.)
  • A couple of TV or movie panels. (This year, BSG and Blade.)
  • I picked up a few cheap TPBs from TFAW’s “nick and dent” sale.
  • I picked up a few books from Mile High’s “last hour of the con” 50% off sale.
  • I picked up a stack of books out of somebody’s $1 box.
  • I picked up a couple of action figures. (Hellboy and the Ikki Tousen figure I mentioned in a previous post.)

As usual, I’m not 100% sure if I’ll be going back next year. I probably will, but the con is getting so big it’s almost a hassle to deal with it. I find that I can still have a good time, if I set my expectations correctly. I don’t assume I’m going to get into any particular panels, or get any specific signatures, or anything like that. That generally works.