Tortoise SVN and BeyondCompare

Since I always forget the settings, here they are 🙂

From: http://www.scootersoftware.com/download.php?c=kb_vcs
[May 25th 2010]


TORTOISESVN

Diff

  1. Select Settings from Explorer's TortoiseSVN submenu.
  2. Switch to the Diff Viewer tab.
  3. Change the radio buttons from TortoiseMerge to External.
  4. In the path edits, enter:
    "C:Program FilesBeyond Compare 3BComp.exe" %base %mine /title1=%bname /title2=%yname /leftreadonly

To use Beyond Compare for image comparisons either replace the file C:Program FilesTortoiseSVNbinTortoiseIDiff.exe with a copy of BComp.exe, or click the Advanced button on theDiff Viewer tab and add each image type's extension with the same command line as above.

3-Way Merge (v3 Pro)

  1. Select Settings from Explorer's TortoisSVN submenu.
  2. Switch to the Merge Tool tab.
  3. Change the radio buttons from TortoiseMerge to External.
  4. In the path edits, enter:
    "C:Program FilesBeyond Compare 3BComp.exe" %mine %theirs %base %merged /title1=%yname /title2=%tname /title3=%bname /title4=%mname

2-Way Merge (v3 Std, v2)

Use the same steps as above, but use the command line:
"C:Program FilesBeyond Compare 3BComp.exe" %mine %theirs /savetarget=%merged


Here are some screenshots of the UI, from the Start button or Context menu, then the settings screen for diff and merge

context-menu settings

merge

Hopefully seeing the light with Ektron CMS400.NET 8

Well, as you may be able to tell, I have been, eating, drinking, and breathing Ektron lately. And I think I am beginning to see the light, by which I mean, how Ektron wants you to work within itself. It’s a pretty powerful system.

What I ended up with is creating a “Widget” content directory, and a directory within for each widget that I am backing the configuration with the results of a Smartform instance. So, I created a Smartform per Widget, and assigned that widget to be the default and only Smartform for that directory, and requiring only Smartform content in that directory. The net result is, I can now hook into the existing  way to simply call that directory with a “add” command via http request, and popup the authentic CMS400 smart form content editor, my widget just needs to create the content and persist the new content id.

That way, when the widget is dropped on the page, in edit view, you can create the configuration Smartform, and then subsequently, you are displayed the XSL representation with a Ektron Edit “button” to bring down the standard Ektron contextual edit options. Downside is having the right named controls to receive updates from the Ektron Editor Add New form closing. It’s a little messy but there is precedent reference code to look at in some other widgets (hint: ContentBlock).

Additionally, I still need to create a page that will render a widget dynamically, actually, each widget will need a default template such that when the content itself is referenced alone (like an embed link) it will provide an appropriate rendering. The default behavior is to pass it though a rough xml render with nodes and elements and attributes, in a digestible format.

What you really need is what this page looks like alone, which doesn’t exist without the context of the widget, which needs to live on a page. Attaching it to a template with a dynamically populated Smartform of the correct type will yield a stand alone page for that Smartform instance. Complete with master page support at the .aspx level.

One could provide a pretty XSLT to render the Smartform’s configuration XML more attractively then the default, but for design / content author mode the default is passable, just not that pretty.

All in all it feels pretty right. It is an odd situation though, I’m providing Widgets to Content Authors, so since they are exposed to these Ektron built in editors, the consistency greatly affects the end result. Typically the widgets are meant to interface with external systems or provide relatively autonomous functionality and configuration wouldn’t be content. But my audience is a technical staff that will put the pages together using these widgets, and their customers will add the content in the pre-created locations and widget sets, so a more in depth configuration methodology was required. Turning out pretty well.

All in all, I like it, while it has some room for improvement. I think they should create a community edition.

More on Ektron CMS400.NET

So far, most of the difficulties in customizing a Ektron is that a lot of the abstractions in a standard web application are already encapsulated by the system. For example, containers and controls such as images, content blocks, pages, forms, the CMS already has a pretty rich set of data attached to these. The problem is, where the rubber hits the road, you need to provide a widget that will run in the Ektron platform and use the Ektron structures for persistence, and the UI rules will demand a title, body and image for numerous UI blocks, but Widget1 will only use an image, and Widget2 requires and image and body, but not a title, whereas Widget3 requires all 3. Ektron provides a “Smartform” concept that lets you define a structure of data via a graphical WYSIWYG form builder which represnets itself as XML. Once you have a Smartform, you can associate it with a content directory, then new instances of the smartform can be created and populated by the user then saved as a content item.

So great, I have a Audio Player widget, that takes has a resource selector smartform input control, which allows the user to pop up a graphical Content Folder browser, which can be limited to certain types of content and allow the user to pick. His choice is persisted when the new instance of the smartform is titled and saved.

Now I need to build 2 jukebox widgets, “Jukebox A” that has requires a audio resource and a body which is a standard HTML content resource (in ektron); and “Jukebox B” that just takes the audio resource. So, I can make a “Jukebox Item” Smartform, which has both an audio resource and a body resource and create 2 new smartform instances, based on the “Jukebox Item”. Roadblock… Since A requires both, and B only needs the one, the smartform allows us to require it, but we can’t put the same requirement on the body, because not both widgets will use it. Leaving you with the sad solution of spreading validation (and persistence) over the underlying items and the final widget edit UI. Custom HTML can be provided in the smartforms so custom javascript validation and manipulation could be performed, but doing that is the exception to the rule, not the standard way of doing it in Ektron.

