<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Vinay Pillai</title>
    <description>The latest articles on Forem by Vinay Pillai (@vinaypillai).</description>
    <link>https://forem.com/vinaypillai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F389055%2F6da03158-a21f-4fd6-9f02-4ed68b28ea98.jpeg</url>
      <title>Forem: Vinay Pillai</title>
      <link>https://forem.com/vinaypillai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vinaypillai"/>
    <language>en</language>
    <item>
      <title>An LCH Color library and theme designer</title>
      <dc:creator>Vinay Pillai</dc:creator>
      <pubDate>Sat, 30 May 2020 17:41:20 +0000</pubDate>
      <link>https://forem.com/vinaypillai/an-lch-color-library-and-theme-designer-1kil</link>
      <guid>https://forem.com/vinaypillai/an-lch-color-library-and-theme-designer-1kil</guid>
      <description>&lt;p&gt;So if you've seen &lt;a href="https://dev.to/vinaypillai/lch-colors-and-why-you-should-be-using-them-plus-a-package-to-help-bbc"&gt;my post&lt;/a&gt; on the LCH color space, you know that making the switch to LCH colors can help resolve some common design issues stemming from vanilla RGB, HEX, and HSL color models (basically LCH's &lt;a href="https://programmingdesignsystems.com/color/perceptually-uniform-color-spaces/" rel="noopener noreferrer"&gt;perceptual uniformity&lt;/a&gt; makes it easier to select colors that have the same visual feel). Thanks to some iterative improvements, the color library I was working on then now has support for a few more colorspaces, including two flavors of LCH. &lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vinaypillai" rel="noopener noreferrer"&gt;
        vinaypillai
      &lt;/a&gt; / &lt;a href="https://github.com/vinaypillai/ac-colors" rel="noopener noreferrer"&gt;
        ac-colors
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ac-colors is a reactive JavaScript color library that can freely convert between RGB, HSL, HEX, XYZ, LAB, LCHab, LUV, and LCHuv, as well as handle random color generation and contrast ratio calculation.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ac-colors&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.npmjs.com/package/ac-colors" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/41f4f91381d70288335538c1c6508034f970c82695ce92c6b81096afeec8fdb6/68747470733a2f2f6e6f6465692e636f2f6e706d2f61632d636f6c6f72732e706e673f646f776e6c6f6164733d7472756526646f776e6c6f616452616e6b3d747275652673746172733d74727565" alt="NPM"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b5d53e97211f290f6eb72b235fc82aeffdcc398fbb9c4b2b240b5105d1ada408/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f76696e617970696c6c61692f61632d636f6c6f7273"&gt;&lt;img src="https://camo.githubusercontent.com/b5d53e97211f290f6eb72b235fc82aeffdcc398fbb9c4b2b240b5105d1ada408/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f76696e617970696c6c61692f61632d636f6c6f7273" alt="package release version badge"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2854676198d9f016e98307671acd8f7a586667d9a69330f93502526aa9190a99/68747470733a2f2f696d672e736869656c64732e696f2f62756e646c6570686f6269612f6d696e2f61632d636f6c6f7273"&gt;&lt;img src="https://camo.githubusercontent.com/2854676198d9f016e98307671acd8f7a586667d9a69330f93502526aa9190a99/68747470733a2f2f696d672e736869656c64732e696f2f62756e646c6570686f6269612f6d696e2f61632d636f6c6f7273" alt="minified size badge"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/f401ac6527e6373b7cf2f2693ba19ff988a72ae12e7362486d19cc9dd266a8c9/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f636f6d2f76696e617970696c6c61692f61632d636f6c6f7273"&gt;&lt;img src="https://camo.githubusercontent.com/f401ac6527e6373b7cf2f2693ba19ff988a72ae12e7362486d19cc9dd266a8c9/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f636f6d2f76696e617970696c6c61692f61632d636f6c6f7273" alt="travis ci status badge"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c1750d7842b497e33943d9bada04a42c70d6e5728f5e1eaf5baee83c566b2369/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f76696e617970696c6c61692f61632d636f6c6f72732f62616467652e7376673f6272616e63683d6d6173746572"&gt;&lt;img src="https://camo.githubusercontent.com/c1750d7842b497e33943d9bada04a42c70d6e5728f5e1eaf5baee83c566b2369/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f76696e617970696c6c61692f61632d636f6c6f72732f62616467652e7376673f6272616e63683d6d6173746572" alt="Coveralls coverage badge"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/51886f8de3459c7fefaa11129843f9d7f50589e498fe01193428170dd8b450b9/68747470733a2f2f696d672e736869656c64732e696f2f6c6962726172696573696f2f72656c656173652f6e706d2f61632d636f6c6f7273"&gt;&lt;img src="https://camo.githubusercontent.com/51886f8de3459c7fefaa11129843f9d7f50589e498fe01193428170dd8b450b9/68747470733a2f2f696d672e736869656c64732e696f2f6c6962726172696573696f2f72656c656173652f6e706d2f61632d636f6c6f7273" alt="dependency status badge"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/f3fadf528266c1af32b56ae7fdf893faf036e0c0d3bf52c46f23aed2e5df05a9/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f6c2f61632d636f6c6f7273"&gt;&lt;img src="https://camo.githubusercontent.com/f3fadf528266c1af32b56ae7fdf893faf036e0c0d3bf52c46f23aed2e5df05a9/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f6c2f61632d636f6c6f7273" alt="mit license badge"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ac-colors is a reactive JavaScript color library that can freely convert between sRGB, HSL, HEX, XYZ, LAB, LCHab, LUV, and LCHuv, as well as handle random color generation and contrast ratio calculation. A live color picker running on ac-colors can be found at &lt;a href="http://colors.acutecomponents.com/" rel="nofollow noopener noreferrer"&gt;http://colors.acutecomponents.com/&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/vinaypillai/ac-colors#Installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#nodejs" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#browser" rel="noopener noreferrer"&gt;Browser&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vinaypillai/ac-colors#making-a-color-object" rel="noopener noreferrer"&gt;Making a Color object&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#color" rel="noopener noreferrer"&gt;color&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#type" rel="noopener noreferrer"&gt;type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#precision" rel="noopener noreferrer"&gt;precision&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#capitalize" rel="noopener noreferrer"&gt;capitalize&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#color-object-reactivity" rel="noopener noreferrer"&gt;Color object reactivity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vinaypillai/ac-colors#color-class-api" rel="noopener noreferrer"&gt;Color class API&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/vinaypillai/ac-colors#properties" rel="noopener noreferrer"&gt;Object properties&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#rgb" rel="noopener noreferrer"&gt;rgb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#rgbString" rel="noopener noreferrer"&gt;rgbString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#hex" rel="noopener noreferrer"&gt;hex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#hexString" rel="noopener noreferrer"&gt;hexString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#hsl" rel="noopener noreferrer"&gt;hsl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#hslString" rel="noopener noreferrer"&gt;hslString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#xyz" rel="noopener noreferrer"&gt;xyz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#xyzString" rel="noopener noreferrer"&gt;xyzString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#lab" rel="noopener noreferrer"&gt;lab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#labString" rel="noopener noreferrer"&gt;labString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#lchab" rel="noopener noreferrer"&gt;lchab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#lchabString" rel="noopener noreferrer"&gt;lchabString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#luv" rel="noopener noreferrer"&gt;luv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#luvString" rel="noopener noreferrer"&gt;luvString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#lchuv" rel="noopener noreferrer"&gt;lchuv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#lchuvString" rel="noopener noreferrer"&gt;lchuvString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#precision-1" rel="noopener noreferrer"&gt;precision&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#capitalize-1" rel="noopener noreferrer"&gt;capitalize&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vinaypillai/ac-colors#static-methods" rel="noopener noreferrer"&gt;Static methods&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorrgbtohsl" rel="noopener noreferrer"&gt;Color.rgbToHsl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorhsltorgb" rel="noopener noreferrer"&gt;Color.hslToRgb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorrgbtohex" rel="noopener noreferrer"&gt;Color.rgbToHex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorhextorgb" rel="noopener noreferrer"&gt;Color.hexToRgb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorrgbtoxyz" rel="noopener noreferrer"&gt;Color.rgbToXyz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorxyztorgb" rel="noopener noreferrer"&gt;Color.xyzToRgb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorxyztolab" rel="noopener noreferrer"&gt;Color.xyzToLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorlabtoxyz" rel="noopener noreferrer"&gt;Color.labToXyz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorlabtolchab" rel="noopener noreferrer"&gt;Color.labToLCHab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorlchabtolab" rel="noopener noreferrer"&gt;Color.lchABToLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorxyztoluv" rel="noopener noreferrer"&gt;Color.xyzToLuv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorluvtoxyz" rel="noopener noreferrer"&gt;Color.luvToXyz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorluvtolchuv" rel="noopener noreferrer"&gt;Color.luvToLCHuv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorlchuvtoluv" rel="noopener noreferrer"&gt;Color.lchUVToLuv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorluminance" rel="noopener noreferrer"&gt;Color.luminance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorrandom" rel="noopener noreferrer"&gt;Color.random&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorrandomfromstring" rel="noopener noreferrer"&gt;Color.randomFromString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorrandomoftype" rel="noopener noreferrer"&gt;Color.randomOfType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorrandomoftypeformatted" rel="noopener noreferrer"&gt;Color.randomOfTypeFormatted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorcontrasttextcolor" rel="noopener noreferrer"&gt;Color.contrastTextColor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorcontrastratio" rel="noopener noreferrer"&gt;Color.contrastRatio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#colorblend" rel="noopener noreferrer"&gt;Color.blend&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#acknowledgements" rel="noopener noreferrer"&gt;Acknowledgements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinaypillai/ac-colors#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Node.js&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install --save ac-colors&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Browser&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Download&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;Download the minified transpiled &lt;a href="https://raw.githubusercontent.com/vinaypillai/ac-colors/master/dist/ac-colors.min.js" rel="nofollow noopener noreferrer"&gt;ac-colors.min.js&lt;/a&gt; and include it in a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag&lt;/p&gt;
&lt;div class="highlight highlight-text-html-basic notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-kos"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;script&lt;/span&gt; &lt;span class="pl-c1"&gt;src&lt;/span&gt;="&lt;span class="pl-s"&gt;ac-colors.min.js&lt;/span&gt;"&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="pl-ent"&gt;script&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;CDN&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;Alternatively add this &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag to your body to load…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vinaypillai/ac-colors" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I've also recently been working on an &lt;a href="https://colors.acutecomponents.com/" rel="noopener noreferrer"&gt;LCH theme designer&lt;/a&gt;, which I've found to be quite useful when choosing colors for UI components on some of the projects I'm working on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fikgoloz11e7uavebwfny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fikgoloz11e7uavebwfny.png" alt="Acute Colors theme designer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It defaults to LCHuv mode, featuring colors with independent incremental changes to their hue, chroma/saturation, and luminance/lightness, which is great for things like selecting a color for a button's disabled state, or choosing a shade of red for an error notification that matches look of your other notifications. Changing a color's component parts independently (such as the its luminance values in LCH mode or red values in RGB mode) makes exploring the niches of different color models pretty easy.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>design</category>
    </item>
    <item>
      <title>Part 2: The Anatomy of a Tag</title>
      <dc:creator>Vinay Pillai</dc:creator>
      <pubDate>Tue, 26 May 2020 16:50:38 +0000</pubDate>
      <link>https://forem.com/vinaypillai/part-2-the-anatomy-of-a-tag-4hne</link>
      <guid>https://forem.com/vinaypillai/part-2-the-anatomy-of-a-tag-4hne</guid>
      <description>&lt;p&gt;Last time on &lt;em&gt;The Anatomy of Web Design&lt;/em&gt;, we discussed the idea of tags in HTML. There I stated that tags usually come in opening tag-closing tag pairs, which mark the beginning and end of an element. For instance, these opening and closing &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tags mark the start and end of a paragraph:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
    I’m a paragraph, at least in name if nothing else. 
    See, I have more than one sentence.
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;However, some elements only have a start tag. These &lt;a href="https://html.spec.whatwg.org/multipage/syntax.html#void-elements"&gt;void elements&lt;/a&gt; don’t directly have any content inside them, but can be used to embed media, add metadata, provide formatting cues, or link other files to the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  The &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag
&lt;/h2&gt;

