Child Theme and Plugin Development Cycle

I hope someone who has a better process than this shares some of their secrets.  I am a software engineer who has been developing for WordPress for a few years. I mostly have done projects that were outside of normal WordPress Development. For example, ported a Custom CMS into WordPress. I did custom landing pages with a WordPress backend.  For I while I have been editing my plugin code in place, under wp-content.  I make some changes.  I reload the page. Where the F*(&*^ are my changes?  Oh, I forgot to clear the browser cache.  I test my changes on another site.  I clear the browser cache.  Where are my changes? Oh, I forgot to clear the WordPress cache in use.  Still after clearing both caches, I had some issues with see my updates once in a while.  If I only changed a css file or a js file, it sometimes, did not update.  Mostly on odd days of the week, even when you change what day of the week it starts on.  You really have to watch this stuff.  Sometimes its date related.  Phase of the moon. Rain and inclement weather play a part, sometimes the bit bucket needs emptying.  It is always something.  See  for more suggestions.

So the first thing I do is move the source, to source control. Git is the flavor of the year (previously popular flavors are Mercurial, SVN, CVS, Source Safe ..). Then I document what I think should work. Here is the cycle I use:

– code
I make changes in the hope that one of my mistakes will prove useful, and to move towards my desired effect.  gmgj is the name of my plugin (also its folder etc)

– touch gmgj.php in plugin , functions.php in child theme
Just to be clear, in this case “Touch” is a programming term, where you use a utility to update the modified time of a file, even if you have not updated. The #MeTo has a very different use for the term.

– deactivate plugin, sometimes I have had to change the theme, but not so much
– move in new code

I use a bat file, sort of like this:
@echo off

cd "C:\path to source"
rem this is the touch
copy /b gmgj.php +,,
rem this is the move
xcopy "C:\path to source\*.*" "C:\path to WorPress \wp-content\plugins\gmgj\*.*" /s /r /y /q /d /EXCLUDE:excludeus.dat

rem delete the old zip and recreate the new zip, the zip file is what you upload to new WordPress Installations to install your plugin
del /Q C:\path to source\
cd "C:\up a level\"
rem this includes some file extensions, excludes others, there are better ways rem to do this.
rem Why? I keep the project html file and other utility files in the same rem directory as the project
"C:\Program Files\7-Zip\7z.exe" a "" -x!gmgj\*.html -x!gmgj\*.dat -i!gmgj\*.php -i!gmgj\*.css -i!gmgj\*.js -i!gmgj\*.JPG

excludeus.dat is:

– hit wordpress plugin “Clear Cache for Me” on the admin dashboard
– I use the FANTASTIC utility Web Developer clear cache to clear the browser cache

– activate the plugin and cross all fingers and toes.  If that does not help:

– check php error log and start Browser developer tools and check for other errors
– use php error_log() and javascript console.log()
– if problems like not updating code
– admin logout , close browser

– delete plugin and upload via zip file
– start and stop apache and mysql, restart computer, get a coffee …
– roll version numbers
– ?
swing a rubber chicken

I would be remiss if I did not point out that when I calling things like wp_enqueue_style and wp_enqueue_script, I use the version parameter like this.  Please note, I did not originally come up with this idea.  When I looked at the source for a number of projects, the following appears to be standard practice.

$gmgj_js_url = plugins_url( 'gmgj_test.js', __FILE__ ); 
$gmgj_js_path = plugin_dir_path( 'gmgj_test.js');

 array( 'jquery', 'jquery-effects-core' , 'jquery-effects-explode'),

This the magic that makes the version stuff work

function gmgjversion_id($pluginpath) {
 return filemtime($pluginpath);
 //return '012';

Updating the child theme is similar.



“Fuck you, I like guns.”

Engineering, Parenthood, and a Solid Attempt at Adult Status

Edited to add: I can’t thank you all enough for interacting with this post. I am actually surprised that it’s become this popular. This is the first time more than ten people have read anything I’ve written here. I’m probably going to turn off commenting soon because everything that can be said already has been. In general, I’d like to point out that this is an opinion piece. I wrote it on a 15 minute coffee break and posted it unedited. It’s raw, and that’s the whole point. The tone, the language, and the style are intentional. This was written for people like my mostly conservative Army buddies who will never click an article that is titled “Gun control is your friend”, and tend to assume those who support such legislation have never seen a gun before. I’m not a professional writer, nor a particularly prolific blogger until about three…

View original post 1,782 more words

Mojo MarketPlace

I do not trust them — and think you shouldn’t either.  And when I see these kinds of anti-consumer practices, I like to let other people know about them.  Maybe this post will save you some money, or at least make you a smarter consumer.  My goal is to prevent more people from getting scammed by companies that definitely do not put the consumer first.

Please do not use Mojo Marketplace.   They use deceptive links that try to get people installing WordPress, to pay for an “expert install”. 

HostGator, the web hosting provider I currently use, is promoting this.  In the past, they had a button you could push that would ask you five questions to install WordPress.

WordPress prides itself on a very simple 5 minute install, that is one of the easiest installs I have ever seen in my over 30 years in the software business.    

Using MoJo for a WordPress install is like buying a $100 pizza with white glove delivery.  You have to be really naive and out of touch to do this — but vendors know they can prey upon uninformed consumers by getting them to buy things they do not need.

IMHO, the best advice you can give to someone getting started with WordPress is to setup a free account at and push a few buttons.  You are reading this post on a free WordPress site!

Here is the screen I see when trying to install from Control Panel or QuickInstall on HostGator:

At the top, you see where you put in the domain and directory for the install.  Whatever you do, the next button do not become active.  Hostgator took the one click install off the options they easily offer their customers!  I started a chat with support and they were nice enough to do the one click install, from their end.  It took less than 2 minutes to finish.

I could do a manual install, documented here :

Here is an example of an install script written in php:

Search for something like “is there a php script to install wordpress” and you will see lots of examples.

The install of WordPress has been automated by a lot of folks. Here is a script that uses bash from the Linus command line:

It is not in Hostgator’s interest to force users to do there own install of WordPress.  They could install old versions with known security holes etc.  But, they want to sell you the “Expert Install” by the Mojo Marketplace people.  They want to charge $99 dollars for typing in Site Title, First Name, Last Name,  and admin email, and pushing a button.  Shame on HostGator, shame on the Mojo Marketplace.

For $399 they offer:

  • WordPress Theme Credit($49)
  • We Install WordPress
  • We Install Your Theme
  • Demo Setup
  • WordPress Site Backup
  • WordPress SEO / SEO Sitemap
  • WordPress Site Security

Are they serious?  There are hundreds of free themes that you can install with one click. When you install your theme, you get a working site, Site Backup is as simple as Tools – Export. There are free WordPress Site security plugins like the ones listed here:

It is really disingenuous of HostGator and the MoJo people to do this. Managing a WordPress site is not difficult; however, its not without some work.  Creating content and designing an appealing site takes time.  The add-ons you can (and should include), such as SEO and Site Security are not trivial, but installing them is. A lot of WordPress add-ons have free versions. Having these trivial tasks done for you, really does not get you very far.

When you buy shared hosting, the most popular setup is a LAMP stack. Linux, Apache, Mysql and Php. Setting up your own LAMP stack use to be a little tedious. Ubuntu has a one click install for it now.  Installing WordPress on LAMP has been automated.  Bitnami offers an automated WAMP (inset Windows for Linux) with one click and you can add on WordPress for another click.

There are real heroes in the open source movement.  They are the software engineers who create these one click installable products like the LAMP Stack and WordPress. They are the volunteers that offer support and help in so many ways.

Maybe you can think of a few choice words for someone who tries to sell you what other hard working people give away for free — and pricing it at a not insignificant amount of money.

What MoJo says:

Those deceptive links you are referring to are for our installation packages that not only include the free WordPress installation, they include a theme, a theme install, a full demo set up of the theme the customer chooses, a backup plugin that saves content on a daily back up, full site security to protect a WordPress site from Adware, malware, and spyware, SEO services, as well as 30 days help from our WordPress experts to help customers become more proficient using their dashboard. The installation itself is free, and we offer installation of WordPress instructions over the phone. They are not required and are completely optional.

Let us see how truthful they are:

Free; but they say, install for $99.
They don’t say you get support.
They say it’s optional, but, on HostGator, you have to go through hoops.

This is not the kind of thing that would make me trust them.  It raises warning flags.

My Bottom Line Advice

If you need a lot of help doing computer related things, hire your own consultant, someone who can steer you clear of these predatory practices. I  charge a sliding scale.  My rate for commercial entities is $35 per hour.  If you give me $399, you will get real value.

I set up these WordPress based sites:

I helped my wife with these:

I am working on this:

My background

I did and do things like static html front pages with WordPress backends, hosting, configuring and redirecting email etc.  I have been coding in native HTML, CSS and JavaScript, since day one.  I took up PHP a number of years later.  My first passion was doing web browser based apps.  I had written native Windows applications and DLLs.  (Using a web browser for apps was like cheating.  The browser does all the hard work.)

Privacy in our world

It is a simple matter to get your credit card and bank data. Got a modern cell phone, unless, you turn off tracking, your phone knows where you have been. Facial recognition can pinpoint exactly what you did after you get out of the vehicle. Got a resume, is it online somewhere? Now for public information, ever been arrested, got a speeding ticket? However,if you want to minimize your web tracking use the Brave Browser or the Ghostery extension, which allows you to stop some of the tracking cookies. Of course, they can track your ip address and there are services that associate ip with physical addresses.

Is your Safely Remove … missing?

Is the “Safely Remove Hardware and Eject Media” icon/program missing from your Windows Taskbar?

Try this:

1) Connect a usb device, do you see it now? If yes, you are done.

2) Exit a few taskbar programs (Google Sync and Backup, OneDrive, your printer, etc.) and connect a usb drive.

