<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/feeds/atom-style.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://snjnpark.vercel.app/</id>
    <title>snjnpark</title>
    <updated>2026-09-07T00:00:00.000Z</updated>
    <generator>Astro</generator>
    <author>
        <name>snjnpark</name>
        <uri>https://snjnpark.vercel.app/</uri>
    </author>
    <link rel="alternate" href="https://snjnpark.vercel.app/"/>
    <link rel="self" href="https://snjnpark.vercel.app/atom.xml"/>
    <subtitle>snjnpark의 생각과 경험을 기록하는 개인 블로그</subtitle>
    <rights>Copyright © 2026 snjnpark</rights>
    <entry>
        <title type="html"><![CDATA[Theme Guide]]></title>
        <id>https://snjnpark.vercel.app/theme-guide/</id>
        <link href="https://snjnpark.vercel.app/theme-guide/"/>
        <updated>2026-09-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Chiri is a minimal blog theme built with Astro, offering customization options while preserving its clean aesthetic. Basic Commands npm run new -- "&lt;title&gt;" -…]]></summary>
        <content type="html"><![CDATA[<p>Chiri is a minimal blog theme built with <a href="https://astro.build/">Astro</a>, offering customization options while preserving its clean aesthetic.</p>
<hr />
<h2 id="basic-commands">Basic Commands</h2>
<ul>
<li><code>npm run new -- "&lt;title&gt;"</code> - Create a new post (use <code>_title</code> for drafts)</li>
<li><code>npm run update-theme</code> - Fetch upstream theme changes for review</li>
</ul>
<h2 id="main-files-directories">Main Files &amp; Directories</h2>
<ul>
<li><code>src/content/about/about.md</code> - Edit the about section of the index page. Leave it empty if you don’t want any content.</li>
<li><code>src/content/posts/</code> - All blog posts are stored here</li>
<li><code>src/config.ts</code> - Configure main site info and settings</li>
</ul>
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>// Site Info</span></span>
<span class="line"><span>site</span><span>:</span><span> {</span></span>
<span class="line"><span>  website</span><span>:</span><span> 'https://chiri.the3ash.com/'</span><span>,</span><span> // Site domain</span></span>
<span class="line"><span>  title</span><span>:</span><span> 'CHIRI'</span><span>,</span><span> // Site title</span></span>
<span class="line"><span>  author</span><span>:</span><span> '3ASH'</span><span>,</span><span> // Author name</span></span>
<span class="line"><span>  description</span><span>:</span><span> 'Minimal blog built by Astro'</span><span>,</span><span> // Site description</span></span>
<span class="line"><span>  language</span><span>:</span><span> 'en-US'</span><span> // Default language</span></span>
<span class="line"><span>}</span><span>,</span></span></code></pre></div>
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>// General Settings</span></span>
<span class="line"><span>general</span><span>:</span><span> {</span></span>
<span class="line"><span>  contentWidth</span><span>:</span><span> '35rem'</span><span>,</span><span> // Content area width</span></span>
<span class="line"><span>  centeredLayout</span><span>:</span><span> true</span><span>,</span><span> // Use centered layout (false for left-aligned)</span></span>
<span class="line"><span>  themeToggle</span><span>:</span><span> false</span><span>,</span><span> // Show theme toggle button (uses system theme by default)</span></span>
<span class="line"><span>  postListDottedDivider</span><span>:</span><span> false</span><span>,</span><span> // Show dotted divider in post list</span></span>
<span class="line"><span>  footer</span><span>:</span><span> true</span><span>,</span><span> // Show footer</span></span>
<span class="line"><span>  fadeAnimation</span><span>:</span><span> true</span><span> // Enable fade animations</span></span>
<span class="line"><span>}</span><span>,</span></span></code></pre></div>
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>// Date Settings</span></span>
<span class="line"><span>date</span><span>:</span><span> {</span></span>
<span class="line"><span>  dateFormat</span><span>:</span><span> 'YYYY-MM-DD'</span><span>,</span><span> // Date format: YYYY-MM-DD, MM-DD-YYYY, DD-MM-YYYY, MONTH DAY YYYY, DAY MONTH YYYY</span></span>
<span class="line"><span>  dateSeparator</span><span>:</span><span> '.'</span><span>,</span><span> // Date separator: . - / (except for MONTH DAY YYYY and DAY MONTH YYYY)</span></span>
<span class="line"><span>  dateOnRight</span><span>:</span><span> true</span><span> // Date position in post list (true for right, false for left)</span></span>
<span class="line"><span>}</span><span>,</span></span></code></pre></div>
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>// Post Settings</span></span>
<span class="line"><span>post</span><span>:</span><span> {</span></span>
<span class="line"><span>  readingTime</span><span>:</span><span> false</span><span>,</span><span> // Show reading time in posts</span></span>
<span class="line"><span>  toc</span><span>:</span><span> true</span><span>,</span><span> // Show table of contents (when there is enough page width)</span></span>
<span class="line"><span>  imageViewer</span><span>:</span><span> true</span><span>,</span><span> // Enable image viewer</span></span>
<span class="line"><span>  copyCode</span><span>:</span><span> true</span><span>,</span><span> // Enable copy button in code blocks</span></span>
<span class="line"><span>  linkCard</span><span>:</span><span> true</span><span>,</span><span> // Enable link card</span></span>
<span class="line"><span>  katex</span><span>:</span><span> true</span><span> // Enable KaTeX math rendering</span></span>
<span class="line"><span>}</span></span></code></pre></div>
<h2 id="post-frontmatter">Post Frontmatter</h2>
<p>Only <code>title</code> and <code>pubDate</code> are required. The site language is Korean; use <code>language: 'en-US'</code> for English posts.</p>
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>---</span></span>
<span class="line"><span>title</span><span>:</span><span> 'Post Title'</span></span>
<span class="line"><span>pubDate</span><span>:</span><span> '2025-07-10'</span></span>
<span class="line"><span>language</span><span>:</span><span> 'en-US'</span></span>
<span class="line"><span>description</span><span>:</span><span> 'A short, specific summary of this post.'</span></span>
<span class="line"><span># updatedDate: '2026-09-07' # Only after a meaningful content update</span></span>
<span class="line"><span># image: '/og/posts/example.jpg'</span></span>
<span class="line"><span># imageAlt: 'Describe the representative image'</span></span>
<span class="line"><span>---</span></span></code></pre></div>
<p>Store social images inside <code>public/</code>, for example <code>public/og/posts/example.jpg</code>, and use the public URL <code>/og/posts/example.jpg</code> in frontmatter. PNG or JPEG at 1200 × 630 is a useful sharing format. WebP and GIF are also supported.</p>
<p>An omitted image, an invalid path, a filename with incorrect letter casing, or a broken image uses <code>/og/default.png</code>. Invalid custom images produce a build warning; a broken default image fails the build. Replace <code>public/og/default.png</code> to change the shared default card.</p>
<p>If <code>description</code> is empty, visible prose from the post supplies a short summary. JSON-LD, page descriptions, Open Graph tags, Twitter cards, and feeds use the same summary. A custom image should represent the article, because it also appears in the article’s structured data. The generic default card is used for sharing but is omitted from the article’s structured image data.</p>
<p>Set <code>updatedDate</code> only after changing the content. It must be on or after <code>pubDate</code> and updates the visible modification date, structured data, sitemap, and Atom feed without changing the original publication date. Builds alone never change content dates.</p>
<h2 id="syntax-highlighting">Syntax Highlighting</h2>
<p>You can configure the theme via <code>shikiConfig</code> in <code>astro.config.ts</code>.</p>
<p>More details: <a href="https://docs.astro.build/en/guides/syntax-highlighting/">Syntax Highlighting | Astro Docs</a></p>
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>import</span><span> { defineConfig } </span><span>from</span><span> 'astro/config'</span></span>
<span class="line"></span>
<span class="line"><span>export</span><span> default</span><span> defineConfig</span><span>({</span></span>
<span class="line"><span>  markdown</span><span>:</span><span> {</span></span>
<span class="line"><span>    shikiConfig</span><span>:</span><span> {</span></span>
<span class="line"><span>      themes</span><span>:</span><span> {</span></span>
<span class="line"><span>        light</span><span>:</span><span> 'github-light'</span><span>,</span></span>
<span class="line"><span>        dark</span><span>:</span><span> 'github-dark'</span></span>
<span class="line"><span>      }</span><span>,</span></span>
<span class="line"><span>      wrap</span><span>:</span><span> false</span></span>
<span class="line"><span>    }</span></span>
<span class="line"><span>  }</span></span>
<span class="line"><span>})</span></span></code></pre></div>
<hr />
<h2 id="preview-of-some-features">Preview of Some Features</h2>
<figure class="image-caption-wrapper"><img class="img-placeholder" alt="Theme Toggle" width="1920" height="856" src="https://snjnpark.vercel.app/_astro/theme-toggle.DhYx7uDy_EK8Rc.webp" /><figcaption class="img-caption">Theme Toggle</figcaption></figure>
<figure class="image-caption-wrapper"><img class="img-placeholder" alt="Dotted Divider" width="1920" height="1186" src="https://snjnpark.vercel.app/_astro/dotted-divider.DTl2jiIK_Z1LOcOK.webp" /><figcaption class="img-caption">Dotted Divider</figcaption></figure>
<figure class="image-caption-wrapper"><img class="img-placeholder" alt="Date on Left Side" width="1920" height="1186" src="https://snjnpark.vercel.app/_astro/date-on-left.DQ5QrrSs_bWMMb.webp" /><figcaption class="img-caption">Date on Left Side</figcaption></figure>
<figure class="image-caption-wrapper"><img class="img-placeholder" alt="Table of Contents" width="1920" height="968" src="https://snjnpark.vercel.app/_astro/toc.g76tf4SS_1bR4F1.webp" /><figcaption class="img-caption">Table of Contents</figcaption></figure>
<figure class="image-caption-wrapper"><img class="img-placeholder" alt="Reading Time" width="1920" height="856" src="https://snjnpark.vercel.app/_astro/reading-time.Dy4Htn7R_Z24w6ha.webp" /><figcaption class="img-caption">Reading Time</figcaption></figure>
<figure class="image-caption-wrapper"><img class="img-placeholder" alt="Copy Code" width="1920" height="912" src="https://snjnpark.vercel.app/_astro/copy-code.BIyRs-dV_ZMBV1H.webp" /><figcaption class="img-caption">Copy Code</figcaption></figure>]]></content>
        <published>2025-07-10T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Markdown Style Guide]]></title>
        <id>https://snjnpark.vercel.app/markdown-style-guide/</id>
        <link href="https://snjnpark.vercel.app/markdown-style-guide/"/>
        <updated>2025-06-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This theme does not define more levels of headlines. If needed, you can define them in src/styles/post.css. Paragraph Here's a practical example of a…]]></summary>
        <content type="html"><![CDATA[<p>This theme does not define more levels of headlines. If needed, you can define them in <code>src/styles/post.css</code>.</p>
<hr />
<h2 id="paragraph">Paragraph</h2>
<p>Here’s a practical example of a paragraph in Markdown. This text demonstrates how content flows naturally in a blog post.</p>
<p>You can use various formatting options like <strong>bold</strong>, <em>italic</em>, strikethrough, and <code>code</code> within your paragraphs.</p>
<h2 id="blockquotes">Blockquotes</h2>
<blockquote>
<p>Don’t communicate by sharing memory, share memory by communicating.<br />
— <cite>Rob Pike<sup><a href="https://snjnpark.vercel.app/markdown-style-guide/#user-content-fn-1" id="user-content-fnref-1">1</a></sup></cite></p>
</blockquote>
<h3 id="ordered-list">Ordered List</h3>
<ol>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
</ol>
<h3 id="unordered-list">Unordered List</h3>
<ul>
<li>Item
<ul>
<li>Subitem</li>
<li>Subitem</li>
</ul>
</li>
</ul>
<h2 id="task-list">Task List</h2>
<ul class="contains-task-list">
<li class="task-list-item">First item</li>
<li class="task-list-item">Second item</li>
<li class="task-list-item">Third item</li>
</ul>
<h2 id="image">Image</h2>
<p>To hide the caption, start it with an underscore <code>_</code> or leave the alt text empty.</p>
<figure class="image-caption-wrapper"><img class="img-placeholder" alt="HIKARI" width="1280" height="876" src="https://snjnpark.vercel.app/_astro/hikari.DgqjoZCx_GCviG.webp" /><figcaption class="img-caption">HIKARI</figcaption></figure>
<h2 id="tables">Tables</h2>




















<table><thead><tr><th>Style</th><th>Weight</th><th>Other</th></tr></thead><tbody><tr><td>Normal</td><td>Regular</td><td>Text</td></tr><tr><td><em>Italic</em></td><td><strong>Bold</strong></td><td><code>Code</code></td></tr></tbody></table>
<h2 id="code-blocks">Code Blocks</h2>
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>// Button.jsx</span></span>
<span class="line"></span>
<span class="line"><span>const</span><span> Button</span><span> =</span><span> ({ text</span><span>,</span><span> onClick }) </span><span>=&gt;</span><span> {</span></span>
<span class="line"><span>  const</span><span> [</span><span>count</span><span>,</span><span> setCount</span><span>] </span><span>=</span><span> useState</span><span>(</span><span>0</span><span>)</span></span>
<span class="line"></span>
<span class="line"><span>  const</span><span> handleClick</span><span> =</span><span> () </span><span>=&gt;</span><span> {</span></span>
<span class="line"><span>    setCount</span><span>(count </span><span>+</span><span> 1</span><span>)</span></span>
<span class="line"><span>    onClick?.</span><span>()</span></span>
<span class="line"><span>  }</span></span>
<span class="line"></span>
<span class="line"><span>  return</span><span> (</span></span>
<span class="line"><span>    &lt;</span><span>button</span><span> className</span><span>=</span><span>"btn"</span><span> onClick</span><span>=</span><span>{handleClick}&gt;</span></span>
<span class="line"><span>      {text} ({count})</span></span>
<span class="line"><span>    &lt;/</span><span>button</span><span>&gt;</span></span>
<span class="line"><span>  )</span></span>
<span class="line"><span>}</span></span></code></pre></div>
<h2 id="other-elements-sub-sup-abbr-kbd-mark">Other Elements — sub, sup, abbr, kbd, mark</h2>
<p>H<sub>2</sub>O</p>
<p>X<sup>n</sup> + Y<sup>n</sup> = Z<sup>n</sup></p>
<p><abbr>GIF</abbr> is a bitmap image format.</p>
<p>Press <kbd>CTRL</kbd> + <kbd>ALT</kbd> + <kbd>Delete</kbd> to end the session.</p>
<p>Most <mark>salamanders</mark> are nocturnal, and hunt for insects, worms, and other small creatures.</p>
<hr />
<section class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-1">
<p>The above quote is excerpted from Rob Pike’s <a href="https://www.youtube.com/watch?v=PAAkCSZUG1c">talk</a> during Gopherfest, November 18, 2015. <a href="https://snjnpark.vercel.app/markdown-style-guide/#user-content-fnref-1" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content>
        <published>2025-06-28T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Embedded Content]]></title>
        <id>https://snjnpark.vercel.app/embedded-content/</id>
        <link href="https://snjnpark.vercel.app/embedded-content/"/>
        <updated>2025-06-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Use these directives to embed media: Link Card Spotify YouTube BiliBili GitHub X Post NeoDB (CN Only)]]></summary>
        <content type="html"><![CDATA[<p>Use these directives to embed media:</p>
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>::link{url="https://xxxxx.xxx"}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>::spotify{url="https://open.spotify.com/type/xxxxx"}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>::youtube{url="https://www.youtube.com/watch?v=xxxxx"}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>::bilibili{url="https://www.bilibili.com/video/xxxxx"}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>::github{repo="username/repo"}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>::x{url="https://x.com/username/status/xxxxx"}</span></span>
<span class="line"><span></span></span>
<span class="line"><span>::neodb{url="https://neodb.social/category/xxxxx"}</span></span></code></pre></div>
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>🟡</span></span>
<span class="line"><span></span></span>
<span class="line"><span>When embedded content is still loading,</span></span>
<span class="line"><span>the table of contents positioning may be inaccurate.</span></span></code></pre></div>
<h2 id="link-card">Link Card</h2>

      <div class="link-card-wrapper">
        <a href="https://pitchfork.com/reviews/albums/ichiko-aoba-luminescent-creatures/" class="link-card has-image" target="_blank" rel="noopener noreferrer">
          <div class="link-card-content">
            <div class="link-card-url">
    
  <span>Pitchfork</span></div>
            <p class="link-card-title">Ichiko Aoba: Luminescent Creatures</p>
            <p class="link-card-description">Read Dash Lewis’ review of the album.</p>
          </div>
          <div class="link-card-image-outer">
                  <div class="link-card-image">
                    <img src="https://media.pitchfork.com/photos/6733b9ab4c93b602d071a661/16:9/w_1280,c_limit/Ichiko-Aoba-Luminescent-Creatures.jpeg" alt="Ichiko Aoba: Luminescent Creatures" />
                  </div>
                </div>
        </a>
      </div>
    
<div class="copy-code-wrapper"><pre class="copy-code-block"><code><span class="line"><span>🟡</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Link Card metadata is fetched automatically during `npm run dev` and `npm run build`.</span></span>
<span class="line"><span>Run `npm run update-link-metadata -- --force` to refresh existing entries.</span></span>
<span class="line"><span></span></span>
<span class="line"><span>-</span></span>
<span class="line"><span></span></span>
<span class="line"><span>To disable Link Card, set `linkCard: false` in `src/config.ts`.</span></span>
<span class="line"><span>Restart `npm run dev` for the change to take effect.</span></span></code></pre></div>
<h2 id="spotify">Spotify</h2>

    <figure>
      <a href="https://open.spotify.com/embed/track/41Y0ch6R3jzpJOZv6nhf9Z?si=6c82dbed65ab4853&amp;utm_source=generator">View embedded media</a>
    </figure>
    

    <figure>
      <a href="https://open.spotify.com/embed/album/1kBPEN3NIVwjdmIjjNk9vB?si=Lz29MvjwRnKX9y3dhxlbaQ&amp;utm_source=generator">View embedded media</a>
    </figure>
    
<h2 id="youtube">YouTube</h2>

    <figure>
      <a href="https://www.youtube.com/embed/GlhV-OKHecI">View embedded media</a>
    </figure>
    
<h2 id="bilibili">BiliBili</h2>

    <figure>
      <a href="https://player.bilibili.com/player.html?isOutside=true&amp;bvid=BV1Vm421W7pX&amp;p=1&amp;autoplay=0&amp;muted=0">View embedded media</a>
    </figure>
    
<h2 id="github">GitHub</h2>

    <a href="https://github.com/the3ash/astro-chiri" class="gc-container" target="_blank" rel="noopener noreferrer">
        <div class="gc-title-bar">
          <div class="gc-owner-avatar"></div>
          <span class="gc-repo-title">
            <span>the3ash<span class="gc-slash">/</span><strong>astro-chiri</strong></span>
          </span>
          
            
          
        </div>
        <p class="gc-repo-description">--</p>
        <div class="gc-info-bar">
          
            
          
          <span class="gc-stars-count">--</span>
          
            
          
          <span class="gc-forks-count">--</span>
          
            
          
          <span class="gc-license-info">--</span>
        </div>
      </a>
    
<h2 id="x-post">X Post</h2>

    <figure class="x-card">
      <blockquote class="twitter-tweet" id="x-card-71tlr1emv">
        <a href="https://twitter.com/DAVID_LYNCH/status/1174367510893752321"></a>
      </blockquote>
    </figure>
    
<h2 id="neodb-cn-only">NeoDB (CN Only)</h2>
<div class="neodb-card-container">
  <div class="neodb-card neodb-loading music">
  </div>
</div>
<div class="neodb-card-container">
  <div class="neodb-card neodb-loading other">
  </div>
</div>
<div class="neodb-card-container">
  <div class="neodb-card neodb-loading other">
  </div>
</div>
<div class="neodb-card-container">
  <div class="neodb-card neodb-loading other">
  </div>
</div>]]></content>
        <published>2025-06-06T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[KaTeX Examples]]></title>
        <id>https://snjnpark.vercel.app/katex-example/</id>
        <link href="https://snjnpark.vercel.app/katex-example/"/>
        <updated>2025-05-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This theme includes built-in KaTeX support for rendering mathematical expressions in your content. Examples Inline math: Block math: Ref KaTeX Documentation]]></summary>
        <content type="html"><![CDATA[<p>This theme includes built-in KaTeX support for rendering mathematical expressions in your content.</p>
<hr />
<h2 id="examples">Examples</h2>
<ul>
<li>Inline math: <span class="katex"><span class="katex-mathml">E=mc2E = mc^2</span><span class="katex-html"><span class="base"><span class="strut"></span><span class="mord mathnormal">E</span><span class="mspace"></span><span class="mrel">=</span><span class="mspace"></span></span><span class="base"><span class="strut"></span><span class="mord mathnormal">m</span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></li>
<li>Block math:</li>
</ul>
<span class="katex-display"><span class="katex"><span class="katex-mathml">∑i=1k+1i=(∑i=1ki)+(k+1)\begin{equation}
\sum_{i=1}^{k+1} i = \left(\sum_{i=1}^{k} i\right) + (k+1)
\end{equation}</span><span class="katex-html"><span class="base"><span class="strut"></span><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="mord"><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span><span class="pstrut"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span><span class="pstrut"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">k</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span><span class="mspace"></span><span class="mord mathnormal">i</span><span class="mspace"></span><span class="mrel">=</span><span class="mspace"></span><span class="minner"><span class="mopen delimcenter"><span class="delimsizing size4">(</span></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span><span class="pstrut"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span><span class="pstrut"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span><span class="mspace"></span><span class="mord mathnormal">i</span><span class="mclose delimcenter"><span class="delimsizing size4">)</span></span></span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mopen">(</span><span class="mord mathnormal">k</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span><span class="tag"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="eqn-num"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span></span>
<span class="katex-display"><span class="katex"><span class="katex-mathml">=k(k+1)2+k+1\begin{equation}
= \frac{k(k+1)}{2} + k + 1
\end{equation}</span><span class="katex-html"><span class="base"><span class="strut"></span><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="mord"><span class="mrel">=</span><span class="mspace"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="mord"><span class="mord">2</span></span></span><span><span class="pstrut"></span><span class="frac-line"></span></span><span><span class="pstrut"></span><span class="mord"><span class="mord mathnormal">k</span><span class="mopen">(</span><span class="mord mathnormal">k</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord mathnormal">k</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span><span class="tag"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="eqn-num"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span></span>
<span class="katex-display"><span class="katex"><span class="katex-mathml">=k(k+1)+2(k+1)2\begin{equation}
= \frac{k(k+1) + 2(k+1)}{2}
\end{equation}</span><span class="katex-html"><span class="base"><span class="strut"></span><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="mord"><span class="mrel">=</span><span class="mspace"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="mord"><span class="mord">2</span></span></span><span><span class="pstrut"></span><span class="frac-line"></span></span><span><span class="pstrut"></span><span class="mord"><span class="mord mathnormal">k</span><span class="mopen">(</span><span class="mord mathnormal">k</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">2</span><span class="mopen">(</span><span class="mord mathnormal">k</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span><span class="tag"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="eqn-num"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span></span>
<span class="katex-display"><span class="katex"><span class="katex-mathml">=(k+1)(k+2)2\begin{equation}
= \frac{(k+1)(k+2)}{2}
\end{equation}</span><span class="katex-html"><span class="base"><span class="strut"></span><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="mord"><span class="mrel">=</span><span class="mspace"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="mord"><span class="mord">2</span></span></span><span><span class="pstrut"></span><span class="frac-line"></span></span><span><span class="pstrut"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal">k</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">1</span><span class="mclose">)</span><span class="mopen">(</span><span class="mord mathnormal">k</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">2</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span><span class="tag"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="eqn-num"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span></span>
<span class="katex-display"><span class="katex"><span class="katex-mathml">=(k+1)((k+1)+1)2\begin{equation}
= \frac{(k+1)((k+1)+1)}{2}
\end{equation}</span><span class="katex-html"><span class="base"><span class="strut"></span><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="mord"><span class="mrel">=</span><span class="mspace"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="mord"><span class="mord">2</span></span></span><span><span class="pstrut"></span><span class="frac-line"></span></span><span><span class="pstrut"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal">k</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">1</span><span class="mclose">)</span><span class="mopen">((</span><span class="mord mathnormal">k</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace"></span><span class="mbin">+</span><span class="mspace"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span><span class="tag"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span><span class="pstrut"></span><span class="eqn-num"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist"><span></span></span></span></span></span></span></span></span>
<hr />
<h2 id="ref">Ref</h2>
<ul>
<li><a href="https://katex.org/docs/supported.html">KaTeX Documentation</a></li>
</ul>]]></content>
        <published>2025-05-19T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using MDX]]></title>
        <id>https://snjnpark.vercel.app/using-mdx/</id>
        <link href="https://snjnpark.vercel.app/using-mdx/"/>
        <updated>2025-05-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MDX combines Markdown with embedded JavaScript and JSX, making it easy to build interactive content. Below are some examples. Callout Button Tag Ref MDX…]]></summary>
        <content type="html"><![CDATA[<p>MDX combines Markdown with embedded JavaScript and JSX, making it easy to build interactive content. Below are some examples.</p>
<hr />
<h2 id="callout">Callout</h2>
<div class="callout-card"> <div class="callout-container"> <div class="callout"> <span class="callout-icon">🙊</span> <span class="callout-text">Ape shall never kill ape.</span> </div> </div> </div>
<h2 id="button">Button</h2>
<div class="counter-card"> <div class="counter-container"> 
Click me (<span class="counter-value">0</span>)
 </div> </div> 
<h2 id="tag">Tag</h2>
<div class="tag-card"> <div class="tag-container"> <div class="tag-component">      <div class="input-state">            </div> <div class="tag-display"> <span class="tag-text"></span>      </div> </div> </div> </div> 
<hr />
<h2 id="ref">Ref</h2>
<ul>
<li><a href="https://mdxjs.com/docs/what-is-mdx">MDX Syntax Documentation</a></li>
<li><a href="https://docs.astro.build/en/guides/markdown-content/#markdown-and-mdx-pages">Astro Usage Documentation</a></li>
</ul>]]></content>
        <published>2025-05-12T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[The TR-808 Story]]></title>
        <id>https://snjnpark.vercel.app/the-tr-808-story/</id>
        <link href="https://snjnpark.vercel.app/the-tr-808-story/"/>
        <updated>2025-05-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[How the Roland TR-808 drum machine shaped hip-hop, electronic music, and popular culture.]]></summary>
        <content type="html"><![CDATA[<img class="img-placeholder" alt="_tr-808" width="1600" height="1067" src="https://snjnpark.vercel.app/_astro/tr-808.C9Z4fuk9_Z1XgRC0.webp" />
<p>The Roland TR-808 Rhythm Composer, often simply called the “808,” is one of the most influential electronic instruments ever created. Despite its initial commercial failure, this drum machine went on to shape entire genres of music and become a cultural icon. This is the story of how a machine designed to replace drummers ended up revolutionizing music production.</p>
<h2 id="the-birth-of-the-808">The Birth of the 808</h2>
<p>In the late 1970s, Roland Corporation was looking to create an affordable drum machine that could compete with the expensive Linn LM-1, which was the first drum machine to use digital samples. The company’s engineers, led by <strong>Ikutaro Kakehashi</strong>, set out to create something different—a machine that would use <strong>analog synthesis</strong> to generate drum sounds rather than digital samples.</p>
<p>The development team faced several challenges:</p>
<ol>
<li><strong>Cost constraints</strong> - The machine needed to be affordable for home musicians</li>
<li><strong>Sound design</strong> - Creating realistic drum sounds using only analog circuits</li>
<li><strong>User interface</strong> - Making it intuitive for musicians to program rhythms</li>
</ol>
<blockquote>
<p>“We wanted to create something that would make drummers obsolete, but instead we created something that made everyone want to be a drummer.” — Ikutaro Kakehashi</p>
</blockquote>
<h2 id="the-failed-launch">The “Failed” Launch</h2>
<p>When the TR-808 was released in 1980, it was met with <strong>disappointing sales</strong>. The machine cost $1,195 (approximately $4,000 in today’s dollars) and was criticized for its “unrealistic” drum sounds. Professional studios preferred the more expensive Linn LM-1, which used actual drum samples.</p>
<p>The 808’s analog sounds were considered too electronic and artificial:</p>
<ul>
<li>The kick drum was too boomy and lacked the punch of real drums</li>
<li>The snare had a distinctive “clap” sound that sounded nothing like a real snare</li>
<li>The hi-hats were metallic and harsh</li>
<li>The toms had a characteristic “boing” sound</li>
</ul>
<p>Roland discontinued the TR-808 in 1983 after selling only about <strong>12,000 units</strong>, considering it a commercial failure.</p>
<h2 id="the-hip-hop-revolution">The Hip-Hop Revolution</h2>
<p>The TR-808’s fortunes changed dramatically when <strong>hip-hop producers</strong> discovered its unique sound. In the early 1980s, young producers in New York, particularly in the Bronx, began experimenting with the machine.</p>
<p>Key early adopters included <strong>Afrika Bambaataa</strong> who used the 808 on “Planet Rock” (1982), <strong>Marley Marl</strong> who pioneered the use of 808 kicks in hip-hop, <strong>Rick Rubin</strong> who incorporated 808 sounds in early Def Jam recordings, and <strong>The Bomb Squad</strong> who used 808s extensively in Public Enemy’s production.</p>
<p>The 808’s distinctive kick drum became the foundation of hip-hop’s rhythmic backbone. Its deep, resonant bass sound could shake entire neighborhoods when played through powerful sound systems.</p>
<h2 id="the-miami-bass-phenomenon">The Miami Bass Phenomenon</h2>
<p>In the mid-1980s, the TR-808 found another home in <strong>Miami</strong>, where it became the centerpiece of a new genre called <strong>Miami Bass</strong> or <strong>Booty Bass</strong>. Producers like <strong>2 Live Crew</strong> made the 808 kick drum the star of their tracks, <strong>DJ Magic Mike</strong> created entire albums built around 808 patterns, and <strong>Luke Skyywalker</strong> used 808s to create the signature Miami sound.</p>
<p>The 808’s ability to produce extremely low frequencies made it perfect for the car audio culture that was emerging in Miami, where bass-heavy music became a status symbol.</p>
<h2 id="electronic-music-and-dance">Electronic Music and Dance</h2>
<p>The TR-808’s influence extended far beyond hip-hop. In the late 1980s and early 1990s, it became essential in house music and techno. <strong>Frankie Knuckles</strong> and <strong>Marshall Jefferson</strong> used 808s in early Chicago house, while the machine’s hi-hats and claps became signature sounds of house music. Its programmable sequencer allowed for complex rhythmic patterns.</p>
<p>In techno music, <strong>Juan Atkins</strong>, <strong>Derrick May</strong>, and <strong>Kevin Saunderson</strong> (the Belleville Three) incorporated 808s into Detroit techno. The machine’s futuristic sounds fit perfectly with techno’s robotic aesthetic, and its affordability made it accessible to bedroom producers.</p>
<h2 id="the-808-in-modern-music">The 808 in Modern Music</h2>
<p>Even today, the TR-808 continues to influence music production through software emulations and hardware reissues. <strong>Roland Cloud</strong> offers the official software version of the 808, <strong>Native Instruments</strong> includes 808 samples in their libraries, and <strong>Ableton Live</strong> features 808-inspired drum racks.</p>
<p>Hardware reissues include the <strong>Roland TR-08</strong> boutique series reissue, the <strong>Roland TR-8S</strong> modern drum machine with 808 sounds, and the <strong>Behringer RD-8</strong> affordable clone of the original.</p>
<h2 id="cultural-impact">Cultural Impact</h2>
<p>The TR-808 has transcended its role as a musical instrument to become a <strong>cultural symbol</strong>. It has influenced fashion with 808-inspired clothing and accessories, art with visual artists incorporating 808 imagery in their work, film through documentaries and movies about the machine’s impact, and literature with books and articles celebrating its legacy.</p>
<blockquote>
<p>“The 808 didn’t just change music—it changed culture. It gave a voice to communities that didn’t have access to expensive studio equipment.” — Questlove</p>
</blockquote>
<h2 id="the-enduring-legacy">The Enduring Legacy</h2>
<p>The Roland TR-808’s story is a perfect example of how <strong>failure can lead to innovation</strong>. What was initially considered a commercial flop became one of the most important musical instruments of the 20th century.</p>
<p>Key lessons from the 808 story include embracing imperfection (the 808’s “flaws” became its greatest strengths), understanding that accessibility matters (affordable tools can democratize music creation), recognizing that community adoption is crucial (users often find creative applications designers never imagined), and appreciating that timeless design remains relevant for decades.</p>
<p>The TR-808’s influence continues to grow, proving that sometimes the most revolutionary innovations come from unexpected places. From its humble beginnings as a “failed” drum machine to its status as a cultural icon, the 808 has truly earned its place in music history.</p>
<hr />
<p><em>The TR-808 may have been discontinued in 1983, but its beat goes on, inspiring new generations of musicians and producers to create the music of tomorrow.</em></p>]]></content>
        <published>2025-05-10T00:00:00.000Z</published>
    </entry>
</feed>