Another problem using the smartforms are the when the resource picker control is used, it presents itself in terms of the CMS system’s content, where you’d like to restrict a resource to another smartform instance in particular such that if you have a Image Carousel Item and a New Item, you could restrict the content shown to contents that use that form as their base. Having said that, the content chooser is part of the workarea code, so it could be modified. The WorkArea is the code for the CMS system. It can be completely customized, the question is how far out of the box do you want to go, especially if you need to upgrade to a new version down the road.

It just seems like these would not be new complaints. I’m no SharePoint expert but this is why they have content types that can be created and treated like first class citizens, the less customizing of the actual CMS system, the better.

It’s not terrible, but something to consider.

A few thoughts on Ektron CMS400.NET

So I recently started a new job at a decently sized software consultancy (excellent news and a great opportunity to be sure!) and my first project is at a large hospital in Cincinnati, Ohio. They currently are using Ektron CMS400.NET 7.x host the site in question. While I have heard of Ektron in the past, I have not had that much time to work with it up until this point.

Disclaimer: I do not work for or represent Ektron Inc. in any way shape or form. I simple am a developer tasked with creating custom components that work within the client’s installation of the product and in general the entire client customization and implementation. I do have experience with a number of Content Management Systems on a variety of platforms, but I am in no means an expert and I am delighted to learn new products and platforms.

Let’s start with a little background. Ektron CMS400.NET is developed by Ektron Inc. (http://www.ektron.com/), located in Nashua, NH. Their flagship product is CMS400.NET and it’s a pretty light-weight and pretty powerful Content Management System. Ektron hosts a set of developer community for forums and blogs, etc. And they have a ton of documentation (literally, if you  printed it out, it would likely weigh a ton) and videos, as well as tutorials. Essentially everything you’d hope to be in place for an indication of a well kept software project, and it’s here in spades. It’s relatively affordable when weighing it’s features and price with it’s competitors.

Now for the nitty grity bits. CMS400.NET is a .NET 2.0 Website project (ala Visual Studio 2005), it survives an upgrade to 2008 and 2010, I’ve tried them both with little to fix up. It’s written predominantly in VB.Net though does have a vbcode and cscode folders in the site’s app_code directory to allow extensibility in either. And of course custom class libraries can be written in any managed language and referenced from the website. The installation comes with a few Install Ektron Site options such as “CMS400 Developer Site”, “CMS400 Minimum Site”, etc. And will install the site into IIS, SQL Server (and it will offer the option to install SQL Server Express during the installation if it isn’t already present). The Developer site comes with a main Ektron Developer Documentation site, and a demo site for some medical company. The Minimum set up simply installs an empty Ektron installation, fully configured and ready for complete custom content. The Api is pretty extensive, I will give them that, hands down. I will complain about their documentation, they have a ton, and maybe every single piece of the platform is documented, it is literally too much to take in and there isn’t a homogenous set of documentation for it. But it is fully loaded. There are some CMS / Ektron specific words you may need to know if your not familiar with the syntax of the documentation (i.e. taxonomy, cms, smartforms, etc). Ramp up time getting familiar with the platform while creating a useable Ektron widget to personal spec was about two weeks, which I don’t think is unreasonable).

My primary dislikes are the Website Project visual studio application over the Web Application project choice. Now it comes as a fully functional website CMS web system. So classes typically sit in the app_code directory and are compiled but their source code is never published. So you drop your business objects in there and proceed to code some widgets. For ektron to recognize widgets, they must be in the root of a widget directory in the website folder hierarchy. So you discover you need to touch up the base class, your change recompiles the app_code, which the entire rest of the site relies on, so then it is recompiled. If you can stay out of the app_code you can recompile the website in a much shorter time. However, I’m a back-end guy so most of my time is in the plumbing that causes the nightmare recompilation. Ok, it’s maybe 3 minutes, but damn… feels like forever.

Beyond that, I have no gripes, it’s supports pretty much everything you want, in context content editing, metadata customization, easy widget infrastructure (they’re literally .ascx web user control files) and it’s a website, so you can fine tune the entire site. You don’t get the source code to the API but at that point you’d be adding your own so it doesn’t matter, but would have been a nice touch. Maybe I just missed that piece of documentation 😮

Anyway, I’ll end it on a 2 thumbs up. I would recommend it to a company that couldn’t afford SharePoint, could customize the asp.net site, had a content editor plan in place.

Free Release of MechWarrior 4 via MTX

So as I was minding my own business surfing the interwebz, I notice this little excellent bit of gaming interest if you’re a fan of MechWarrior

Apparently, Microsoft has released, for free, MechWarrior 4, here is the press release (at least as of the time of it’s posting) http://mektek.net/projects/mw4/index.html

[Click on image to enlarge]

The downside is, the delivery method. You seemingly can only get it via the MTX client, which is comparable to Valve Software’s product: Steam where you simply choose from a list of games that are available for you to download, click on the Game and press the Install button:

[Click on image to enlarge]

Unfortunately, the UI is very unresponsive and seems to go out to lunch for 30 seconds or more. Now to be fair, I am running 64bit Windows 7, so maybe 32bit or other OS's will have no problems… The UPNP doesn’t seem to work out of the box, nor was I able to get the torrent method of transfer (the default) to work, well period, I couldn’t get anything to actually download. Good theory, Valve has shown it, but this application needs to be a lot more stable or just go away and license steam. I’m open to distribution venues that are the easiest to use out of the box. No one is interested in punching wholes in firewalls manually when every other app can do it no problem… Frankly, shouldn’t have shipped as is. And even then it’s a beta version. I’m sure it seemed like a good idea at the time but….

I could be playing it now, if only it would download … sigh