Do you see the safely remove taskbar icon?

Go to Settings -> Personalization -> Taskbar or Right-Click the Taskbar and go to settings.

Select Which Icons appear in the taskbar.

Toggle off always show all icons in the taskbar.

Toggle on:
Windows Explorer
Safely Remove Hardware and Eject media

No Luck, try here

It never hurts to try this:

MediaMonkey Portable Installation

A work in Progress

Actually, a migration from a hard disk installation.  Part 2 of my rethink of my music library. First part is here: The Reorg. The main part that is applicable to doing a portable install is that I moved all of my music files to a usb drive.

The MediaMonkey documentation is at :

I downloaded the latest debug build from here:

Click on the MediaMonkey_4.1.19.1859_Debug.exe. Of course, allow the “install” , “change”, elevate, access to private network requests.

Select Portable Installation and specify the drive you want to install it on ( I chose a USB, not the location in the following image)

2017-11-25 (1)

Eventually you get here:

2017-11-25 (2)

2017-11-25 (3)

I did not scan.  I unselected the the location it had by default clicked (Music)

2017-11-25 (4)

2017-11-25 (5)

I let it share, for the moment.

We get to the Monkey Startup and it asks if you want to:

Import Missing file playlist and rating from your other applications; however, MediaMonkey is not one of them.  I skipped this step.

