Friday, March 31, 2006
QVCS/QVCS-Pro 3.10.7 Release Now Available
I just posted the QVCS/QVCS-Pro 3.10.7 release. The bits are the same as the candidate build I posted earlier this week. You can download the latest release here.
Tuesday, March 28, 2006
Early bird special; MFC CSocket advice
I just uploaded the likely bits for the upcoming 3.10.7 release. The official release date is this Friday; but you can get the bits early here. I say likely, because I don't expect to make any additional changes to the code between now and Friday -- unless there are some late bug reports.
Things have been quiet on the blog because I've been preoccupied -- coding away on both the 3.10.7 release and the 2.0.x Enterprise release. As noted above, the bits for 3.10.7 are now stable. 2.0.x Enterprise is a completely different story.
The big feature for 2.0.x Enterprise is be the addition of support for Microsoft SCC IDE integration (like QVCS-Pro). To implement this, I've been writing the IDE client piece in C++, and making the corresponding transport changes in Java for the server code. Along the way, I implemented socket code on the client to communicate with the server, just like the existing Java client. One of the twists that requires server changes is that I can't use Java Serialization on the C++ side for object serialization, since I don't have a JVM on the client. This means writing a serialization layer on both server and client to push the bits back and forth. The result is a better use of bandwidth, at the expense of writing and maintaining the serialization code.
Since QVCS and QVCS-Pro are MFC based C++ applications, I figured I'd write the client SCC .dll as an MFC based .dll Since I had to do socket communications between the MFC C++ client and the Java server, I figured I'd use an MFC supplied socket class. As it turns out, that was a mistake that cost me several days of frustration: I tried to use the MFC CSocket class, since it seemed to be a closer fit to what I needed. For whatever reason -- it was not a good use of my time to try to debug what was going on -- the CSocket class really did not fit the threading model that I needed to support. There must be some scenarios where CSocket can work, but it was not reliable at all in the way that I was trying to use it. The Microsoft docs were not helpful in pointing out the limitations of the CSocket class -- for that I had to rely on dribs and drabs of complaints that I found via Google search.
In the end, I punted, and wrote my own socket class that wraps the Windows socket API's, based on some sample code I found on the Internet. It works well, and is actually very simple. My guess is that almost everyone else who has to write socket code in an MFC environment goes through a similar two days of agony, and then does the same thing that I did. The result is more reliable with well defined behavior than the MFC supplied alternatives.
The bottom line advice -- if you are thinking of using the MFC CSocket class for anything useful, think again.
Thursday, March 09, 2006
3.10.7 Build at end of March
I'll release a 3.10.7 build at the end of March. This is a bug fix release/minor change release. So far, it addresses a couple of issues:
- The blinking of the toolbar filter indicator will become a user preference... meaning you can turn the blinking off if you like. The default will be for the blinking to be turned off. You set your preference via the Admin/Preferences... dialog.
- Fix a bug in the get dialog so that the presence of the overwrite dialog won't hold the lock on the associated archive file.
- Fix bug in Login As... implementation so that it works correctly. I broke this in the 3.9.25 build.
- A small usability improvement: the checkin dialog becomes resizable.
The changes above have already been coded and tested. I'm just holding off on the release pending any other bug reports.
UPDATE: Added mention of the Login As... bug fix.