<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://www.bbritten.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://www.bbritten.com/feed.php">
        <title>BBritten.com - softwares:giocoso:promenu</title>
        <description>A Voyage Around My Ears</description>
        <link>https://www.bbritten.com/</link>
        <image rdf:resource="https://www.bbritten.com/_media/wiki/dokuwiki.svg" />
       <dc:date>2026-04-03T23:48:03+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu/clearpause"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu/clearrec"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu/devicerpt"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu/proinitdb"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu/pushplays"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu/pushrecs"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu/togglemode"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu/viewnote"/>
                <rdf:li rdf:resource="https://www.bbritten.com/softwares/giocoso/promenu/xtrctplay"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://www.bbritten.com/_media/wiki/dokuwiki.svg">
        <title>BBritten.com</title>
        <link>https://www.bbritten.com/</link>
        <url>https://www.bbritten.com/_media/wiki/dokuwiki.svg</url>
    </image>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu/clearpause">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T17:54:09+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>clearpause</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu/clearpause</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;clear_all_global_pauses&quot;&gt;Clear all global pauses&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Clear all global pauses&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;clear_all_global_pauses&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-38&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The last item on the Pro menu deletes the entire contents of the global_pausestatus table.
&lt;/p&gt;

&lt;p&gt;
“Global Pauses” is the mechanism by which, when you pause music playback on Device A, a piece of data is written to the Pro database saying that, &amp;#039;Device A is playing recording X and has reached Y seconds into it&amp;#039;. The idea is that Device B can then use the &lt;strong&gt;Play Music&lt;/strong&gt; menu, &lt;strong&gt;Option 6&lt;/strong&gt; to pick up the playback at exactly the same point Device A had reached. If you start playing something in the kitchen, you can continue playing it to conclusion in the main listening room, or bedroom, or garden shed…
&lt;/p&gt;

&lt;p&gt;
Normally, when the pausing device itself resumes a play, it takes care to delete the data about its pause out of the Pro database&amp;#039;s global_pausestatus table. If Device A pauses, data is written; if it resumes, data is erased.
&lt;/p&gt;

&lt;p&gt;
If your playing device crashed or was simply switched off, however, this bit of data tidy-up doesn&amp;#039;t get a chance to happen -and that means a &amp;#039;record of a pause&amp;#039; is left in the pausestatus table that really ought not to be there. When you take that Play menu option to resume a global play, for example, you might start seeing devices listed that &lt;em&gt;claim&lt;/em&gt; to be in a state of paused play which you know aren&amp;#039;t actually in a paused state at all.
&lt;/p&gt;

&lt;p&gt;
If you see spurious devices listed, you could fix that by simply re-launching Giocoso on those devices: every time Giocoso is freshly started, it clears out all possible data about &lt;em&gt;that specific device&amp;#039;s&lt;/em&gt; paused state. By re-starting Giocoso on Device A, therefore, you cause all data about Device A being paused to be deleted: by definition, a program that has only just been freshly launched &lt;em&gt;cannot&lt;/em&gt; be in a state of paused music playback, so this &amp;#039;clean up on launching&amp;#039; process makes sense.
&lt;/p&gt;

&lt;p&gt;
Sometimes, re-launching Giocoso to clear its paused status is more of a pain than you&amp;#039;d like, however. For example, I sometimes power off virtual machines that were running Giocoso in a paused state and it&amp;#039;s quite a bit of faffing around to re-launch the entire virtual machine before finally being able to re-launch Giocoso. In that case, the &lt;strong&gt;Pro&lt;/strong&gt; menu offers &lt;strong&gt;Option A: Clear all global pauses&lt;/strong&gt; which will &lt;em&gt;wipe the &lt;strong&gt;&lt;em class=&quot;u&quot;&gt;entire&lt;/em&gt;&lt;/strong&gt; global_pausestatus table&lt;/em&gt;, regardless of what devices are listed there. All of them go, in one fell swoop, regardless of the device(s) involved.
&lt;/p&gt;

&lt;p&gt;
This doesn&amp;#039;t mean all your paused devices suddenly spring back to life playing music at once! It&amp;#039;s not the &lt;em&gt;fact&lt;/em&gt; of them being paused that&amp;#039;s being erased, but the &lt;em&gt;record&lt;/em&gt; of them being paused that&amp;#039;s being deleted. The devices stay in whatever state they&amp;#039;re in, but the Pro database no longer &lt;em class=&quot;u&quot;&gt;knows&lt;/em&gt; that they&amp;#039;re paused or unpaused. Option A simply &amp;#039;pops the stack&amp;#039;, therefore, ensuring that the pausestatus table is emptied and can start over, from a clean slate.
&lt;/p&gt;

&lt;p&gt;
The menu option returns practically instantaneously, with just this confirmation message:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250217_124350.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250217_124350.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250217_124350.jpg?w=650&amp;amp;tok=283f95&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Note that there&amp;#039;s no &amp;#039;are you sure&amp;#039; prompt: the table is simply wiped the moment you take the A menu option. That&amp;#039;s largely because wiping the pause table doesn&amp;#039;t really harm anything: if you wanted to re-populate the table with the fact that, say, Device C &lt;em&gt;is&lt;/em&gt; actually paused at the moment, you could simply resume playback on Device C for just a moment… and then immediately put it back into a paused state. That will add Device C back to the pausestatus table once more. Until you do that, of course, no other Giocoso client device could ever resume Device C&amp;#039;s play.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;39-3643&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;in_summary&quot;&gt;In Summary&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
This is not an option you&amp;#039;ll need to use very often (unless you&amp;#039;re the kind of person that frequently switches off PCs in mid-paused-play!), but it&amp;#039;s there if the Play Menu Option 6 starts listing paused devices that you don&amp;#039;t think &lt;em&gt;should&lt;/em&gt; be listed and it&amp;#039;s a bit awkward to re-launch Giocoso on such devices.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;In Summary&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;in_summary&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3644-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/7/7fe372625f0827a74001e6deb408fe74.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu/clearrec">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T13:27:00+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>clearrec</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu/clearrec</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;clear_the_remote_recordings_table&quot;&gt;Clear The Remote Recordings Table&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Clear The Remote Recordings Table&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;clear_the_remote_recordings_table&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-48&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
When you take the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 1&lt;/strong&gt; to &lt;em&gt;initialise&lt;/em&gt; a Pro database, you trigger the complete wiping of the Pro database&amp;#039;s recordings &lt;em class=&quot;u&quot;&gt;and&lt;/em&gt; plays table (and their re-population with data derived from the equivalent local tables). Every time you subsequently play a piece of music on a local device, that new play is &amp;#039;pushed&amp;#039; or copied to the Pro database. Similarly, every time you use the Database Management menu, Options 2 or 3 to refresh the &lt;em&gt;local&lt;/em&gt; database with details of new recordings found, the Pro database equivalent &lt;strong&gt;global_recordings&lt;/strong&gt; table has anything newly-discovered on the local device copied to it. It is not perhaps obvious, therefore, why you might ever need to wipe the remote recordings table and populate it from scratch: if the local database refreshes are picking up new additions to your collection and copying that data over to the Pro database, why would you nuke the Pro database&amp;#039;s table completely?
&lt;/p&gt;

&lt;p&gt;
Well, it comes down to the precautionary principle: since you &lt;em&gt;might&lt;/em&gt; ever need the facility, it&amp;#039;s made available to you… but it&amp;#039;s hopefully there, never to be used!
&lt;/p&gt;

&lt;p&gt;
The reason why it&amp;#039;s conceivable you would want to use it comes down to understanding how the Pro database&amp;#039;s definition of &amp;#039;new recording&amp;#039; differs from the local database&amp;#039;s definition: something I&amp;#039;ve documented at length elsewhere: &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/proconcepts&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:proconcepts&quot; data-wiki-id=&quot;softwares:giocoso:proconcepts&quot;&gt;see Section 7 of the Pro Concepts documentation&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
If you physically relocate a recording of someone&amp;#039;s Sinfonietta from /orchestral to /symphonic, for example: the &lt;strong&gt;local&lt;/strong&gt; database will see the change, remove the /orchestral item from its database and add the /symphonic version to its database. It will then push that new record to the Pro database …but the &amp;#039;push&amp;#039; only copies &lt;em&gt;new&lt;/em&gt; data across to the Pro database: it doesn&amp;#039;t trigger the removal of the old /orchestral item from the Pro database. Therefore, Pro &lt;em&gt;clients&lt;/em&gt; will potentially be told they can play a recording that physically no longer exists on disk.
&lt;/p&gt;