It shows Media Servers for all users?

I changed a few default things:

Turned off : Volume Leveling
Tags and playlists: ID3v2 encoding ascii always.
Media Tree: turned on Classical Music
Search: Turned off Custom and other fields that I don’t care about

Now I want to migrate all of my , auto organize rules, playlists, Milkdrop 2 installation and custom scripts to the new portable install.

I have reviewed the forum posts for a search on “portable” and have narrowed down my first attempt to be based on the following post:

Portable install loses settings.

Thank you – MediaMonkey Forum User DickSledge

When migrating from a local install to a portable install, do not follow the instructions on “moving to a new computer” that tell you to copy the .ini file. Only copy the .db file and the Metadata Cache folder. Overwriting the .ini file in the portable install will cause that install to look to your hard drive for the database.

It was that easy, I copied:




X: is the drive I had my music files on and installed portable MediaMonkey to.

BTW: my MetadataCache/Thumbnails directory was empty

I also adjusted skins, options, font size to 150% so I could comfortably read the MM screens.

Next, using my portable install on different computers. I connect it to a laptop, MM automagically adjusts for the new drive.  My scanning and editing {Tools – Options – Auto Organize}  Auto Organize rules still reflect the original drive letter I set them up for.  Example  If genre “Rock” ,

Main Directory I:\Rock\

