<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Music on Grizzlebit</title>
  <subtitle>Ray Grasso's Blog</subtitle>
  <updated>2026-05-05T13:59:36.953626+08:00</updated>
  <id>https://www.grizzlebit.com/tags/music/feed.xml</id>
  <link rel="alternate" type="text/html" href="https://www.grizzlebit.com/tags/music/"/>
  <link rel="self" type="application/atom+xml" href="https://www.grizzlebit.com/tags/music/feed.xml"/>
  <rights>Copyright © 2026, Ray Grasso</rights>
  <author>
    <name>Ray Grasso</name>
  </author>
  <icon>https://www.grizzlebit.com/images/icon.png</icon>
  <logo>https://www.grizzlebit.com/images/icon.png</logo>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2026/04-15-nine-inch-noize/</id>
    <published>2026-04-15T10:05:10+08:00</published>
    <updated>2026-04-15T10:07:03+08:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>Nine Inch Noize ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <p>Trent still out there killing it.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Hul0_VpIg4s?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>


  <p>
    
    <a href="https://www.grizzlebit.com/links/2026/04-15-nine-inch-noize/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>.</p>
</div>
]]></content>
    <link rel="alternate" href=""></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2026/04-15-nine-inch-noize/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/posts/2025/01-02-my-2024-playlist/</id>
    <published>2025-01-02T17:09:56+10:00</published>
    <updated>2025-01-02T17:34:48+10:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>My 2024 Playlist</title>
    <content type="html" xml:base="https://www.grizzlebit.com/posts/" xml:lang="en"><![CDATA[<div>
  <p>Here is <a href="https://open.spotify.com/playlist/5xNQzEEea1MyQi5I9e12xD">the 2024 edition of my yearly Spotify playlist</a>.</p>
<p>You can also check out my <a href="/posts/2023/09-02-my-2023-playlist/">previous editions</a>.</p>
<p>And here is <a href="https://www.last.fm/user/raygrasso/listening-report/year">my Last.fm listening report for the year</a>.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/posts/2025/01-02-my-2024-playlist/">🔗</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>, <a href="https://www.grizzlebit.com/tags/recommendations/">Recommendations</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.grizzlebit.com/posts/2025/01-02-my-2024-playlist/"></link>
    <link rel="related" href="https://www.grizzlebit.com/posts/2025/01-02-my-2024-playlist/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/posts/2024/11-07-digging-through-my-apple-music-library/</id>
    <published>2024-11-07T11:52:01+10:00</published>
    <updated>2024-11-07T11:57:49+10:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>Digging Through My Apple Music Library</title>
    <content type="html" xml:base="https://www.grizzlebit.com/posts/" xml:lang="en"><![CDATA[<div>
  <p>One feature Apple Music has that Spotify doesn&rsquo;t is Smart Playlists. They are handy for honing in on favourite tracks for specific artists or genres.</p>
<p>I knocked up this smart playlist that I shuffle to unearth underappreciated tracks in my library.</p>
<figure><img src="/images/low-plays-smart-playlist.png"
    alt="My Low plays smart playlist in Apple Music">
</figure>

<p>It&rsquo;s been throwing up some good gear.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/posts/2024/11-07-digging-through-my-apple-music-library/">🔗</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>, <a href="https://www.grizzlebit.com/tags/software/">Software</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.grizzlebit.com/posts/2024/11-07-digging-through-my-apple-music-library/"></link>
    <link rel="related" href="https://www.grizzlebit.com/posts/2024/11-07-digging-through-my-apple-music-library/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/posts/2024/11-04-how-to-disappear/</id>
    <published>2024-11-04T08:30:53+10:00</published>
    <updated>2024-11-04T08:53:29+10:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>How to Disappear 📚</title>
    <content type="html" xml:base="https://www.grizzlebit.com/posts/" xml:lang="en"><![CDATA[<div>
  <p>I&rsquo;m working on reading more photography books.</p>
<p>So, yesterday, I grabbed <a href="https://howtodisappearbook.com">Colin Greenwood&rsquo;s How to Disappear</a> while I was out and about<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>Colin gets some great candids of the recording and touring experience.</p>
<p>His collection of photos is another ode to the power of a plastic Yashica T4.</p>
<div class="gallery">


  <div class="gallery-item"><figure>
      <a href="/posts/2024/11-04-how-to-disappear/IMG_6019_hu_f0f922426e08708c.jpg">
        <img loading="lazy"
          src="/posts/2024/11-04-how-to-disappear/IMG_6019_hu_b93957581476be1b.jpg" width="800" height="600" alt="Ed">
      </a>
      </figure>
  </div>
  

  <div class="gallery-item"><figure>
      <a href="/posts/2024/11-04-how-to-disappear/IMG_6016_hu_a4a7dc9084070900.jpg">
        <img loading="lazy"
          src="/posts/2024/11-04-how-to-disappear/IMG_6016_hu_4305c7ac5b8073aa.jpg" width="800" height="600" alt="Jonny">
      </a>
      </figure>
  </div>
  

  <div class="gallery-item"><figure>
      <a href="/posts/2024/11-04-how-to-disappear/IMG_6017_hu_bf002c2a51db99c8.jpg">
        <img loading="lazy"
          src="/posts/2024/11-04-how-to-disappear/IMG_6017_hu_92cbe0127381003a.jpg" width="800" height="600" alt="Jonny">
      </a>
      </figure>
  </div>
  

  <div class="gallery-item"><figure>
      <a href="/posts/2024/11-04-how-to-disappear/IMG_6018_hu_3d2b112e6c115518.jpg">
        <img loading="lazy"
          src="/posts/2024/11-04-how-to-disappear/IMG_6018_hu_18595298375cb8b5.jpg" width="800" height="600" alt="Thom">
      </a>
      </figure>
  </div>
  </div>

<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Combining Radiohead and photography is catnip for me.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>

  <p>
    
    <a href="https://www.grizzlebit.com/posts/2024/11-04-how-to-disappear/">🔗</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/books/">Books</a>, <a href="https://www.grizzlebit.com/tags/music/">Music</a>, <a href="https://www.grizzlebit.com/tags/photography/">Photography</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.grizzlebit.com/posts/2024/11-04-how-to-disappear/"></link>
    <link rel="related" href="https://www.grizzlebit.com/posts/2024/11-04-how-to-disappear/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2024/09-03-apple-shortcut-that-uses-chatgpt-to-suggest-music-on-spotify/</id>
    <published>2024-09-03T19:27:38+10:00</published>
    <updated>2024-09-03T19:28:32+10:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>Apple Shortcut That Uses ChatGPT to Suggest Music on Spotify ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <p>I&rsquo;ve used this a few times now and it&rsquo;s pretty ace.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/links/2024/09-03-apple-shortcut-that-uses-chatgpt-to-suggest-music-on-spotify/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>, <a href="https://www.grizzlebit.com/tags/productivity/">Productivity</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.reddit.com/r/shortcuts/comments/1f7l5so/chatgpt_spotify_perfect_music_for_the_perfect/"></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2024/09-03-apple-shortcut-that-uses-chatgpt-to-suggest-music-on-spotify/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2024/07-19-bandsplain-episodes-on-soundgarden/</id>
    <published>2024-07-19T09:24:27+10:00</published>
    <updated>2024-07-19T09:37:17+10:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>Bandsplain Episodes on Soundgarden ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <p>Six hours of SG lore for all you Knights of the Soundtable.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/links/2024/07-19-bandsplain-episodes-on-soundgarden/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.theringer.com/2024/7/18/24201107/soundgarden-part-2-with-hanif-abdurraqib"></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2024/07-19-bandsplain-episodes-on-soundgarden/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/posts/2023/09-02-my-2023-playlist/</id>
    <published>2023-09-02T10:16:41+08:00</published>
    <updated>2024-10-12T17:53:31+10:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>My 2023 Playlist</title>
    <content type="html" xml:base="https://www.grizzlebit.com/posts/" xml:lang="en"><![CDATA[<div>
  <p>I make a new Spotify playlist at the beginning of every year, and I keep adding songs I enjoy throughout the year.</p>
<p>Now that it&rsquo;s September <a href="https://open.spotify.com/playlist/1RvEiAX1YfvEZYvfcWCizq">the 2023 edition is nice and ripe</a>.</p>
<p>You can also listen to the <a href="https://open.spotify.com/playlist/64PgBlRhq0YFOZvqxMSjrc">2022</a>, <a href="https://open.spotify.com/playlist/2k6X2tYSxOernabTsBUIz8">2021</a>, and <a href="https://open.spotify.com/playlist/3Lj8m9XyZbJwOmZafuJmDO">2020</a> editions.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/posts/2023/09-02-my-2023-playlist/">🔗</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>, <a href="https://www.grizzlebit.com/tags/recommendations/">Recommendations</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.grizzlebit.com/posts/2023/09-02-my-2023-playlist/"></link>
    <link rel="related" href="https://www.grizzlebit.com/posts/2023/09-02-my-2023-playlist/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2023/08-18-kirk-hammett-reflects-on-his-career-in-metallica/</id>
    <published>2023-08-18T20:24:31+08:00</published>
    <updated>2023-08-18T20:27:56+08:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>Kirk Hammett Reflects on His Career in Metallica ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <p>Rick Beato is building an archive of interviews with some legendary musicians.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/links/2023/08-18-kirk-hammett-reflects-on-his-career-in-metallica/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.youtube.com/watch?v=sEhq_Efx9Ug"></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2023/08-18-kirk-hammett-reflects-on-his-career-in-metallica/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2023/07-08-nick-cave-and-louis-theroux/</id>
    <published>2023-07-08T20:35:02+08:00</published>
    <updated>2024-11-04T09:50:52+10:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>Nick Cave and Louis Theroux ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <p>I&rsquo;d listen to either of these blokes read the phone book.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/links/2023/07-08-nick-cave-and-louis-theroux/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/creativity/">Creativity</a>, <a href="https://www.grizzlebit.com/tags/music/">Music</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://open.spotify.com/episode/4OwNk3CSw70KeufuG6O41N"></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2023/07-08-nick-cave-and-louis-theroux/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2023/07-08-josh-homme-on-neal-brennans-blocks-podcast/</id>
    <published>2023-07-08T20:33:58+08:00</published>
    <updated>2024-11-04T09:50:52+10:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>Josh Homme on Neal Brennan&#39;s Blocks Podcast ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <p>They go deep and I&rsquo;m here for it.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/links/2023/07-08-josh-homme-on-neal-brennans-blocks-podcast/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/creativity/">Creativity</a>, <a href="https://www.grizzlebit.com/tags/health/">Health</a>, <a href="https://www.grizzlebit.com/tags/music/">Music</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://overcast.fm/&#43;-CuHgzB_4"></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2023/07-08-josh-homme-on-neal-brennans-blocks-podcast/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2023/05-29-the-canonical-path/</id>
    <published>2023-05-29T19:09:00+08:00</published>
    <updated>2024-11-04T09:50:52+10:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>The Canonical Path ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <blockquote>
<p>the most canonical paths across the shared surface of the world&rsquo;s music, starting at the point of some particular artist and going&hellip;outward, every other direction at once.</p></blockquote>
<p>I&rsquo;ve enjoyed the playlists generated by this so far.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/links/2023/05-29-the-canonical-path/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/data/">Data</a>, <a href="https://www.grizzlebit.com/tags/music/">Music</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://everynoise.com/canonicalpath.cgi"></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2023/05-29-the-canonical-path/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2023/04-14-butch-vig-interview/</id>
    <published>2023-04-14T08:32:22+08:00</published>
    <updated>2023-04-14T08:56:50+08:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>Butch Vig Interview ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <p>Butch talking through his recording process on Smashing Pumpkins albums and Nirvana&rsquo;s Nevermind.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/links/2023/04-14-butch-vig-interview/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.youtube.com/watch?v=5U9XJdd4FlM"></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2023/04-14-butch-vig-interview/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2021/01-04-64-reasons-to-celebrate-paul-mccartney/</id>
    <published>2021-01-04T18:59:00+08:00</published>
    <updated>2023-04-13T20:33:32+08:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>64 Reasons to Celebrate Paul McCartney ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <p>Ian Leslie:</p>
<blockquote>
<p>Paul McCartney has been writing and performing music more or less continuously since 1956. That’s sixty-four years.</p></blockquote>

  <p>
    
    <a href="https://www.grizzlebit.com/links/2021/01-04-64-reasons-to-celebrate-paul-mccartney/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://ianleslie.substack.com/p/64-reasons-to-celebrate-paul-mccartney"></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2021/01-04-64-reasons-to-celebrate-paul-mccartney/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/posts/2020/03-15-playing-a-random-album-on-spotify/</id>
    <published>2020-03-15T08:36:00+08:00</published>
    <updated>2025-04-23T19:31:51+08:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>Playing a Random Album on Spotify</title>
    <content type="html" xml:base="https://www.grizzlebit.com/posts/" xml:lang="en"><![CDATA[<div>
  <p>I still like listening to albums and sometimes want Spotify to play a random album from a playlist of albums I&rsquo;ve created.</p>
<p>I couldn&rsquo;t find anything out there that does this so I wrote myself a script to handle it instead.</p>
<p>Here&rsquo;s a rundown if you want to use it.</p>
<p>First up, you&rsquo;ll need a playlist with at least one track from each of the albums you want to choose from (<a href="https://open.spotify.com/playlist/4BDGcko4BXBkdE0wFUXSz4?si=SBBz-UNPT56cwcjLUC9f-Q">here&rsquo;s mine</a>). Grab the ID of your playlist<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, and your username and add them into the script below.</p>
<p>Then, you&rsquo;ll need to <a href="https://developer.spotify.com/documentation/general/guides/app-settings/">create an app in Spotify</a> and get your client ID and secret, add them to the script below, so you can authorise the script.</p>
<p>Finally, run <code>gem install rspotify</code> in your default ruby<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> and you should be off to the races.</p>
<p>Run the script with Spotify desktop app installed and it&rsquo;ll open up a random album for you to press that sweet, sweet play button on ⏯.</p>
<p>I run the script from an Alfred workflow so I&rsquo;ve got it close at hand.</p>
<p>Enjoy 🎷🎶</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env ruby</span>
</span></span><span class="line"><span class="cl"><span class="c1">#/ Usage: open-random-album</span>
</span></span><span class="line"><span class="cl"><span class="c1">#/ Open a random album in Spotify.</span>
</span></span><span class="line"><span class="cl"><span class="c1">#/</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s2">&#34;rspotify&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">RandomAlbum</span>
</span></span><span class="line"><span class="cl">  <span class="no">CLIENT_ID</span> <span class="o">=</span> <span class="s2">&#34;YOUR CLIENT ID&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="no">CLIENT_SECRET</span> <span class="o">=</span> <span class="s2">&#34;YOUR CLIENT SECRET&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="no">USERNAME</span> <span class="o">=</span> <span class="s2">&#34;YOUR USERNAME&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="no">PLAYLIST_ID</span> <span class="o">=</span> <span class="s2">&#34;YOUR PLAYLIST&#39;S ID&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">fetch</span>
</span></span><span class="line"><span class="cl">    <span class="no">RSpotify</span><span class="o">.</span><span class="n">authenticate</span><span class="p">(</span><span class="no">CLIENT_ID</span><span class="p">,</span> <span class="no">CLIENT_SECRET</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="kp">new</span><span class="o">.</span><span class="n">fetch</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1"># Grab the albums from a playlist and choose one at random</span>
</span></span><span class="line"><span class="cl">  <span class="k">def</span> <span class="nf">fetch</span>
</span></span><span class="line"><span class="cl">    <span class="n">playlist</span> <span class="o">=</span> <span class="no">RSpotify</span><span class="o">::</span><span class="no">Playlist</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="no">USERNAME</span><span class="p">,</span> <span class="no">PLAYLIST_ID</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">albums_in_playlist</span><span class="p">(</span><span class="n">playlist</span><span class="p">)</span><span class="o">.</span><span class="n">sample</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kp">private</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">def</span> <span class="nf">tracks_in_playlist</span><span class="p">(</span><span class="n">playlist</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">limit</span> <span class="o">=</span> <span class="mi">100</span>
</span></span><span class="line"><span class="cl">    <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="o">[].</span><span class="n">tap</span> <span class="k">do</span> <span class="o">|</span><span class="n">result</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">      <span class="kp">loop</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">        <span class="n">tracks</span> <span class="o">=</span> <span class="n">playlist</span><span class="o">.</span><span class="n">tracks</span><span class="p">(</span><span class="ss">limit</span><span class="p">:</span> <span class="n">limit</span><span class="p">,</span> <span class="ss">offset</span><span class="p">:</span> <span class="n">offset</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">break</span> <span class="k">if</span> <span class="n">tracks</span><span class="o">.</span><span class="n">empty?</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="n">result</span><span class="o">.</span><span class="n">concat</span><span class="p">(</span><span class="n">tracks</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">offset</span> <span class="o">+=</span> <span class="n">limit</span>
</span></span><span class="line"><span class="cl">      <span class="k">end</span>
</span></span><span class="line"><span class="cl">    <span class="k">end</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">def</span> <span class="nf">albums_in_playlist</span><span class="p">(</span><span class="n">playlist</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">tracks</span> <span class="o">=</span> <span class="n">tracks_in_playlist</span><span class="p">(</span><span class="n">playlist</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">tracks</span><span class="o">.</span><span class="n">reduce</span><span class="p">({})</span> <span class="k">do</span> <span class="o">|</span><span class="n">acc</span><span class="p">,</span> <span class="n">track</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">      <span class="n">acc</span><span class="o">[</span><span class="n">track</span><span class="o">.</span><span class="n">album</span><span class="o">.</span><span class="n">id</span><span class="o">]</span> <span class="o">=</span> <span class="n">track</span><span class="o">.</span><span class="n">album</span>
</span></span><span class="line"><span class="cl">      <span class="n">acc</span>
</span></span><span class="line"><span class="cl">    <span class="k">end</span><span class="o">.</span><span class="n">values</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">album</span> <span class="o">=</span> <span class="no">RandomAlbum</span><span class="o">.</span><span class="n">fetch</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">puts</span> <span class="s2">&#34;Opening &#39;</span><span class="si">#{</span><span class="n">album</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39; in Spotify&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">system</span> <span class="s2">&#34;open </span><span class="si">#{</span><span class="n">album</span><span class="o">.</span><span class="n">uri</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span></code></pre></div><div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Click on <code>Share -&gt; Copy Spotify URI</code>. The playlist&rsquo;s ID is the string after the last colon.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>If this becomes a pain I guess you could look into bundling the script up with its required gems somehow.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>

  <p>
    
    <a href="https://www.grizzlebit.com/posts/2020/03-15-playing-a-random-album-on-spotify/">🔗</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/automation/">Automation</a>, <a href="https://www.grizzlebit.com/tags/music/">Music</a>, <a href="https://www.grizzlebit.com/tags/tools/">Tools</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.grizzlebit.com/posts/2020/03-15-playing-a-random-album-on-spotify/"></link>
    <link rel="related" href="https://www.grizzlebit.com/posts/2020/03-15-playing-a-random-album-on-spotify/"></link>
    
  </entry>
  
  <entry>
    <id>https://www.grizzlebit.com/links/2019/01-15-the-red-hand-files/</id>
    <published>2019-01-15T07:38:00+08:00</published>
    <updated>2023-04-13T20:33:32+08:00</updated>
    <author><name>Ray Grasso</name></author>
    
    <title>The Red Hand Files ↬</title>
    <content type="html" xml:base="https://www.grizzlebit.com/links/" xml:lang="en"><![CDATA[<div>
  <p>A look behind the curtain with Nick Cave.</p>

  <p>
    
    <a href="https://www.grizzlebit.com/links/2019/01-15-the-red-hand-files/">↬</a>
     ∙ Tagged in <a href="https://www.grizzlebit.com/tags/music/">Music</a>, <a href="https://www.grizzlebit.com/tags/writing/">Writing</a>.</p>
</div>
]]></content>
    <link rel="alternate" href="https://www.theredhandfiles.com/"></link>
    <link rel="related" href="https://www.grizzlebit.com/links/2019/01-15-the-red-hand-files/"></link>
    
  </entry>
  
</feed>
