<div dir="ltr"><div class="gmail_default"><div class="gmail_default"><font face="courier new, monospace">Apologies that this will probably only be of interest to at most a few of you, if any; it still seems worth posting, just in case.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">While I've been tinkering with software for ringing for over forty years, it's always been an undocumented, and untidy, pile of whatever it is I've needed for whatever has my attention Right Now. It's long been a goal to act like a good neighbor and tidy things up and document them, and make them available for others to use. I've finally made some progress on that front.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">As you'd expect, underlying all the various things I've played with over the years is a library of lower level stuff defining rows and methods and things like that. Like much of the stuff built on top of it it's gone through many generations. I've rewritten it at least seven times, and in several different programming languages. A few generations ago I even gave it a name, Roan. This is the first part I've tidied up and documented, and have now made publicly available.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">That's the good news. The perhaps not so good news, depending upon your tastes, is that it is written in my native tongue, Lisp, a programming language not quite as popular with others as I believe it should be. But if you are a Lisp hacker, or are willing to put aside your prejudices against parentheses, perhaps it will be of some use or amusement.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">The manual can be viewed at</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace"><a href="https://bytebucket.org/dfmorrison/roan/wiki/roan-manual.pdf">https://bytebucket.org/dfmorrison/roan/wiki/roan-manual.pdf</a></font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">If you have a Lisp implementation in which Quicklisp (<a href="http://quicklisp.org">http://quicklisp.org</a>) is installed you can download and install Roan by simply evaluating in Lisp</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">(ql:quickload :roan)</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">The sources and other presentations of the manual (PDF, HTML, Info) are at</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace"><a href="https://bitbucket.org/dfmorrison/roan">https://bitbucket.org/dfmorrison/roan</a></font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">While there are no large, didactic examples included yet, there's a reasonably rich set of unit tests that may serve as stopgaps. And, as those who know me would expect, the documentation is prolix, and full of brief examples.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">It's released under a highly permissive license (the MIT License) so you can pretty much do with it whatever you like.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">It is roughly at the level of Martin Bright and Richard Smith's Ringing Class Library (<a href="http://ringing-lib.sourceforge.net">http://ringing-lib.sourceforge.net</a>), though obviously in a different programming language and differing from that library in myriad other ways.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">Besides underpinning much of what I use for composition and so on, it is also what drives most of the methods stuff on <a href="http://ringing.org">ringing.org</a>.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">Among its features are:</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">• facilities for representing rows and changes as Lisp objects, and permuting them, etc.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">• functions for reading and writing place notation, extended to support jump changes as well as conveniently representing palindromic sequences of changes</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">• a set data structure suitable for collecting and proving sets of rows, or sets of sets of rows</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">• a pattern language for matching rows, for example, for identifying ones with properties considered musically desirable; and that includes the ability to match pairs of rows, which enables identifying wraps</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">• a data structure for describing methods, which can include jump changes</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">• a searchable database of method definitions, together with a mechanism for updating that database from the <a href="http://ringing.org">ringing.org</a> web site</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">• a function for extracting false course heads from common kinds of methods</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">I'm still tidying up other bits and pieces and hope to make them available in future versions of Roan, as well as in one or more projects built on top of Roan.</font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace"><br></font></div><div class="gmail_default"><font face="courier new, monospace">-- </font></div><div class="gmail_default"><font face="courier new, monospace">Don Morrison <<a href="mailto:dfm@ringing.org">dfm@ringing.org</a>></font></div><div class="gmail_default"><font face="courier new, monospace">"Unraveling evolutionary mysteries is generally hard work, the stuff</font></div><div class="gmail_default"><font face="courier new, monospace">of long careers spent in careful thought and observation. But some</font></div><div class="gmail_default"><font face="courier new, monospace">stories are obvious, crystal clear from the very beginning. Anyone</font></div><div class="gmail_default"><font face="courier new, monospace">familiar with children, for example, understands the origin of</font></div><div class="gmail_default"><font face="courier new, monospace">punctuation. It started with the exclamation point."</font></div><div class="gmail_default"><font face="courier new, monospace">       -- Thor Hanson, _The Triumph of Seeds_</font></div><div style="font-family:"courier new",monospace"><br></div></div>
</div>