In my case I alway plan on staging my new files for the library on the USB in a folder called “ToBeOrganized” .  Next thing is to test adding a new file with the Auto Organize rules, to see if it automatically adjusts.  In my case it would make sense to adjust the rules.  How do you code the “Main Directory” so it is not hard coded {I:\Rock} and defaults to the Rock Directory off the root?


The other Auto Organize rules {Tools – Auto Organize} also reflect the prior installations drive letters.  That and the File Monitor {Tools – Options -Library – File Monitor} also needs to be adjusted.

I renamed this USB drive as music; however, I see it in safely remove drive as “Ultra MT Slim”.  I wonder if I can rename this or if I can rename it, if I do rename it, will it screw up the MM library?

Things of interest

Based upon:
How to export current settings? Where is settings file?

points to
Retrieve old MM environment?

The documentation on where things are stored is here:

Things worked fine, as along as I was on the original pc.  When I tested it on another machine, I had to update the driveID in the database. The following Third Party Addon can do this:

Hopefully, I will not be expanding to much on this:

Disadvantages of portable mode?

I did my portable install on a “standard” computer config, with a C drive and a D optical (combo DVD /Cd) (it’s been a few years since we had a and b drives, but some things never change!) So my portable install ended up being drive E:  Now when I plug a usb stick in, it goes to drive F.  That’s okay, but it shows the drive E attached.  I attached to to a computer that has c,d,e,f and at G optical drive and it goes to I.  My portable installation showed up as drive H, and it worked.

If when you click on safely remove drives, it gets a little flaky, go to Windows File Explorer and eject the drive.

How to Reorganize a Media Monkey Library with Lots of Playlists

A work in progress  MM = MediaMonkey

“A guide to reorganizing a large MediaMonkey Library”

MediaMonkey Version  Gold
Microsoft Windows 10 Home 10.0.15063

I wrote this guide as I was researching how to reorganize my music library.  Media Monkey has many capabilities and features that make this extremely easy.  It is flexible and powerful.  This guide pulls together the steps I think are prudent when undertaking this task.  First thing, buy a USB drive large twice as large as your collected works.

BTW, my library was in pretty good shape, until I whacked it.  It was either when I was adding some public domain music or when I was creating previews. I never really had to do much with MM, it just worked.  Then I started adding non standard (missing meta data, etc) files to the library.  My original library was segregated into 2 major sections.  Everything I ripped from CD originally was in folders by my own “genre” classification.  The actual genre classification in the metadata was much more diverse than my personal “genre”.   Everything else was added to “Recordings Purchased After 2009 Music”. I used this setup for over 10 years, and never really had to think or worry about it.   I am know going to set up automatic rules that keep my library organized the way I want it.  I hope this guide gives you an idea of some of almost unlimited things you can do with MM.  This post is rather long, mostly because it shows lots of examples and details.  The Short Story (TSS) is, I fixed the crap I added to have 2 of my own “genres”.  Then I set up automatic rules to keep the rest of the library organized by the original genre in the metadata.

My Original library:

Classical Music
Jazz Music
Miscellaneous Music
My Music
Other Music
Our Music
Pop Music
Recordings Purchase After 2017 Music
Soul Music
Soundtracks Musicals Music

Christmas Music
Recordings Purchased After 2009 Music

