Microsoft SQL Server Report Designer Error: An item with the same key has already been added

Wednesday, October 23, 2019

Whilst designing a report for deployment to SSRS from Visual Studio 2015, I received this error message when entering a SQL query I knew worked in to the New Report wizard:

An error occurred while the query design method was being saved. An item with the same key has already been added.

This is a classic Microsoft error message that is both specific and vague at the same time… and also shouldn’t happen. There are scant details online as to where this comes from but is a result of Microsoft SQL Server Report Designer having a requirement for unique column names (even if the underlying SQL query returns unique columns with the same name). This is a stupid limitation and whilst the error message is accurate, it is sufficiently vague to obfuscate what is going on.

The solution - unsurprisingly - is to make sure that there is no repetition in the names of the columns.

Grouping Objects in Visual Studio 2012

Monday, October 14, 2019

Grouping objects should be one of those things that is - well - easy to do! In Microsoft Word you Ctrl select each object, then right-click and select “Group”. Easy. In Visual Studio 2012, not so. You would have thought that, in Microsoft’s prime programming environment, these simple layout tasks would be easy, but thy’re not and it’s not documented anywhere. In my particular instance I was creating a SQL Server Reporting Services report where images in the template were moving depending on the number of rows in the output. The solution was to group the images together.

The grouping concept is sensible and well implemented, it’s just that working out how to do it is difficult! You actually have to insert a new rectangle object and then drag-and-drop the objects you want to group in to it. Once you’ve done this, the properties of your contained objects should look something similar to this where the “Parent” attribute under “Other” shows “Rectangle”. Now if you move the group, they all move. Job done!

Image does not exist: images/rectangle_properties.jpg

ISO 3166-1

Wednesday, October 2, 2019

ISO 3166-1 just trips off the tongue, however it’s one of those standards that underpins a fair amount of daily geospatial traffic that is undertaken on a daily basis. Yes, I’m talking about country codes which Wikipedia helpfully defines as:

ISO 3166-1… defines codes for the names of countries, dependent territories, and special areas of geographical interest

This is important because it is used in so much analogue and digital data exchange between countries, although don’t for a moment think the ISO is the only organisation that defines country codes… but that’s a whole other blog post!

What gets in included in the list is interesting… the criteria for inclusion include member states of the United Nations, a UN specialized agency or a party to the Statute of the International Court of Justice. Becoming a member state of the UN is clearly helpful, although what makes a country is interesting in itself, as well as highly politicised. Palestine is an obvious example, but just look at the UK. The UK is a country, but should Wales, Scotland, and Northern Ireland also be included? For example, they are included for FIFA. The UN loosely uses Article 1 from the Montevideo Convention which outlines four qualities a state should have: a permanent population, a defined territory, government, and the capacity to enter relations with other states.

Anyway, once you are on the ISO 3166-1 list you get 2 and 3 letter codes, along with a 3 digit numerical code. These are maintained by the ISO 3166 Maintenance Agency and, given the above, change regularly. You can view the current list here and subscribe to official updates.

At the RGS we are a membership organisation and take online international payments, so having up-to-date country codes is important. Rather than subscribe to the ISO, we use the UK government Country Register, which includes an update service. It has the ISO-2 letter codes, although isn’t necessarily identical (as it’s countries the UK recognises).

Converting from Blosxom to Flatpress

Sunday, September 29, 2019

This blog has been offline for a little while as the original Blosxom implementation had been hacked. Blosxom was a wonderful CGI script that was elegant in its simplicity yet eminently extensible through the many plugins which existed and made it moderately feature rich. Best of all, it used plain text files to store all its entries which makes backup and conversion much simpler than a database. With my implementation of blosxom decommissioned, I needed to find a replacement. Google flat file blogging engines and there are a lot. However many of the projects have been orphaned, like blosxom, and no longer in active development. What I wanted to find was an engine that was simple, had some good features and an active community. Flatpress seems to fit the bill with a new maintainer - and active Flatpresser - Arvid Zimmerman.

The next step was to convert my archive of over 1000 blosxom blog entries to Flatpress. Big shout out to James O’Connor who wrote the Python script to convert the files. The process is broadly this:

  • download your Blosxom files, including all the sub-directories for categories, but make sure to maintain the date/time filestamp of individual files - this is used to timestamp the entry for Flatpress. WinSCP does this (Filezilla doesnt)
  • make sure the categories only ONE DIRECTORY DEEP. Move any sub-sub-directories up to the top level
  • rename all the directories to numbers. These are used to tag the entries and can then be recreated within FlatPress
  • copy the script.py and template files to the directory the folders are stored in
  • edit the template file to have the header/footer you want. The content, date and categories will be changed for the entries
  • run the script
  • a new fp-content directory will be created with all your entries
  • upload this to your flatpress site and rebuild the index

The script does the following

  • renames the file to entry‹date›-‹time›.txt based upon the date modified date
  • copies the file to a new subfolder in FlatPress /content folder based upon year and month
  • deletes the first line from the file (and deletes the first line break)
  • prefixes the file with:
    VERSION|fp-1.1|SUBJECT||CONTENT|
  • suffixes with:
    |AUTHOR|miksmith|DATE|<1566926569>|CATEGORIES||

Any updates will be posted over at Flatpress.

Video file sort order on my Pico projector

Sunday, December 24, 2017

A (long) time back I wrote about the Acer C112 Pico Projector I was using. I’ve since upgraded to the Pico Genie P200 which gives a great 200 lumens of light and has microSD, USB and HDMI ports to allow all sorts of connectivity along with a built in battery. It’s not perfect - but its very good (and I still follow the same routine for transcoding with DVDDecryptor and TEncoder).

One minor irritant was that the sort order of the files on the memory stick appeared to be shown by date on the projector - I used Nico’s useful BulkFileChanger and… it made no difference. Obviously the embedded Linux system wasn’t using file dates. In fact on my (FAT32) USB stick it’s using the order of the files in the FAT - what was successful was using DriveSort. Problem solved - I suspect this affects a small number of embedded systems (mp3 players, projectors etc) that have had some lazy coding and don’t sort the files on portable drives.