&lt;p&gt;Let’s take a look at one of the more common void elements: the image tag &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Well that was a bit anti-climactic. The thing is, the &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag can’t do much in its current form. It needs additional data in order to work properly, for instance the source url for the image or some alternative text to show if the image can’t be loaded. The way we specify that data is through…&lt;/p&gt;

&lt;h3&gt;
  
  
  Attributes
&lt;/h3&gt;

&lt;p&gt;Attributes provide a way to add specific characteristics to an element. They are listed as key-value pairs in an element’s starting tag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;tag&lt;/span&gt; &lt;span class="na"&gt;attribute1=&lt;/span&gt;&lt;span class="s"&gt;"value1"&lt;/span&gt; &lt;span class="na"&gt;attribute2=&lt;/span&gt;&lt;span class="s"&gt;"value2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/tag&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Keep in mind some of the formatting rules attributes require:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Attributes are added after the element's name in the start tag.&lt;/li&gt;
&lt;li&gt;The attribute and its value are separated by an '=' sign.&lt;/li&gt;
&lt;li&gt; Although the name of the attribute should not be placed in quotes, its value should be.&lt;/li&gt;
&lt;li&gt; An element can have more than one attribute, but they must be separated by spaces.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So now that we have a rough understanding of what attributes look like, let’s try to add some to our &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag to load an image. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JXquV9eP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/ZHDSWqx9o02C-qEFmfhxzaAgBTX2SSrkaWccocBBuZHF8W0X1OeWUnAuTi_wl2vFdakDaIBY7TOUcg8QNvm_mxIf3njVECPPsoCL0qZRJ4InDiDLy6EfUUx60ipP1C6KGAx--qWP" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JXquV9eP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/ZHDSWqx9o02C-qEFmfhxzaAgBTX2SSrkaWccocBBuZHF8W0X1OeWUnAuTi_wl2vFdakDaIBY7TOUcg8QNvm_mxIf3njVECPPsoCL0qZRJ4InDiDLy6EfUUx60ipP1C6KGAx--qWP" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.publicdomainpictures.net/pictures/90000/velka/planet-venus.jpg"&lt;/span&gt; 
&lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"The planet Venus"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag requires two attributes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;src&lt;/code&gt; - The source url of the image&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;alt&lt;/code&gt; - Alternate text to display if the image fails to load, and to better meet &lt;a href="https://www.w3.org/WAI/standards-guidelines/wcag/"&gt;web accessibility standards&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since we now have a fully functioning image tag, lets try adding it to our page from last time&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;I'm a paragraph.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.publicdomainpictures.net/pictures/90000/velka/planet-venus.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"The planet Venus"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--41gK-ng6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh4.googleusercontent.com/LHsrkNU4RFyc6-b5PqYJ3KptTVVKkd74R0CqUSVHc3OfBbnsShaVrVwDtgdWPOPPRd0f63fWI_h42UN3XuIuJVGdxsL1cQytjQRsFBeIQb0hxpdmg7YnjXU54g8lzhMD3Wq1t0DI" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--41gK-ng6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh4.googleusercontent.com/LHsrkNU4RFyc6-b5PqYJ3KptTVVKkd74R0CqUSVHc3OfBbnsShaVrVwDtgdWPOPPRd0f63fWI_h42UN3XuIuJVGdxsL1cQytjQRsFBeIQb0hxpdmg7YnjXU54g8lzhMD3Wq1t0DI" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you save your .html file and open it in the browser, you should see something like this. As you can see, I clearly underestimated the size of this image, but that’s not a problem we’re going to concern ourselves with at the moment. For now, try experimenting with image tags -- see what happens if you break the url, for instance -- and next time we’ll talk about headings in HTML.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>html</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Part 1: The Anatomy of HTML</title>
      <dc:creator>Vinay Pillai</dc:creator>
      <pubDate>Sat, 23 May 2020 03:07:18 +0000</pubDate>
      <link>https://forem.com/vinaypillai/part-1-the-anatomy-of-html-ep8</link>
      <guid>https://forem.com/vinaypillai/part-1-the-anatomy-of-html-ep8</guid>
      <description>&lt;p&gt;Having spent the better part of the past few days answering questions about HTML, CSS, and JavaScript, I figured I’d write a series to help a beginner progress from knowing nothing about web development (and/or coding in general), to being able to kinda sorta make a website, to having a strong foundational understanding of what goes into building the front and backend of a website and a somewhat decent grasp of what the current landscape of web technologies looks like. But anyways, that’s enough of an intro, let's get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is HTML?