Let us get started!

1) ->File – Create Reports – Click on Statistics

MediaMonkey Music Library Statistics (Edited)

Type Library Played
Artists 876 491
Albums 722 461
Genres 64 49
Years 70 55
Playlists 118 108
Tracks 6929 1750
Length (h:mm:ss) 502:55:23 125:20:46
File size 155 GB 37.4 GB
Top 10 Genres
Tracks Genre Length File size
2080 Rock 151:35:48 54.1 GB
944 Classical 73:11:44 17.0 GB
899 Jazz 79:15:09 25.0 GB
435 Blues 26:40:33 8.60 GB
367 Soundtrack 21:34:41 6.37 GB
359 Pop 24:45:13 8.13 GB
233 Soul 13:00:03 4.29 GB
195 Variété française 11:41:58 3.82 GB
112 Christmas 4:21:55 1.32 GB
79 PublicDomain 2:33:19 304 MB

Generated by MediaMonkey ON Sunday, November 5, 2017 at 9:04:42 AM

Add up the space you see in File Explorer Properties for your Library

D:\ 107.0GB
E:\   48.7GB
155.7 = Library File Size from above. Yeah, they agree!

->Click on Entire Library in the Media Tree

->File – Create Reports – click on the file list format of your choice. Save copies of these reports to compare totals etc after your reorg.

2) Backup your music (and other media) and MM files

How to Backup and Recover a MediaMonkey Library
Updated by Russell Samuels on Nov 30, 2014

I backed up everything under

xcopy "C:\Users\{USERNAME}\AppData\Roaming\MediaMonkey\*"     "I:\MMDB\*.*" /s /r /y /q /d

I also backup my Milkdrop2 visualizations:  C:\Program Files (x86)\MediaMonkey\Plugins\Milkdrop2.

I also exported all my playlists with a script (Tools – Scripts – Export all Playlists)

Related topics

Modifying the MediaMonkey db and ini files

Moving MM to a new computer

I have extensions etc. that I would probably have to reinstall if I moved to a new computer.
Update Location of Files in Database
Version 1.4.3
– MediaMonkey Add-on –

3) Fix problems with your library

You can fix issues you find, or you can just ignore them.  This does let you find some things that otherwise, you might have forgotten about. You should probably review the settings you have for you library under:

->Tools – Options – Library

There are a lot of options. I use:

I turn on File Monitor for a folder “To Be Organized” when I add new files to the library.


Tags and Playlists

Metadata lookup

This is one of the most important sections I will discuss later.  I learned the hard way to click on “Delete emptied folders”.

Auto Organize

I turned on Automatically organize file (during scans and edits)  for the reorg.  I turned it off after. I turn it back on when I add new files.


Media tree


To edit a song or multiple songs, select them in the media tree, right click ,  -> Properties.  Change the fields you want to change. When doing multiple files, you can change things like genre, but not title.

You can tag things with multiple genres

Review the sections in your media tree under Available Tracks (also Music):

Artist & Album Artist
Files to Edit

Look for unknown and other anomalies. Missing titles, album names, album artists, genres etc.

I have a few files that are sound clips, previews, funny clips from the internet, public domain music (for videos I post to YouTube etc), ripped from vinyl that have issues. I have files that I just plain screwed up. I scan under Albums and other categories see stuff that’s not right.

Album Excerpts (Sound clips)
Doctor Gary
Doctor Gary (Doctor Gary)
Track 10
Ultimate Download Disc and MediaMonkey Guide to Better Sound (ceu) (I screwed these up by using artist instead of album artist when I put thes in my DB)
gj (gj and others)

I also looked at the files in Windows File Explorer.  I navigated to the folders called Unknown (etc.),  I see some of the MM library issues in the files on disk:

I have /Unknown/Unknown.

Back in MM, check the section Files to Edit in your Media Tree under Available Tracks.  Give it some time to work. Review the sections you care about under Files to Edit.  It don’t care about ratings and beats etc, however, some folks really like this capability. Fix the sections you care about.

For  Unsynchronized tags

Select all files in this section (Ctrl-A).
Click Tools > Advanced Tag Management > Synchronize tags…

Multiple Artist Albums
If you have an album that has multiple artists, like a Woodstock album, you will get the artists for each track, but, the whole album will have  “Various Artists” for Album Artist.  That is the reason they have that field.
I have 2 albums called Greatest Hits, there were different artists, that confused the multi album process, but otherwise it worked really well. See Optimize Database – Create Multi Artist Albums.

I had instances where Artist / Album / Genre information was missing or inaccurate. I had files I edited and created for ringtones, or for phone messages etc and the stuff I downloaded for Videos (Public Domain).  My genres for these items was all over the place or missing.  I reviewed  the section under “Genres”. When you sort the column for genres by genre, you can get a list of all the empty genres!

I setup new Genres for:

Excerpts = from internet, audacity whatever, if it could be claimed as copyrighted

Genre -excerpts
Album -Album artist
Album artist -Artist

ItsABeautifulDay,  U2 U2
It’s a drag getting old,  Rolling Stones, Rolling Stones
ClintonLew,  Unknown, Unknown

PublicDomain is for anything that is not copyright protected
Genre – PublicDomain
Artist  – unknown
Album – ShortClips

I fixed the tags for genre (my main organization rule).

Some things have subtle problems.  It will prompt you if a file is read only.  You have to give it some time to work on occasions; however, the Monkey is pretty snappy.  I was unable to write the tags for some .wav and .ogg files. I selected the files, Tools – Convert Format, select “convert replace”, and I rewrote the tags and it worked. The new mp3 files had the tags. Then I did not see a few files, I tried to rescan, but, I had checked , ignore files shorter than 20 kb.

Again, do not forget to update the tags in your files after editing:
Click on Unsynchronized Tags, it will scan your entire library.

->Tools -Advanced Tag Management – Synchronize Tags.

4) Where are you going to store your new Library?

Some of the free and other media managers will try to import music files it sees in the Windows default locations for music under libraries, into their own catalog.


I do not want that to happen, so for the time being I am leaving my MM library out of the Windows Music Library.  I am moving my library to a USB drive that I will eventually connect as a NAS and share with all the computers in the house.  There are other options to explore, see “For your consideration” below. If you ever want to include your music in the library structure, it is relatively easy.

How to use libraries in Windows 10

5) Do some Research

Read these topics:

Organizing Files and Folders

I see collections for Classical Music.  There is a category under properties for Type, and it looks like it is for different types of media, mostly, classical music being the exception. I don’t know if we can set up our own collections. I don’t know how MM determines Type = Classical?.  I am guessing this is used for different file extension media types.

Auto organize

Configuring Directory and Filename Formats

If you click on Tools – Auto-Organize Files and set up a rule there, it will show you the changes that will be made prior to making them. It will show if you will end up with duplicate files (which will overwrite files). You can use it to move to a different folder, different drive or to network storage. When you use MediaMonkey to move/rename files it will update any Playlists within MediaMonkey.  I am trying to set up automatic auto organize rules that will keep my library  organized they way I want.

User Auto-Organize File Masks Examples

Auto organize problem:
I saw this in the MM forum.  While running auto organize “It is very possible that Windows explorer is creating Thumbs file and read it so it is locked for moving. Thus Retry works.”

Turn off Thumbs.db

To disable it, all you need to do is just to enable “Always show icons, never thumbnails” option in Folder Options. To open Folder Options window, the easiest way in Windows 7 and 8 is to press Win key, type “folder options”, and click it. Your image folders will become so plain and boring once you Apply the change.Nov 2, 20

7) Set up Auto Organize

Review this to get some good ideas of what you can do with auto organize rules.

To set up auto – organize rules,  Tools – Options – Auto Organize
Double click to edit a rule, or on new, to set up a new Auto-Organize Rule.


Expand the arrow by Genre and select the genres for this rule (and destination).  In this example I show the last rule for my set, the default.  Click on Configure and you will see the dialog box below.