&lt;p&gt;
The opposite situation also causes problems. Let&amp;#039;s say you don&amp;#039;t physically move a FLAC in any way, but you correct the spelling of the COMPOSER tag from “Bartok” to “Bartók”. That change in metadata is &lt;em&gt;not&lt;/em&gt; something the local database will notice and will therefore &lt;em&gt;not&lt;/em&gt; push to the Pro database. However, the metadata change &lt;strong&gt;would&lt;/strong&gt; be something that would define a new recording in the Pro database and therefore the recording really &lt;em&gt;ought&lt;/em&gt; to be re-pushed to the Pro database so that the metadata alterations are picked up by it.
&lt;/p&gt;

&lt;p&gt;
Basically: if you are doing a lot of additions, deletions and metadata curation to your music collection, the local database of recordings and the Pro copy of it can get confused as to what actually exists, what no longer exists and what the things that are claimed to exist should be catalogued as! From time to time, in that scenario, a wipe-and-start-again approach might therefore be considered appropriate: and &lt;em&gt;that&amp;#039;s&lt;/em&gt; why the option to nuke the remote recordings table is provided.
&lt;/p&gt;

&lt;p&gt;
Be warned that the option is destructive, in that it literally zaps the entire Pro recordings table -and, given that the Pro database is shared amongst all Giocoso clients, that means &lt;strong&gt;no&lt;/strong&gt; client will be able to play any further music at all until the re-population of the recordings table completes (see the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 4&lt;/strong&gt;). However, it&amp;#039;s a safe option to perform in the sense that the recordings on disk still exist and can thus be re-discovered and re-catalogued if necessary. It&amp;#039;s also completely safe in that wiping the Pro database&amp;#039;s copy of the recordings table doesn&amp;#039;t do &lt;em&gt;anything&lt;/em&gt; to the &lt;strong&gt;local&lt;/strong&gt; copy of the same thing. Re-creating the Pro version of the table is thus trivially easy to do. Nevertheless, the wipe function does mean all music playback must stop until the re-push option is taken, so this is something you would only really want to do &amp;#039;out of hours&amp;#039;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;49-4008&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;the_clear_recordings_process&quot;&gt;2.0 The Clear Recordings Process&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
There&amp;#039;s not a lot to document here! If you tap &amp;#039;3&amp;#039; when viewing the Pro menu, this immediately happens:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250213_121332.jpg&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20250213_121332.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250213_121332.jpg?w=650&amp;amp;tok=43aed5&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
And that&amp;#039;s the job done and dusted! It takes no time at all to complete and there are no &amp;#039;are you sure? are you really, really sure?&amp;#039; warnings (on the grounds that re-populating the table is trivially easy to do, though it might take some time).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 The Clear Recordings Process&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_clear_recordings_process&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;4009-4474&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;next_steps&quot;&gt;3.0 Next Steps&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Having wiped the global_recordings table, it ought to be re-populated. That&amp;#039;s done in two ways:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; At the next local database fast or full refresh, &lt;strong&gt;if the client is declared in the Configuration options to be a primary device&lt;/strong&gt;, the entire local recordings table is copied to the remote, Pro equivalent; or&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Any client device, primary or otherwise, can manually take the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 4: Push recordings to remote database&lt;/strong&gt; and thereby have the entire local recordings table copied to the remote Pro equivalent on demand&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Until such time as the global_plays table has data re-inserted into it, no Pro clients will be able to play music, unless they re-configure themselves to &lt;em&gt;not&lt;/em&gt; being a Pro client (by using the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt; and wiping out the Remote MySQL Server IP Address entry, setting it to blank).
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Next Steps&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;next_steps&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;4475-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/c/ccc1d20d05df0f4be393505fbe89c92b.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu/devicerpt">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T15:27:09+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>devicerpt</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu/devicerpt</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;analyse_plays_by_device_os&quot;&gt;Analyse Plays By Device &amp;amp; OS&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Analyse Plays By Device &amp;amp; OS&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;analyse_plays_by_device_os&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-43&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The main &lt;strong&gt;Reports&lt;/strong&gt; menu is where you do most of the reporting on your plays and recordings -and remains so, even when Giocoso is operating in Pro mode. However, the specific feature that Pro mode enables is for multiple devices, perhaps running multiple operating systems, to play the same music collection… and it may be of interest to you to know how many plays are being done by different devices and operatings systems.
&lt;/p&gt;

&lt;p&gt;
The &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 7&lt;/strong&gt; allows you to produce a simple report from the Pro device that groups plays by device, and then by operating system, and presents the results in a single report, like so:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_120822.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_120822.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_120822.jpg?w=650&amp;amp;tok=a8c47b&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The report is actually output to the text file shown at the bottom of the screen: &lt;strong&gt;$HOME/.local/share/giocoso3/tmp/proqueries.txt&lt;/strong&gt;. You could visit that location with your standard file manager and open the report in any text editor of your choosing. For convenience, Giocoso displays the file by piping it through the &lt;strong&gt;less&lt;/strong&gt; program, so you just tap &amp;#039;q&amp;#039; to quit when you&amp;#039;ve read enough and you&amp;#039;ll be returned to the Pro menu once more.
&lt;/p&gt;

&lt;p&gt;
The “Device” columns displays the configured hostnames on each of your Giocoso clients: mine tend to be the names of assorted composers, but don&amp;#039;t let that fool you into thinking I&amp;#039;ve played 302.6 days of Robert Schumann&amp;#039;s music! Definitely not!! I&amp;#039;ve merely played 302.6 days of music on a machine that&amp;#039;s &lt;em&gt;called&lt;/em&gt; Schumann &lt;img src=&quot;https://www.bbritten.com/lib/images/smileys/smile.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:-)&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
The “Operating System” column displays the results of poking around inside the “/etc/os-release” file and grabbing whatever value is assigned there to the NAME parameter.
&lt;/p&gt;

&lt;p&gt;
All the other columns are mere mathematical computations applied to various summarisations of the global_plays table, rounded where appropriate.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;44-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/b/b9e9be7f41d1c54f2e197d26b60637bb.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu/proinitdb">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T11:20:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>proinitdb</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu/proinitdb</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;initialise_a_remote_database&quot;&gt;Initialise A Remote Database&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Initialise A Remote Database&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;initialise_a_remote_database&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-43&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Initialising a remote database doesn&amp;#039;t mean creating it or building the server it&amp;#039;s running on: that&amp;#039;s something you have to do as a separate exercise and for which I&amp;#039;ve provided documentation elsewhere!
&lt;/p&gt;