&lt;/h2&gt;

&lt;p&gt;In the grand scale of things, HTML serves as the structure for your website. HTML stands for HyperText Markup Language, so let’s try to break down what that means exactly, starting with “HyperText.” It’s text with a link. That’s all it is. Then we have the second part: “Markup Language.” In order for your browser to know how to structure the content on your page, you have to annotate it with tags, which raises the question...&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a tag?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1xb9CsGc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/ON87LCCRR95aJVV99gFBIgef84P7pzTI9ZFJnVkhcb7JLPVzcynaYO__7JvA1Dw9Ca23bAD2Sv0wIVKy4Qczn3bqiI-v8N7_fwUrsY5RixHAG7VQ5kAsRGGuaeNhFkIOFzTWhDcy" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1xb9CsGc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh6.googleusercontent.com/ON87LCCRR95aJVV99gFBIgef84P7pzTI9ZFJnVkhcb7JLPVzcynaYO__7JvA1Dw9Ca23bAD2Sv0wIVKy4Qczn3bqiI-v8N7_fwUrsY5RixHAG7VQ5kAsRGGuaeNhFkIOFzTWhDcy" alt=""&gt;&lt;/a&gt;&lt;br&gt;
Tags in HTML usually come in pairs: you have opening tags and you have closing tags. Opening tags consist of a “&amp;lt;”, a word, and then a “&amp;gt;”. Closing tags differ slightly, as they have a “/” before the word (eg. “&amp;lt;/section&amp;gt;” ). There are, of course, exceptions to this rule but that's a topic for a later time. Anything in between a tag’s opening and closing is considered to be inside that tag. Tags can be nested inside each other, for instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;outer&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;inner&amp;gt;&lt;/span&gt;I’m a inner tag&lt;span class="nt"&gt;&amp;lt;/inner&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/outer&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Quick note: It is generally a best practice to indent every time you nest a tag inside another tag.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Making your first .html file
&lt;/h2&gt;

