Saturday, October 16, 2021

bringing order to chaos...

I've always been a collector of books. About 10 years ago we were moving for my wife's job. Her employer was paying the cost of the move and, of course, insisted on insuring our possessions. So, I was given the odious task of determining the replacement value of my 1100+ books. I started with a spreadsheet but being a web application developer (at that time) meant that I couldn't leave it at that. Eventually, this project grew to be a data driven collection management system which I then tweaked in order to track my gaming stuff. I call the game collection system Muster while the book version (though essentially the same code) is called Cache.

The first screenshot shows the opening page of Muster. When starting the program, a listing of the 10 most recently edited items is displayed on the left (in the tan area). This area also displays the results if you've performed a simple search (as I have in the screenshot). Along the top on the right hand side (in the green area) is the simple search function, the add item button and the quit button. There is also a link to the query system which I'll describe later.

Below the search functions is a list of predefined attributes which, when clicked on, will present all records with that attribute. For example, clicking on location '42' will present a list of everything stored in that location; clicking on genre 'conquest/mexico' will bring up my collection of Aztecs and conquistadors, etc.

The next screenshot (warning: it's a large picture!) shows the individual item page used to edit an existing item or add a new one. The screenshot shows all the sections expanded. Normally, they are collapsed and you need to click on the triangular arrows beside the section names to expand them. Note that you can upload a small 70x100 pixel image (which is used as an icon to represent the item) and larger images. 

Below the image section is the valuation section. I keep track of what I spend on items and--in some cases--the value (what I'd want if I was to sell the item). It's interesting to think that these fields were actually the genesis of the entire system!

The links/upload section has an interesting feature. For most items I save a url to the manufacturer web site here to document the cost. But, if I'm cataloging a set of rules or other electronic document, I can upload a copy of the document. Essentially, my entire library of electronic wargame rules is available in Muster! They're all in one place--no trying to remember where I saved the download.

The query system was mentioned earlier and the next screenshot displays the query page. Note that there's a difference between 'searching' and 'querying'. Searching is looking for all items with a single value in a single attribute--everything in one location or everything in genre 'ancients'. Querying allows much more flexibility in formatting the results and query parameters.

In the query page you can see that every attribute is listed and the user can select which attributes to display by giving them an order in which to display. You can filter the query by entering a value in the text box. And you can tell Muster whether you want to match that value exactly or simply see if the value is contained in the field. (E.g., searching for 'wwi' will return items for wwi and wwii since wwii contains the sequence wwi; searching for 'wwi' EXACTLY will only return items for wwi.) You can also search for multiple values in a field by separating the values with a tilde (~). Lastly, you can sort the query results by any field.

If you give the query a name it will be added to the saved query list on the right so it can be recalled and run again in the future. Unnamed queries are just one and done. Once you close the query page the query parameters go to the rainbow bridge.

The last screenshot shows part of the results from the 'Aztecs' query. Query metric information is shown at the top of the page and then the results themselves. You can see how the fields are ordered as selected in the query parameters. The query will also provide subtotals for the first field. For example, in this query 'location' was the first field. Consequently, a summary is provided telling us that in location 7 there are 3 items (records) which represent 86 figures mounted on 86 bases with a total cost of $129.57. I don't intend to sell my Aztecs so I've not assigned a value on them.

 Also note that the ID field is a link. Any time the ID is included in a query it will be formatted as a link to the edit page for that item. This feature has saved me an incredible amount of time when I need to correct the details of multiple items.

So that's Muster, my Wargame Collection Software system. It started out as a way to document replacement values of books for insurance purposes. It also made putting my books back into my preferred order a snap once we moved! I've made a habit of keeping Muster (and Cache) updated as I acquire new toys or finish painting projects. Without Muster, I'm not sure I could locate anything that's not in plain sight these days! I frequently know I have something but have no idea where it got to until I Muster the troops.

The system is also helpful in generating a full report of all my gaming stuff on an annual basis. I give a copy to my wife in *.pdf format. That way, should I pass unexpectedly she will have a fairly accurate record of all my toys, where they are and an approximation of their retail value. Having been through an estate settlement myself, I know how much of a headache disposing of a collection can be. Especially if you know nothing about the collection!

Muster is written in the Ruby programming language and while it is technically a web application it runs locally and all data is kept safe at home. Drop me a line if you'd be interesting in trying out Muster. You'll need to be tech savvy enough to get Ruby running on your computer. (That's generally pretty easy to do.)


8 comments:

  1. Very nice system and being a web app developer would certainly have helped. Being able to attach photos would also be useful for insurance purposes I imagine.

    I have been playing with an Access based system for some years and have all of my unpainted lead in there. The impetus to build it was discovering too many instances where I bought something in a 'sale' when I already had it.

    I had always intended to put a user interface into it - but it is still at the raw stage of being a series of many Access tables. The other problem with Access is that being primarily a desktop system and my games room is two floors away from where the PC is. I have longer terms plans to put it on a shared drive or something similar so that I can access it from anywhere in the house.

    I am also going through the scanning or all of my hundreds of magazines and am considering developing a similar system for indexing them so that I will be able to find articles across hundreds of PDFs in the future.

    Richard

    ReplyDelete
    Replies
    1. Thanks, Richard,

      Yeah, I had similar progression: word processing table => Spreadsheet => SQLite => Ruby Web Interface using SQLite => Ruby Web App using YAML.

      I've also tinkered with OCR of scanned articles. Probably too tough a nut for me to crack on that one!

      Delete
  2. Waaaay back in the complexity scale I use a spreadsheet to keep track of painted units. This was first instituted so that we could plan games based around four collections of Miniatures that all overlapped... It now also serves me as an Aid memoir as to which of the little chaps I have already painted and are stored somewhere.

    ReplyDelete
  3. Adam, 'Aide-Memoire' would be a more descriptive name than 'Muster'. That's really what I use the system for!

    ReplyDelete
  4. Replies
    1. Sure, Panzer. How can I get in touch with you? You can email me through my profile.

      Delete
  5. Thats giving me some thought, thanks for an interesting article. Certainly its a better way than measuring the pile by mass/volume.

    ReplyDelete
    Replies
    1. Hmm... I never thought about calculating mass/volume. I might be able to work that in once I have an average volume per infantry/scale ;-)

      Delete