&lt;p&gt;
When the Pro menu talks about initialising the remote database, therefore, it means:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Checking the local RECORDINGS and PLAYS table, to ensure that no existing data breaches the data lengths allowed in the remote database&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Wipe any and all data in the remote GLOBAL_RECORDINGS and GLOBAL_PLAYS table&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Connecting to the remote database&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Coping the entire contents of its local PLAYS table contents to the remote database&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Copying the entire contents of its local RECORDINGS table contents to the remote database&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Creating a bunch of views (essentially, stored select statements) in the remote database, thereby enabling full Pro client functionality&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Initialisation is therefore destructive (in that if the remote database already has some recording or play data, it&amp;#039;s just wiped) and therefore really only ever ought to be performed once, preferably by the client device that you&amp;#039;ve declared to be &amp;#039;a primary client&amp;#039; (in the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt;).
&lt;/p&gt;

&lt;p&gt;
On the other hand, it&amp;#039;s a process that can be run as many times as you like: it&amp;#039;s the &lt;em&gt;remote&lt;/em&gt; database that gets destroyed and re-created, after all. The &lt;em&gt;local&lt;/em&gt; PLAYS and RECORDINGS tables stay completely intact, with none of their data altered or deleted in any way. A second run of the initialisation process therefore merely re-creates and re-populates the remote database tables, no harm really done. On the other, other hand: bear in mind that a working remote database may have plays data that comes from multiple devices. Running the initialisation process means the global_plays table will only have play data that comes from the client device doing the initialising.
&lt;/p&gt;

&lt;p&gt;
But on the (I&amp;#039;ve lost count…) other, other, completely different hand: other client devices still have their play data intact and can therefore use the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt; to re-push &lt;em&gt;their&lt;/em&gt; play history data to the re-initialised remote database… so, again, in the long run, initialising a database doesn&amp;#039;t actually destroy anything irretrievably. It&amp;#039;s still not something you want to do very often, however!
&lt;/p&gt;

&lt;p&gt;
If you don&amp;#039;t do it at least once, however, then nothing about Giocoso Pro works as intended. So, the moment you configure a remote MySQL database IP address in your Administration menu on your primary device, Option 2, the first thing you should do is run the Pro menu, Option 1. If you try to play music on a primary client without having first initialised the Pro database, for example, you&amp;#039;d see this error message:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250212_152322.jpg&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20250212_152322.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250212_152322.jpg?w=650&amp;amp;tok=1ede86&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Similarly, trying to run the Aggregate Statistics report  (Reports menu, Option 1) would simply return these messy-looking results:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250212_152510.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250212_152510.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250212_152510.jpg?w=650&amp;amp;tok=c84096&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
These are all symptoms of needing to initialise the remote Pro database!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;44-3134&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;running_the_initialisation_process&quot;&gt;2.0 Running the Initialisation Process&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
When you first take the Initialisation menu option, there will be a pause as the program checks the local database to ensure that it contains no data that wouldn&amp;#039;t fit into the remote database. If there is found to be data that wouldn&amp;#039;t fit, the initialisation process will warn you about what is wrong and will then exit without having initialised anything. It&amp;#039;s up to you at that point to work out what data is &amp;#039;bad&amp;#039; and needs fixing at source. Examples of bad data would be full paths to a FLAC that exceeds 512 characters, or a Composer name that exceeds 256 characters, or a composition name that is longer than 512 characters. The chances of legitimate composer or composition names actually breaching these limits is small, of course: that&amp;#039;s why these generous limits were specified in the first place! However, if you&amp;#039;ve tagged your FLACs in ways this site doesn&amp;#039;t approve of, you might (for example) have the conductor, orchestra and soloists entered into the ARTIST tag, which Giocoso will have read as the COMPOSER tag …and then you might have issues.
&lt;/p&gt;

&lt;p&gt;
If you&amp;#039;ve tagged according to this site&amp;#039;s prescriptions, however, then you are likely to be fine and instead receive this message of encouragement:
&lt;/p&gt;

&lt;p&gt;
You can back out at this stage, without anything having been done to the remote database: just tab round until the &amp;#039;No&amp;#039; option is highlighted, then press [Enter]. If you press [Enter] when the &amp;#039;Yes&amp;#039; option is highlighted, however, then this happens:
&lt;/p&gt;

&lt;p&gt;
The initialisation process, as I mentioned in the introduction, is destructive to data in the Pro database -so, the initialisation wizard is very careful to prompt multiple times, letting you back out before anything actually happens in the Pro database itself. So, you&amp;#039;re again asked at this point whether you are certain you want to proceed. Click [Enter] with the &amp;#039;Yes&amp;#039; option highlighted to go ahead:
&lt;/p&gt;

&lt;p&gt;
This time, you are again given an opportunity to back out (not explicitly, it&amp;#039;s true: but you could click Ctrl+C here to stop the process actually doing anything), but if you click [OK] (or [Enter]) to proceed, it&amp;#039;s the local PLAYS table data that will be copied or &amp;#039;pushed&amp;#039; to the remote Pro database:
&lt;/p&gt;

&lt;p&gt;
Finally, data actually starts to be copied from the local device to the remote server: you&amp;#039;re told how many plays have to be copied across in total, and how many have been processed so far, along with a convenient display of a percentage progress bar. You are past the point of return now: any existing data has been wiped from the remote database and the new data is being copied across. You can interrupt the process (press Ctrl+C), but you&amp;#039;ll then simply have to re-run the initialisation process… and start over again from zero as you do so. It&amp;#039;s thus better to just let the process tick along at its own pace until it completes. Just one word on terminology, in case there&amp;#039;s any doubt: “pushing” or “transferring” data simply means the local data is copied across to the remote database: it does not mean that the local database ever once &amp;#039;loses&amp;#039; its data. That&amp;#039;s how it&amp;#039;s possible to re-run the initialisation process, after all: it creates copies of data in one database, but the source doesn&amp;#039;t disappear out of the local database, so it&amp;#039;s still there should a re-run ever be thought necessary!
&lt;/p&gt;

&lt;p&gt;
Incidentally, the transfer process is quite slow because actual computation is taking place. For every item in the local PLAYS table, the program is taking the COMPOSER and COMPOSITION tags, smashing them together and adding in the time of the play in question, resulting in something like &amp;#039;BRITTENPETERGRIMES030924&amp;#039;, for example. That whole concatenated string is then passed through a hash function to create a weird-looking string of numbers and characters that uniquely identify that particular play of music, called the PLAYHASHVALUE.
&lt;/p&gt;

&lt;p&gt;
Once the local PLAYS table has had its data copied to the Pro database, this happens:
&lt;/p&gt;

&lt;p&gt;
This is just information to let you know the next stage of initialisation is about to happen: there&amp;#039;s no &amp;#039;yes/no&amp;#039; option here and therefore no chance to back out, so just press [Enter] to continue: at this point, the local recordings table will get copied across to the global_recordings equivalent in the Pro database:
&lt;/p&gt;

&lt;p&gt;
A progress bar is once more displayed, along with more specific numbers showing you precisely how many of the local recordings have been copied across. Again, the process takes time because each recording&amp;#039;s COMPOSER and COMPOSITION tags are being smooshed together and passed through a hash function to generate a unique identifier called the RECHASHVALUE.
&lt;/p&gt;

&lt;p&gt;
Once the transfer of recordings is complete, this message will appear:
&lt;/p&gt;

&lt;p&gt;
Press [Enter] to dismiss the confirmation message and you&amp;#039;ll be returned to the Pro menu. Immediately, at this point, you could run the Reports, Aggregate Statistics option and see something like this:
&lt;/p&gt;

&lt;p&gt;
Instead of the ugly messages you saw before, now you&amp;#039;ve got real numbers to play with -and you know these numbers are coming from the Pro database, rather than the local one, because of the message about “GLOBAL Aggregate Statistics Report” in the top right-hand corner of the screen (and the fact that the table borders consist of dashes and plus signs!)
&lt;/p&gt;

&lt;p&gt;
You can also go to the Play Music menu, take Option 1 and have this happen:
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s music playing locally, because the global Pro database told the local machine what to play next: basically, once the global database has been initiated, it acts as both &amp;#039;source of information about what recordings to play&amp;#039; and &amp;#039;repository of data about what recordings have been played&amp;#039;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Running the Initialisation Process&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;running_the_initialisation_process&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3135-8778&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;summary&quot;&gt;3.0 Summary&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Initialisation of a Pro database is a once-off affair, performed by the client Giocoso device that has been declared to be &amp;#039;primary&amp;#039; in the Administration menu, Option 2: Create or Edit the Configuration file. It involves creating various tables and views in the Pro database, then copying across data from the local recordings and plays tables to become the contents of the global_recordings and global_plays tables. Once you&amp;#039;ve initialised the Pro database, it can be used by all Giocoso client devices to know what can be played and what has been played.
&lt;/p&gt;

&lt;p&gt;
The initialisation process can be interrupted once started, but then needs to be re-started from scratch and allowed to run to completion.
&lt;/p&gt;

&lt;p&gt;
Should another client device ever take the initialisation option, it will erase the existing Pro database&amp;#039;s global_plays and global_recordings tables and replace them with data from its own local equivalent tables. In theory, that makes no difference for the recordings/global_recordings tables, because all client devices are assumed to be able to &amp;#039;see&amp;#039; the one music collection, so one device&amp;#039;s recordings table should be identical to any and all others&amp;#039;. Plays are different however, being unique to the device that played them. The re-populated global_plays table will only contain the initialising devices plays: to have the plays made by other devices added to that, you&amp;#039;ll need to use the Pro menu, Option 2 : Push plays to remote database option, which is described separately.
&lt;/p&gt;

&lt;p&gt;
Initialisation is not hard to do and doesn&amp;#039;t destroy any local data, but it takes time to complete because each recording and each play has to have unique identifiers (rechashvalue and playhashvalue, respectively) computed before transmission to the Pro database can take place.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Summary&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;summary&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;8779-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/4/421c5184a89eb18513d2b76022faf0cf.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu/pushplays">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T13:14:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pushplays</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu/pushplays</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;push_plays_to_remote_database&quot;&gt;Push Plays To Remote Database&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Push Plays To Remote Database&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;push_plays_to_remote_database&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-44&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The option to “push” plays (meaning &amp;#039;copy them&amp;#039;) to a remote database allows non-primary Giocoso clients to add their play history to a globally-shared Pro database that has previously been &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/proinitdb&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:proinitdb&quot; data-wiki-id=&quot;softwares:giocoso:promenu:proinitdb&quot;&gt;initialised by a primary client&lt;/a&gt;. &lt;strong&gt;All&lt;/strong&gt; non-primary clients will need to take this &amp;#039;push plays&amp;#039; option at least once (immediately after they&amp;#039;ve been configured to connect to the Pro database, using the Administration menu, Option 2), since the Pro database will otherwise &lt;em&gt;only&lt;/em&gt; know about the primary device&amp;#039;s play history.
&lt;/p&gt;

&lt;p&gt;
Clients may need to take this option on other occasions, too: if they have performed plays of music whilst not being connected to the Pro database for some reason, for example. In a case like that, the client&amp;#039;s local table of plays will contain rows of data that are not in the global database (because that database was not contactable at the time the local data was stored, for whatever reason): the &amp;#039;push plays&amp;#039; option allows the client to &amp;#039;catch up&amp;#039; the Pro database with data that it would otherwise be missing.
&lt;/p&gt;

&lt;p&gt;
As each play is pushed to the Pro database by this option, it is assigned a unique identifier (called the &amp;#039;playhashvalue&amp;#039;) which is computed from the recording&amp;#039;s COMPOSER and COMPOSITION tags, plus the time of play&amp;#039;s completion (down to the second). It is thus physically impossible for two recordings to acquire the same playhashvalue unless it involves, literally, the same composer, composition and time of play …in which case, it &lt;em&gt;is&lt;/em&gt; the same play! The Pro database will not allow the same play to be recorded in the database table twice, so attempts to do so silently fail (though rather a lot of time will be wasted as the client pushes the data without realising the Pro database is ignoring it!)
&lt;/p&gt;

&lt;p&gt;
This means that you can safely take the Pro menu, Option 2 from the same Giocoso client device &lt;em&gt;as many times as you like&lt;/em&gt;: no spurious data will be created if you do. However, after you&amp;#039;ve taken the option &lt;strong&gt;once&lt;/strong&gt; on any given client device, it usually &lt;em&gt;needn&amp;#039;t&lt;/em&gt; be taken again, as each further play on that device is copied across to the remote database automatically. It&amp;#039;s only if that automatic transfer of data fails for some reason that you would ever need to consider doing a manual re-transfer.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;45-2343&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;running_the_push_plays_process&quot;&gt;2.0 Running the Push Plays process&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
When you first take the Push Plays menu option, there will be a pause as the program checks the &amp;lt;em&amp;gt;local&amp;lt;/em&amp;gt; database to ensure that it contains no data that wouldn&amp;#039;t fit into the remote database. If there is found to be data that &lt;em&gt;wouldn&amp;#039;t&lt;/em&gt; fit, the push process will warn you about what is wrong and will then exit without having initialised anything. It&amp;#039;s up to you at that point to work out what data is &amp;#039;bad&amp;#039; and needs fixing at source. Examples of bad data would be full paths to a FLAC that exceeds 512 characters, or a Composer name that exceeds 256 characters, or a composition name that is longer than 512 characters. The chances of legitimate composer or composition names actually breaching these limits is small, of course: that&amp;#039;s why these generous limits were specified in the first place! However, if you&amp;#039;ve tagged your FLACs in ways this site doesn&amp;#039;t approve of, you might (for example) have the conductor, orchestra and soloists entered into the ARTIST tag, which Giocoso will have read as the COMPOSER tag …and then you might have issues.
&lt;/p&gt;

&lt;p&gt;
If you&amp;#039;ve tagged according to this site&amp;#039;s &lt;a href=&quot;https://www.bbritten.com/articles/axioms&quot; class=&quot;wikilink1&quot; title=&quot;articles:axioms&quot; data-wiki-id=&quot;articles:axioms&quot;&gt;prescriptions&lt;/a&gt;, however, then you are likely to be fine and instead receive this message of encouragement:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250212_153151.jpg&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20250212_153151.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250212_153151.jpg?w=650&amp;amp;tok=f132ad&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You can back out at this stage, without anything having been done to the remote database: just tab round until the &amp;#039;No&amp;#039; option is highlighted, then press [Enter]. If you press [Enter] when the &amp;#039;Yes&amp;#039; option is highlighted, however, then this happens:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250213_095516.jpg&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20250213_095516.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250213_095516.jpg?w=650&amp;amp;tok=717a94&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Again, you can back out of the entire process without any data having moved to the Pro database, but if you are certain you want to proceed, just click [Enter] with the &amp;#039;Yes&amp;#039; option highlighted:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250212_154129.jpg&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20250212_154129.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250212_154129.jpg?w=650&amp;amp;tok=1332c0&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This time, you are again given an opportunity to back out (not explicitly, it&amp;#039;s true: but you could click Ctrl+C here to stop the process actually doing anything), but if you click [OK] (or [Enter]) to proceed, the local PLAYS table data will start to be be copied or &amp;#039;pushed&amp;#039; to the remote Pro database -though note the message that duplicate records &lt;em&gt;won&amp;#039;t&lt;/em&gt; be created by doing this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250213_095907.jpg&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20250213_095907.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250213_095907.jpg?w=650&amp;amp;tok=4046c4&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Finally, data starts to be copied from the local device to the remote server: you&amp;#039;re told how many plays have to be copied across in total, and how many have been processed so far, along with a convenient display of a percentage progress bar.
&lt;/p&gt;

&lt;p&gt;
Unlike a Pro database initialisation (see &lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu/proinitdb&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu:proinitdb&quot; data-wiki-id=&quot;softwares:giocoso:promenu:proinitdb&quot;&gt;Pro menu, Option 1&lt;/a&gt;), the push plays process &lt;em&gt;doesn&amp;#039;t&lt;/em&gt; start its work by wiping any existing content in the global_plays table in the Pro database. The data that is being copied across is therefore merely &lt;strong&gt;added&lt;/strong&gt; to whatever data is already in that remote table. The process &lt;em class=&quot;u&quot;&gt;absolutely will not&lt;/em&gt; duplicate existing data, however: though the &amp;#039;Processing Play Number&amp;#039; indicator may click up through thousands of possible records, only ones that that the remote database has genuinely never seen before will be added to the remote table. Anything that looks to duplicate existing data is simply (and silently) discarded.
&lt;/p&gt;

&lt;p&gt;
The transfer process is actually quite slow, even if no new data ends up being added to the Pro database, because actual computation of whether a pushed play is a duplicate or not is taking place. For every item in the local PLAYS table, the program is taking the COMPOSER and COMPOSITION tags, smashing them together and adding in the time of the play in question, resulting in something like &amp;#039;BRITTENPETERGRIMES030924&amp;#039;, for example. That whole concatenated string is then passed through a hash function to create a weird-looking string of numbers and characters that uniquely identify that particular play of music, called the PLAYHASHVALUE. It&amp;#039;s this which the Pro database uses to determine &amp;#039;uniqueness of play&amp;#039; and which thus allows it to draw the distinction between &amp;#039;new play I need to add&amp;#039; and &amp;#039;old play being resubmitted, which I can ignore&amp;#039;… and it takes a little bit of time to smoosh the different bits of data together and compute the hash value from them. On the other hand, it&amp;#039;s more work for the Pro database to perform a fresh insert of a new play than to ignore the resubmission of a previously-submitted play …so re-runs of the push procedure are definitely faster to complete than pushes that have a lot of genuinely fresh data to transmit. I can push 19,000 plays in around 10 minutes, anyway: that should be your (very!) rough benchmark: it will obviously depend on the speed of your network and the power of your pushing and receiving computers.
&lt;/p&gt;

&lt;p&gt;
Should you press Ctrl+C in the middle of the play push, the process will immediately terminate. No particular harm is thereby done: if you re-launch Giocoso and take Option 2 once again, the push process starts over from the beginning and, if left to run to completion, those records that didn&amp;#039;t make it across to the Pro database during the first interrupted run will make it second time of asking.
&lt;/p&gt;

&lt;p&gt;
When the last local play record has been copied across to the Pro database, this happens:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250213_101754.jpg&quot; class=&quot;media&quot; title=&quot;softwares:giocoso:screenshot_20250213_101754.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/softwares/giocoso/screenshot_20250213_101754.jpg?w=650&amp;amp;tok=8d0be9&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Once you see this confirmation message, you&amp;#039;re done. Click [OK] to dismiss it and you&amp;#039;ll be returned to the Pro menu.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Running the Push Plays process&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;running_the_push_plays_process&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2344-7815&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;summary&quot;&gt;3.0 Summary&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Pushing plays to a Pro database is something every Giocoso client will need to do at least once, so that its private, local store of play history is added to the shared, global play history. After a first &amp;#039;push&amp;#039;, however, it should not ordinarily be necessary to ever re-push, as normal plays thereafter are automatically copied to the Pro database. Network outages or random inaccessibility of the Pro database may, however, require a re-push by way of &amp;#039;catching up&amp;#039; the Pro database with things that happened on the local device whilst it was out of communication with the Pro mothership.
&lt;/p&gt;

&lt;p&gt;
Pushing plays repeatedly is not advised, however, simply because it&amp;#039;s unnecessary and consumes quite a lot of computing and network traffic resources.
&lt;/p&gt;

&lt;p&gt;
The push process itself is quite straightforward to do, though: just keep confirming you want to go ahead with it when (repeatedly!) prompted and then sit back and wait for the percentage bar to climb to 100%: job done!
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Summary&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;summary&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;7816-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/f/f859cd82e87b5128ffa382cb7f5782e1.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu/pushrecs">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T14:39:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pushrecs</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu/pushrecs</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;push_recordings_to_a_remote_database&quot;&gt;Push Recordings To A Remote Database&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Push Recordings To A Remote Database&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;push_recordings_to_a_remote_database&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-51&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The option to push (i.e., &amp;#039;copy&amp;#039;) a local plays table to the remote, Pro database equivalent is one that can be used by &lt;em&gt;&lt;em class=&quot;u&quot;&gt;any&lt;/em&gt;&lt;/em&gt; Giocoso client device: it should be remembered that a client device that has been declared (in the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt;) to be a &amp;#039;primary device&amp;#039; already pushes its copy of the recordings table to the Pro database any and every time it performs either a fast or a full refresh (see &lt;strong&gt;Database Manager&lt;/strong&gt; menu, &lt;strong&gt;Options 2 or 3&lt;/strong&gt;). Precisely because the primary device re-populates the global database automatically on a refresh, the &lt;em&gt;need&lt;/em&gt; for a non-primary device to refresh the global database&amp;#039;s recordings table is pretty thin: this is not an option you&amp;#039;re likely to need to use very often, in other words.
&lt;/p&gt;

&lt;p&gt;
Reasons for having it as an available option at all are simply ones of convenience: if you are working on your laptop, away from your main, primary PC; and you&amp;#039;ve refreshed the laptop&amp;#039;s local database in order to pick up the new 4-CD boxed set you just added to your music collection; then you might find pushing the &lt;em&gt;laptop&amp;#039;s&lt;/em&gt; up-to-date recordings table to the shared database more convenient to do right now than wait for the main PC&amp;#039;s nightly database refresh to do the job.
&lt;/p&gt;

&lt;p&gt;
All of this assumes, of course, that both the laptop and the main PC &amp;#039;see&amp;#039; the same physical music collection on a shared networking device, which is indeed an assumption underpinning the entire &lt;em&gt;raison d&amp;#039;être&lt;/em&gt; of Giocoso Pro. In that scenario, it matters not whether the Pro database gets its recordings data from the laptop or the main PC, since they are identical in content. The only functional difference between the two devices, then, is that one is declared a &amp;#039;primary device&amp;#039; and thus &lt;em class=&quot;u&quot;&gt;automatically&lt;/em&gt; updates the Pro database when it performs a local refresh …and the other doesn&amp;#039;t do the automatic refresh but has the ability to use this &amp;#039;Push recordings&amp;#039; option to do the job manually.
&lt;/p&gt;

&lt;p&gt;
Pushes of data made with the Pro menu, Option 4 &lt;strong&gt;do not delete data out of the existing global_recordings table&lt;/strong&gt;. The option &lt;em&gt;adds&lt;/em&gt; data that may be present on the local device, but it does not clear out anything already present in the shared database (compare this, for example, with the Initialisation that takes place with Pro menu, Option 1, which literally zaps the shared recordings table clean before doing anything else).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;52-2462&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;running_the_push_recordings_process&quot;&gt;2.0 Running the Push Recordings Process&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The first thing that happens when you take Option 4 is that Giocoso will examine the contents of your &lt;em&gt;local&lt;/em&gt; recordings table and make sure that no data contained within it breaks the size limits imposed by the remote, shared equivalent table. If there is found to be data that &lt;em&gt;wouldn&amp;#039;t&lt;/em&gt; fit, the push process will warn you about what is wrong and will then exit without having initialised anything. It&amp;#039;s up to you at that point to work out what data is &amp;#039;bad&amp;#039; and needs fixing at source. Examples of bad data would be full paths to a FLAC that exceeds 512 characters, or a Composer name that exceeds 256 characters, or a composition name that is longer than 512 characters. The chances of legitimate composer or composition names actually breaching these limits is small, of course: that&amp;#039;s why these generous limits were specified in the first place! However, if you&amp;#039;ve tagged your FLACs in ways this site doesn&amp;#039;t approve of, you might (for example) have the conductor, orchestra and soloists entered into the ARTIST tag, which Giocoso will have read as the COMPOSER tag …and then you might have issues.
&lt;/p&gt;

&lt;p&gt;
If you&amp;#039;ve tagged according to this site&amp;#039;s &lt;a href=&quot;https://www.bbritten.com/articles/axioms&quot; class=&quot;wikilink1&quot; title=&quot;articles:axioms&quot; data-wiki-id=&quot;articles:axioms&quot;&gt;prescriptions&lt;/a&gt;, however, then you are likely to be fine and instead receive this message of encouragement:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_100951.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_100951.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_100951.jpg?w=650&amp;amp;tok=02f4cf&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You can back out at this stage, without anything having been done to the remote database: just tab round until the &amp;#039;No&amp;#039; option is highlighted, then press [Enter]. If you press [Enter] when the &amp;#039;Yes&amp;#039; option is highlighted, however, then this happens:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_101035.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_101035.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_101035.jpg?w=650&amp;amp;tok=24bcb6&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Again, you can back out of the entire process without any data having moved to the Pro database, but if you are certain you want to proceed, just click [Enter] with the &amp;#039;Yes&amp;#039; option highlighted:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_103622.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_103622.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_103622.jpg?w=650&amp;amp;tok=d4e2c3&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This time, you are again given an opportunity to back out (not explicitly, it&amp;#039;s true: but you could click Ctrl+C here to stop the process actually doing anything), but if you click [OK] (or [Enter]) to proceed, the local RECORDINGS table data will start to be be copied or &amp;#039;pushed&amp;#039; to the remote Pro database:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_103934.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_103934.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_103934.jpg?w=650&amp;amp;tok=2ca6ef&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Finally, data starts to be copied from the local device to the remote server: you&amp;#039;re told how many recordings have to be copied across in total, and how many have been processed so far, along with a convenient display of a percentage progress bar.
&lt;/p&gt;

&lt;p&gt;
As I mentioned in the introduction, the push recordings process &lt;em&gt;doesn&amp;#039;t&lt;/em&gt; start its work by wiping any existing content in the global_recordings table in the Pro database. The data that is being copied across is therefore merely &lt;em&gt;added&lt;/em&gt; to whatever data is already in that remote table. The process &lt;strong&gt;absolutely will not&lt;/strong&gt; duplicate existing data, however: though the &amp;#039;Processing Recording Number&amp;#039; indicator may click up through thousands of possible records, only ones that that the remote database has genuinely never seen before will be added to the remote table. Anything that looks to duplicate existing data is simply (and silently) discarded.
&lt;/p&gt;

&lt;p&gt;
The data transfer process is actually quite slow, even if no new data ends up being added to the Pro database, because computation of whether a pushed recording is a duplicate or not is taking place. For every item in the local RECORDINGS table, the program is taking the COMPOSER and COMPOSITION tags, smashing them together, resulting in something like &amp;#039;BRITTENPETERGRIMES(PEARS-1958)&amp;#039;, for example. That whole concatenated string is then passed through a hash function to create a weird-looking string of numbers and characters that uniquely identify that particular recording, called the RECHASHVALUE. It&amp;#039;s this which the Pro database uses to determine &amp;#039;uniqueness of recordings&amp;#039; and which thus allows it to draw the distinction between &amp;#039;new recording I need to add&amp;#039; and &amp;#039;old recording being resubmitted, which I can ignore&amp;#039;… and it takes a little bit of time to smoosh the different bits of data together and compute the hash value from them. On the other hand, it&amp;#039;s more work for the Pro database to perform a fresh insert of a new recording than to ignore the resubmission of a previously-submitted recording …so re-runs of the push procedure are definitely faster to complete than pushes that have a lot of genuinely fresh data to transmit. I can push 16,000 recordings in around 10 minutes, anyway: that should be your (very!) rough benchmark: it will obviously depend on the speed of your network and the power of your pushing and receiving computers.
&lt;/p&gt;

&lt;p&gt;
Should you press Ctrl+C in the middle of the recording push, the process will immediately terminate. No particular harm is thereby done: if you re-launch Giocoso and take Option 4 once again, the push process starts over from the beginning and, if left to run to completion, those recordings that didn&amp;#039;t make it across to the Pro database during the first interrupted run will make it second time of asking.
&lt;/p&gt;

&lt;p&gt;
When the last local recording has been copied across to the Pro database, this happens:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_110038.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_110038.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_110038.jpg?w=650&amp;amp;tok=bd78de&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Once you see this confirmation message, you&amp;#039;re done. Click [OK] to dismiss it and you&amp;#039;ll be returned to the Pro menu.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 Running the Push Recordings Process&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;running_the_push_recordings_process&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2463-7882&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;summary&quot;&gt;3.0 Summary&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Pushing recordings to a Pro database as a manual exercise is &lt;strong&gt;not&lt;/strong&gt; something you&amp;#039;ll want or need to do very often, because a client designated (in the configuration options) to be a &lt;em&gt;primary device&lt;/em&gt; will push its recordings to the Pro database automatically after ever fast or full local database refresh anyway. However, the option to &amp;#039;re-push&amp;#039; or to push recordings manually is provided for those occasions when you need to inform the Pro database about some new additions to the music collection that have been made on a non-primary device.
&lt;/p&gt;

&lt;p&gt;
The process is non-destructive, in that the Pro database&amp;#039;s existing recordings are not wiped or replaced, but data that looks new to the Pro database is merely added to what is already there.
&lt;/p&gt;

&lt;p&gt;
The push process itself is quite straightforward to do, though: just keep confirming you want to go ahead with it when (repeatedly!) prompted and then sit back and wait for the percentage bar to climb to 100%: job done!
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Summary&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;summary&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;7883-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/5/5abce7b5fc688178513e0a6f62367bb0.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu/togglemode">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T17:49:21+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>togglemode</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu/togglemode</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;switch_reports_to_localglobal_mode&quot;&gt;Switch Reports To Local/Global Mode&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Switch Reports To Local\/Global Mode&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;switch_reports_to_localglobal_mode&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-50&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
When you first put Giocoso into Pro mode (by filling in a MySQL remote database&amp;#039;s IP address, using the &lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt;), all reporting functions immediately switch by default into selecting from the shared, remote Pro database, rather than from the local database found on a specific Giocoso client device&amp;#039;s proximate hard disk. For example, here is what a local report of the &amp;#039;Aggregate Statistics&amp;#039; looks like (i.e., taking the Reports menu, Option 1 in non-Pro mode):
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_173035.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250215_173035.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_173035.jpg?w=650&amp;amp;tok=c6a4fa&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
And here&amp;#039;s the &lt;em&gt;same&lt;/em&gt; menu options taken, and the same report produced, but this time operating in Pro mode:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_173123.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250215_173123.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_173123.jpg?w=650&amp;amp;tok=9305e9&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The two reports &lt;em&gt;look&lt;/em&gt; very different, because the Pro version is coming from a remote MySQL database, which insists on putting dashes and plus signs around its output for tabular reporting purposes. If you look closely, however, it&amp;#039;s not just the look-and-feel that&amp;#039;s different. Notice how the &lt;em&gt;local&lt;/em&gt; database thinks 2.4&lt;em&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/em&gt;% of recordings remain as-yet unplayed, but the global database thinks it&amp;#039;s only 2.4&lt;em&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/em&gt;% that&amp;#039;s unplayed. The difference is, of course, that some recordings were played on devices other than the one producing the local report: in local mode, my main playing PC is unaware of these “other-devices” plays… but in Pro mode, the shared database is fully aware of them.
&lt;/p&gt;

&lt;p&gt;
The point is, therefore, that knowing what a &lt;em&gt;specific&lt;/em&gt; device has played is of interest (even in Pro mode), but knowing what &lt;strong&gt;all&lt;/strong&gt; devices have been up to is also of interest -and, thus, that there is a point in being able to report from &lt;strong&gt;either&lt;/strong&gt; the local &lt;strong&gt;or&lt;/strong&gt; global databases, at will. Switching back and forth between these two modes of reporting is precisely what the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 9 : Switch reports to xxxx mode&lt;/strong&gt; allows you to do. The “xxxx” bit of the option text will vary, in a reverse-toggle sort of way: if you are reporting in local mode, the text will say &amp;#039;switch reports to global mode&amp;#039;. If you are already in global reporting mode, the text will say &amp;#039;switch reports to local mode&amp;#039;.
&lt;/p&gt;

&lt;p&gt;
As you can see from the above screenshots, you&amp;#039;ll know what reporting mode you&amp;#039;re in by looking toward the top of the screen on most reporting screens: the report display will say “GLOBAL…” or “LOCAL…” very clearly. Some do not do this, for quaint technical reasons that needn&amp;#039;t detain us: however, the Reporting &lt;strong&gt;menu&lt;/strong&gt; itself tells you what reporting mode you&amp;#039;re in &lt;em&gt;before&lt;/em&gt; you run any particular report:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_175721.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250215_175721.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_175721.jpg?w=650&amp;amp;tok=e8c70f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
As a rough-and-ready guide, however, if your report opens in a web browser or contains lots of dashes and plus signs: it&amp;#039;s a global report. If it opens in terminal windows with nice line-draw characters defining the columns and headers, you&amp;#039;re running a local report.
&lt;/p&gt;

&lt;p&gt;
Every time you take the Pro menu, Option 9, you&amp;#039;ll switch to the alternate reporting mode &lt;em&gt;and&lt;/em&gt; be immediately transported to the Reporting menu: the program assumes that if you&amp;#039;re changing the reporting mode, you probably want to run a report!
&lt;/p&gt;

&lt;p&gt;
To be completely unambiguous about it: &lt;em&gt;reporting&lt;/em&gt; in local mode does &lt;strong&gt;&lt;em&gt;NOT&lt;/em&gt;&lt;/strong&gt; mean you&amp;#039;ve stopped &lt;em&gt;operating&lt;/em&gt; Giocoso in Pro mode. It just means that, &lt;strong&gt;for reporting purposes only&lt;/strong&gt;, you&amp;#039;ve chosen to use data from your local database, rather than the shared, Pro one. You can switch back and forth between local and global reporting modes at will, as often as you like, by taking the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 9&lt;/strong&gt;, which toggles between the two reporting modes as often as you like.
&lt;/p&gt;

&lt;p&gt;
On the other hand, if you clear out the &amp;#039;Remote MySQL Server IP Address&amp;#039; entry in your configuration options (&lt;strong&gt;Administration&lt;/strong&gt; menu, &lt;strong&gt;Option 2&lt;/strong&gt;), you&amp;#039;re completely switching off Pro mode, so reports automatically switch back to local mode and cannot then be run in global mode until you once again enter an IP address for a remote Pro database server. This is &amp;#039;toggle-able&amp;#039;, in other words, but a much less convenient way of doing things than using the Pro menu, Option 9!
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;51-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/0/0c72a9471da2fe7ca61c4afcd8026dca.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu/viewnote">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T17:41:08+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>viewnote</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu/viewnote</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;view_a_global_note&quot;&gt;View A Global Note&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;View A Global Note&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;view_a_global_note&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-33&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Global notes can be made whenever a recording is being played, just by tapping &amp;#039;n&amp;#039; (or &amp;#039;N&amp;#039;: the case doesn&amp;#039;t matter). The nano text editor opens and you can just start typing any observations or criticism of the recording that comes to mind. For example:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_122927.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_122927.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_122927.jpg?w=650&amp;amp;tok=0ab02d&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Each note you create in this matter over-writes any earlier note you may have made on the same client device …but, crucially, it&amp;#039;s stored in the Pro database, in a table called global_notes, as it is saved. The one local file (note.txt, stored in $HOME/.local/share/giocoso3/tmp) therefore keeps getting over-written by each new note; but each note is also stored permanently in the Pro database, uniquely and permanently &amp;#039;attached&amp;#039; to the rechashvalue that determines the uniqueness of a recording:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_123248.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_123248.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_123248.jpg?w=650&amp;amp;tok=40d985&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That&amp;#039;s me viewing the global_notes table in the &lt;a href=&quot;https://dbeaver.io/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://dbeaver.io/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;DBeaver&lt;/a&gt; MySQL database browser tool. If you squint hard enough, you&amp;#039;ll see the &amp;#039;O mio babino caro starts at 2:11:00ish&amp;#039; comment that you saw me writing in the nano editor in the earlier screenshot: proof that local file content is transferred to the global, shared database!
&lt;/p&gt;

&lt;p&gt;
A view in the Pro database called “notes” makes accessing the underlying global_notes table slightly easier: though the names of the various composers associated with these notes is definitely visible in the above screenshot, it&amp;#039;s not terribly easy to sort by their names, because they&amp;#039;re &amp;#039;embedded&amp;#039; within the &amp;#039;notes&amp;#039; column. The view fixes this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_123719.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_123719.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_123719.jpg?w=650&amp;amp;tok=b8acea&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
It&amp;#039;s very much the same information as before, but rather than an impenetrable &amp;#039;rechashvalue&amp;#039; to identify a recording, the view has split out the composer and composition into nicely-accessible (and separate!) columns. It is this view which the &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 8&lt;/strong&gt; uses to produce its output.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;Making&lt;/em&gt; notes is thus simply done whenever a recording is playing. &lt;em&gt;Viewing&lt;/em&gt; the notes after they&amp;#039;ve been made is &lt;strong&gt;only&lt;/strong&gt; possible using this &amp;#039;View a global note&amp;#039; option of the Pro menu and it&amp;#039;s done by selecting a composer first, then a specific recording second. When you first take the option to view a global note, therefore, you&amp;#039;ll see this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_155719.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250215_155719.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_155719.jpg?w=650&amp;amp;tok=c7f22d&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This is a tabulated version of the &amp;#039;Composer&amp;#039; column in that Notes view I showed you earlier: each composer for whom a global note has ever been created is listed precisely once. Your job is to up- and down-arrow until your choice of composer is selected, then press the [SpaceBar] to put an asterisk in the brackets next to the name. If you selected the wrong composer by accident, arrow up and down again until you land on the right one: another hit of the [SpaceBar] will move the asterisk to the newly-selected composer. You&amp;#039;ll note you can only pick one composer at a time!
&lt;/p&gt;

&lt;p&gt;
Once the right composer is selected, press [Enter] whilst the [OK] button is highlighted: if you merely want to back out without doing anything, tab round until the [Cancel] button is highlighted and &lt;em&gt;then&lt;/em&gt; press [Enter]. Assuming you&amp;#039;ve selected [OK] though, pressing [Enter] makes this happen:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_160125.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250215_160125.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_160125.jpg?w=650&amp;amp;tok=48d762&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This screen lists all the recordings attributed to the previously-selected composer for which global notes exist. In this specific example, Puccini only has one recording with notes, so only one item is listed. But if I&amp;#039;d notated a dozen of his opera recordings, all dozen of them would be listed here. Again, your job is to hit the up and down cursor keys until the right recording is highlighted. When it is, hit the [SpaceBar] to put an asterisk next to it… then click [OK] or press [Enter] whilst the [OK] option is highlighted. Once again, you can tab to the [Cancel] button and press [Enter] to back out without displaying anything at all, if you prefer.
&lt;/p&gt;

&lt;p&gt;
Once you&amp;#039;ve selected a specific recording and pressed [Enter] on the [OK] option, however, this happens:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_160532.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250215_160532.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250215_160532.jpg?w=650&amp;amp;tok=c2018f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Now the note you created in nano is displayed to you. It&amp;#039;s read-only, so strictly no editing! It&amp;#039;s also word-wrapped (at 90 characters per line), so that may result in slightly awkward line breaks: you can see some of them in this screenshot, for example… though it&amp;#039;s not entirely clear to me why there&amp;#039;s a line break after the words “I treasure”, as there&amp;#039;s plenty of space on that line for what follows! The point is that the display of the text is an approximation at best and certainly not perfect!
&lt;/p&gt;

&lt;p&gt;
You can scroll up and down (using up and down arrows or page up and down keys) to your heart&amp;#039;s content. Any other keypress, however, triggers the &amp;#039;Exit&amp;#039; option (which also has its own dedicated button, so pressing [Enter] will trigger it, too), returning you to the Pro menu once more.
&lt;/p&gt;

&lt;p&gt;
It is definitely not pretty, therefore! But, thanks to the Pro shared database,  it is a mechanism that allows you to &lt;em&gt;make&lt;/em&gt; notes about recordings on any device and to then &lt;em&gt;read&lt;/em&gt; them on any device thereafter. The notes certainly don&amp;#039;t have to be long essays, such as Ian Lace&amp;#039;s review of Pappano&amp;#039;s recording of &lt;em&gt;Il Trittico&lt;/em&gt; (on &lt;a href=&quot;http://www.musicweb-international.com/classrev/apr99/trittico.htm&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;http://www.musicweb-international.com/classrev/apr99/trittico.htm&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Classical CD Reviews&lt;/a&gt;), which I pasted in for the purposes of this documentation: pointing out where the big arias start and stop is usually the limit of my note-taking… but I know plenty of listeners who are much more engaged in this sort of thing than I am, so I hope this basic functionality meets their needs to some extent, at least.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;34-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/7/7cd3e3affc2d322c2ebc75e52157a069.xhtml used --&gt;
</description>
    </item>
    <item rdf:about="https://www.bbritten.com/softwares/giocoso/promenu/xtrctplay">
        <dc:format>text/html</dc:format>
        <dc:date>2025-12-10T14:59:17+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>xtrctplay</title>
        <link>https://www.bbritten.com/softwares/giocoso/promenu/xtrctplay</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;extract_remote_plays_or_recordings_to_csv&quot;&gt;Extract Remote Plays Or Recordings To CSV&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Extract Remote Plays Or Recordings To CSV&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;extract_remote_plays_or_recordings_to_csv&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-56&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;1.0 Introduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
It&amp;#039;s all very well having a remote, shared, Pro database of recordings and plays …but how can you &lt;em&gt;see&lt;/em&gt; that data and make sure it&amp;#039;s what you think it should be? To be honest, the &lt;strong&gt;best&lt;/strong&gt; way of viewing data in a MySQL database is to install a &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt; client and start browsing through the database structures and data in a nice, point-and-click manner: my own recommendation is to use &lt;a href=&quot;https://dbeaver.io/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://dbeaver.io/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;the DBeaver tool&lt;/a&gt; for this purpose:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_110839.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_110839.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_110839.jpg?w=650&amp;amp;tok=457e13&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Some people might find using a tool like this a bit daunting, however, and therefore Giocoso allows the remote recordings and plays data to be extracted to a local “CSV” file. The abbreviation &amp;#039;CSV&amp;#039; means &amp;#039;comma separated variable&amp;#039;, where each piece of distinct data is separated from the next by a comma. However, classical music has names such as “Serenade for tenor, horn and strings” to deal with… and the extra comma in that name could cause trouble! Therefore, Giocoso actually uses the pipe character (i.e., &lt;strong&gt;|&lt;/strong&gt; ) to separate the various bits of data: so you&amp;#039;ll end up with something more like “Benjamin Britten|Serenade for tenor, horn and strings|Peter Pears” and so on. Regardless of what the data delimiter actually is, however, you can simply import a “CSV” file into a spreadsheet tool like Excel or LibreOffice Calc and have the data presented to you in easily-readable format, without the need to install specialist database management tools first.
&lt;/p&gt;

&lt;p&gt;
The &lt;strong&gt;Pro&lt;/strong&gt; menu, &lt;strong&gt;Option 5&lt;/strong&gt; extracts the remote PLAYS table data to a local text file; &lt;strong&gt;Option 6&lt;/strong&gt; does the same thing for the remote RECORDINGS table. Both options write their output into the &lt;strong&gt;$HOME/.local/share/giocoso3/txt&lt;/strong&gt; folder, over-writing any previous data extraction when it does so, without prompting. Note that the term &amp;#039;extracting&amp;#039; does &lt;em&gt;not&lt;/em&gt; imply that any data is actually &lt;em class=&quot;u&quot;&gt;removed&lt;/em&gt; from the Pro database: it definitely isn&amp;#039;t, and the Pro database remains fully populated and functional no matter how many times you take these options. “Extracting” in this context simply means “making a copy of”, in a totally non-destructive manner.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1.0 Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;57-2230&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;the_data_extraction_process&quot;&gt;2.0 The Data Extraction Process&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Whether you&amp;#039;re using the Pro menu Option 5 (extract the plays) or Option 6 (extract the recordings instead), the program immediately responds like this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_112128.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_112128.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_112128.jpg?w=650&amp;amp;tok=9c25fc&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
That is to say, the relevant remote data (recordings in the case of the above screenshot, but it looks and works almost identically for plays) is immediately written out to a local file and the full path to and name of that file is shown to you in the resulting confirmation message: it takes less than a second to extract around 20,000 records on my not-fast system, so it&amp;#039;s practically instantaneous.
&lt;/p&gt;

&lt;p&gt;
Click [OK] to dismiss the message (making a note of the path and filename first, of course!) and you&amp;#039;ll return to the Pro menu display.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.0 The Data Extraction Process&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_data_extraction_process&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2231-3037&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;using_the_data_extractions&quot;&gt;3.0 Using the Data Extractions&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The new file(s) can be found using your system&amp;#039;s standard file manager:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_112500.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_112500.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_112500.jpg?w=650&amp;amp;tok=95c8c6&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You could inspect the contents of either file by opening them in, say, your system&amp;#039;s default text editor. In my case, I can right-click one of the files and open it in, for example, the &lt;strong&gt;kwrite&lt;/strong&gt; text editor:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_112637.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_112637.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_112637.jpg?w=650&amp;amp;tok=c15954&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
You&amp;#039;ll note that the lines of data are very long -but you should be able to make out the pipe delimiters separating the different bits of information about each play or recording. In this state, you could certainly search for particular strings of data, but it&amp;#039;s obviously not terribly &lt;em&gt;useful&lt;/em&gt; to see the data this way.
&lt;/p&gt;

&lt;p&gt;
So, instead, if I launch my computer&amp;#039;s spreadsheet program (which happens to be &lt;a href=&quot;https://www.libreoffice.org/download/download-libreoffice/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://www.libreoffice.org/download/download-libreoffice/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;LibreOffice Calc&lt;/a&gt;, but could just as well be Excel or something similar), take the &lt;em&gt;File → Open&lt;/em&gt; options and point it at one of the data extraction files, I see this:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_113048.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_113048.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_113048.jpg?w=650&amp;amp;tok=28bc8a&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The program knows that this text file isn&amp;#039;t a native spreadsheet, so proposes a way of &lt;em&gt;interpreting&lt;/em&gt; the data so it can be imported into a normal spreadsheet. The crucial bit to set correctly here is the &amp;#039;Separator options&amp;#039; one: that&amp;#039;s where you specify what the delimiter is between the different columns of data within the extract. Various &amp;#039;normal&amp;#039; delimiters are offered, such as tab, comma, semi-colon and so on, but none of these are correct for what Giocoso has just produced! Instead, you see me putting a tick next to the &amp;#039;Other&amp;#039; option and then, in the box provided next to that, I&amp;#039;ve typed the pipe character |. Toward the bottom of the screen, you can see that the spreadsheet program is immediately parsing the text file with this pipe delimiter in mind …and looks to be making a pretty good job of distinguishing (in this example) the rechashvalue from the filesuffix column, so the pipe delimiter definitely looks like the correct thing to use. Click [OK] to confirm that:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_114611.jpg&quot; class=&quot;media&quot; title=&quot;software:giocoso:screenshot_20250214_114611.jpg&quot;&gt;&lt;img src=&quot;https://www.bbritten.com/_media/software/giocoso/screenshot_20250214_114611.jpg?w=650&amp;amp;tok=4399e0&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The data is then imported in a much more usable form than before: you may well have to fiddle with column widths and row heights and all the other formatting paraphernalia that modern spreadsheet programs provide, but at least the data is intelligible! By default, the data is extracted in composer-name order, but you can use the spreadsheet&amp;#039;s options for sorting data to achieve a sort on any of the columns you like.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3.0 Using the Data Extractions&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_the_data_extractions&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3038-5687&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;summary&quot;&gt;4.0 Summary&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
It&amp;#039;s not suggested that there&amp;#039;s a pressing need to extract the Pro database&amp;#039;s recordings and plays tables to local text files, nor that you will want to do this very often. Indeed, if you &lt;em&gt;did&lt;/em&gt; ever feel the need to inspect your Pro database&amp;#039;s data often, I would encourage you to invest that time and effort (but no money, happily!) in learning a tool like DBeaver, which makes the &lt;em&gt;live&lt;/em&gt; version of your Pro data immediately available.
&lt;/p&gt;

&lt;p&gt;
For those who only have an occasional need to inspect their Pro data, however, or who don&amp;#039;t need or want to master a &amp;#039;proper&amp;#039; database management or query tool, Giocoso&amp;#039;s data extraction options are provided to make occasional, one-off, data extractions as painless as possible. The extraction process itself is unsubtle, asks no questions and is completed in mere seconds (if that). Actually &lt;em&gt;using&lt;/em&gt; the data thus extracted probably takes longer to do than the data extraction itself! Even so, it is generally a matter of a few tweaks of import options for pretty standard spreadsheet programs.
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;
| &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/software-menu&quot; class=&quot;wikilink1&quot; title=&quot;software-menu&quot; data-wiki-id=&quot;software-menu&quot;&gt;Back to Software Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/giocoso&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:giocoso&quot; data-wiki-id=&quot;softwares:giocoso:giocoso&quot;&gt;Back to Giocoso Documentation Home&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&quot;https://www.bbritten.com/softwares/giocoso/promenu&quot; class=&quot;wikilink1&quot; title=&quot;softwares:giocoso:promenu&quot; data-wiki-id=&quot;softwares:giocoso:promenu&quot;&gt;Back to Pro Menu&lt;/a&gt;&lt;/strong&gt; | 
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4.0 Summary&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;summary&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;5688-&amp;quot;} --&gt;
&lt;!-- cachefile /var/www/dokuwiki/data/cache/9/9fb1eae9b0017cd98570fa07fa836c5e.xhtml used --&gt;
</description>
    </item>
</rdf:RDF>