&lt;p&gt;Though it might be hard to believe, your HTML code typically goes in a .html file. In order to make a .html file, you’re going to need a text editor of some sort. My personal preference is &lt;a href="https://www.sublimetext.com/"&gt;Sublime Text&lt;/a&gt;, but you can use Notepad or TextEdit or Notepad++ or MS Paint, it doesn't matter.&lt;/p&gt;

&lt;p&gt;Once you have that set up, start off by making a new file and saving it as &amp;lt;filename&amp;gt;.html (pick a filename). After you have it saved, open it in the browser. If you’re using Sublime Text, that’s as easy as right-clicking and selecting “Open in Browser,” but if not then locate it in your files and open with your browser of choice. Technically at this stage you have accomplished the objective but let’s try to do a bit more.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Quick note: Typically you want to name your html files index.html, since that is the default directory file loaded by a web server.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Document Type Declaration
&lt;/h3&gt;

&lt;p&gt;Now the first line of pretty much every HTML file you write is going to be the same, and it’s not a tag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This line tells the browser what kind of data to expect, in this case html, and ensures that it follows the proper standards when rendering your content.&lt;/p&gt;

&lt;h3&gt;
  
  
  The &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; tag
&lt;/h3&gt;

&lt;p&gt;The first actual tag for your .html file is...the html tag. This tag acts as the root element, so all your other tags will be nested inside it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  The &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tags
&lt;/h3&gt;

&lt;p&gt;Now inside your html tag we need to add two tags: the head tag and the body tag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The head tag is used to store information about the page, such as the page’s title, additional metadata, links to supporting files, etc. For now we’re not going to worry about that. What we do care about is the body tag, where all our content is going to go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding some text
&lt;/h3&gt;

&lt;p&gt;Lastly, let’s add some text to our web page. The tag we’re going to use to wrap our text is the &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tag, for paragraphs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;I’m a paragraph.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;And now, we’re done. Once you save, you can reopen your .html file in the browser, or just try refreshing the page, and you should see some text. Hopefully you guys find this introduction to be moderately useful, and next time we’ll get started with some more information about tags.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>html</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>LCH colors and why you should be using them (plus a package to help)</title>
      <dc:creator>Vinay Pillai</dc:creator>
      <pubDate>Tue, 19 May 2020 08:47:58 +0000</pubDate>
      <link>https://forem.com/vinaypillai/lch-colors-and-why-you-should-be-using-them-plus-a-package-to-help-bbc</link>
      <guid>https://forem.com/vinaypillai/lch-colors-and-why-you-should-be-using-them-plus-a-package-to-help-bbc</guid>
      <description>&lt;p&gt;Recently a friend had asked me to teach him some of the basics of web design. As we started progressing into styling different elements with CSS, he experienced firsthand the shortcomings of using the HSL (Hue, Saturation, Lightness) color picker in Chrome’s Inspect Elements. Even though he was only changing the hue, the colors he was getting ended up being much lighter or darker than what he started with. Thanks to some neat (or perhaps unfortunate) color science, the HSL color space model is not perceptually accurate, which can lead to problems designing color themes. Luckily, there’s a solution…&lt;/p&gt;

