Unicode in 33 minutes. Having just recently finished updating an older system to deal with Unicode, I find this highly entertaining.
Category: programming
Moving a VSS database to Mercurial
Here’s a document I wrote up for work yesterday. I think it may be generally useful for anyone else out there who is considering moving from Visual SourceSafe to Mercurial. This write-up is specific to an organization working in a Windows environment, using Visual Studio 2008 & 2010, and using bitbucket.org as a back-end for Hg. I also assume you’re using TortoiseHg and VisualHg.
- Insure all files are checked in to VSS.
- Get a new, full copy of the project from VSS.
- Make all files writable (uncheck read-only flag in Win Explorer).
- At both the solution and project levels, delete all *.SCC files.
- Edit the .SLN file to remove the “SourceCodeControl” section. It should begin with “GlobalSection(SourceCodeControl)” and end with “EndGlobalSection”.
- Edit each .CSPROJ file (one in each project folder) and remove all settings starting with “Scc”. There should be 4 — SccProjectName, SccLocalPath, SccAuxPath, and SccProvider.
- In the same folder as the solution file, in Windows Explorer, right-click, and select “Create Repository Here” from the TortoiseHg menu. Make sure “add special files” is checked.
- Edit the new “.hgignore” file and insert contents as per below. You may need to modify this file, depending on the project.
- Optional: create a README.TXT file in the solution folder, describing the project. This will automatically be displayed on the Bitbucket home screen for this repository.
- Right-click in Windows Explorer and select “Hg Commit” from the Tortoise menu.
- Review the list of files shown. If you see anything that shouldn’t be in source control, cancel out and modify the .hgignore file accordingly.
- Click the “All” button to select all files. Enter “Initial Hg Commit” as the comment. Click “Commit”.
- When that is done, exit from the commit dialog and review the project in Windows Explorer. Make sure that all files that should be in source control have a green check superimposed over their icon.
- Create a new repository in Bitbucket for the project:
- https://bitbucket.org
- Repositories, Create repository.
- Enter an appropriate name.
- Language should usually be set to C#.
- Make a note of the repository address.
- Back in the main solution folder, right-click and select “Synchronize” from the Tortoise menu.
- Set the remote repository to the address you noted above. Hit the ‘save’ icon, and give this alias a name.
- Hit the “push” button.
- When that is done, check the project page in Bitbucket to make sure the source is all there.
- As a sanity check, create a new temp folder on your hard drive, and pull a new copy of the repository into it.
- Select “clone” from the Tortoise menu.
- Enter the full path to the Bitbucket repo as the source (“https://bitbucket.org/…”) and leave the destination as-is.
- When the clone is done, open the project in Visual Studio.
- Go to Tools, Options, Source Control, and switch your plug-in to VisualHg.
- Take a quick look through the files in the solution, and see if any appear to be missing. (A missing file will have a yellow triangle icon overlay.)
- Do a full build of the solution.
- If possible, run a few tests to be sure it’s working. After the build, exit Visual Studio, and bring up the Hg Commit dialog at the root level. If you see any changed files to check in, they are probably temp files that should be excluded. If this is the case, please edit .hgignore accordingly.
- When done, simply delete your temp folder.
- You have now migrated a VSS database to a Hg repository.
Note that I am not retaining version history here, just starting fresh in Hg. If you want to move your version history over, please look at vss2hg.pl. I tried this out on one of my VSS databases, and it did work, after some tweaking, though it didn’t quite manage to get 100% of the data over, and it was a bit confused about dates. I decided that it wasn’t worth bothering with it, in my case.
References:
- stackoverflow.com — how to remove VSS bindings.
- visualstudiohacks.com — small program to automatically remove bindings.
- stackoverflow.com — sample .hgignore files for VS 2008
- stackoverflow.com — sample .hgignore files for VS 2010.
EasyHttp
I haven’t had much reason, until recently, to start messing around with .NET 4 and C# 4. But I just had to do a bunch of stuff involving REST and JSON, and I found that the new dynamic type was very helpful there. Specifically, I used EasyHttp (available on GitHub), which makes it very easy to consume RESTful web services, and (via JsonFx) serialize and de-serialize JSON.
I know that there are other ways to do all this stuff, but I think EasyHttp and JsonFx work well and are easy to use. With dynamic objects, I don’t have to worry about mapping a JSON result to an explicit .NET class; I can just access those members I need to access and ignore the rest.
div div div
Saw this on a page I was working on last week:
I’m pretty sure there weren’t that many open divs on the page. I imagine the original author wasn’t sure how many divs he had open, and just decided to go for broke…
PHP tip of the day
If you’re running an array through json_encode(), and part of that array is a reference to another array, do _not_ json_encode() *that* array first. JSON-encoding something that’s already JSON results in… confusion. This is one of those things that I would have figured out a lot faster if I had any kind of debugging set up for PHP. Maybe I should look at FirePHP. I don’t do a lot of PHP work, but I’m using PHP right now to test some REST web services that I’m writing in .Net/C#. (Debugging the .Net code, of course, is a piece of cake.)
DPack
I don’t tend to install a lot of Visual Studio add-ons, but I stumbled across DPack recently, and I’ve found it to be quite useful. Specifically, the numbered bookmarks, which I used to rely on in certain other environments.
iMac
When I agreed to develop a Mac app for a client, I’m not sure why I agreed to make it backward-compatible to OS 10.4. Now I’m stuck testing my app on this crazy thing.
The weird thing about Cocoa development is that there are perfectly innocuous things that work fine on 10.6, but don’t work at all on 10.4. And that don’t throw errors either, so it’s pretty hard to nail them down.
The modal popup that ate Detroit
Do you think the ASP.NET AJAX ModalPopupExtender was ever meant to be used to show this much stuff? Me neither. But hey, it kinda works.
Cocoa project
The Cocoa/Mac project that I’ve been working on is pretty much done. It’s not a really big or complicated program, but I just ran a ‘wc’ on it, and it’s a bit over 1400 lines of code, so it’s not trivial either. I’m betting that, if I was more experienced with Cocoa, it could probably be, maybe, 900 lines instead of 1400, but that’s still a reasonable size. Oh, and if I didn’t have to support OS X 10.4, and could have used the garbage collector and other stuff that only works in 10.5+, I could probably have shaved off another 100 lines of code.
My program is replacing an old program written in FutureBASIC. Looking back at the source code for that, it was a bit over 600 lines of code, all in one file. You can definitely write a shorter program if you don’t have to declare variables, or allocate and release memory for them.
Overall, I had some fun learning a new language and a new framework, and figuring out how to solve problems that would have been trivial for me to solve in .Net/C#. I’d like to learn some more Cocoa stuff now, and maybe try writing an iOS app. I don’t really have a specific idea for an app, but I’ll figure something out.
StackOverflow
StackOverflow has been very useful for me lately, both at work (with the usual .Net stuff) and at home (as I try to figure out Cocoa programming). I asked them to merge my work and home accounts today, so I’d have just one account. I hit a 100 reputation score recently on my work account, and I don’t want to risk losing it, if I change jobs, or the company goes bankrupt or something. So here’s my StackOverflow flair:

