Category Archives: About music4dance

Posts that are about the music4dance.net site features, excluding features that are specifically about searching for music.

Open Source music4dance

I’ve been considering publishing the music4dance source code as open source for some time now. I finally pulled the trigger!

You can find the source code for music4dance on GitHub, located at music4dance / music4dance; I’ve published the code under the MIT License. Note that this covers the code; I haven’t published the database.

I’ve documented the new ways (and some pre-existing ways) of contributing to music4dance in the contribution guide, and you can get an idea of what I (hopefully soon we) are working on by looking at the issues database. If you’re not a programmer, you can probably stop reading now. But, before you go, I would like to remind you that if you use music4dance there are plenty of ways to contribute to music4dance, including voting on which dance you would dance to a song or upgrading to a paid subscription.

Why Open Source?

My primary motivation for considering open source is that several people have reached out to me over the years, offering to help in general or implement a specific feature that they’re particularly interested in seeing. Making the project Open Source would be much easier than giving them access to a closed-source project.

I’ve also spent the last few years leading college students in contributing to other open-source projects as their capstone projects. While I’m not necessarily going to put music4dance features up for student projects, that experience combined with my contributions to BootstrapVueNext (the front-end framework I use for music4dance) has given me enough background in open-source projects to be more comfortable opening up my own codebase.

Another benefit of creating a GitHub project for music4dance is that I automatically get a reasonably well-designed issues database to manage code bugs, data bugs, and features that is visible to everyone. While you need a GitHub account to add issues, you don’t need an account to view them and get some idea of where I’m going with music4dance. Once more people start entering bugs, you’ll be able to see if others have run into the same issue you’ve discovered.

To top off my list of reasons to move to open source, I’ve been using some of the problems I’ve worked on with music4dance as fodder for technical articles on Medium. Since the source code for music4dance wasn’t publicly available, I built small projects to demonstrate the issues. While having small, isolated projects to demonstrate technical issues is useful – in at least one case, I’m maintaining the sample project as a means of testing updates to the affected systems in isolation – I’d also like to be able to show the solutions in the context of the real-world project that inspired them. Now I can.

What took so long?

I’ve been working on music4dance for over fifteen years. Why haven’t I made this move earlier? One reason is that by the time it occurred to me to move to open source, the codebase was well over a decade old. Much of the code was dated, there were many things I’d rewrite given time, and test coverage was abysmal. My impulse was to clean things up before publishing. I even started doing so with some of the oldest code. But I concluded that it would take approximately forever to get the code into shape, especially if I spent some of my time on new features and contributing to the song database.

I didn’t initially create music4dance as an open-source project because I hoped it would be the seed of a profitable business. I’ve pulled back that expectation to the hope that I can generate enough revenue from referrals, ad revenues, and subscription fees to cover the server fees and other expenses, making this passion project a revenue-neutral proposition.

In conclusion: For better or worse, the code is now out in the wild. Please take a look and let me know your thoughts.

Please let me know if you have any thoughts about the subject of this post or the site by commenting below or using other feedback mechanisms listed here. And if you enjoy the site or the blog (or both), please consider contributing in whatever way makes sense for you.

Playlists for Ballroom DJs?

I recently heard from a member of the music4dance community who hosts a community social ballroom dance for which he builds a playlist. He uses music4dance to find song ideas, then manually builds a spreadsheet and feeds it back into Spotify to create the final playlist.

I have a long-standing interest in making it easier to build playlists. I still have fond memories of my dance coach handing us a CD of custom-cut practice rounds (this was back in the ‘90s). When I started music4dance, I thought that once I had enough data, I’d be able to do some kind of auto-playlist generator where I randomly chose a high-ranked song from each dance type in a competition round and created a playlist that would be suitable to practice to. Unfortunately, the music4dance database isn’t nearly clean enough to do something like that. I’d need to be able to filter down to just songs that are strict-tempo for each dance, which I’m not even close to being able to do.

I’ve communicated with several DJs who use music4dance to build their playlists. It seems pretty common to want to be able to rotate through a pattern of different dances, so maybe there is some there there. The ability to create heterogeneous playlists of songs appropriate for different dances seems like a helpful feature.

But I’m also loathe to define my own playlist format and land myself in a situation where I’m storing everyone’s playlists. I already spend more time maintaining the music4dance code and systems than adding new features, so I want to be careful about creating features that add to that burden. But that’s not a complete blocker; if this is the way to provide the best user experience, I’d be happy to do it. I’d want to take the time to lock down the requirements before implementing a feature like this.

Hence, this blog post. If you use music4dance to build playlists, how do you do it? And what do you want the format of the end result to be? A Spotify Playlist? A spreadsheet? An integration with the DJ software you use? If so, what software? Please let me know.

In addition to the specific asks above, I’m always happy to hear ideas about this post or the site by commenting below or using other feedback mechanisms listed here. And if you enjoy the site or the blog (or both), please consider contributing in whatever way makes sense for you.

New Feature: More Spotify Exports

One of the more active members of the music4dance.net community filed a bug report recently, noting that he tried to create a Spotify Playlist, but it came up empty. The playlist was All West Coast Swing (with at least 3 votes) songs having tempo between 100 and 120 beats per minute including songs edited by sabrinaskandy sorted by Dance Rating from most popular to least popular. Staring on page 4. It never occurred to me that someone would want to export a playlist starting from a page other than one. There was a very good reason in this case. He was interested in trying new music, and the top songs in this search were those with which he was generally already familiar.

On a separate track, I’ve been contemplating ways to distinguish the different tiers of the premium subscription. While I want to keep the core functionality of music4dance open to everyone, and I contend that the main reason to pay for a premium subscription is to support the project, I’d like to start building a few things that are nice bonuses for people who provide more financial support.

So, I’ve fixed the bug and now allow folks with a Silver subscription to export from pages other than the first one. While I was at it, I’ve increased the number of songs you can export to a thousand for anyone with a Bronze subscription. Details are available on the subscriptions page.

While I’m here, please let me know if you want to download song and dance information to a file. I have a beta-level feature in place, but I haven’t seen enough interest in the feature to clean it up and get it fully in projection. It’s not a giant lift, so even a few people expressing interest will tip the scales.

In case you’re wondering, the bug turned out to be that I was paging by 100 rather than 25 during export, so the query in question, which only returned 101 songs, produced nothing when starting from the (4-1)*100 = 300th song.

One other nice side effect of the combination of having the total number of dance votes per song indexed and the ability to export larger playlists is that I can now produce a playlist with the Top 1000 songs, based on the total number of dance votes. I don’t know how practical that playlist is, but I find it fun.

In addition to the specific asks above, I’m always happy to hear ideas about this post or the site by commenting below or using other feedback mechanisms listed here. And if you enjoy the site or the blog (or both), please consider contributing in whatever way makes sense for you.

What Happens When a Song is Danced at Different Tempos?

Sometimes, a song can be a perfectly good Bolero when heard one way but a Salsa when counting the music differently. Another example is Slow Dance (Castle Foxtrot) vs. Lindy Hop.

Generally, this phenomenon is because, with some music, it’s easy to count what the musicians see as either a half note or a quarter note as a beat. Quarter note vs. eight note is another common variation. At one point, I tried to tag dances as half-time or double-time when I saw songs with this property. But honestly, I can tie my head up in knots when I look back at this. Am I dancing double-time to the music (e.g., stepping twice as fast), or is the music half-time to my dance? And, that ‘solution’ also has the limitation that there is no way to sort or filter on tempo and include those songs correctly without doing two searches (maybe 3) and then weaving the results together ‘manually.’

And that doesn’t even take into account Waltzes, where you can get into other fun variations that I talked about in my fake waltz post.

A more robust solution to this problem is to have a separate tempo field for each dance. This would only be filled in if the dance had a positive number of votes. Then, if you search on Foxtrot and sort by tempo, the Foxtrot tempo field will be used. If you search on multiple dances or didn’t include a dance in a search and sort on tempo, I’d have to default to some master tempo field. If I went down this path, I’d have to populate the ‘dance’ tempo fields off of the master tempo fields by default and do some manual searching for the exceptions (and depend on others to update them as they see them).

What do you think? Would this be a significant improvement in how you use music4dance? Or is it a corner-enough case that you’ve never noticed and would prefer I spend my time on improvements in other areas?

Please share any thoughts and ideas about this post or the site by commenting below or using other feedback mechanisms listed here. In addition, if you enjoy the site or the blog (or both), please consider contributing in whatever way makes sense for you.

What is Your Favorite music4dance Feature? (2024 Edition)

I am in the middle of another substantial rewrite of parts of music4dance.net. This is why you haven’t seen much blogging or new features recently. Sorry!

In any case, I should ask this question at least once a year: What do you like about music4dance, and how do you use the site?

As I rework the code, I don’t always keep everything exactly the same, and as a solo project owner, I feel that I have license to cut features if it’s not apparent that customers heavily use them. I am able to get an idea of how folks use the site through analytics, but these tools often lose essential nuances. So, please let me know what is most important to you about the site so that I don’t accidentally cut it!

On a similar note, what are features that almost but don’t quite do what you want them to do? Or features that work but take more effort than they should? These ideas are easiest for me to incorporate as I’m doing a major rewrite, but feel free to let me know about them at any time.

Unlike my previous rewrite, this project involves “just” upgrading to new versions of front-end libraries rather than changing to a new framework, so there should be less of an impact on the site. It would also be faster, except that one of the libraries I depend on requires some help, so I’m diving into the next level of infrastructure, which is fun but time-consuming.

I value your thoughts and ideas. Please share them by commenting below or using other feedback mechanisms listed here. If you want to explore more ways to participate in the musci4dance community, please check out this page. Your contributions are highly appreciated, and your engagement is what makes this community thrive. Thank you.  

Introducing the music4dance technical blog

When I started the music4dance blog nearly a decade ago, I considered including a technical component by writing about the challenges of building and maintaining the site. A good friend talked me out of doing that, and I still think it’s the right decision. I’m assuming most of the audience for this blog isn’t particularly interested in what I’ve done to build the site. You’re interested in what you can do with the site, learning more about the relationship between music and partner dancing, and how to find music to dance to. If I’m wrong about you, please let me know; if I get more than a few direct responses, I’ll set up a poll and consider a pivot based on the results.

am disappointed I never got around to spinning up a technical blog. I’ve learned much over the years while building and maintaining this site. And I generally feel the need to share when solving technical problems. Now that I’m not leading a team of engineers, I’ve given up my primary outlet. So, it finally tipped the balance, and I’ve started some technical writing.

I decided to use medium.com to host my technical writing. That removed the barrier to entry of setting up another site and spinning on what technology to use, and I’ve been happy with the platform. The first series of posts is only tangentially music4dance related but is still motivated by this project. I use a simplified version of the tempo counter applet from the website to compare the experience of writing that app on several multi-platform frameworks. In addition, I took the opportunity to write about my experience in helping build the foundation for Microsoft’s version of that solution. So, if you have a technical bent, please take a look – the first post is “Which Multi-platform framework should I use to write my app?” And if you like it, please do the things that help spread the word. With medium, those things are to clap, follow, and share the link with friends.

As always, I’m very interested in your feedback and read every comment and email. So please share any thoughts and ideas about this post or about the site by commenting below or using other feedback mechanisms listed here. In addition, if you enjoy the site or the blog (or both), please consider contributing in whatever way makes sense for you.

Post #100: Music4Dance Turns Ten

My first blog post was in July 2014. I had early versions of the website up and running for about a year before starting the blog, so the site is just about ten years old.

It’s been an adventure building music4dance over the years. I’ve been thrilled when others have piped up and expressed opinions about how the site works. So for those of you that have done that, thanks! And for those that haven’t yet, feel free to get in touch. The more feedback I get, the better the site will become. 

My motivation for building and expanding music4dance has changed over the years. Initially, it was to retrain as a full-stack developer and take an (admittedly pretty weak) stab at seeing if this idea that had been floating in my head for years could become a business. I succeeded in the former, landing a job as a full-stack developer (or at least a hands-on manager of full-stack developers). Of course, the business never really turned profitable, as I’ve mentioned before.

Once I was working full time, I had to pull back on how much time I was spending on music4dance. I kept at it partly because this is a labor of love. But also because it gave me some coding time outside of work. And I could move the music4dance technology stack ahead of the codebase I was responsible for at work, which was incredibly useful at the time.

I’m sure there will be other transitions and focus changes over the years coming years.

The site itself has been through some significant reworks over that time. I moved the core database engine from Microsoft SQL Server to Azure Cognitive Search and changed the core client-side rendering from the asp.net framework with a sprinkling of knockout.js to vue.js backed by a thin layer of asp.net core.

This blog has gone through several iterations under the hood, but it’s been a pretty plain vanilla WordPress site for the whole time. The (mostly) invisible changes have been around how I have hosted the site, the most recent being that I gave up on self-hosting and now just run the site on WordPress.com. Over the last nine years, I’ve written 100 posts (this post is coincidently an approximate 10th anniversary and an exact 100th post). Some posts hold up pretty well, some could use a facelift, and a few are stale or just plain misleading. Given the vagaries of search engines, I dislike taking down posts. But it’s well past time to impose some order on the chaos, update some of the most outdated posts, and make it easier to find what you’re looking for in the mass of words.

So, I went through all the old posts and categorized them. I think I’ve managed a reasonable taxonomy of posts, although kind of like dance styles, not everything fits as neatly as I’d like:

About music4dance: Posts about the music4dance.net site features, excluding features specifically about searching for music.

Searching for Music: Posts that are about searching for songs, excluding those about special occasions

Special Occasions: Searching for music related to special occasions (Holidays, Weddings, etc.)

Music and Dance: Posts about music as it relates to dance and dance as it relates to music.

Reviews: Reviews of books, podcasts, websites, etc.

Archive: Posts that are no longer relevant

I also intend to go through and produce fresh versions of some essential content when it’s gone stale, like I did recently with the wedding music posts (part 1 & part 2).

As always, I’m very interested in your feedback and read every comment and email. So please share any thoughts and ideas about this post or about the site by commenting below or using other feedback mechanisms listed here. In addition, if you enjoy the site or the blog (or both), please consider contributing in whatever way makes sense for you.

P.S. As I started re-organizing the blog, I didn’t realize that an update as minor as adding a category would re-publish a post to my linked-in and Facebook feeds, so all of you who follow me on those platforms; sorry for the spam; I’ll try to do better in the future.

Would you like more content on music4dance.net? If so, what kind?

Brad’s comment on my Single Swing post made me realize that I’ve done a bunch of research on dancing and dance music that I haven’t effectively conveyed on the site or the blog. He pointed me to a site that listed tempo values for Single Swing that I already had in my notes and used when doing some of my earlier set-up of dances. But I didn’t credit that site or put a reference to it anywhere on music4dance.

So I started down the path of sorting out my notes with the intent of adding a whole bunch of new references to source material throughout the music4dance site. Since much of my initial research is over a decade old, can you guess what I discovered? I won’t keep you in suspense. A working majority, more than 75%, of the links that I used to research music4dance were dead. Most of those were sites that completely disappeared, a few were reworked and dropped the pages I was interested in, and a very few still had the content but at a different location.

Now, that lead me down the path of how many dead links I have on the site. As a programmer, I took a few hours off my content investigation to write a link checker. I was relieved to see that of the external content links I have on the site, less than a dozen were stale. On the other hand, the total number of those links is less than a hundred, so it was still about a ten percent failure rate. (I’m excluding links to songs, I know there is a significant amazon link issue that I need to deal with at some point).

The conclusion: I’m less excited about spending a bunch of time beefing out reference sections for dances and other content. But now that I’ve got the link checker in place, I could do that in a reasonably maintainable way.

This brings me to the main point of this post. I’ve been neglecting content again while spending time keeping code updated and adding features. So, I want to ask you what you’d like to see on the site. To start the conversation off, here are a few things that I’ve heard:

  • More references to information about dances
  • More detailed descriptions of dances
  • Additional dances (Kizomba and Country dances have been the biggest asks other than Single Swing, which is what kicked this all off)
  • More information about dance tempos, where they come from, what they mean, etc.

I’m sure you have many other ideas, so please let me know. I will kick this off by asking folks to add to the comments section of this post (or, if you prefer, you can message me privately). If I get enough interest, I’ll also set up a survey.

And while you’re at it, please let me know if there are other sites relevant enough to music4dance that it would make sense to add links.

As always, if you enjoy the site or the blog (or both), please consider helping by contributing in whatever other way makes sense for you.

Beta Feature: Export to a file

A number of the most active members of the music4dance.net community have requested the ability to download all or part of the song database. My sense is that this has generally been with the intent to tag songs in one’s local catalog with the dance style and other metadata from music4dance. I’ve been stuck trying to implement this for two reasons: First, I’ve put a significant amount of work into the music4dance catalog and don’t necessarily want to let someone download the whole catalog and stand up a competing site. Second, I’m not entirely sure I want to write a desktop application or other tool to tag songs in a personal catalog.

I’m less and less inclined to be worried about the first reason, as I continue to struggle to even cover server costs with subscription and advertising revenue. So if someone has the marketing ability to turn the music4dance catalog into a money-making proposition, I think that would be a good thing. In fact, I’m considering moving to an open-source or non-profit model once I get past a couple of issues with the source that prevent me from making it widely available.

As for the second reason, I realized that providing the information in a reasonably consumable format would allow anyone with a bit of scripting skills and sufficient motivation to do their own tagging. So I don’t have to write a tagging application for this to be useful.

I’ve cobbled together a quick beta feature to let folks play around with exported song lists. I’d love to know if anyone is interested in giving it a whirl before I invest in cleaning up the code to make it a more generally consumable feature. Just contact me, and I’ll set you up.

There are two entry points for this feature. First, in your profile, there is a new link to “export your votes and tags.” This link will generate and download a comma-separated value (CSV) file of all of the songs that you have edited in any way. This file is a denormalized list containing one line per song/dance combination. Each line will have a music4dance song id, title, artist, dance name, Spotify and iTunes links, as well as both your tags and votes and global tags and votes.

The second entry point allows you to download the same information for the first 100 songs of any search you create. This is similar to the ability to create a Spotify playlist I implemented a while back.

Some of the things that I’m interested in feedback on are:

  • Is this denormalized CSV format reasonable, or would another format be more useful (e.g., a normalized JSON format)?
  • Are title/artist or the Spotify/iTunes id sufficient to match your catalog? I’ve looked a bit at using musicbrainz.org ids. But by my reading of their licensing agreement, they want $100 a month donation for commercial use of their catalog, which is a bit steep for the music4dance budget.
  • Is downloading just the top search results or songs you’ve edited sufficient, or are there reasons you would want access to the entire catalog?
  • Is this a feature that would be worth the current annual Premium subscription level of $15? Or more?
  • Are there other ways you would like to use this information?

As always, if you have comments or suggestions, especially if you’d like to try the beta feature discussed above, please feel free to reply to this post or contact me here. In addition, if you enjoy the site or the blog (or both), please consider contributing in whatever way that makes sense for you.

New Feature: Saving and Sharing Searches

Searching for music to dance to is what music4dance is all about. 

I’ve been adding features such as Filter by Song Length, General Search, and Searching for a song from Spotify or iTunes to improve your ability to do just that. 

Another thing that I hope music4dance will be used for is to share those songs with other dancers.

There are two features that I haven’t blogged about recently that have suffered from some bit rot over the years. Since I’ve got them up and running again I want to increase awareness about them and get your feedback as to how useful these features are to you.

The first is Saving Searches. Whenever you do a search that is nontrivial, we save the search in a list that you can access through your account menu. See the help for more details.

The other is the magic of URLs. You can copy the link from the address bar and share it with other dancers. This is true of everything from the simplest searches you do from the top menu bar to the most complex searches you create using the advanced search tool. Or you can embed the link in a blog post, which is what I do regularly here. It’s one of those wonderful web features that should always just work, but often is not correctly implemented. It’s a bit of a pet peeve of mine when this doesn’t work for websites, so I try to make it work for music4dance.

And there is a third feature, which I’ve implemented more recently. With a premium subscription, you can create a Spotify playlist from a search and share the results.

I’m very interested in feedback, about this set of features. I can think of several ways I might want to improve the saving and sharing of searches, but I hesitate to invest much more into this until I hear from you. For instance, would you like to be able to show your favorite searches on your profile page? Or would you like to refine searches even more? Or would you be interested in seeing what others are searching for?

Besides the specific feedback request above, I’m always interested in your more general feedback, so please share any thoughts and ideas you have about this post or the site by commenting below or using other feedback mechanisms listed here. In addition, if you enjoy the site or the blog (or both), please consider contributing in whatever way that makes sense for you.