Note the destination, I:\Default is hardcoded as the first item. Be sure to use album artist so that multi artist albums go to Various , instead of every different artist.

2017-11-26 (1)

I setup destination folders for the main categories (Classical , Jazz).

I have the Classical collection, and I moved it by selecting on the genre and setting up the destination.  Check Type in properties.

Classical\album  A collection

Check that Classical + Opera etc works

Setup the section Organize these files using the following Directory and Filename format.

The destination folders are in bold.

I use #Track – Title for the file name.
Underneath this for each main category (Classical, Jazz…) is the genres that go with that section

\Jazz\album artist\album

Acid Jazz
Easy Listening
Jazz  + Bebob
Jazz +  Big Band
Jazz + Fusion
Neuvo Flamenco
New Age
Smooth Jazz
World Music

\Comedy\album artist\album




Rock\album artist\album

50’s Rock
Alternative Rock
Blues Rock
Classic Rock
Folk Rock
Hard Rock
Rap & Hip-Hop

Blues\album artist\album

blues   is it case sensitive ?

Pop\album artist\album

Dance & DJ

Soul\album artist\album




French\Album artist\Album

Varrite francais

Excepts/Album artist/Album


Traditional\album artist\album


Jason\Album artist\album


Rich\Album artist\album

Rich – Richard Van Deuson

Meditation\Album Artist\album


Default\album artist\album
None (but lowest precedence)

Last rule I set up has no selection for genre, hopefully the exceptions will always fallout there.

I made sure to do both a quick and complete File Maintain Database and I made another copy of the MediaMonkey database before starting the the auto organize.

I also did a Tools – Export All Playlists

Did you review Files to Edit under Available tracks again?

I selected sub sections of my library, for example D:\Blues, and hit the Insert key, and MM did its magic.  A couple of hours elapsed time to reorganize my library.

At the end, I still had a few things to fix, so I was editing, Ctrl S, synchronizing tags and then hitting Insert. Easy Peasey after you do it for a couple of hours!   I had one album, Bach: Well-Tempered Clavier, Book 1, by Kimiko Ishizaka (free Classical Music) that I had to change the Type from Music to Classical to get in the right place.

For your consideration

Final Thoughts
Exclude your music library from indexing and searching.

When I want to move new files into the library. First I check the tags. Most music that is bought will have valid tags; however, free, Public Domain and other sources may not. If I need to I fix the tags. Then I move the file into my folder “To Be Organized”.

Turn on File Monitor to scan “To Be Organized” at startup
Turn on Auto Organize
After the new stuff has been has been added, I turn them off.

I am going to do another post on Setting up a Portable Media Monkey Installation.

A view of my auto organize rules

2017-11-07 (1)

Multi Album Artists:


This is screenshot showing playlists, on the right.

2017-11-07 (2)

If you did not select delete empty dirs under auto organize, this might be helpful

Powerscipt to find empty dirs ( run it multiple times as it is not smart)

(gci X:\ -r | ? {$_.PSIsContainer -eq $True}) | ?{$_.GetFileSystemInfos().Count -eq 0} | select FullName

Where X:\ is the drive:\path you want to check for empty directories

I copy the empty dirs and put it in a batch file with RD (remove directory) and /s to do subs, example:
RD “E:\Recordings Purchased After 2009 Music\AAA\the life” \s

Windows RD in a bat file did not like the characters that are above 128 in the code page, so files like this will fail:
E:\Recordings Purchased After 2009 Music\Björk\Homogenic

This looks like a work around, but I have not tried it:

Compare 2 Lists of Names

Compare 2 lists, with different name formats, different file formats (excel, txt, csv, pdf …) etc

  1. convert all files into csv with strings “” encoded
  2. convert to common encoding (usually utf-8 or  Win – 1252)
  3. parse names into nickname, salutation, first, initials or middle, last, suffix **
  4. match on last, then first  do exception list
  5. do fuzzy match on last, first do exception list