&lt;h2&gt;
  
  
  What is LCH
&lt;/h2&gt;

&lt;p&gt;To put it (relatively) simply LCH (Luminance, Chroma, Hue) is a color space that is designed to be perceptually accurate. This means that by only changing, for instance, a color’s luminance, you will not impact its saturation or its tone. Now onto an example.&lt;/p&gt;

&lt;p&gt;Let’s pretend that you’ve created a submit button whose background color is the always classic green ‘#00c45c’. Some time passes and you decide you don’t want a green submit button, you want an orange one. So you convert to hsl, and toggle the hue until you have the tone that you want. Unfortunately, things have hit a snag: your new orange is not only visually much darker than your old button was, but also a bit desaturated. What can you do?&lt;/p&gt;

&lt;p&gt;One way to solve the problem is to start with our original shade of green. If we convert that to LCH, then it's easy to just toggle hue values until you get an orange that you like, all without losing the same visual pop you had from your old button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qt74S9Se--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh4.googleusercontent.com/h8fLHC5vcXzKQbmFcGVVx8GL87vAboztDbFPxH8qSLWwjKHc5H-NVIhF72C0mkWT0nIec1VaNxniKljKAmQ3lIm3lV9kKnru5Puk_HlthjIzq2YtQJ2tJzomWFelcLgLq6usmljr" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qt74S9Se--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh4.googleusercontent.com/h8fLHC5vcXzKQbmFcGVVx8GL87vAboztDbFPxH8qSLWwjKHc5H-NVIhF72C0mkWT0nIec1VaNxniKljKAmQ3lIm3lV9kKnru5Puk_HlthjIzq2YtQJ2tJzomWFelcLgLq6usmljr" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another solution is to start with our new shade of orange and work backwards. Once we convert it to LCH, it’s easy to see that our luminance (lightness), and chroma (saturation) are much lower than where we started. By adjusting those two values and leaving the hue the same, we end up with the same result as before.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JtVSJ_Di--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh5.googleusercontent.com/PnKrU93Bt0bnDMzAKaP7qMISClVlSKOnkhmYbgUsJm58z80kLkIMAhWY1HMdk9vNcVMWvbWqI6N4HoklSK6xBT6tUBryLOSm3Pti3bQjjTVYyypPBhcVZhO23h_puXR7astmpQz6" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JtVSJ_Di--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh5.googleusercontent.com/PnKrU93Bt0bnDMzAKaP7qMISClVlSKOnkhmYbgUsJm58z80kLkIMAhWY1HMdk9vNcVMWvbWqI6N4HoklSK6xBT6tUBryLOSm3Pti3bQjjTVYyypPBhcVZhO23h_puXR7astmpQz6" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to convert to LCH
&lt;/h2&gt;

&lt;p&gt;Converting to LCH can be a bit of a pain. You have to map your RGB values to XYZ, then to LAB (or LUV), and then finally to LCHab (or LCHuv). That’s why I wrote this &lt;a href="https://github.com/vinaypillai/ac-colors"&gt;JavaScript color library&lt;/a&gt; to handle the conversions reactively. After instantiating a Color object with an RGB, HEX, HSL, XYZ, LAB, or LCHab color, it will automatically update all its properties to reflect the proper conversions. Plus it offers some other useful features like random color generation and contrast ratio calculations. But regardless of how you do it, I hope making the switch to LCH helps ease some of the issues you can run into when designing your components.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>npm</category>
      <category>uiweekly</category>
    </item>
  </channel>
</rss>