I ask people to give me excel files. I give them a little help on how to do that, but a search on importing and converting data into excel usually makes it pretty easy. This also usually gets the encoding into utf-8, however, that is a separate issue.

I load the data from the output of 3 into an sql table and do a number of matches

`FName` varchar(50) COLLATE latin1_bin NOT NULL DEFAULT ”,
`LName` varchar(50) COLLATE latin1_bin NOT NULL DEFAULT ”,
`H` ENUM(‘Y’, ‘N’) default ‘N’,
`P` ENUM(‘Y’, ‘N’) default ‘N’,
`K` ENUM(‘Y’, ‘N’) default ‘N’,
`R` ENUM(‘Y’, ‘N’) default ‘N’,
PRIMARY KEY (`LName`,`FName`)

The sample code I looked at for the name disambiguation is a classic string compare algorithm.

import Algorithmia
import csv
import sys
from numpy import zeros
from time import time

def apply(input):
venues = Algorithmia.file(“data://Nilojyoti/dblp/dblp_venues.csv”).getString()
wiki_venues = Algorithmia.file(“data://Nilojyoti/dblp/wikipedia_venues.csv”).getString()

vlist = venues.split(‘,\n’)
wlist = wiki_venues.split(‘\n’)
result_list = {}

for venue in vlist:
mindist = sys.maxint
for wikivenue in wlist:
distance = edDistDp(venue, wikivenue.split(‘ – ‘)[0])
if distance < mindist:
mindist = distance
wmatch = wikivenue
return result_list

def edDistDp(x, y):
“”” Calculate edit distance between sequences x and y using
matrix dynamic programming. Return distance. “””
D = zeros((len(x)+1, len(y)+1), dtype=int)
D[0, 1:] = range(1, len(y)+1)
D[1:, 0] = range(1, len(x)+1)
for i in xrange(1, len(x)+1):
for j in xrange(1, len(y)+1):
delt = 1 if x[i-1] != y[j-1] else 0
D[i, j] = min(D[i-1, j-1]+delt, D[i-1, j]+1, D[i, j-1]+1)
return D[len(x), len(y)]

Example name parser

Array (
[nickname] =>
[salutation] => Mr.
[fname] => Anthony
[initials] => R
[lname] => Von Fange
[suffix] => III
**The algorithm:**

We start by splitting the full name into separate words. We then do a dictionary lookup on the first and last words to see if they are a common prefix or suffix. Next, we take the middle portion of the string (everything minus the prefix & suffix) and look at everything except the last word of that string. We then loop through each of those words concatenating them together to make up the first name. While we’re doing that, we watch for any indication of a compound last name. It turns out that almost every compound last name starts with 1 of 16 prefixes (Von, Van, Vere, etc). If we see one of those prefixes, we break out of the first name loop and move on to concatenating the last name. We handle the capitalization issue by checking for camel-case before uppercasing the first letter of each word and lowercasing everything else. I wrote special cases for periods and dashes. We also have a couple other special cases, like ignoring words in parentheses all-together.

Check examples.php for the test suite and examples of how various name formats are parsed.

**Possible improvements**

* Handle the “Lname, Fname” format
* Separate the parsing of the name from the normalization & capitalization & make those optional
* Separate the dictionaries from the code to make it easier to do localization
* Add common name libraries to allow for things like gender detection

**Same logic, different languages**

* [Name Parser in Java](
* [Name Parser in JavaScript](
* [Name Parser in CSharp](

**Credits & license:**

* Read more about the inspiration for this [PHP Name Parser]( library by [Josh Fraser](
* Special thanks to [Josh Jones](, [Timothy Wood](, [Michael Waskosky](, [Eric Celeste](, [Josh Houghtelin]( and [monitaure]( for their contributions. Pull requests are always welcome as long as you don’t break the test suite.
* Released under Apache 2.0 license

** Nickname is important to the convention and association industry ( a big user of this functionality) as nickname is often used on badges identifying attendees instead of first name